前回のおさらい

不完全リカバリを甘く見るな その1は、H課長の無知が故にTEST2時点にリストア出来なくなってしまっている状況でした。
たろーちゃんはこの状況を打開することができるのでしょうか?

とりあえず、相関図のおさらいから。

解決方法

たろー「仕方がない。reset database to incarnationを使おう。」
新人T「reset database to incarnation?」
たろー「そう。インカネーションをリセットするんだ。まずは今の状態を確認するよ。」

RMAN> list incarnation ;

データベース・インカネーション・リスト
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       EE       1876671504       PARENT  1          2017/01/26 13:52:29
2       2       EE       1876671504       PARENT  1408558    2017/12/21 18:35:01
3       3       EE       1876671504       PARENT  2379497    2018/07/26 11:23:39
4       4       EE       1876671504       PARENT  2386805    2018/07/26 11:37:01
5       5       EE       1876671504       PARENT  2421079    2019/01/09 15:11:47
6       6       EE       1876671504       PARENT  2423294    2019/01/09 15:30:50
7       7       EE       1876671504       PARENT  2425136    2019/01/09 15:43:24
8       8       EE       1876671504       CURRENT 2428821    2019/01/09 16:19:50

たろー「これで、現在のインカネーション番号は8番であることが分かった。」
新人T「はい。」
たろー「こいつを7番に変更するんだ。」

RMAN> reset database to incarnation 7 ;

データベースがインカネーション7にリセットされました

RMAN> list incarnation ;

データベース・インカネーション・リスト
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       EE       1876671504       PARENT  1          2017/01/26 13:52:29
2       2       EE       1876671504       PARENT  1408558    2017/12/21 18:35:01
3       3       EE       1876671504       PARENT  2379497    2018/07/26 11:23:39
4       4       EE       1876671504       PARENT  2386805    2018/07/26 11:37:01
5       5       EE       1876671504       PARENT  2421079    2019/01/09 15:11:47
6       6       EE       1876671504       PARENT  2423294    2019/01/09 15:30:50
7       7       EE       1876671504       CURRENT 2425136    2019/01/09 15:43:24
8       8       EE       1876671504       ORPHAN  2428821    2019/01/09 16:19:50

新人T「7番がCURRENTになりましたね。」
たろー「そう、これなら・・・。」

RMAN> restore database from tag='TEST2' ;

restoreを2019/01/09 16:42:58で開始しています
チャネルORA_DISK_1の使用

データファイル7をスキップしています。すでにファイル/opt/app/oracle/oradata/ee/users01.dbfにリストアされています
データファイル5をスキップしています。すでにファイル/opt/app/oracle/oradata/ee/pdbseed/system01.dbfにリストアされています
データファイル6をスキップしています。すでにファイル/opt/app/oracle/oradata/ee/pdbseed/sysaux01.dbfにリストアされています
データファイル8をスキップしています。すでにファイル/opt/app/oracle/oradata/ee/pdbseed/undotbs01.dbfにリストアされています
チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00001を/opt/app/oracle/oradata/ee/system01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00003を/opt/app/oracle/oradata/ee/sysaux01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00004を/opt/app/oracle/oradata/ee/undotbs01.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/opt/app/oracle/oradata/ee/bkup/7gtmtfil_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/opt/app/oracle/oradata/ee/bkup/7gtmtfil_1_1 タグ=TEST2
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:01:45
チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00009を/opt/app/oracle/oradata/ee/PDBPROD1/system01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00010を/opt/app/oracle/oradata/ee/PDBPROD1/sysaux01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00011を/opt/app/oracle/oradata/ee/PDBPROD1/undotbs01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00015を/opt/app/oracle/oradata/ee/PDBPROD1/users.dbfにリストアしています
チャネルORA_DISK_1: データファイル00016を/opt/app/oracle/oradata/ee/PDBPROD1/users2.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/opt/app/oracle/oradata/ee/bkup/7htmtfkd_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/opt/app/oracle/oradata/ee/bkup/7htmtfkd_1_1 タグ=TEST2
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:48
restoreを2019/01/09 16:45:33で終了しました

新人T「ああ!エラーになっていた箇所が リストア 出来ましたね!」
たろー「あとは リカバリ して、RESETLOGS指定でOPENすればOKだ。」

RMAN> recover database until time ='2019/01/09 15:59:20' ;

recoverを2019/01/10 14:01:14で開始しています
チャネルORA_DISK_1の使用
ファイルが読取り専用のため、データファイル 7は処理されません

メディア・リカバリを開始しています

スレッド1 (順序1)のアーカイブ・ログは、ファイル/opt/app/oracle/oradata/ee/bkup/EE/archivelog/2019_01_09/o1_mf_1_1_g3c84q1x_.arcとしてディスクにすでに存在します
アーカイブ・ログ・ファイル名=/opt/app/oracle/oradata/ee/bkup/EE/archivelog/2019_01_09/o1_mf_1_1_g3c84q1x_.arc スレッド=1 順序=1
メディア・リカバリが完了しました。経過時間: 00:00:01
recoverを2019/01/10 14:01:18で終了しました

RMAN> alter database open resetlogs ;

文が処理されました

RMAN> list incarnation ;

データベース・インカネーション・リスト
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       1       EE       1876671504       PARENT  1          2017/01/26 13:52:29
2       2       EE       1876671504       PARENT  1408558    2017/12/21 18:35:01
3       3       EE       1876671504       PARENT  2379497    2018/07/26 11:23:39
4       4       EE       1876671504       PARENT  2386805    2018/07/26 11:37:01
5       5       EE       1876671504       PARENT  2421079    2019/01/09 15:11:47
6       6       EE       1876671504       PARENT  2423294    2019/01/09 15:30:50
7       7       EE       1876671504       PARENT  2425136    2019/01/09 15:43:24
8       8       EE       1876671504       ORPHAN  2428821    2019/01/09 16:19:50
9       9       EE       1876671504       CURRENT 2428916    2019/01/10 14:02:59

新人T「インカネーション番号9が新たに増えてますね。」
たろー「そうだ。RESETLOGS指定でOPENしたタイミングで新たなインカネーションが作られるんだよ。」

たろー

reset database to incarnationの副作用

新人T「reset database to incarnationを使えばRESETLOGSを跨いだ リストア が出来るんですね!」
たろー「いや、これは奥の手だ。日常的に使うのはおすすめしない。色々と副作用があるんだよ。」
新人T「副作用ですか?」
たろー「そうだ。俺が知る限りでも、自動化メンテナンスタスクの挙動がおかしくなったり、フラッシュバックデータベースがONの場合は リストア できなかったりしたことがあった。きっと、他にも副作用がある筈だ。」
新人T「なるほど・・・。基本、使っちゃダメなんですね。」
たろー「そういうことだ。さっきも言った通り、今回のようなケースでは物理バックアップじゃなくて、論理バックアップを使うべきだよ。物理バックアップはデータベースに何か障害が発生した時の最後の砦だ。それを速度が早いという理由だけで安易に使用するのはおすすめしない。」
新人T「分かりました。肝に命じておきます。」
たろー「今回はまだCDB全体だったからよかったけど、これがPDB単体だったらインカネーションのリセットは出来なかったよ。」
新人T「え、そうなんですか?!」
たろー「うん。PDB単位のインカネーションのリセットは出来ないんだ。これは、My Oracle SupportのドキュメントID2298099.1に書かれているよ。」
新人T「こ、恐い・・・。」
たろー「そう、恐くて当然だ。我々DBAは『心臓』を扱っているんだ。不完全リカバリはその名の通り『不完全』な状態に戻す訳だから、慎重な作業が必要だ。その恐さを決して忘れちゃダメだよ?」
新人T「わ、分かりました・・・。」

新人T

新人に間違ったことを教えるH課長には困ったものだ。
何とかならないかな・・・?
普段はストレージのスナップショット機能でフルバックアップを取得しているから、今回のような2時点のフルバックアップを取得する為には RMAN を使うしかなかったんだろうけど、ストレージのスナップショット機能と同じイメージで RMAN を扱っちゃダメだ。

 

 

 

 

 

たろー「この辺りの知識は、Oracle Master Gold のレベルだ。Tさんにはまだ難しいかもしれない。そうだ、これを機に Oracle Master Goldを目指してみないか?分からないことは何でも聞いてくれ。」
新人T「ありがとうございます!Oracle Master Goldの勉強を始めます!」


今回の「心臓外科医の術式」いかがだったでしょうか?
不完全リカバリを甘く見てはいけません。

不完全リカバリは最もコストが高く、危険な作業です。
業務的な都合で不完全リカバリを多用してはなりません。
今回はその一例を紹介致しました。
次回も頑張りますので、応援よろしくお願い致します。

 

しかし、面子を潰されたH課長が、黙っている訳はありませんでした。(……続く)

投稿者プロフィール

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