瞭解ORACLE UNDO及其真實使用率

來源:互聯網
上載者:User

標籤:style   blog   color   io   使用   strong   ar   檔案   資料   

首先瞭解什麼是UNDO,可以說UNDO是ORACLE中一個非常實用的功能

UNDO資料也稱為復原(ROLLBACK)資料,它用於確保資料的一致性.當執行DML操作時,事務操作前的資料被稱為UNDO記錄.UNDO段用於儲存事務所修改資料的舊值,其中儲存著被修改資料區塊的位置以及修改前資料

 

UNDO資料的作用:

1.回退事務

當執行DML操作修改資料時,UNDO資料被存放到UNDO段,而新資料則被存放到資料區段中,如果事務操作存在問題,舊需要回退事務,以取消事務變化.假定使用者A執行了語句UPDATE emp SET sal=1000 WHERE empno=7788後發現,應該修改僱員7963的工資,而不是僱員7788的工資,那麼通過執行ROLLBACK語句可以取消事務變化.當執行ROLLBACK命令時,oracle會將UNDO段的UNDO資料800寫回的資料區段中.

2.讀一致性

使用者檢索資料庫資料時,oracle總是使用使用者只能看到被提交過的資料(讀取提交)或特定時間點的資料(SELECT語句時間點).這樣可以確保資料的一致性.例如,當使用者A執行語句UPDATE emp SET sal=1000 WHERE empno=7788時,UNDO記錄會被存放到復原段中,而新資料則會存放到EMP段中;假定此時該資料尚未提交,並且使用者B執行SELECT sal FROM emp WHERE empno=7788,此時使用者B將取得UNDO資料800,而該資料正是在UNDO記錄中取得的.

3.事務恢複

事務恢複是常式恢複的一部分,它是由oracle server自動完成的.如果在資料庫運行過程中出現常式失敗(如斷電,記憶體故障,後台進程故障等),那麼當重啟oracle server時,後台進程SMON會自動執行常式恢複,執行常式恢複時,oracl會重新做所有未應用的記錄.回退未提交事務.

4.倒敘查詢(FlashBack Query)

倒敘查詢用於取得特定時間點的資料庫資料,它是9i新增加的特性,假定目前時間為上午11:00,某使用者在上午10:00執行UPDATE emp SET sal=3500 WHERE empno=7788語句,修改並提交了事務(僱員原工資為3000),為了取得10:00之前的僱員工資,使用者可以使用倒敘查詢特徵.

使用UNDO參數

1.UNDO_MANAGEMENT

該初始化參數用於指定UNDO資料的管理方式.如果要使用自動管理員模式,必須設定該參數為AUTO,如果使用手工管理員模式,必須設定該參數為MANUAL,使用自動管理員模式時,oracle會使用undo資料表空間管理undo管理,使用手工管理員模式時,oracle會使用復原段管理undo資料,需要注意,使用自動管理員模式時,如果沒有配置初始化參數UNDO_TABLESPACE,oracle會自動選擇第一個可用的UNDO資料表空間存放UNDO資料,如果沒有可用的UNDO資料表空間,oracle會使用SYSTEM復原段存放UNDO記錄,並在ALTER檔案中記載警告.

2.UNDO_TABLESPACE

該初始化參數用於指定常式所要使用的UNDO資料表空間,使用自動UNDO管理員模式時,通過配置該參數可以指定常式所要使用的UNDO資料表空間.

在RAC(Real Application Cluster)結構中,因為一個UNDO資料表空間不能由多個常式同時使用,所有必須為每個常式配置一個獨立的UNDO資料表空間.

3.UNDO_RETENTION

該初始化參數用於控制UNDO資料的最大保留時間,其預設值為900秒,從9i開始,通過配置該初始化參數,可以指定undo資料的保留時間,從而確定倒敘查詢特徵(Flashback Query)可以查看到的最早時間點.

 

 

UNDO的真實使用

之前看有人說是用dba_free_space來看UNDO剩餘空間,其實是有些出入的,真實的UNDO使用方式使用的是DBA_UNDO_EXTENTS視圖

那麼分享一個查看錶空間剩餘空間的指令碼

select tablespace_name, sum(free_mb) + sum(expired_mb) free_mbfrom (select tablespace_name,round(sum(nvl(bytes, 0)) / 1024 / 1024, 2) free_mb,0 expired_mbfrom dba_free_spacegroup by tablespace_nameunion allselect tablespace_name,0 free_mb,round(sum(nvl(bytes, 0)) / 1024 / 1024, 2) expired_mbfrom dba_undo_extents dwhere tablespace_name =(select value from v$parameter where name = ‘undo_tablespace‘)and status = ‘EXPIRED‘group by tablespace_name)group by tablespace_name;

 

瞭解ORACLE UNDO及其真實使用率

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.