【Silver DBA】UNDO表領域について
UNDOの保存期間
UNDOはトランザクション実行ごとに生成されるが、
UNDO表領域のサイズに上限があるため、UNDOデータは上書きされていく。
UNDO_RETENTION初期化パラメータ
UNDO保存期間(秒)を設定できる。
トランザクション終了後、UNDO保存期間を経過していないUNDOデータの上書きを防ぐ。
*完全に抑止することは不可。
UNDO保存期間の保証
ALTER TABLESPACE <UNDO表領域名> RETENTION [NO]GUARANTEE;
上記コマンドを実行することで、UNDO保存期間のUNDOデータの保護を保証できる。
その代わり、トランザクション実行の失敗につながり得るので注意。
一時UNDO
一時UNDO機能
一時表に格納したデータを変更したとき、のUNDOデータの出力先を一時表領域に変更できるので、
REDOの生成を完全に抑止することができる。
[一時UNDOを利用した場合]
一時セグメントの作成場所は 一時表領域
一時セグメントを変更した際のUNDOデータの格納先は 一時表領域のUNDOセグメント
UNDOセグメント変更によりREDOデータは生成されない
[一時UNDOを利用しない場合]
一時セグメントの作成場所は 一時表領域
一時セグメントを変更した際のUNDOデータの格納先は UNDO表領域のUNDOセグメント
UNDOセグメント変更によりREDOデータは生成される
一時UNDOを有効にすることで
・REDOの生成を抑制でき、パフォーマンス向上に寄与
・UNDO表領域へUNDOデータを生成しないので、他の変更が生成したUNDOデータを長期保管できる
・読み取り専用でOPENになっているデータベースで一時表を利用できる。
読み取り専用でOPENになっているデータベースでは一般にREDOを生成する処理ができない。
一時UNDOの有効化
TEMP_UNDO_ENABLE初期化パラメータ
をTRUEに設定する。
セッションレベル、データベースレベルで設定が可能。
// セッションレベル
ALTER SESSION SET TEMP_UNDO_ENABLE=TRUE;
// データベース全体
ALTER SYSTEM SET TEMP_UNDO_ENABLE=TRUE;
Discussion