PR

 今回は,「Bronze DBA 11g」の試験範囲より,UNDOデータに関する問題です。

 今回の問題のポイントは,UNDO保存期間とUNDO保存の保証です。UNDO保存を理解するためには,「ORA-1555:スナップショットが古すぎます。」エラーを理解する必要がありますので,まずは,このエラーから見ていきます。

◆ ORA-1555エラー

 UDNOデータは,トランザクションの実行によって生成されます。生成されたUNDOデータは,トランザクションのロールバックに備えて保存しているデータであるため,トランザクションがコミット文によって確定すると,UNDOデータには不要のマークが付けられます。ただし,UNDOデータは,トランザクションのロールバック以外にも,

  • 読み取り一貫性機能
  • フラッシュバック機能

などでも利用されます。これらの機能はコミット済みのUNDOデータにもアクセスする可能性があるのですが,アクセスしたデータがすでに削除されていた場合,「ORA-1555:スナップショットが古すぎます」エラーが発生します(図1)。

図1●ORA-01555が発生するケース
図1●ORA-01555が発生するケース

◆ UNDO保存

 Oracleでは,前述のORA-1555エラーを回避するために,UNDO_RETENTIONパラメータを使用し,UNDOを保存する期間を指定することができます。具体的には,トランザクションのコミット後にUNDOデータを保持する期間をUNDO_RETENTIONパラメータに指定します。

◆ UNDO保存の保証

 Oracle Serverでは,UNDO_RETENTIONパラメータで指定した値に基づきUNDOデータを保存しますが,大量のトランザクションが短時間に実行された場合など,UNDOデータの書き込む領域が不足する場合があります。このとき,Oracle Serverは,UNDO保存で指定した期間よりも短い時間でコミット済みのUNDOデータを,新しいUNDOデータで上書きします。つまり,読み取り一貫性やフラッシュバックの機能よりも,実行中のトランザクションが優先されます。

 これに対し,読み取り一貫性機能やフラッシュバックの機能を実現するためのUNDOデータの保存を優先したい場合は,そのように設定を変更することができます。これをUNDO保存の保証といいます。この場合,新しいトランザクションによるUNDOデータの書き込みができないので,トランザクションが失敗する可能性があります。

 なお,UNDO保存の保証は,UNDO表領域に対して設定を行います。ユーザーが個別に設定することはできません。

 以上より,選択肢の中で正しい説明になっているのは,選択肢1と選択肢5ということになります。