※ポイント※UNDOデータの管理に関するUNDO表領域、UNDOセグメントの構成と各種初期化パラメータが対象。UNDOアドバイザによってどのようなアドバイスを取得することができるかという情報も重要。UNDOデータUNDOデータとは変更前のデータのコピーであり、以下の操作のために保持されるもの。・読み取り一貫性問い合わせ他トランザクションがデータを変更中の場合、UNDOデータを使用することで、未確定データを見せないようにする。・ロールバック1つの値を戻すためのPL/SQLブロック。ROLLBACKコマンドにてトランザクションを取り消すと、UNDOデータを使用して元のデータに戻す。・トランザクションリカバリ(インスタンス障害時のリカバリも含む)トランザクションに障害が発生したり、インスタンス障害時のリカバリが行われたりすると、コミットしていない処理は、UNDOデータを使用してロールバックされる。・フラッシュバック問い合わせ、フラッシュバックテーブルフラッシュバック問い合わせでは、現在のテーブルとUNDOデータがマージされ、過去の一時点の一貫したデータが戻される。フラッシュバックテーブルの場合も、UNDOデータを使用した一貫データが現在のテーブルに戻され、過去の一時点にリカバリすることができる。データを変更するトランザクションではUNDOデータが生成され、トランザクションが完了するまでOracleサーバによって維持される。管理においては、UNDOデータはUNDOセグメントに格納され、UNDOセグメントはUNDO表領域に格納される。UNDOセグメントは、UNDO表領域が作成されると自動的に作成される。UNDO表領域がインスタンスに設定されると、必要な数だけ自動的にオンラインとなり、使用可能になる。各トランザクションには、1つのUNDOセグメントが割り当てられ、トランザクションが完了するまでは同じUNDOセグメントを使用する。1つのUNDOセグメントは、複数のトランザクションを処理することができるが、1つのUNDOブロックは1つのトランザクションのために使用される。UNDOセグメント内のエクステントは、循環して使用される。最後のエクステントに到達すると、最初のエクステントが使用されていなければそれが上書きされ、使用されていれば新しいエクステントが獲得される。このような循環処理のため、UNDOセグメントは最低でも2つ以上のエクステントで構成される。自動UNDO管理の構成UNDO表領域の作成には2つの方法がある。Managerでは、表領域タイプを「UNDO」として作成する。TABLESPACE文では、次のようにUNDOキーワードを使用して表領域を作成する。100M;UNDO表領域を使用する際は、UNDOデータの管理を自動にし、UNDO表領域をインスタンスにセットするために、次の初期化パラメータを調整する。UNDO_MANAGEMENT=AUTOUNDO_TABLESPACE=undo01さらに、UNDO保存期間(UNDO_RETENTION)を調整する。UNDOデータには、次の3つの状態がある。--・コミットされていないUNDO情報トランザクションが継続している状態。トランザクションが終了するまでは上書きされることはない。・コミットされたUNDO情報UNDO保存期間中の状態。コミット後は上書き可能になるのが通常だが、UNDO保存期間を使用することで、保存期間中は、UNDO表領域が空き不足にならない限り上書きされずに保持される。・期限切れのUNDO情報UNDO保存期間が経過した状態。UNDOセグメント内で上書き可能な状態になっているので、ほかのトランザクションのために使用されることがある。自動拡張が無効なUNDO表領域であれば、別のUNDOセグメントのためにエクステントを解放できる。10gでは、UNDO保存期間は、最長の問い合わせ時間に合わせて自動的に期間が増加されるようになっている。フラッシュバック問い合わせを使用する環境では、手動で調整しておく必要がある。UNDO保存期間中でも、UNDO表領域の領域不足が発生すれば上書きされてしまう可能性がある。トランザクションをエラーにしてでもUNDO保存期間中のデータを維持する必要がある場合は、UNDO保存の保証を検討する。スナップショットが古すぎます。ORA-01555エラーは、UNDOデータに問題がある場合のエラーである。見るべきUNDOデータが上書きされていたりすると発生する。このエラーを回避するには、必要なUNDOデータが上書きされることのないようにする必要がある。・UNDO保存期間トランザクション完了後、UNDOデータを保持しておきたい期間を設定する。UNDO_RETENTION初期化パラメータで設定できる。・UNDO表領域サイズUNDO保存期間中でも、表領域の空き領域(期限切れを含む)が不足しているとUNDOセグメントのUNDOエクステントは上書きされてしまう。そのため、UNDO保存期間を維持できるだけの表領域を準備する。・UNDO保存の保証UNDO保存期間中のエクステントの上書きを禁止することができる。上書きが必要になると該当するトランザクションをエラーにする。UNDO_RETENTION初期化パラメータは、自動UNDO管理において、コミット完了後のUNDO保存期間を設定するパラメータである。指定した期間中、UNDOデータは、UNDO表領域の領域不足にならない限り上書きされずに保持される。