前回のおさらい
前回は、販売管理システムのOracle Database がストレージ障害で停止し
リカバリはできない上、いつも以上にH課長の意地悪な暴言がひどく、遂にたろーちゃんがキレてしまいました。
さて、たろーちゃんは、この Oracle Database をリカバリすることが出来るのでしょうか?
どうしてリカバリできなかったのか?
たろー「Tさん。フルバックアップを取得した時のオペレーションログは残ってる?」
新人T「はい!これです。」
RMAN> backup database tag='FULL_BACKUP1' plus archivelog delete input ; backupを2019/06/16 16:00:42で開始しています 現在のログがアーカイブされました。 チャネルORA_DISK_1の使用 チャネルORA_DISK_1: アーカイブ・ログ・バックアップ・セットを開始しています チャネルORA_DISK_1: バックアップ・セットにアーカイブ・ログを指定しています 入力アーカイブ・ログ・スレッド=1 順序=1 レコードID=7 スタンプ=1012147243 チャネルORA_DISK_1: ピース1 (2019/06/16 16:00:45)を起動します チャネルORA_DISK_1: ピース1 (2019/06/16 16:00:48)が完了しました ピース・ハンドル=/opt/app/oracle/oradata/orcl/backup/08u5891d_1_1 タグ=TAG20190616T160044 コメント=NONE チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:03 チャネルORA_DISK_1: アーカイブ・ログを削除しています アーカイブ・ログ・ファイル名=/opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_16/o1_mf_1_1_gkcgrtdr_.arc レコードID=7 スタンプ=1012147243 backupを2019/06/16 16:00:49で終了しました backupを2019/06/16 16:00:49で開始しています チャネルORA_DISK_1の使用 チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています 入力データファイル ファイル番号=00001 名前=/opt/app/oracle/oradata/orcl/system01.dbf 入力データファイル ファイル番号=00003 名前=/opt/app/oracle/oradata/orcl/sysaux01.dbf 入力データファイル ファイル番号=00004 名前=/opt/app/oracle/oradata/orcl/undotbs01.dbf 入力データファイル ファイル番号=00007 名前=/opt/app/oracle/oradata/orcl/users01.dbf チャネルORA_DISK_1: ピース1 (2019/06/16 16:00:50)を起動します チャネルORA_DISK_1: ピース1 (2019/06/16 16:02:45)が完了しました ピース・ハンドル=/opt/app/oracle/oradata/orcl/backup/09u5891i_1_1 タグ=FULL_BACKUP1 コメント=NONE チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:01:55 backupを2019/06/16 16:02:45で終了しました backupを2019/06/16 16:02:45で開始しています 現在のログがアーカイブされました。 チャネルORA_DISK_1の使用 チャネルORA_DISK_1: アーカイブ・ログ・バックアップ・セットを開始しています チャネルORA_DISK_1: バックアップ・セットにアーカイブ・ログを指定しています 入力アーカイブ・ログ・スレッド=1 順序=2 レコードID=8 スタンプ=1012147366 チャネルORA_DISK_1: ピース1 (2019/06/16 16:02:47)を起動します チャネルORA_DISK_1: ピース1 (2019/06/16 16:02:48)が完了しました ピース・ハンドル=/opt/app/oracle/oradata/orcl/backup/0au58956_1_1 タグ=TAG20190616T160246 コメント=NONE チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:01 チャネルORA_DISK_1: アーカイブ・ログを削除しています アーカイブ・ログ・ファイル名=/opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_16/o1_mf_1_2_gkcgwp02_.arc レコードID=8 スタンプ=1012147366 backupを2019/06/16 16:02:48で終了しました Control File and SPFILE Autobackupを2019/06/16 16:02:48で開始しています ピース・ハンドル=/opt/app/oracle/oradata/orcl/backup/c-1539842659-20190616-00 コメント=NONE Control File and SPFILE Autobackupを2019/06/16 16:02:51で終了しました
たろー「ふむ。ちゃんとplus archivelog指定で取ってあるな。」
H課長「当たり前だろう。フルバックアップなんだから。」
たろー「(H課長は無視して)バックアップファイルの状態はどうかな?」
RMAN> list backup ; バックアップ・セットのリスト =================== BSキー サイズ デバイス・タイプ経過時間終了時間 ------- ---------- ----------- ------------ ------------------- 5 14.32M DISK 00:00:02 2019/06/16 16:00:47 BPキー: 5 ステータス: AVAILABLE 圧縮: NO タグ: TAG20190616T160044 ピース名: /opt/app/oracle/oradata/orcl/backup/08u5891d_1_1 バックアップ・セット5のアーカイブ・ログのリスト Thrd Seq Low SCN Low時間 Next SCN Next Time ---- ------- ---------- ------------------- ---------- --------- 1 1 1423458 2019/06/16 16:00:41 1428060 2019/06/16 16:00:42 BS Key Type LV Size Device Type Elapsed Time 終了時間 ------- ---- -- ---------- ----------- ------------ ------------------- 6 Full 1.00G DISK 00:01:53 2019/06/16 16:02:43 BPキー: 6 ステータス: AVAILABLE 圧縮: NO タグ: FULL_BACKUP1 ピース名: /opt/app/oracle/oradata/orcl/backup/09u5891i_1_1 バックアップ・セット6のデータファイルのリスト File LV Type Ckp SCN Ckp時間 Abs Fuz SCN Sparse Name ---- -- ---- ---------- ------------------- ----------- ------ ---- 1 Full 1428072 2019/06/16 16:00:51 NO /opt/app/oracle/oradata/orcl/system01.dbf 3 Full 1428072 2019/06/16 16:00:51 NO /opt/app/oracle/oradata/orcl/sysaux01.dbf 4 Full 1428072 2019/06/16 16:00:51 NO /opt/app/oracle/oradata/orcl/undotbs01.dbf 7 Full 1428072 2019/06/16 16:00:51 NO /opt/app/oracle/oradata/orcl/users01.dbf BSキー サイズ デバイス・タイプ経過時間終了時間 ------- ---------- ----------- ------------ ------------------- 7 8.00K DISK 00:00:01 2019/06/16 16:02:47 BPキー: 7 ステータス: AVAILABLE 圧縮: NO タグ: TAG20190616T160246 ピース名: /opt/app/oracle/oradata/orcl/backup/0au58956_1_1 バックアップ・セット7のアーカイブ・ログのリスト Thrd Seq Low SCN Low時間 Next SCN Next Time ---- ------- ---------- ------------------- ---------- --------- 1 2 1428060 2019/06/16 16:00:42 1428119 2019/06/16 16:02:45 BS Key Type LV Size Device Type Elapsed Time 終了時間 ------- ---- -- ---------- ----------- ------------ ------------------- 8 Full 10.19M DISK 00:00:02 2019/06/16 16:02:50 BPキー: 8 ステータス: AVAILABLE 圧縮: NO タグ: TAG20190616T160248 ピース名: /opt/app/oracle/oradata/orcl/backup/c-1539842659-20190616-00 SPFILEも含まれます: 修正時間: 2019/06/16 16:00:12 SPFILE db_unique_name: ORCL 含まれている制御ファイル: Ckp SCN: 1428130 Ckp時間: 2019/06/16 16:02:48
たろー「ふむ。」
H課長「・・・。」
たろー「それでTさん。リカバリ時にどんなエラーが出力されるんだっけ?」
新人T「はい!これです。」
RMAN> recover database until scn 1423457 ; recoverを2019/06/28 09:52:45で開始しています チャネル: ORA_DISK_1がリリースされました implicit crosscheck backupを2019/06/28 09:52:47で開始しています チャネル: ORA_DISK_1が割り当てられました チャネルORA_DISK_1: SID=19 デバイス・タイプ=DISK 3オブジェクトをクロスチェックしました implicit crosscheck backupを2019/06/28 09:52:49で終了しました implicit crosscheck copyを2019/06/28 09:52:49で開始しています チャネルORA_DISK_1の使用 implicit crosscheck copyを2019/06/28 09:52:49で終了しました リカバリ領域ですべてのファイルを検索しています ファイルをカタログに追加しています... カタログへの追加を終了しました カタログに追加されたファイルのリスト ======================= ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_1_gk8wr9fb_.arc ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_2_gk8wrc9w_.arc ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_3_gk8wrhld_.arc ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_6_gk8wowxc_.arc ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/control02.ctl チャネルORA_DISK_1の使用 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: recoverコマンドが06/28/2019 09:52:53で失敗しました RMAN-20208: UNTIL CHANGE is before RESETLOGS change
たろー「なるほど、 アーカイブログ の出力先に高速リカバリ領域を使っているのか。」
新人T「高速リカバリ領域?」
たろー「その様子だと、特に意識せずに高速リカバリ領域を使ったんだな?」
新人T「はい。高速リカバリ領域は、特に意識していないです。」
たろー「高速リカバリ領域は確かに便利だよ。特に意識しなくても、バックアップの出力先として使えるし、今回のように アーカイブログ の出力先としても使える。フラッシュバックデータベースを行うフラッシュバックログの格納先としても使われるしね。」
H課長「良いことづくめじゃないか。それの何が問題なんだ?」
たろー「なんでも自動でやってくれるってことは、『それを使う人間もルールを守らなきゃならない』ってことですよ。」
H課長「何だと?」
たろー「H課長、あなたは最初の不完全リカバリ実施後に『フルバックアップを取得しなければならない』というルールを破りました。」
H課長「!」
たろー「高速リカバリ領域には、『不完全リカバリ実施後から障害発生時までの アーカイブログ が残っている』んです。」
H課長「?何が言いたいんだ?!」
たろー「 RMAN は賢いんです。その残っている アーカイブログ を自動でカタログに追加してるんですよ。」
H課長「カタログだと?」
たろー「ここに注目してください。」
<再掲>
RMAN> recover database until scn 1423457 ;
recoverを2019/06/28 09:52:45で開始しています
チャネル: ORA_DISK_1がリリースされました
implicit crosscheck backupを2019/06/28 09:52:47で開始しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=19 デバイス・タイプ=DISK
3オブジェクトをクロスチェックしました
implicit crosscheck backupを2019/06/28 09:52:49で終了しました
implicit crosscheck copyを2019/06/28 09:52:49で開始しています
チャネルORA_DISK_1の使用
implicit crosscheck copyを2019/06/28 09:52:49で終了しました
リカバリ領域ですべてのファイルを検索しています
ファイルをカタログに追加しています...
カタログへの追加を終了しました
カタログに追加されたファイルのリスト
=======================
ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_1_gk8wr9fb_.arc
ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_2_gk8wrc9w_.arc
ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_3_gk8wrhld_.arc
ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_27/o1_mf_1_6_gk8wowxc_.arc
ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/control02.ctl
チャネルORA_DISK_1の使用
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recoverコマンドが06/28/2019 09:52:53で失敗しました
RMAN-20208: UNTIL CHANGE is before RESETLOGS change
たろー「ストレージの スナップショット 機能に慣れてしまっていては、決して意識することはないでしょうけどね。」
H課長「どうすればいいんだ?」
たろー「簡単ですよ。」
たろーちゃんは、キーボードを操作し始めました。
たろー「まず、制御ファイルを日曜日時点のフルバックアップから リストア します。」
RMAN> restore controlfile from '/opt/app/oracle/oradata/orcl/backup/c-1539842659-20190616-00' ; restoreを2019/06/28 10:00:53で開始しています リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています チャネル: ORA_DISK_1が割り当てられました チャネルORA_DISK_1: SID=19 デバイス・タイプ=DISK チャネルORA_DISK_1: 制御ファイルをリストア中です チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:03 出力ファイル名=/opt/app/oracle/oradata/orcl/control01.ctl 出力ファイル名=/opt/app/oracle/oradata/orcl/fast_recovery_area/orcl/control02.ctl restoreを2019/06/28 10:00:58で終了しました
たろー「次に、高速リカバリ領域に残存する アーカイブログ ファイルを削除します。」
$ cd /opt/app/oracle/oradata/orcl/fast_recovery_area/orcl/archivelog/2019_06_27 $ ls -l 合計 1468 -rwxrwxrwx 1 oracle oinstall 1270784 6月 27 16:40 2019 o1_mf_1_1_gk8wr9fb_.arc -rwxrwxrwx 1 oracle oinstall 1024 6月 27 16:40 2019 o1_mf_1_2_gk8wrc9w_.arc -rwxrwxrwx 1 oracle oinstall 4096 6月 27 16:41 2019 o1_mf_1_3_gk8wrhld_.arc -rwxrwxrwx 1 oracle oinstall 219136 6月 27 16:39 2019 o1_mf_1_6_gk8wowxc_.arc $ rm -f *.arc $ ls -l 合計 0
H課長「消してしまっていいのか?」
たろー「どうせ日曜日時点に不完全 リカバリ するので必要ないです。」
H課長「・・・」
たろー「そして、 リカバリ を行います」
RMAN> alter database mount ; 文が処理されました RMAN> recover database until scn 1423457 ; recoverを2019/06/28 10:12:26で開始しています チャネル: ORA_DISK_1がリリースされました implicit crosscheck backupを2019/06/28 10:12:27で開始しています チャネル: ORA_DISK_1が割り当てられました チャネルORA_DISK_1: SID=19 デバイス・タイプ=DISK 3オブジェクトをクロスチェックしました implicit crosscheck backupを2019/06/28 10:12:30で終了しました implicit crosscheck copyを2019/06/28 10:12:30で開始しています チャネルORA_DISK_1の使用 implicit crosscheck copyを2019/06/28 10:12:30で終了しました リカバリ領域ですべてのファイルを検索しています ファイルをカタログに追加しています... カタログへの追加を終了しました カタログに追加されたファイルのリスト ======================= ファイル名: /opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/control02.ctl チャネルORA_DISK_1の使用 RMAN-06900: 警告: V$RMAN_STATUS行またはV$RMAN_OUTPUT行を生成できません RMAN-06901: 警告: V$RMAN_STATUS行およびV$RMAN_OUTPUT行の更新を禁止しています ターゲット・データベースからのORACLEエラー: ORA-19922: ID 0およびレベル1の親行がありません メディア・リカバリを開始しています チャネルORA_DISK_1: デフォルトの宛先へのアーカイブ・ログのリストアを開始しています チャネルORA_DISK_1: アーカイブ・ログをリストアしています アーカイブ・ログ・スレッド=1 順序=2 チャネルORA_DISK_1: バックアップ・ピース/opt/app/oracle/oradata/orcl/backup/03u55me0_1_1から読取り中です チャネルORA_DISK_1: ピース・ハンドル=/opt/app/oracle/oradata/orcl/backup/03u55me0_1_1 タグ=TAG20190616T163056 チャネルORA_DISK_1: バックアップ・ピース1がリストアされました チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01 アーカイブ・ログ・ファイル名=/opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_16/o1_mf_1_2_gk8ymmvd_.arc スレッド=1 順序=2 チャネルdefault: アーカイブ・ログを削除しています アーカイブ・ログ・ファイル名=/opt/app/oracle/oradata/orcl/fast_recovery_area/ORCL/archivelog/2019_06_16/o1_mf_1_2_gk8ymmvd_.arc レコードID=6 スタンプ=1012065156 メディア・リカバリが完了しました。経過時間: 00:00:01 recoverを2019/06/28 10:12:38で終了しました
新人T「ああ! リカバリ がうまく動いた!」
H課長「?!」
たろー「そして、RESETLOGS 付きでOPENします。」
RMAN > alter database open resetlogs ; 文が処理されました
新人T「OPEN出来た!夢にまで見た状態だ!!」
H課長「・・・。」
たろー「(携帯電話を取り出して)あ、もしもし、Aさん? Oracle Database が復旧したから、すぐにジョブの再実行を頼む。今度はミスるんじゃないぞ。」
たろーちゃんから連絡を受けたAさんはジョブを正しい順序で再実行し、販売管理システムは無事に午後の定例処理を迎えることが出来ました。
たろー「H課長。あなたは『Oracle Master は実際の現場では通用しない』と言いましたね?」
H課長「・・・。」
たろー「資格だけ持っていて、実践では力を発揮できないエンジニアがいることは確かに事実です。でも Oracle Master 試験問題で体系的に知識を洗練していくと、今回のようなケースに対応できる技術は自然と身に付くんですよ。」
H課長「・・・。」
たろー「以前、『分からないことはその都度調べればいいし、サポートに聞いたっていい。協力会社に聞いたっていい』とも言われましたね?
でも今回のような時間との戦いにおいて、サポートは役に立ちましたか?
協力会社から協力は得られましたか?
Oracle Master を・・・Platinumをナメないでください!」
その後
Dさん「やったな、たろーちゃん!
ボクシングで例えたら、逆転KO勝ちじゃないか!」
Aさん「いやー、どうなるかと思ったよー。コッソリ転職サイトに登録するところだった。」
たろー「こんな仕事ばっかり(苦笑)。もうちょっとのんびり仕事させてもらえないものかな。」
一方、H課長は・・・。
部長「H課長・・・。たろーちゃんに助けられたのは、これで何度目かね?」
H課長「・・・。」
部長「H課長には、前々から言っておきたかったことがあるんだ・・・。
いい機会だから、この際ハッキリ言わせてもらおう。」
:::
:::
この時、二人のあいだでどのような会話がされたのか?
それは、この二人にしか分かりません・・・。
今回の「心臓外科医の術式」いかがだったでしょうか?
不完全リカバリを甘く見てはいけません。
不完全リカバリを実施したあとは、必ずフルバックアップを取得しましょう。
RMAN は賢いです。
しかし、その賢さが時にはアダとなることがあります。
仮死状態になってしまったシステムを蘇生させる、見事な「術式」だったのではないでしょうか。
次回も頑張りますので、応援よろしくお願い致します。