|
カレントじゃなければ何も怖くない。 不完全リカバリもいらない。 これが障害前の状態。 ================================================================================ SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 2 52428800 1 YES INACTIVE 946094 08-08-19 2 1 4 52428800 1 NO CURRENT 946644 08-08-19 3 1 3 52428800 1 YES INACTIVE 946563 08-08-19 ================================================================================ ちょこっと更新を加えておく。 これらの更新は、順序番号4のログに記録されることになるね。 ================================================================================ SQL> insert into test99.test99 values(50000,'YYYYY',sysdate); 1行が作成されました。 SQL> insert into test99.test99 values(60000,'ZZZZZ',sysdate); 1行が作成されました。 SQL> commit; コミットが完了しました。 SQL> alter system archive log current; システムが変更されました。 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 5 52428800 1 NO CURRENT 947765 08-08-19 2 1 4 52428800 1 YES ACTIVE 946644 08-08-19 3 1 3 52428800 1 YES INACTIVE 946563 08-08-19 ================================================================================ んじゃ、障害を起こします。 ちょっとデータベースをシャットダウンしておいて・・・。 ================================================================================ SQL> shutdown immediate; データベースがクローズされました。 データベースがディスマウントされました。 ORACLEインスタンスがシャットダウンされました。 ================================================================================ redo02.logをなくしてしまいます。 なぜredo02.logかといえば、今はロググループ1(redo01.log)がカレントだけど、 もし次にログスイッチが発生しても、次にカレントになるのはロググループ3だから。 ロググループ2がカレントになることはないだろう、と思ったから。 ================================================================================ [oracle@localhost onlinelog]$ ls -l 合計 153780 -rw-r----- 1 oracle dba 52429312 8月 19 23:18 redo01.log -rw-r----- 1 oracle dba 52429312 8月 19 23:15 redo02.log -rw-r----- 1 oracle dba 52429312 8月 19 22:41 redo03.log [oracle@localhost onlinelog]$ mv redo02.log redo02.bak [oracle@localhost onlinelog]$ ls -l 合計 153780 -rw-r----- 1 oracle dba 52429312 8月 19 23:18 redo01.log -rw-r----- 1 oracle dba 52429312 8月 19 23:15 redo02.bak -rw-r----- 1 oracle dba 52429312 8月 19 22:41 redo03.log ================================================================================ さて、データベース起動。 ここでエラーが起こる。 ================================================================================ SQL> startup ORACLEインスタンスが起動しました。 Total System Global Area 146800640 bytes Fixed Size 1257668 bytes Variable Size 71307068 bytes Database Buffers 71303168 bytes Redo Buffers 2932736 bytes データベースがマウントされました。 ORA-00313: ログ・グループ2(スレッド1)のメンバーをオープンできません。 ORA-00312: オンライン・ログ2 スレッド1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo02.log' ================================================================================ めでたしめでたし。 で、REDOログの状態を確認。 ================================================================================ SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 5 52428800 1 NO CURRENT 947765 08-08-19 2 1 4 52428800 1 YES INACTIVE 946644 08-08-19 3 1 3 52428800 1 YES INACTIVE 946563 08-08-19 SQL> select group#,status,type,member from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- --------------------------------------------------------------------------- 1 ONLINE /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo01.log 2 ONLINE /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo02.log 3 ONLINE /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo03.log ================================================================================ これをみても、障害を確認することはできないんだね。 障害の内容を確認するには、アラートログを見た方がいい。 以下がアラートログの内容。 ================================================================================ Tue Aug 19 23:22:50 2008 Errors in file /usr/lib/oracle/xe/app/oracle/admin/XE/bdump/xe_lgwr_22303.trc: ORA-00313: open failed for members of log group 2 of thread 1 ORA-00312: online log 2 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on linelog/redo02.log' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 Tue Aug 19 23:22:50 2008 Errors in file /usr/lib/oracle/xe/app/oracle/admin/XE/bdump/xe_lgwr_22303.trc: ORA-00313: open failed for members of log group 2 of thread 1 ORA-00312: online log 2 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on linelog/redo02.log' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 ================================================================================ で、障害のあるREDOロググループ2を削除する。 ================================================================================ SQL> alter database drop logfile group 2; データベースが変更されました。 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 3 1 3 52428800 1 YES INACTIVE 946563 08-08-19 1 1 5 52428800 1 NO CURRENT 947765 08-08-19 ================================================================================ そして、REDOロググループ2を追加する。 ================================================================================ SQL> alter database add logfile group 2 '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo02.log' size 50m; データベースが変更されました。 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 5 52428800 1 NO CURRENT 947765 08-08-19 3 1 3 52428800 1 YES INACTIVE 946563 08-08-19 2 1 0 52428800 1 YES UNUSED 0 ================================================================================ 新品のロググループ2(STATUSがUNUSED)ができている。 ファイルもちゃんとできている。 ================================================================================ [oracle@localhost onlinelog]$ ls -l 合計 205040 -rw-r----- 1 oracle dba 52429312 8月 19 23:22 redo01.log -rw-r----- 1 oracle dba 52429312 8月 19 23:15 redo02.bak -rw-r----- 1 oracle dba 52429312 8月 19 23:53 redo02.log -rw-r----- 1 oracle dba 52429312 8月 19 22:41 redo03.log ================================================================================ ↓順序番号4の変更もちゃんと残っている。いい感じだ。 ================================================================================ SQL> select * from test99.test99 where col1 >= 40000; COL1 COL2 COL3 ---------- -------------------- -------- 40000 XXXXX 08-08-19 50000 YYYYY 08-08-19 60000 ZZZZZ 08-08-19 ================================================================================ でも、オンラインREDOログには順序番号4がない。 でも、順序番号4はアーカイブされている。 だから、リカバリには支障がないはず。 ================================================================================ SQL> select recid,sequence#,name from v$archived_log where name is not null order by 1; RECID SEQUENCE# NAME ---------- ---------- ------------------------------------------------------------------------------------ 94 4 /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_4_663201099.dbf ================================================================================ ログスイッチを起こすと、どうなるんだろう。 ================================================================================ SQL> alter system switch logfile; システムが変更されました。 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 5 52428800 1 YES ACTIVE 947765 08-08-19 2 1 6 52428800 1 NO CURRENT 948380 08-08-20 3 1 3 52428800 1 YES INACTIVE 946563 08-08-19 ================================================================================ やっぱり4番がない(当たり前)。 なんだか気持ち悪い。 これでちゃんとリカバリできるのか、ためしてみた。 ================================================================================ RMAN> shutdown immediate; データベースがクローズしました データベースがディスマウントされました。 Oracleインスタンスがシャットダウンしました RMAN> startup mount ターゲット・データベースに接続しました(起動していません)。 Oracleインスタンスが起動しました データベースがマウントされました。 システム・グローバル領域の合計は、 146800640バイトです。 Fixed Size 1257668バイト Variable Size 71307068バイト Database Buffers 71303168バイト Redo Buffers 2932736バイト RMAN> restore database; restoreが開始されました(開始時間: 08-08-20) チャネル: ORA_DISK_1が割り当てられました チャネルORA_DISK_1: sid=36 devtype=DISK チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています。 チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています データファイル00001を/usr/lib/oracle/xe/oradata/XE/system.dbfへリストア データファイル00002を/usr/lib/oracle/xe/oradata/XE/undo.dbfへリストア データファイル00003を/usr/lib/oracle/xe/oradata/XE/sysaux.dbfへリストア データファイル00004を/usr/lib/oracle/xe/oradata/XE/users.dbfへリストア データファイル00005を/usr/lib/oracle/xe/oradata/XE/rman01.dbfへリストア データファイル00006を/usr/lib/oracle/xe/oradata/XE/imptsp01.dbfへリストア データファイル00007を/usr/lib/oracle/xe/oradata/XE/usrtsp_01.dbfへリストア チャネルORA_DISK_1: バックアップ・ピース/usr/lib/oracle/xe/oradata_bak/rman/bk0_119_1_663201466から読取り中です チャネルORA_DISK_1: バックアップ・ピース1がリストアされました ピース・ハンドル=/usr/lib/oracle/xe/oradata_bak/rman/bk0_119_1_663201466 タグ=TAG20080819T223745 チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:02:57 restoreが完了しました(完了時間: 08-08-20) RMAN> recover database until sequence 7 thread 1; recoverが開始されました(開始時間: 08-08-20) チャネルORA_DISK_1の使用 メディア・リカバリを開始しています アーカイブ・ログ・スレッド: 1、順序: 4は、ファイル: /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_4_663201099.dbfとしてディスクに存在します アーカイブ・ログ・スレッド: 1、順序: 5は、ファイル: /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_5_663201099.dbfとしてディスクに存在します チャネルORA_DISK_1: デフォルトの宛先へのアーカイブ・ログのリストアを開始しています チャネルORA_DISK_1: アーカイブ・ログをリストアしています アーカイブ・ログ・スレッド=1 順序=3 チャネルORA_DISK_1: バックアップ・ピース/usr/lib/oracle/xe/oradata_bak/rman/arc_121_1_663201676から読取り中です チャネルORA_DISK_1: バックアップ・ピース1がリストアされました ピース・ハンドル=/usr/lib/oracle/xe/oradata_bak/rman/arc_121_1_663201676 タグ=TAG20080819T224116 チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01 アーカイブ・ログ・ファイル名=/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_3_663201099.dbf スレッド=1 順序=3 アーカイブ・ログ・ファイル名=/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_4_663201099.dbf スレッド=1 順序=4 アーカイブ・ログ・ファイル名=/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_5_663201099.dbf スレッド=1 順序=5 アーカイブ・ログが見つかりません アーカイブ・ログ・スレッド=1 順序=6 MAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: recoverコマンドが08/20/2008 00:32:53で失敗しました RMAN-06054: メディア・リカバリが不明なログをリクエストしています: スレッド: 1 seq: 6 lowscn: 948380 RMAN> alter database open resetlogs; データベースがオープンしました。 RMAN> exit ================================================================================ 5番までしかアーカイブされていないのに、6番までリカバリするように指定した(until sequence 7)もんだからエラーが出た(汗)。 でも大丈夫。 ログを見てわかるとおり、5番まではちゃんと適用されているのだ。 ・・・でも、単に4番を使ってリカバリできるかどうかのチェックなんだから、不完全リカバリする必要はまったくなかったな。 まぁいいや。 ↓ちゃんとリカバリされているのは確認できた。 ================================================================================ SQL> select * from test99.test99 where col1 >= 40000; COL1 COL2 COL3 ---------- -------------------- -------- 40000 XXXXX 08-08-19 50000 YYYYY 08-08-19 60000 ZZZZZ 08-08-19 ================================================================================ さて、resetlogsしたから、またフルバックアップとっておかなくちゃ。 |
| << 前記事(2008/08/19) | トップへ | 後記事(2008/08/21)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2008/08/19) | トップへ | 後記事(2008/08/21)>> |