今回は,「Silver DBA 11g」の試験範囲より,インスタンス・リカバリに関する問題です。

 今回の問題のポイントは,どのようなリカバリを行う必要があるのか?ということです。障害の原因は停電による電源断ですので,この障害は「インスタンス障害」と呼ばれます。インスタンス障害に対するリカバリの手段は,「クラッシュリカバリ」と呼ばれる,Oracle Serverによって行われる自動リカバリ処理です。このリカバリ処理の流れは,

(1)ログを適用し,失われた更新処理を復元するキャッシュ・リカバリ
(2)UNDOデータを適用し,不要なトランザクションをロールバックするトランザクション・リカバリ

の2つから構成されます。つまり,ログを使用するのは(1)の処理ということになります。

 ここで,そもそもインスタンス障害がどのようなものかをまとめると,図1のようになります。図1の左側は障害発生前の状態で,メモリー上は最新の更新済みの情報を持ちますが,物理ファイルであるデータ・ファイルにはまだ更新内容が反映されていない状態です。このような状況で電源が切れると,メモリー上の更新済み情報は失われ,データは古い情報しか持たないことになります(図1の右側)。ただし,COMMIT操作によって,ログは最新の情報がREDOログ・ファイル内に書き込まれます。

図1●インスタンス障害の状態
図1●インスタンス障害の状態
[画像のクリックで拡大表示]

 インスタンス障害とは,図1のようにメモリー上の更新済みのデータ・イメージが失われ,データ・ファイル上は更新前の古い情報しか持たず,正しいデータ処理ができない状態です。

 Oracle Serverは,この状態を検知し,自動的にリカバリの処理を開始します。リカバリ処理の最初の処理は,キャッシュ・リカバリです。この処理では,REDOログ・ファイル上にある最新の変更履歴を順次適用し,データ・ファイルのデータを新しくしていきます。

 適用するログのスタート地点は,最後のチェックポイント発生時のログです。チェックポイントイベントは,それまでに生成したREDOログの情報と,変更済みのデータをディスク上に書き込み,メモリー上のデータとディスク上のデータを同期するイベントですので,チェックポイントまでに発生した変更内容は,すべてディスクに反映されていると考えられます。従って,キャッシュ・リカバリでは,最後に発生したREDOログの内容が必要ということになります(図2)。

図2●REDOログファイルの内容
図2●REDOログファイルの内容

 なお,直前のチェックポイントの場所は,CURRENTステータスのREDOログとは限りません。ログ・スイッチが発生した直後は,これまでに書き込んでいたログ・ファイル上にチェックポイントがあり,このログ・ファイルのステータスはACTIVEとなります。その後,ログ・スイッチ時のチェックポイントが完了し,前のログ・ファイルが要らなくなると,ステータスはINACTIVEに代わります。つまり,ステータスがCURRENTおよびACTIVEのログ・ファイルがインスタンス・リカバリで必要ということになります。

 以上より,正解は選択肢3)ということになります。