相関図おさらい

心臓外科医の術式、いろんな登場人物がいますので、相関図のおさらいからです❗
今回は過去最大のH課長とたろーちゃんの戦いが始まります❗

会社に出社すると

システムの「心臓」こと、Oracle Databaseに日々携わるたろーちゃん。
本日は金曜日。今日を乗り切ればお休みのたろーちゃんは、張り切って出社しました。
たろーちゃんが朝出社すると、会社全体が慌ただしい雰囲気になっています。
尋常ではない雰囲気にたろーちゃんは驚きました。
一体、何があったのでしょうか?

たろー「おはようございます。N課長、この騒ぎは何かあったんですか?」
N課長「たろーさん!『何かあったんですか?』じゃないよ!
君のアドバイスのせいで、我が社の基幹システムが停止してるんだ!」

N課長

たろー「私のアドバイスのせいで??一体、なんのことですか?!」
N課長「これから緊急会議が開かれるから、たろーさんも直ぐに一緒に来てくれ!」
たろー「??!」
N課長「早く!」


訳も分からず、たろーちゃんは直属のN課長に連れられ、緊急会議に参加することになりました。
会議室には部長をはじめ、データベースを構築したH課長と新人Tさん。
アプリケーション開発担当のAさん。隣の部署の先輩Dさん等々、
そうそうたるメンバーが揃っていました。
 
N課長「この度はうちのたろーがご迷惑をお掛けして、申し訳ございません!」

ちょっと、N課長。一体なんの話ですか??

 

 

 

 

部長「N課長、そんなことはいいから、早く本題に入ろう。
H課長、状況を説明して下さい。」
H課長「はい。」

H課長

そう言うとH課長は不敵な笑みを浮かべ、たろーちゃんを一瞥し、状況を説明し始めました。

H課長「昨晩、我が社の販売管理システムで使用している Oracle Database がストレージ障害で停止しました。ディスク交換後、不完全リカバリを実施し、アプリケーション部門にジョブを再実行してもらいましたが、その再実行手順に誤りがあり、再度不完全リカバリを実施する必要がありました。しかし、不完全リカバリが正常に完了せず、現在のところ復旧出来ておりません。」

Aさん「すまん、たろーちゃん。ジョブを再実行したのは俺なんだが、手順をミスってしまったんだ。」

Aさん

たろー「???」
部長「サポートには問い合わせているのかね?」
H課長「はい、重要度1で問い合わせております。」
部長「ふむう・・・時間との勝負だな。たろーちゃん、何かいい案はないかね?」
たろー「いや、ちょっと待ってください。私は今出社したばかりで、何の話なのか、サッパリで・・・」


あたふたするたろーちゃんに、更にH課長が追い打ちをかけます。

H課長「のん気ですね、君は。君のせいで我が社の販売管理システムが停止してるんですよ。どうするつもりですか?」
たろー「H課長、申し訳ありませんが1から説明して頂けませんか?何が起こってるんですか?」
H課長「以前、君は私が構築したシステムに対して『 RMAN ならこんなことにはならなかった』と言いましたね?」
※H課長のシステムについては、以前の記事『動かない心臓』を参照してください。

たろー「はい。」
H課長「君からもらったありがたいアドバイスを受けて、今回の販売管理システムでは、ストレージの スナップショット 機能を使わず、 RMAN でバックアップを取得するように設計したんだ。勿論、リストア&リカバリ試験も実施したよ?
リストア&リカバリ試験は問題なかった。でも、いざ障害が発生すると、復旧できないじゃないか。どうしてくれるんですか?」
たろー「『どうしてくれるんですか?』って・・・。まず、どういうバックアップ構成なのか、詳しく教えて下さい。」


すると、H課長はバックアップ構成を説明し始めました。

 

H課長「この図のように、データ領域とアーカイブログ領域があり、毎週日曜日に RMAN でオンラインフルバックアップを取得しているんだ。」
たろー「はい。」
H課長「月曜日から土曜日はバックアップは取得していない。アーカイブログもそのままだ。」
たろー「アーカイブログはそのまま?バックアップは取ってないんですか?」
H課長「ああ、そうだ。君のありがたいアドバイスのとおり『必要なアーカイブログを消さない』で置いてあるんだ。毎週日曜日のオンラインフルバックアップでまとめて消すようにしているよ。」
たろー「・・・。」
H課長「昨晩、ストレージ障害でデータ領域とアーカイブログ領域のディスクが故障した。」

H課長「アーカイブログ領域のディスクが故障したので、当然アーカイブログは全滅だ。仕方ないから、ディスク交換後、日曜日のオンラインフルバックアップ時点に不完全リカバリを実施した。」

H課長「そして本日。アプリケーション部門に月曜から木曜のジョブを再実行してもらったんだが、その手順に誤りがあった。」

H課長「仕方ないから、もう一度、日曜日のオンラインフルバックアップ時点に不完全リカバリを実施しようとすると、エラーが発生して出来ないんだよ。」

たろー「具体的にどんなオペレーションをして、どんなエラーメッセージが表示されてるんですか?」
H課長「オペレーションとエラーメッセージ?」
たろー「はい。」
H課長「Tさん、たろーさんに見せてあげて。」
新人T「は、はい!」


するとTさんはノートパソコンを開き、オペレーションログをたろーちゃんに見せました。

<オペレーションログ>

RMAN> restore database from tag='FULL_BACKUP1' ;


restoreを2019/06/28 08:47:22で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=4 デバイス・タイプ=DISK

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00001を/opt/app/oracle/oradata/orcl/system01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00003を/opt/app/oracle/oradata/orcl/sysaux01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00004を/opt/app/oracle/oradata/orcl/undotbs01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00007を/opt/app/oracle/oradata/orcl/users01.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/opt/app/oracle/oradata/orcl/backup/02u55mbk_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/opt/app/oracle/oradata/orcl/backup/02u55mbk_1_1 タグ=FULL_BACKUP1
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:01:16
restoreを2019/06/28 08:48:42で終了しました


RMAN> recover database until scn 1423457 ;


recoverを2019/06/28 08:49:08で開始しています
チャネルORA_DISK_1の使用
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recoverコマンドが06/28/2019 08:49:08で失敗しました
RMAN-20208: UNTIL CHANGE is before RESETLOGS change

 
新人T
「このように、リカバリで失敗するんです。」
たろー「・・・そうか。H課長、一度不完全リカバリしたって言いましたよね?」
H課長「ああ。」
たろー「そのあと、ちゃんとフルバックアップを取り直しましたか?」
H課長「フルバックアップを取り直す?何故そんなことをしなければならないんだ。
フルバックアップなら日曜日に取ってあるじゃないか。」
たろー「いえ、不完全リカバリを行ったあとは、フルバックアップを取り直さなくちゃダメです!」
H課長「言っている意味が分からない。フルバックアップは日曜日に既に取ってあるんだ。」
たろー「H課長はストレージのスナップショット機能に慣れすぎてしまっているんです。 RMAN をストレージのスナップショット機能と同じに考えちゃダメです。」
H課長「なんだ、じゃあやっぱりストレージのスナップショット機能のほうが RMAN より優れているじゃないか。君のアドバイスなんか聞かなければよかったよ。」
たろー「いや、今はそんなこと言ってる場合じゃ・・・。」

(トゥルルルル、トゥルルルル・・・📱)


突然、Tさんの携帯電話が鳴り響きました。どうやらサポートから連絡が入ったようです。

新人T「はい!・・・はい、分かりました・・・。」
H課長「Tさん、サポートの回答はどうだった?」
新人T「まだログを全て追いきれてないので一次回答とのことですが、たろーさんの言う通り、不完全リカバリ後にフルバックアップを取っていないのが原因のようです。」
H課長「やっぱり RMAN はダメだな。」
たろー「いや、使い方の問題です。RESETLOGS 指定でデータベースをOPENするということは、ログ順序番号が文字通り『リセット』されるんです。不完全リカバリを行ったあとは、必ずフルバックアップを取らなきゃダメです。」
H課長「そんなに何度もフルバックアップなんて流せるわけないだろう?どれだけ時間がかかると思ってるんだ?」
たろー「・・・。」
H課長Oracle Master の試験では RMAN が出てくるだろうが、実際の現場じゃそんなものは通用しないんだよ。」
たろー「・・・。」
H課長Oracle Master なんて役に立たない。
Platinumを持っているからって、いい気になるな!!

H課長

 

(カッチーン!)

 

 

 

 
 

(うあ、ヤバい!)

 

 

 

           

       Aさん

部長「おいおいH課長、何もそんな言い方をしなくても・・・。」

部長

たろー「・・・申し訳ありません、部長。サポートの回答どおり、データベースを復旧することは出来ません。失礼致します。」
Aさん「お、おい、待てよたろーちゃん!」


H課長の言葉にキレたたろーちゃんは、会議室をあとにし、自席に戻って行きました。
Aさんは慌ててたろーちゃんのあとを追います。

H課長「・・・部長。なんとしても、もう一度日曜日の時点に不完全リカバリしなければなりません。」
部長「しかし、出来るのかね?」
H課長「はい、私に良い考えがあります。Tさん、直ぐに作業に取り掛かるぞ。」
新人T「は、はい・・・。」

(クックック、これであの厄介者のたろーを
この会社から追い出すことが出来るぞ。いい気味だ。)

 

 

 

 

                                                                                                                                   H課長

たろーちゃんの自席にて

Aさん「たろーちゃん、大丈夫か?」
たろー「・・・(深呼吸)」
Aさん「なんだ、あのH課長って奴!
イヤな奴だなぁ、あれじゃたろーちゃんじゃなくても怒るぜ。」
たろー「久しぶりにムカついた・・・。」
Aさん「実はたろーちゃんが出社する前に、うちの部門にあのH課長が来てさ、『復旧出来ないのはたろーちゃんのせいだ』なんて吹聴しまくってたんだぜ。」
たろー「なんだって?!」
Aさん「うちだけじゃないと思うよ。会社中に言いふらし回ってたみたいだ。完全にたろーちゃんを殺しにきてるぞ。」
たろー「・・・。」

Dさん「うちにも来て、大袈裟に言いふらし回ってたよ。」

Dさん

隣の部署の先輩Dさんも、たろーちゃんのことが気がかりで会議を抜け出してきました。

たろー「先輩・・・。」
Dさん「たろーちゃんに限ってそんなことはないって分かってたから、相手にしなかったけどね。」
たろー「・・・。」
Dさん「分かってる!みなまで言うな、たろーちゃん!」
たろー「え?」
Dさん「言いたいことは分かる。今度ばかりは相手が悪い。やめとけ。」
たろー「?」
Dさん「なにせ、あの販売管理システムの Oracle Database が相手だ。誰も逃げたなんて思ぃやしないさ。」

たろー「!」

(・・・逃げる?!

 

 

 

 

 

Dさん「H課長がフルバックアップを取り直してなかったのが、そもそもリカバリ出来ない原因なんだ。たろーちゃんは何も気にすることはないぞ?」

たろー「・・・・・・・・・・・・・・・・・・・・・・・・・・・・・。
先輩。その販売管理システムって、そんなに重要なシステムなんですか?」

Aさん「!」

(しめた。食いついてきた。)

 

 

 

 

                                                                                                                                   Dさん

 

Dさん「重要なんてもんじゃないぞ。うちの会社の売上の9割以上を占めるシステムだ。
あのシステムが動かないとなると大変だ。俺も早く転職先を探さないといけなくなる。なぁAさん。」
Aさん「え、あ、確かにそうですね・・・。俺も身の振り方、考えないと・・・。」
たろー「・・・。」


黙り込む3人。
・・・しばらくして、たろーちゃんが口を開きました。

たろー「先輩。私は別に、H課長やあんな Oracle Database 恐くないですよ。」
Dさん「ん?どうするつもりだ?」
たろー「私がリカバリします。」
Dさん「どうやって?不完全リカバリのあとにフルバックアップを取ってないんだぞ。
それが何を意味するのか、俺でも分かる。これでもDBAの端くれだからな。」
たろー「・・・なんとかします。恐くなんかないんで。
Aさん。リカバリしたらすぐに連絡するから、ジョブの再実行をスタンバっておいてくれ。」
Aさん「あ、ああ、分かった。」


そういうと、たろーちゃんはサーバールームに向かいました。

(ふぅー・・・)

 

 

 

 

                                                                                                                                   Dさん

 

Aさん「・・・あのー、Dさん。
たろーちゃんの性格を知ってて、わざとあんな風に煽ったんでしょ?」
Dさん「さぁどうかな・・・。でも、アプリを開発したAさんなら分かるよね。
このまま販売管理システムが停まったままだと、どうなるか・・・。」
Aさん「はい。特に今日は金曜日ですし、午後の定例処理開始までに間に合わなかったら、
週次処理や月次処理にも影響が出るので・・・。間違いなくうちの会社は傾くでしょうね・・・。」

 

 

 

           

       Aさん

リカバリ状況は?

新人T「H課長、先ほど『良い考えがある』と仰ってましたが、どうすればいいのでしょうか?」
H課長「今回の事象は、制御ファイルの状態がデータファイルよりも先に進んでしまっているのが原因だ。リストアするとき、データファイルだけじゃなく、制御ファイルも一緒に戻すんだ。まずは、こうだ。」
 

RMAN> restore controlfile from '/opt/app/oracle/oradata/orcl/backup/c-1539842659-20190616-00' ;

restoreを2019/06/28 09:50: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 09:50:58で終了しました

 
新人T
「なるほど。これで制御ファイルが日曜日の状態に戻ったのですね。」
H課長「そうだ。そして、リストアを実行するんだ。」
 

RMAN > alter database mount ;
文が処理されました

RMAN> restore database from tag='FULL_BACKUP1' ;

restoreを2019/06/28 09:51:00で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=4 デバイス・タイプ=DISK

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00001を/opt/app/oracle/oradata/orcl/system01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00003を/opt/app/oracle/oradata/orcl/sysaux01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00004を/opt/app/oracle/oradata/orcl/undotbs01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00007を/opt/app/oracle/oradata/orcl/users01.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/opt/app/oracle/oradata/orcl/backup/02u55mbk_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/opt/app/oracle/oradata/orcl/backup/02u55mbk_1_1 タグ=FULL_BACKUP1
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:01:16
restoreを2019/06/28 09:52:16で終了しました

 
新人T
「リストア出来ましたね。問題は次の・・・。」
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

 
新人T
「あれ?」
H課長「何?!そんなバカな!」
新人T「・・・。」
H課長「くそ!どうしてだ??
データファイルだけじゃなく、制御ファイルまで元に戻したんだぞ!
何故それでリカバリ出来ないんだ?!」
部長「どうするのかね、H課長!午後の定例処理まで時間がないぞ!!」
H課長「Tさん、とにかくサポートだ!サポートに大至急調べてもらえ!」

 

たろー「無理ですよ。いくらサポートでも、時間が足りません。」


新人T「たろーさん!!」
H課長「名前だけのPlatinumが何しに戻ってきた?邪魔だから帰ってくれ。」
部長「H課長、そういう言い方はいい加減辞めたまえ!」
たろー「(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

 

たろー「・・・。」

部長「たろーちゃん、何とかならないか?!」

今回はここまで!
はたしてたろーちゃんは、この Oracle Database をリカバリすることが出来るのでしょうか?

投稿者プロフィール

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