Undo數據
如果資料庫已被轉換使用撤銷段,並且自動進行撤銷管理,那么任何現有的回滾段都必須處於脫機模式中,而且不能被設定為在線上。根據 UNDO_MANAGEMENT參數的不同設定,Oracle資料庫要么使用撤銷段,要么使用回滾段。
Undo表空間
一個資料庫可以存在多個撤銷表空間,但是在任意給定時刻都只能使用一個撤銷表空間。撤銷表空間必須被創建為持久的、本地管理的並且能夠自動擴展分配空間的表空間。
事務與Undo段
在某個事務啟動時,Oracle會為其指派一個撤銷段。任何一個事務都只能受一個撤銷段保護,一個事務生成的撤銷數據無法被分配到多個撤銷段中。
在某個事務更新表和索引數據塊時,回滾該變化所需的信息會被寫入指定撤銷表空間的數據塊。撤銷數據在提交後過期的事實意味著可以採用循環方式使用撤銷段。如果使用原有的、人工管理的回滾段,那么調整的重要環節是控制具體事務分別受哪些回滾段保護。
管理Undo
1.與Undo相關的錯誤條件
管理撤銷的原則十分簡單:首先,應當始終存在允許所有事務繼續進行的足夠撤銷空間;其次,應當始終存在保證查詢成功的足夠撤銷數據。如果某個事務耗盡了撤銷空間,那么這個事務就會由於Oracle錯誤“ORA-30036 unable to extend segment in undo tablespace(無法擴展撤銷表空間內的撤銷段)”而失敗。
2.用於Undo管理與Undo保留保證的參數
下面3個初始化參數可以控制撤銷:
UNDO_MANAGEMENT:默認為manual,就是不會使用撤銷段。默認設定是為了實現向後兼容性,最後不要使用默認。建議設定為 AUTO,啟用使用撤銷段的自動撤銷管理。參數是靜態的。
UNDO_TABLESPACE:如果使用了“UNDO_MANAGEMENT=AUTO”,就一定要指定該參數。該參數指定了一個作為有效撤銷表空間的表空間,並且該表空間必須已被創建為一個撤銷表空間,同時其內部的所有撤銷段都會被自動在線上。
UNDO_RETENTION:可選,以秒為單位進行設定的參數。指定了保留過期撤銷數據的目標位置。如果配置了保證撤銷保留,那么該參數就不是可選的。針對撤銷的默認模式是:對於事務與查詢來說,Oracle更傾向於維護事務。10G版本中存在保證撤銷保留的選項,意味著經過 UNDO_RETENTION參數所指定的時間之前,撤銷數據決不會被重寫。
3.調整與監視Undo表空間
撤銷表空間應當足夠大,算法的話,首先計算在最高工作負荷時生成撤銷的速度,然後再乘以耗時最長的查詢的時間長度。
4.刪除與縮小Undo表空間
創建一個撤銷表空間時,Oracle會在這個表空間內創建一個撤銷段池。