undo[ORACLE數據信息]

undo[ORACLE數據信息]

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

基本信息

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會在這個表空間內創建一個撤銷段池。

相關詞條

相關搜尋

熱門詞條

聯絡我們