一、復原(ROLLBACK)和撤銷(UNDO)
復原和前滾是保證Oracle資料庫中的資料處於一致性狀態的重要手段。
在9i版本以前
Oracle使用資料庫中的復原段來實現未提交資料或因系統故障導致執行個體崩潰時進行復原操作
每一個資料表空間需要建立復原段,各個資料表空間對復原段實現各自的管理
在9i及後續版本
提供了一種新的復原資料的管理方式,即使用Oracle自動管理的撤銷(Undo)資料表空間
自動撤銷管理資料表空間統一管理所有DML的復原操作,簡化了對於復原工作的管理
在i,10g中的復原段僅僅用作保留向後相容
撤銷段代替了原有版本中的復原段,因此本文所有描述均使用撤銷
撤銷的實質意味著將所作的修改退回到修改前的狀態,即倒退所有DML語句
二、撤銷段中的內容及相關特性
對於任何DML操作而言,必須同時處理資料區塊和撤銷塊,並且還會產生重做資訊
在ACID中,A、C、I要求產生撤銷,D則要求產生重做
INSERT:
撤銷段記錄插入記錄的rowid,如果需要撤銷,則根據rowid將該記錄刪除即可
UPDATE:
撤銷段記錄被更新欄位的原始值,撤銷時將原始值覆蓋新值即可
DELETE:
撤銷段記錄整行的資料,撤銷時執行反向操作將該記錄插入原表
由上可知,UNDO段中的內容總結如下:
資料為修改之前的副本
從每個改變資料的事務中獲得
在事務結束前一直被保留
UNDO段中資料的作用:
用於復原操作
讀一致性和閃回查詢
用於事務失敗時的恢複
UNDO段與事務:
一個事物的啟動,Oracle將為其分配僅僅一個UNDO段,若該段用完,則Oracle會自動為該UNDO段添加另一個區間(extent)
一個UNDO段能夠同時為多個事務服務
UNDO段與UNDO資料表空間:
UNDO段中的內容儲存在UNDO資料表空間
任意給定時刻只能使用一個UDNO資料表空間
UNDO資料表空間必須被建立為持久的、本地管理、可自動擴充的資料表空間
正在使用的UNDO資料表空間不能撤銷或刪除
UNDO資料表空間使用迴圈寫的方式,與聯機記錄檔寫相似,不同的是UNDO中可以設定了undo_retention 保留時間
UNDO段的兩種管理方式:
AUTO 自動管理(推薦)
MANUAL 手動管理(僅保留)
三、與撤銷相關的幾個參數
--查看本機中Oracle的版本
SQL> SELECT * FROM v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
--查看和UNDO相關的參數
SQL> SHOW PARAMETER undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string MANUAL
undo_retention integer 900
undo_tablespace string UNDOTBS1
undo_management:
設定資料庫的撤銷段是否使用自動管理員模式,值可以為auto或manual,當為manual時將不使用撤銷段,即不使用自動管理員模式
該參數為靜態參數,修改後需重啟執行個體才會生效
undo_retention:
指定撤銷段資料在undo段中為非使用中後被覆蓋前保留的時間,單位為秒。在undo_management位auto時生效,為動態參數
undo_tablespace:
指定使用哪個資料表空間來實現資料的撤銷,在undo_management位auto時生效,為動態參數
retention guarantee子句:
保證撤銷保留,使用下面的操作來實現
ALTER TABLESPACE undo_tablespace_name RETENTION GUARANTEE;
--下面的查詢中是當undo_management為manual時的結果集,可以看出撤銷資料表空間的撤銷段都處於offline狀態
SQL> SELECT segment_name,tablespace_name,status FROM dba_rollback_segs;
SEGMENT_NAME TABLESPACE_NAME STATUS
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/