①UNDO管理
・セグメント
UNDOデータはUNDOセグメントに格納される。
通常セグメントはユーザにより作成されるが、UNDOセグメントはOracleが自動作成する。
・管理
UNDOデータの管理は自動UNDO管理を利用する(できる)
UNDO表領域を用意して、使用するUNDO表領域を設定するだけで自動でUNDOセグメントが利用できる。
セグメント数、サイズ、エクステント管理
旧:ロールバックセグメントを作成し、オンライン化する。
CREATE UNDO TABLESPACE 表領域名
DATAFILE 'データファイル名'
AUTOEXTEND ON [NEXT SIZE]
MAXSIZE UNLIMITE| 最大サイズ
自動UNDOの設定
※以下の初期化パラメータを設定
・UNDO_MANAGEMENT = AUTO|MANUAL(最低これだけはやる)
・UNDO_TABLESPACE = インスタンスでアクティブにするUNDO表領域
※インスタンスでアクティブに出来るUNDO表領域はひとつだけ
UNDO表領域は複数作成できるがオンライン化できるのは一つのみ!!
②UNDOの保存
UNDOはトランザクションのロールバック、フラッシュバック問い合わせに使用される。
UNDOデータは、COMMITされるまでは上書きされない。
その後は【UNDO保存期間】を設け、出来るだけ上書きしないようにする。
【UNDO保存期間】
初期化パラメータ:UNDO_RETENTION = 900秒(15分)
※フラッシュバック問い合わせや、読み取り一貫性を考慮して決めること。
自動UNDO保存チューニングで調整される。UNDO_RETENTIONが小さすぎる場合は適切な値に
調整される。
UNDO表領域が十分ではない場合、UNDO_RETENTION内でも上書きされる可能性はある。
【UNDO保存保障】
UNDO保存期間中の上書き防止機能
※トランザクションが停止されるので要注意!!
alter tablespace 表領域名 retention guarantee;
確認)
select TABLESPACE_NAME,RETENTION from dba_tablespaces;
TABLESPACE_NAME RETENTION
---------------- ---------------- ----------------
UNDOTBS1 NOGUARANTEE
③できないこと
・アクティブなトランザクションがある場合は、UNDO表領域は削除できない。
・UNDO_TABLESPACEパラメータに存在しない表領域を指定すると起動時にエラーとなる。
・変更方法
alter system set undo_tablespace='' scope=memory;
※NULLに設定でSYSTEM表領域に割り当てはできる。
但し、SYSTEM関連(表領域内のデータ)のUNDOであれば利用されるが、その他ユーザのトランザクション
には利用できないためエラーとなる。
・CREATE Table句でTableSpaceをUNDOを使用できない。
・現行インスタンスでアクティブになっているUNDO表領域の確認
v$parameter