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
環境準備
一、REDOログ・グループのメンバーが失われる
1.1故障シミュレーション
2番目のグループのロググループのメンバーの損失をシミュレートします.
1.2処理方法
無効なメンバーを削除し、グループに新しいメンバーを追加します.
1.3実際の処理プロセス
二、紛失REDOロググループ
2.1 INACTIVE REDOログ・グループの消失
2.1.1アーカイブされたINACTIVE REDOロググループのパージ
clear後のロググループのステータスはUNUSEDであることがわかります.
2.1.2アーカイブされていないINACTIVE REDOログ・グループのパージ
2.2 ACTIVE REDOロググループの紛失
このときチェックポイントを生成しようとすると、
2.2.1第一のケース:コマンドが正常に実行された
コマンドが正常に実行されると、コミットされたすべての変更がディスクのデータファイルに書き込まれます.INACTIVE REDOロググループの処理フローと一致します.
2.2.2第二のケース:コマンド実行に障害が発生した
コマンド実行に障害が発生すると、不完全なリカバリのみが実行されます.
2.3 CURRENT REDOログ・グループの消失
データベースmountモードで不完全なリカバリを実行し、最後にRESETLOGSを使用してデータベースを開きます.
Reference OCP認証試験ガイドライン(1 Z 0-053)[M].清華大学出版社,2010.
一、REDOログ・グループのメンバーが失われる
環境準備
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