ablog

不器用で落着きのない技術者のメモ

Oracleデータベースの制御ファイルのみ全損した場合のリカバリ方法を検証してみる

[まとめ]
制御ファイルを全損した場合、以下の2つのリカバリ方法がある。

  1. 物理バックアップ*1を使ったリカバリ
  2. 論理バックアップ*2を使ったリカバリ

いずれの方法でも障害発生直前までリカバリできる。つまり、オンラインREDOログの最後のcommit済みREDOエントリまでリカバリすることができる。

物理バックアップからリカバリする場合、リセットログが必要なためインカネーション番号がカウントアップされるが、10g以降であれば LOG_ARCHIVE_FORMAT にリセットログID(%r)を含めておけば、リセットログ後に障害は発生してもリセットログ以前のバックアップとアーカイブログで障害直前の時点までリカバリすることができる。
逆に{9i以前}または{10g以降で LOG_ARCHIVE_FORMAT にリセットログID(%r)を含めていない}場合で、物理バックアップからリカバリしてリセットログを行った場合はリカバリ後にバックアップを取得しないと障害発生時に復旧できなくなってしまう。

まとめると、2つのリカバリ方法の差異は物理バックアップからのリカバリの場合はリセットログが必要という一点のみ*3。いずれの場合もオンラインREDOログの最新のエントリまでリカバリできる。たいした差はない。あと、論理バックアップをとってなくても、作れば済む気がする。CREATE CONTROFILE 文を実行すれば良いのだから。とっておいたほうがベターだけど。

*1:backup controlfile

*2:backup controlfile to trace

*3:10g以降で LOG_ARCHIVE_FORMAT にリセットログID(%r)を含めているものとする。

続きを読む