🐥

【Silver DBA】UNDO表領域について

2024/03/15に公開

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