OracleロストREDOログのいくつかのシーン・リカバリ

10888 ワード

実験環境:RHEL 6.4 + Oracle 11.2.0.4
一、REDOログ・グループのメンバーが失われる
  • 1.1故障シミュレーション
  • 1.2処理方法
  • 1.3実際の処理プロセス
  • 二、紛失REDOロググループ
  • 2.1 INACTIVE REDOロググループを失う
  • 2.2 ACTIVE REDOロググループ
  • を失う
  • 2.3紛失CURRENT REDOロググループ
  • Reference
    環境準備
    SQL> set linesize 160 
    SQL> col member for a80
    SQL> select * from v$logfile;
    
        GROUP# STATUS  TYPE    MEMBER                                                                           IS_
    ---------- ------- ------- -------------------------------------------------------------------------------- ---
             3         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log                               NO
             3         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log         YES
             2         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log                               NO
             2         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log         YES
             1         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log                               NO
             1         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log         YES
    
    6 rows selected.
    
    SQL> select * from v$log;
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------ ------------ ------------
             1          1          4   52428800        512          2 NO  CURRENT                1917689 03-NOV-15      2.8147E+14
             2          1          2   52428800        512          2 YES INACTIVE               1861002 02-NOV-15         1888519 03-NOV-15
             3          1          3   52428800        512          2 YES INACTIVE               1888519 03-NOV-15         1917689 03-NOV-15

    一、REDOログ・グループのメンバーが失われる
    1.1故障シミュレーション
    2番目のグループのロググループのメンバーの損失をシミュレートします.
    SQL> startup force
    ORACLE instance started.
    
    Total System Global Area  304807936 bytes
    Fixed Size                  2252744 bytes
    Variable Size             205520952 bytes
    Database Buffers           92274688 bytes
    Redo Buffers                4759552 bytes
    Database mounted.
    Database opened.
    SQL>  select * from v$logfile;
    
        GROUP# STATUS  TYPE    MEMBER                                                                           IS_
    ---------- ------- ------- -------------------------------------------------------------------------------- ---
             3         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log                               NO
             3         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log         YES
             2 INVALID ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log                               NO
             2         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log         YES
             1         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log                               NO
             1         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log         YES
    
    6 rows selected.

    1.2処理方法
    無効なメンバーを削除し、グループに新しいメンバーを追加します.
    SQL> alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log';
    SQL> alter database add logfile member '/u01/oradata/ORADB/onlinelog/redo02a.log' to group 2;

    1.3実際の処理プロセス
    SQL> alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log';
    alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log'
    *
    ERROR at line 1:
    ORA-01609: log 2 is the current log for thread 1 - cannot drop members
    ORA-00312: online log 2 thread 1: '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log'
    ORA-00312: online log 2 thread 1: '/u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log'
    
    
    SQL> select * from v$log;   
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------ ------------ ------------
             1          1          7   52428800        512          2 YES INACTIVE               1920749 03-NOV-15         1940772 03-NOV-15
             2          1          8   52428800        512          2 NO  CURRENT                1940772 03-NOV-15      2.8147E+14
             3          1          6   52428800        512          2 YES INACTIVE               1920739 03-NOV-15         1920749 03-NOV-15
    
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> select * from v$log;
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------ ------------ ------------
             1          1          7   52428800        512          2 YES INACTIVE               1920749 03-NOV-15         1940772 03-NOV-15
             2          1          8   52428800        512          2 YES ACTIVE                 1940772 03-NOV-15         1941407 03-NOV-15
             3          1          9   52428800        512          2 NO  CURRENT                1941407 03-NOV-15      2.8147E+14
    
    SQL> alter database drop logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log';
    
    Database altered.
    
    SQL> alter database add logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log' to group 2;
    alter database add logfile member '/u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log' to group 2
    *
    ERROR at line 1:
    ORA-01276: Cannot add file /u01/oradata/ORADB/onlinelog/o1_mf_2_c3g92qkl_.log.  File has an Oracle Managed Files file name.
    
    
    SQL> alter database add logfile member '/u01/oradata/ORADB/onlinelog/redo02a.log' to group 2;
    
    Database altered.
    
    SQL> select * from v$logfile;
    
        GROUP# STATUS  TYPE    MEMBER                                                                           IS_
    ---------- ------- ------- -------------------------------------------------------------------------------- ---
             3         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log                               NO
             3         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log         YES
             2 INVALID ONLINE  /u01/oradata/ORADB/onlinelog/redo02a.log                                         NO
             2         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log         YES
             1         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log                               NO
             1         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log         YES
    
    6 rows selected.
    
    SQL> select * from v$log;
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------ ------------ ------------
             1          1          7   52428800        512          2 YES INACTIVE               1920749 03-NOV-15         1940772 03-NOV-15
             2          1          8   52428800        512          2 YES ACTIVE                 1940772 03-NOV-15         1941407 03-NOV-15
             3          1          9   52428800        512          2 NO  CURRENT                1941407 03-NOV-15      2.8147E+14
    
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> select * from v$logfile;
    
        GROUP# STATUS  TYPE    MEMBER                                                                           IS_
    ---------- ------- ------- -------------------------------------------------------------------------------- ---
             3         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_3_c3g92rg3_.log                               NO
             3         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_3_c3g92rmf_.log         YES
             2         ONLINE  /u01/oradata/ORADB/onlinelog/redo02a.log                                         NO
             2         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_2_c3g92qoq_.log         YES
             1         ONLINE  /u01/oradata/ORADB/onlinelog/o1_mf_1_c3g92prr_.log                               NO
             1         ONLINE  /u01/app/oracle/fast_recovery_area/ORADB/onlinelog/o1_mf_1_c3g92px4_.log         YES
    
    6 rows selected.

    二、紛失REDOロググループ
    2.1 INACTIVE REDOログ・グループの消失
    2.1.1アーカイブされたINACTIVE REDOロググループのパージ
    SQL> alter database clear logfile group 2;
    
    Database altered.
    
    SQL>  select * from v$log;
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME   NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------ ------------ ------------
             1          1          4   52428800        512          2 YES INACTIVE               1962650 03-NOV-15         1962653 03-NOV-15
             2          1          0   52428800        512          3 YES UNUSED                 1962653 03-NOV-15         1962685 03-NOV-15
             3          1          6   52428800        512          2 NO  CURRENT                1962685 03-NOV-15      2.8147E+14

    clear後のロググループのステータスはUNUSEDであることがわかります.
    2.1.2アーカイブされていないINACTIVE REDOログ・グループのパージ
    #      INACTIVE     ,           ,          ,            。
    SQL> alter database clear logfile unarchived group 2;
    
    #                            。    ,                。
    SQL> alter database clear logfile unarchived group 2 unrecoverable datafile;
    
    #              ,     udump   
    SQL> alter database backup controlfile to trace;

    2.2 ACTIVE REDOロググループの紛失
    このときチェックポイントを生成しようとすると、
    SQL> alter system checkpoint;

    2.2.1第一のケース:コマンドが正常に実行された
    コマンドが正常に実行されると、コミットされたすべての変更がディスクのデータファイルに書き込まれます.INACTIVE REDOロググループの処理フローと一致します.
    2.2.2第二のケース:コマンド実行に障害が発生した
    コマンド実行に障害が発生すると、不完全なリカバリのみが実行されます.
    2.3 CURRENT REDOログ・グループの消失
    データベースmountモードで不完全なリカバリを実行し、最後にRESETLOGSを使用してデータベースを開きます.
    SQL> alter database open resetlogs;

    Reference
  • OCP認証試験ガイドライン(1 Z 0-053)[M].清華大学出版社,2010.