Oracle 重做日志

    xiaoxiao2022-07-02  133

    文章目录

    1. Redo File2. 重要的三个视图3. 日志的四种状态4. 添加日志方式4.1 添加一个日志组4.2 添加成员文件 5. 日志成员文件的迁移5.1 不关库,先删后加5.2 关库,重命名

    1. Redo File

    作用:数据 recovery恢复

    特征:

    记录数据库中块的变化(DML、DDL)用于数据块的 recover以组的方式管理 redo file,最少两组 redo,循环使用和数据文件存放到不同的磁盘上,需读写速度快的磁盘(采用 RAID10)日志的 block 和数据文件的 block 不一样

    2. 重要的三个视图

    SQL> select * from v$log; SQL> select * from v$logfile; SQL> select * from v$archived_log; (归档模式下查看)

    THREAD#: 线程在单实例的环境下,thread# 永远是 1 SEQUENCE# 日志序列号。在日志切换时会递增 FIRST_CHANGE# 在每个日志组对应一个sequence 号,其中一条日志条目的第一个的 scn。

    3. 日志的四种状态

    unused新添加的日志组,还没有使用current当前日志组对应的脏块还没有全部从 data buffer 写入到 data file,含有实例恢复需要的信息,不能被覆盖active日志组对应的脏块还没有完全从 data buffer 写入到 data file,含有实例恢复需要的信息,不能被覆盖inactive日志组对应的脏块已经从 data buffer 写入到 data file,可以覆盖。

    4. 添加日志方式

    4.1 添加一个日志组

    查看当前日志信息

    select group#,sequence#,bytes/1024/1024 M,archived,status from v$log; select * from v$logfile;

    添加日志组

    alter database add logfile group 4 '/u01/app/oracle/oradata/oradb/redo04.log' size 50m; select * from v$logfile;

    查看日志状态

    select group#,sequence#,bytes/1024/1024 M,archived,status from v$log

    4.2 添加成员文件

    为每个组增加一个member(一共是4个组) 先建好目录,准备放在/u01/app/oracle/oradata/log_member1 下

    [oracle@vm01 ~]$ mkdir -p /u01/app/oracle/oradata/log_member1

    为group 1 添加成员文件

    SQL> alter database add logfile member ‘/u01/app/oracle/oradata/log_member1/redo01.log’ to group 1;

    TATUS 是 INVALID,说明 member 还没有同步好。

    SQL> alter system switch logfile; 至少做 4 次切换,消除 invalid。 SQL> alter system switch logfile; SQL> alter system switch logfile; SQL> alter system switch logfile; SQL> alter system switch logfile; SQL> select * from v$logfile; SQL> select group#,sequence#,members ,bytes /1024/1024 M,archived,s tatus from v$log;

    一添加两个成员文件

    alter database add logfile group 5 ('/u01/app/oracle/oradata/oradb/redo05.log',/u01/app/oracle/oradata/log_member1/redo05.log') size 50M;

    5. 日志成员文件的迁移

    5.1 不关库,先删后加

    SQL > select group#,status from v$log; SQL > select group#,member from v$logfile;

    当前current状态日志组,尝试删组成员报错

    SQL > alter database drop logfile member '/u01/app/oracle/oradata/oradb/redo01.log';

    发起检查点,并查看日志情况

    alter system checkpoint; SQL > select group#,status from v$log;

    尝试删除成员文件

    alter database drop logfile member '/u01/app/oracle/oradata/oradb/redo01.log'; 添加组成员文件 sql alter database drop logfile member ‘/u01/app/oracle/oradata/log_member1/redo01.log’;

    原来的 redo01.log 可以删掉,drop logfile group 没有删除物理磁盘上文件,需手动删除

    5.2 关库,重命名

    关库

    SQL > shutdown immediate;

    重命名文件

    mv /u01/app/oracle/oradata/oradb/redo02.log /u01/app/oracle/oradata/log_member1/redo02.log

    数据库启动到mount

    SQL > startup mount; SQL > select group#,member from v$logfile order by 1;

    通知控制文件

    SQL > alter database rename file/u01/app/oracle/oradata/oradb/redo02.log’ to '/u01/app/ oracle/oradata/log_member1/redo02.log';

    打开数据库

    alter database open;

    删除日志组

    SQL> alter database drop logfile group 5; SQL> select group#,status,archived from v$log;

    drop logfile group 不会删磁盘上文件,删除物理文件需要rm

    最新回复(0)