複製鏈接
請複製以下鏈接發送給好友

undo

(ORACLE數據信息)

鎖定
撤銷(Undo)數據是反轉DML語句結果所需的信息。撤銷數據通常被稱為“回滾數據”,在過去的Oracle版本中,“回滾數據”和“撤銷數據”可以交替使用,但從 9i版本開始,這兩個術語有所不同:功能相同,但管理方式不同。只要某個事務修改了數據,那麼更新前的原有數據就會被寫入一個回滾段或撤銷段。回滾段在 11g版本中依然存在,但從9i版本開始,Oracle數據庫引入了可供選擇的撤銷段。Oracle強烈建議所有數據庫都應當使用撤銷段,回滾段只被保留用於向後兼容 [1] 
中文名
撤銷
外文名
undo
功    能
回滾數據
釋    義
ORACLE數據信息

undoUndo數據

如果數據庫已被轉換使用撤銷段,並且自動進行撤銷管理,那麼任何現有的回滾段都必須處於脱機模式中,而且不能被設置為聯機。根據 UNDO_MANAGEMENT參數的不同設置,Oracle數據庫要麼使用撤銷段,要麼使用回滾段。

undoUndo表空間

一個數據庫可以存在多個撤銷表空間,但是在任意給定時刻都只能使用一個撤銷表空間。撤銷表空間必須被創建為持久的、本地管理的並且能夠自動擴展分配空間的表空間。

undo事務與Undo段

在某個事務啓動時,Oracle會為其指派一個撤銷段。任何一個事務都只能受一個撤銷段保護,一個事務生成的撤銷數據無法被分配到多個撤銷段中。
在某個事務更新表和索引數據塊時,回滾該變化所需的信息會被寫入指定撤銷表空間的數據塊。撤銷數據在提交後過期的事實意味着可以採用循環方式使用撤銷段。如果使用原有的、人工管理的回滾段,那麼調整的重要環節是控制具體事務分別受哪些回滾段保護。

undo管理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會在這個表空間內創建一個撤銷段池。
參考資料