zoukankan      html  css  js  c++  java
  • Oracle 入门之管理online redolog|转|

    Oracle的主要文件类型有三种,分别是控制文件,数据文件和日志文件;日志文件记录了对数据库的所有操作记录,提供了一个恢复机 制,oracle将数据写入数据文件之前,需要将修改过的内容写入redo日志文件,oracle推荐最少存在两个日志文件组,每个组中存在两个或更多的 成员文件;LGWR进程根据日志组循环写,日志组的中的文件成员大小是一致的,并分配(LSN)log sequence number;当写满一个文件组的时候,Oracle会触发一个log switch切换到另一个日志组,将LSN号码加一,同时引发check point,DBWR进程将修改过的数据写入磁盘上的数据文件中;

    触发lgwr的5个条件:

    在一个事务提交之后

    每三秒钟

    当redo buffer cache三分之一满后

    当redo buffer cache里面修改过的数据容量达到1M后

    在dbwn进程将修改过的数据写入磁盘文件之前

    SQL> select group#,thread#,sequence#,archived,status from v$log;    //查看日志组总数和当前active状态的日志组,当前为1

        GROUP#    THREAD# SEQUENCE# ARC STATUS
    ---------- ---------- ---------- --- ----------------
             1          1         46 NO CURRENT
             2          1         44 YES INACTIVE
             3          1         45 YES INACTIVE


    SQL> alter system switch logfile;       //手动触发一次日志切换

    System altered.

    SQL> select group#,thread#,sequence#,archived,status from v$log;    //可以看到当前active的日志组已经切换为2

        GROUP#    THREAD# SEQUENCE# ARC STATUS
    ---------- ---------- ---------- --- ----------------
             1          1         46 YES ACTIVE
             2          1         47 NO CURRENT
             3          1         45 YES INACTIVE


    如 果LGWR进程工作很频繁,日志组很快就会被写满,这个时候就需要DBWN进程将修改过的数据写到数据文件中,否则Oracle将无法正常工 作,fast_start_mttr_target参数定义了DBWN进程在多少时间间隔内必须将redolog中的数据写入数据文件,单位为秒,这是个 影响数据库性能的关键参数;

    SQL> show parameter fast_start;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    fast_start_io_target                 integer     0
    fast_start_mttr_target               integer     0
    fast_start_parallel_rollback         string      LOW
    SQL> alter system set fast_start_mttr_target=600 scope=both; //修改这个参数为600秒

    System altered.

    SQL> show parameter fast_start_mttr_target;

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    fast_start_mttr_target               integer     600


    SQL> desc v$logfile;   //查看日志组成员信息
    Name                                      Null?    Type
    ----------------------------------------- -------- ----------------------------
    GROUP#                                             NUMBER
    STATUS                                             VARCHAR2(7)
    TYPE                                               VARCHAR2(7)
    MEMBER                                             VARCHAR2(513)
    IS_RECOVERY_DEST_FILE                              VARCHAR2(3)

    SQL> col member format a40;
    SQL> select * from v$logfile;

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             3         ONLINE /u01/oradata/yang/redo03.log             NO
             2         ONLINE /u01/oradata/yang/redo02.log             NO
             1         ONLINE /u01/oradata/yang/redo01.log             NO


    SQL> alter database add logfile group 4 ('/u01/oradata/yang/redo04a.rdo','/u01/oradata/yang/redo04b.rdo') size 50M; //添加一个新的日志组,组编号为4,存在两个组成员,大小各位50M

    Database altered.

    SQL> select * from v$logfile where group#=4;

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             4         ONLINE /u01/oradata/yang/redo04a.rdo            NO
             4         ONLINE /u01/oradata/yang/redo04b.rdo            NO

    SQL> !ls -lh /u01/oradata/yang/redo04*  
    -rw-r----- 1 oracle oinstall 51M 09-20 09:49 /u01/oradata/yang/redo04a.rdo
    -rw-r----- 1 oracle oinstall 51M 09-20 09:49 /u01/oradata/yang/redo04b.rdo

    SQL> alter database add logfile member '/u01/oradata/yang/redo01.rdo' to group 1;   //添加一个新的成员到日志组1

    Database altered.

    SQL> select * from v$logfile where group#=1;   //INVALID状态时由于当前的的日志组并非active日志组

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             1         ONLINE /u01/oradata/yang/redo01.log             NO
             1 INVALID ONLINE /u01/oradata/yang/redo01.rdo             NO

    SQL> select * from v$logfile order by group#;

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             1         ONLINE /u01/oradata/yang/redo01.log             NO
             1         ONLINE /u01/oradata/yang/redo01.rdo             NO
             2         ONLINE /u01/oradata/yang/redo02.log             NO
             3         ONLINE /u01/oradata/yang/redo03.log             NO
             4         ONLINE /u01/oradata/yang/redo04b.rdo            NO
             4         ONLINE /u01/oradata/yang/redo04a.rdo            NO

    6 rows selected.


    SQL> alter database drop logfile group 4;   //删除日志组

    Database altered.

    SQL> select * from v$logfile order by group#;

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             1         ONLINE /u01/oradata/yang/redo01.log             NO
             1         ONLINE /u01/oradata/yang/redo01.rdo             NO
             2         ONLINE /u01/oradata/yang/redo02.log             NO
             3         ONLINE /u01/oradata/yang/redo03.log             NO


    SQL> alter database drop logfile member '/u01/oradata/yang/redo01.rdo';   //删除日志组成员

    Database altered.

    SQL> select * from v$logfile order by group#;

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             1         ONLINE /u01/oradata/yang/redo01.log             NO
             2         ONLINE /u01/oradata/yang/redo02.log             NO
             3         ONLINE /u01/oradata/yang/redo03.log             NO

    redo log的rename和relocation:这种操作对数据库的影响非常大,在生产环境中执行前最好要对数据库进行一次完整备份
    1:可以采用添加新的组,删除旧的组来实现
    2:数据库级别上实现

    SQL> select * from v$logfile where group#=1;

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             1         ONLINE /u01/oradata/yang/redo01.log             NO
             1         ONLINE /u01/oradata/yang/redo01.rdo             NO

    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> !
    [oracle@jsb-ylw-5024 ~]$ mv /u01/oradata/yang/redo01.rdo /u01/oradata/redo01a.log
    [oracle@jsb-ylw-5024 ~]$ exit
    exit

    SQL> startup mount
    ORACLE instance started.

    Total System Global Area 1620115456 bytes
    Fixed Size                  2213816 bytes
    Variable Size            1056966728 bytes
    Database Buffers          553648128 bytes
    Redo Buffers                7286784 bytes
    Database mounted.
    SQL> alter database rename file '/u01/oradata/yang/redo01.rdo' to '/u01/oradata/redo01a.log';

    Database altered.

    SQL> alter database open;

    Database altered.

    SQL> select * from v$logfile where group#=1;

        GROUP# STATUS TYPE    MEMBER                                   IS_
    ---------- ------- ------- ---------------------------------------- ---
             1         ONLINE /u01/oradata/yang/redo01.log             NO
             1         ONLINE /u01/oradata/redo01a.log                 NO

  • 相关阅读:
    【sqlalchemy】使用正确的DB_URI却报错密码错误-密码中包含特殊符号导致
    为什么只调用了1次函数,但是该函数却被执行了2次呢?
    【flask】使用类组织配置-使用工厂函数创建程序实例
    【python3】configparser读取ini配置文件
    【flask】使用配置类管理app测试环境-demo版
    【flask】flask项目配置 app.config
    【flask】环境配置-python-dotenv的使用
    从pip+requirements.txt+virtualenv管理依赖到使用pipenv管理依赖-修改布署方式
    【MAC】安装chrome浏览器
    【MAC】图片编辑工具-合成图片
  • 原文地址:https://www.cnblogs.com/sumsen/p/2857629.html
Copyright © 2011-2022 走看看