Oracle のリカバリ モデル
Oracle では、Single Point of Failure(単一点障害)の後、データベースをトランザクションが最後にコミットされ状態までリカバリできるように、その内容と構造への変更を管理しています。「トランザクションが最後にコミットされた状態まで」とは、COMMIT ステートメントの実行後に制御がユーザに戻された時点でコミットされたデータが何らかの形でディスクに書き込まれており、リカバリ可能であることを意味します。「Single Point of Failure」とは、コミットされたトランザクションの内容を失うことなく、単一のファイルまたはプロセスが失敗することを意味します。データ ファイルが損失または破損した場合は、REDO ログの内容により、そのデータがリカバリ可能であることが保証されます。制御ファイルが破損した場合は、他の制御ファイルにより、その情報が引き続き安全であることが保証されます。プロセスは強制終了される可能性がありますが、コミットされたデータが失われることはありません。
障害が発生した後、Oracle はデータベースをリカバリするために以下の作業を実行します。
- init.ora ファイルを読み取って、制御ファイルの名前と場所を特定します。
- 制御ファイルを読み取って、制御ファイル同士の一貫性を確認し、データベースの物理的なファイル構造を特定します。
- 制御ファイルに記述されている各データ ファイルを開いて、データ ファイルが最新で、最後にコミットされた変更を反映しているか、それともリカバリが必要であるかを判断します。
- 各 REDO ログ ファイルを順番に開き、必要に応じてそこに書かれている情報を各データ ファイルに適用して、コミットされたトランザクションがすべて含まれた状態にします。
データベースの制御ファイルが失われた場合は、失われた制御ファイルを現在の制御ファイルのコピーに置き換えることで、データベースをリカバリすることができます。
データベースで 1 つ以上のデータ ファイルが失われた場合は、まず、失われたデータ ファイルをバックアップ コピーで置き換えた後、(オンラインまたはアーカイブされた)REDO ログに基づいてリカバリされたコピーを最新の状態にすることで、データベースをリカバリします。バックアップ コピーを元のファイルとは別の場所にリカバリする場合は、ALTER DATABASE > RENAME FILE コマンドを使用して、リカバリされたファイルの場所を Oracle インスタンスに指定する必要があります。
データベースの最新の REDO ログが失われた場合、データベース インスタンスは次のトランザクションをコミットしようとした時点で停止します。データが失われることはありませんが、最後のトランザクションはコミットされないので、データベースがリカバリしたときに再入力が必要になる可能性があります。ただし、現在のオンライン REDO ログ ファイルは置き換える必要があり、データベースのバックアップを直ちに実行する必要があります。
データベースのアーカイブREDO ログが失われた場合、データベース インスタンスは損失に気付かないので、引き続き動作します。ただし、次にメディアで障害が発生したとき、またはファイルが失われたときに、データベースをリカバリできない可能性があります。アーカイブREDO ログが失われた場合は、新たにバックアップを実行する必要があります。