Oracle的復原和撤銷概述

來源:互聯網
上載者:User

一、復原(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/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.