隣の部署で障害発生

システムの「心臓」こと、Oracle Databaseに日々携わるたろーちゃん。
ある日の朝、たろーちゃんがいつものように出社すると、隣の部署が何やら慌ただしい雰囲気になっています。
何かあったのでしょうか?

たろー「おはようございます。何かあったんですか?」
Dさん「おお!!たろーちゃん!いいところに来てくれた!」


Dさんは隣の部署の先輩で、某システムのDBAを担当しています。
時々、たろーちゃんに昼ご飯をおごってくれる、いい先輩です。

 

 

 

 

 

Dさん「Oracle Databaseで障害が発生している。昨日まで使えていたデータベースがOPEN出来ないんだ。」
たろー「なんと。詳しく状況を教えてもらえますか?」


たろーちゃんはDさんから、急ぎ以下の情報を聞き出しました。

● Oracle Database のバージョンは12.2 Standard Edition 2。シングルインスタンス構成。
● ノーアーカイブログモードで運用しており、毎晩 コールドバックアップ を取得している。
● 昨晩の コールドバックアップ 取得後にストレージ障害が発生し、 UNDO表領域 が破損していて、データベースがOPEN出来ない。

たろー「とりあえず、アラートログを見せて下さい。」
Dさん「おお、見てくれ。これだ。startup しようとすると、このように出力される。」

 

Errors in file /opt/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_8807.trc:
ORA-01157: データファイル4を識別/ロックできません - DBWRトレース・ファイルを参照してください
ORA-01110: データファイル4: '/opt/app/oracle/oradata/orcl/undotbs01.dbf'
ORA-1157 signalled during: ALTER DATABASE OPEN...

Errors in file /opt/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_8809.trc:
ORA-01110: データファイル4: '/opt/app/oracle/oradata/orcl/undotbs01.dbf'
ORA-01565: ファイル'/opt/app/oracle/oradata/orcl/undotbs01.dbf'の識別中にエラーが発生しました
ORA-27047: ファイルのヘッダー・ブロックを読み込めません。
Linux-x86_64 Error: 25: Inappropriate ioctl for device
Additional information: 1 

 

たろー「先輩の言う通り、 UNDO表領域 が壊れてますね。」
Dさん「やっぱりそうだよな?」
たろー「まず、壊れたディスクを交換してもらいましょう。」
Dさん「分かった。ストレージサーバ管理者に依頼してくる。」


Dさんは大急ぎでストレージサーバ管理者にディスク交換の依頼をしに行きました。

あとは、昨晩の コールドバックアップ から リストア すればいいだけだな。

 

 

 

 

たろーちゃんは自分の席に座り、いつも通りの業務を始めました。

先輩の勘違い

しばらくして、Dさんが再びたろーちゃんの元に訪れました。

Dさん「たろーちゃん、助けてくれ。」
たろー「今度は何があったんですか?」
DさんUNDO表領域 のデータファイルが自動で作成されないんだ。」
たろー「❓❗」
Dさん「とにかく来てくれ!」

 

 

 

 


何を言っているのか分かりませんが、いつもお世話になっている先輩の頼みは断れません。
たろーちゃんは再び隣の部署に向かいました。

Dさん「これを見てくれ。startup しようとすると、このザマだ。」

 

Errors in file /opt/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_9051.trc:
ORA-01157: データファイル4を識別/ロックできません - DBWRトレース・ファイルを参照してください
ORA-01110: データファイル4: '/opt/app/oracle/oradata/orcl/undotbs01.dbf'
ORA-1157 signalled during: ALTER DATABASE OPEN...

Errors in file /opt/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_9053.trc:
ORA-01110: データファイル4: '/opt/app/oracle/oradata/orcl/undotbs01.dbf'
ORA-01565: ファイル'/opt/app/oracle/oradata/orcl/undotbs01.dbf'の識別中にエラーが発生しました
ORA-27037: ファイル・ステータスを取得できません。
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
Checker run found 1 new persistent data failures

 

たろー「先輩。これまだバックアップからリストアしてないでしょ?
ファイルがない(No such file or directory)って言われてますよ。」
Dさん「ん?ファイルが無ければ、自動で作成される筈だろう?」
たろー「それは一時表領域ですよ!先輩、勘違いしてませんか?」
Dさん「え?!そうだっけ??」


Dさん、痛恨の勘違い!!

Dさん「・・・。」
たろー「どうしました?早く コールドバックアップ から リストア しちゃいましょうよ。」
Dさん「・・・無い。」
たろー「はい?」
Dさん「UNDO表領域のバックアップなんて、取って無い・・・。」
たろー「なんですって?!毎晩 コールドバックアップ を取ってるんでしょ?」


Dさんは、うな垂れ、虚ろな目で説明を始めました。

 

 

Dさん「このデータベースの設計は俺がやったんだが、ストレージのI/Oを分散させるために、各領域ごとにディスクを分けているんだ。」

 

 

たろー(ここまで分けているのか。いまどき珍しい。)

Dさん「そして、 コールドバックアップRMAN を使っていなくて、ストレージの スナップショット 機能で取得している。」
たろー「はい。」
Dさん「それが、次の図2だ。」

 

 

たろー「これって・・・。」
Dさん「そう、 TEMP表領域UNDO表領域 はバックアップしてないんだ・・・。 TEMP表領域 と同じく、 UNDO表領域 も自動的に再作成されると思い込んでいたから、バックアップ対象にしてなかった。」
たろー「・・・(汗)」
Dさん「俺のミスだ。お客様からコスト削減を厳しく言われててさ・・・。バックアップ領域をなるべく少なくして、ディスクのコストを低く抑えるよう考えたんだ。コストを抑えることばかりに気を取られていた。」
たろー(厳しいコスト削減要求があったんだな・・・。)
Dさんバックアップが無い以上、復旧出来ないのは俺でも分かる。・・・腹を括るよ。」

 

 

たろー・・・待って下さい、先輩。

 

 

今回はここまで。
はたして、バックアップの無い状況から、復旧出来るのでしょうか?

投稿者プロフィール

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