UNDO_RETENTION

摘要:UNDO_RETENTION

UNDO_RETENTION

當Oracle使用者對Oracle資料庫進行新增、修改、刪除等異動類型的操作指令(DML)時,Oracle會先把異動前的樣子保留在還原表格空間(Undo Tablespace)下的還原區段(Undo Segment),這樣的資料我們稱之為還原資訊(Undo Data)。

保留還原資訊(Undo Data)的好處,原本的想法只是方便Oracle使用者做交易的倒回(Transaction Rollback)及達到讀取一致性(Consistent Read)的需求,所以當交易完成時,還原資訊(Undo Data)就可以不需要,還原資訊(Undo Data)所佔用的空間就可以被新的交易覆蓋(重複使用)。然而,為了避免經常性發生ORA-01555: snapshot too old的錯誤及能順利完成Oracle瞬間復原(Flashback)的相關操作,可以藉由設定參數UNDO_RETENTION,讓還原資料在交易結束後能再保留一陣子,雖然這個參數最大值可設定231 – 1(秒),但設定太大,容易造成新的交易可能沒有可重複使用的還原空間而交易失敗,所以就增加還原表格空間(Undo Tablespace)的空間管理工作負載。

Oracle Database 11g開始新增了Oracle Total Recall (又名 Flashback Data Archive),可針對不同表格的業務需求,把該表格每次異動前的還原資訊另外保留在別的表格空間,如此就不需要擔心因為UNDO_RETENTION設定太大,而加還原表格空間(Undo Tablespace)的空間管理工作負載。瞬間復原(Flashback)相關操作所能指定的過去時間點,也能夠拉長。範例如下: