Oracleデータベースでは、3種類のリカバリ機能(インスタンスリカバリ、メディアリカバリ、フラッシュバック)があります。
■インスタンスリカバリ(クラッシュリカバリ)
インスタンスリカバリは、インスタンス障害の発生時点までにコミットされていたトランザクションの変更内容を適用するように、データベースをリカバリします。
インスタンス障害は、電源団やOSの異常終了、SHUTDOWN ABORTの実行、Oracleの内部エラーなどによるインスタンスの異常停止などによって、発生する。
インスタンスリカバリは、インスタンス障害の発生後、データベースを再起動した際に、SMONによって、自動的に実行される。
■メディアリカバリ
メディアリカバリは、メディア障害時に消失、または、破損した現行のデータファイルをリカバリします。
メディア障害は、ディスク障害によるファイルの損失や、オペレーションミスによるファイルの損失などによって発生する。
メディアリカバリは、下記のステップで行われる。
1.破損したファイルをバックアップからリストアする。
2.オンラインREDOログファイルとアーカイブREDOログファイルを使用して、リストアしたデータファイルに適用されていないトランザクションのヘンコ情報を適用する。※これをロールフォワードという。
3.この時点のデータファイルには、コミット済みのトランザクションとコミットされていない(未コミットの)トランザクションのデータが混在している(未コミットのトランザクションデータがある場合は、UNDOデータも生成されている)
4.UNDOデータを使用して、未コミットのトランザクションがロールバックされる。
5.データファイルがリカバリされた状態になる。
メディアリカバリには、完全リカバリとPoint-in-Timeリカバリ(不完全リカバリ)の2種類がある。
▼完全リカバリ
バックアップ時点からのREDOログファイルのすべての情報をデータファイルに反映することで、データベースを障害発生直前のコミットの状態まで戻す。データを失うこと無く、リカバリを完了できるので、完全リカバリという。
▼Point-in-Timeリカバリ(不完全リカバリ)
ターゲット時刻よりも前に作成されたすべてのデータファイルを含む、データベース全体のバックアップをリストアし、バックアップ時刻からターゲット時刻までのすべてのアーカイブREDOログファイル(必要であればオンラインREDOログファイルも)に格納されている変更をデータファイルに適用することで、データベースをターゲット時刻の状態に戻す。
データベースを過去の任意の時点に戻すことができるが、ターゲット時刻から現在までのデータは適用されないため、不完全リカバリとも呼ばれる。
■フラッシュバック機能
フラッシュバック機能を使うと、ユーザエラー発生時に、バックアップのリストアやPoint-in-Timeリカバリを実行すること無く、過去の時点のデータを表示したり、データベースを過去の時点に巻き戻したりすることができる。
ユーザエラーとは、ユーザが誤って重要な表を削除したり、表の内容を削除・変更することによって、発生するエラーです。
下記に6種類のフラッシュバック機能の概要を記す。
1.ファッシュバック問合せ
ターゲット時刻を指定して、データベースに問合せを行い、指定した時点の問合せ結果を参照する。
2.フラッシュバックバージョン問合せ
指定した期間内に1つ以上の表に存在していたすべての行のすべてのバージョンの結果を参照する。
3.フラッシュバックトランザクション問合せ
1つのトランザクション、または、指定した期間内のすべてのトランザクションによって、行われた変更の結果を参照する。
4.フラッシュバック表
表を過去の指定の時点に戻す
5.フラッシュバックドロップ
ユーザが表を削除すると、その表はゴミ箱に入れられる。削除した表とその依存オブジェクトをゴミ箱からもとに戻すことができる。
6.フラッシュバックデータベース
データベースを以前の時点まで戻して、データベースのPoint-in-Timeリカバリを効率的に行う。
※フラッシュバック表とフラッシュバックドロップは、さらに詳しい理解が必要です。
フラッシュバックドロップ、フラッシュバックデータベース以外の各機能は、過去のデータの参照のためにUNDOデータを使用している。