前回のおさらい

前回は、販売管理システムの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 は賢いです。

しかし、その賢さが時にはアダとなることがあります。
仮死状態になってしまったシステムを蘇生させる、見事な「術式」だったのではないでしょうか。

次回も頑張りますので、応援よろしくお願い致します。

投稿者プロフィール

たろーちゃん
たろーちゃん
株式会社システムサポート インフラソリューション事業部に在籍するPlatinumホルダー。
Oracle Databaseのパフォーマンスチューニングを得意とする。
データベースは Oracle 以外興味がないという変わり者。
一番嫌いなエラーメッセージは CRS-02625。
連載「心臓外科医の術式」を執筆。