今回は,「Silver DBA 11g」の試験範囲より,インスタンス・リカバリに関する問題です。
今回の問題のポイントは,どのようなリカバリを行う必要があるのか?ということです。障害の原因は停電による電源断ですので,この障害は「インスタンス障害」と呼ばれます。インスタンス障害に対するリカバリの手段は,「クラッシュリカバリ」と呼ばれる,Oracle Serverによって行われる自動リカバリ処理です。このリカバリ処理の流れは,
(1)ログを適用し,失われた更新処理を復元するキャッシュ・リカバリ
(2)UNDOデータを適用し,不要なトランザクションをロールバックするトランザクション・リカバリ
の2つから構成されます。つまり,ログを使用するのは(1)の処理ということになります。
ここで,そもそもインスタンス障害がどのようなものかをまとめると,図1のようになります。図1の左側は障害発生前の状態で,メモリー上は最新の更新済みの情報を持ちますが,物理ファイルであるデータ・ファイルにはまだ更新内容が反映されていない状態です。このような状況で電源が切れると,メモリー上の更新済み情報は失われ,データは古い情報しか持たないことになります(図1の右側)。ただし,COMMIT操作によって,ログは最新の情報がREDOログ・ファイル内に書き込まれます。
インスタンス障害とは,図1のようにメモリー上の更新済みのデータ・イメージが失われ,データ・ファイル上は更新前の古い情報しか持たず,正しいデータ処理ができない状態です。
Oracle Serverは,この状態を検知し,自動的にリカバリの処理を開始します。リカバリ処理の最初の処理は,キャッシュ・リカバリです。この処理では,REDOログ・ファイル上にある最新の変更履歴を順次適用し,データ・ファイルのデータを新しくしていきます。
適用するログのスタート地点は,最後のチェックポイント発生時のログです。チェックポイントイベントは,それまでに生成したREDOログの情報と,変更済みのデータをディスク上に書き込み,メモリー上のデータとディスク上のデータを同期するイベントですので,チェックポイントまでに発生した変更内容は,すべてディスクに反映されていると考えられます。従って,キャッシュ・リカバリでは,最後に発生したREDOログの内容が必要ということになります(図2)。
なお,直前のチェックポイントの場所は,CURRENTステータスのREDOログとは限りません。ログ・スイッチが発生した直後は,これまでに書き込んでいたログ・ファイル上にチェックポイントがあり,このログ・ファイルのステータスはACTIVEとなります。その後,ログ・スイッチ時のチェックポイントが完了し,前のログ・ファイルが要らなくなると,ステータスはINACTIVEに代わります。つまり,ステータスがCURRENTおよびACTIVEのログ・ファイルがインスタンス・リカバリで必要ということになります。
以上より,正解は選択肢3)ということになります。