|
今の状態はコレ。 カレントのオンラインREDOログは6番。 =============================================================== SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 5 52428800 1 YES ACTIVE 952691 08-08-20 2 1 4 52428800 1 YES INACTIVE 952602 08-08-20 3 1 6 52428800 1 NO CURRENT 960354 08-08-20 =============================================================== んじゃ、カレントのオンラインREDOログ、redo02.logをなくしてしまおう。 =============================================================== [oracle@localhost onlinelog]$ ls -l 合計 153780 -rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log -rw-r----- 1 oracle dba 52429312 8月 20 03:02 redo02.log -rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo03.log [oracle@localhost onlinelog]$ mv redo03.log redo03.bak [oracle@localhost onlinelog]$ ls -l 合計 153780 -rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log -rw-r----- 1 oracle dba 52429312 8月 20 03:02 redo02.log -rw-r----- 1 oracle dba 52429312 8月 20 08:07 redo03.bak =============================================================== これで、ログスイッチとか発生したら、エラーになるんだよね。きっと。 たくさん更新をさせて、ログスイッチを起こさせてやろうと思う。 =============================================================== SQL> begin 2 for i in 1..29999 loop 3 insert into test99.test99(col1,col2,col3) 4 values(i,'abcdefghijklmnopqrst',sysdate); 5 end loop; 6 end; 7 / PL/SQLプロシージャが正常に完了しました。 SQL> commit; コミットが完了しました。 =============================================================== あ・・・あれ? この程度の更新じゃ、ログスイッチは起きないの? ・・・と思ったら、 =============================================================== SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 5 52428800 1 YES INACTIVE 952691 08-08-20 2 1 7 52428800 1 NO CURRENT 985995 08-08-20 3 1 6 52428800 1 NO ACTIVE 960354 08-08-20 =============================================================== カレントは7番になっている。ログスイッチが起きたんだ。 でも、エラーは起きてない。 どのタイミングでエラーが起きるんだ? でも、6番はアーカイブされていない(ファイルがないのにアーカイブされるわけもない)。 なんでエラーにならないんだ? ちょっとアラートログを見てみよう。 =============================================================== Wed Aug 20 22:33:20 2008 Thread 1 advanced to log sequence 7 Current log# 2 seq# 7 mem# 0: /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlin elog/redo02.log Wed Aug 20 22:33:20 2008 Errors in file /usr/lib/oracle/xe/app/oracle/admin/XE/bdump/xe_arc0_22687.trc: ORA-00313: open failed for members of log group 3 of thread 1 ORA-00312: online log 3 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on linelog/redo03.log' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 Wed Aug 20 22:33:20 2008 Errors in file /usr/lib/oracle/xe/app/oracle/admin/XE/bdump/xe_arc0_22687.trc: ORA-00313: open failed for members of log group 3 of thread 1 ORA-00312: online log 3 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on linelog/redo03.log' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 Wed Aug 20 22:33:20 2008 ARC0: Failed to archive thread 1 sequence 6 (0) ARCH: Archival stopped, error occurred. Will continue retrying Wed Aug 20 22:33:20 2008 ORACLE Instance XE - Archival Error Wed Aug 20 22:33:20 2008 ORA-16038: log 3 sequence# 6 cannot be archived ORA-00312: online log 3 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on linelog/redo03.log' ・・・・・ =============================================================== なぁ〜んだ。ちゃんとエラーでてるじゃん。 しかも、や・ま・ほ・ど♪ これでこそリカバリのしがいがあるってもんだ(意味わからん)。 =============================================================== SQL> select status from v$instance; STATUS ------------ OPEN =============================================================== でも、DBはオープンのままなんだなぁ。 今、カレントがグループ1で稼動しているから、それはそれでOKなのか。 ん・・・? 待てよ。 オンラインREDOログは、最低2グループ必要だから、もしかするとグループ1も破損したら、DBが落ちるのかな? やってみよう。 =============================================================== [oracle@localhost onlinelog]$ ls -l 合計 153780 -rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log -rw-r----- 1 oracle dba 52429312 8月 20 23:14 redo02.log -rw-r----- 1 oracle dba 52429312 8月 20 22:33 redo03.bak [oracle@localhost onlinelog]$ mv redo02.log redo02.bak [oracle@localhost onlinelog]$ ls -l 合計 153780 -rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log -rw-r----- 1 oracle dba 52429312 8月 20 23:15 redo02.bak -rw-r----- 1 oracle dba 52429312 8月 20 22:33 redo03.bak =============================================================== で、ログスイッチを起こしてみる。 いや、アーカイブさせよう。 =============================================================== SQL> alter system archive log current; alter system archive log current * 行1でエラーが発生しました。: ORA-16038: ログ3、順序番号6をアーカイブできません。 ORA-00312: オンライン・ログ3 スレッド1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo03.log' SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 8 52428800 1 NO CURRENT 987260 08-08-20 2 1 7 52428800 1 NO ACTIVE 985995 08-08-20 3 1 6 52428800 1 NO INACTIVE 960354 08-08-20 SQL> select status from v$instance; STATUS ------------ OPEN =============================================================== じゃじゃーん。エラーが出た。 ロググループ3がアーカイブできないって。さっきからできてないじゃん。 何を今さら。 ・・・ということは、REDOログファイルの障害って、気付きにくい障害になるのかもしれない。 マメにアラートログを見るくせをつけないといけないかな。 少なくとも、心当たりのないトレースファイルが出力されていたら、必ず見なくちゃいけないね。 カレントの順序番号は8番だけど、6番も7番もアーカイブされていない。 だから、5番までしかリカバリできない。 気付くのが遅くなると、損害がどんどん大きくなる。 オンラインREDOログファイルの障害、おそるべし。 というわけで、5番まで(6番の直前まで)不完全リカバリだ。 =============================================================== [oracle@localhost onlinelog]$ rman target / Recovery Manager: Release 10.2.0.1.0 - Production on 水 8月 20 23:26:01 2008 Copyright (c) 1982, 2005, Oracle. All rights reserved. ターゲット・データベース: XE (データベースID=2543114493)に接続されました RMAN> startup force 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_125_1_663209363から読取り中です <以下略> チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:02:47 restoreが完了しました(完了時間: 08-08-20) RMAN> recover database until sequence 6 thread 1; recoverが開始されました(開始時間: 08-08-20) チャネルORA_DISK_1の使用 チャネル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/bk1_130_1_663217222から読取り中です チャネルORA_DISK_1: バックアップ・ピース1がリストアされました ピース・ハンドル=/usr/lib/oracle/xe/oradata_bak/rman/bk1_130_1_663217222 タグ=TAG20080820T030022 チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:04 メディア・リカバリを開始しています アーカイブ・ログ・スレッド: 1、順序: 5は、ファイル: /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_5_663208425.dbfとしてディスクに存在します チャネルORA_DISK_1: デフォルトの宛先へのアーカイブ・ログのリストアを開始しています チャネルORA_DISK_1: アーカイブ・ログをリストアしています アーカイブ・ログ・スレッド=1 順序=4 チャネルORA_DISK_1: バックアップ・ピース/usr/lib/oracle/xe/oradata_bak/rman/arc_132_1_663217332から読取り中です チャネルORA_DISK_1: バックアップ・ピース1がリストアされました ピース・ハンドル=/usr/lib/oracle/xe/oradata_bak/rman/arc_132_1_663217332 タグ=TAG20080820T030212 チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01 アーカイブ・ログ・ファイル名=/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_4_663208425.dbf スレッド=1 順序=4 アーカイブ・ログ・ファイル名=/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_5_663208425.dbf スレッド=1 順序=5 メディア・リカバリが完了しました。経過時間: 00:00:07 recoverが完了しました(完了時間: 08-08-20) RMAN> alter database open resetlogs; データベースがオープンしました。 =============================================================== オンラインREDOログは、グループ1以外、新品になった。 (2と3をなくしたんだから、当たり前) =============================================================== SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------- 1 1 1 52428800 1 NO CURRENT 960355 08-08-20 2 1 0 52428800 1 YES UNUSED 0 3 1 0 52428800 1 YES UNUSED 0 [oracle@localhost onlinelog]$ ls redo01.log redo02.bak redo02.log redo03.bak redo03.log =============================================================== なんか近頃、似たようなことばかり書いている気がするな・・・。 |
| << 前記事(2008/08/20) | トップへ | 後記事(2008/08/21)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2008/08/20) | トップへ | 後記事(2008/08/21)>> |