Oracle Undo Redo的使用心得

來源:互聯網
上載者:User

什麼是REDO  REDO記錄transaction logs,分為online和archived。以恢複為目的。

比如,機器停電,那麼在重起之後需要online redo logs去恢複系統到失敗點。

比如,磁碟壞了,需要用archived redo logs和online redo logs區恢複資料。

比如,truncate一個表或其他的操作,想恢複到之前的狀態,同樣也需要。

什麼是UNDO

REDO是為了重新實現你的操作,而UNDO相反,是為了撤銷你做的操作,比如你得一個TRANSACTION執行失敗了或你自己後悔了,則需要用 ROLLBACK命令回退到操作之前。復原是在邏輯層面實現而不是物理層面,因為在一個多使用者系統中,資料結構,blocks等都在時時變化,比如我們 INSERT一個資料,表的空間不夠,擴充了一個新的EXTENT,我們的資料儲存在這新的EXTENT裡,其它使用者隨後也在這EXTENT裡插入了資料,而此時我想ROLLBACK,那麼顯然物理上講這EXTENT撤銷是不可能的,因為這麼做會影響其他使用者的操作。所以,ROLLBACK是邏輯上復原,比如對INSERT來說,那麼ROLLBACK就是DELETE了。

COMMIT 以前,常想當然地認為,一個大的TRANSACTION(比如大批量地INSERT資料)的COMMIT會花費時間比短的TRANSACTION長。而事實上是沒有什麼區別的,

因為ORACLE在COMMIT之前已經把該寫的東西寫到DISK中了,

我們COMMIT只是

1,產生一個SCN給我們TRANSACTION,SCN簡單理解就是給TRANSACTION排隊,以便恢複和保持一致性。

2,REDO寫REDO到DISK中(LGWR,這就是log file sync),記錄SCN在ONLINE REDO LOG,當這一步發生時,我們可以說事實上已經提交了,這個TRANSACTION已經結束(在V$TRANSACTION裡消失了)

3,SESSION所擁有的LOCK(V$LOCK)被釋放。

4,Block Cleanout(這個問題是產生ORA-01555: snapshot too old的根本原因) ROLLBACKROLLBACK和COMMIT正好相反,ROLLBACK的時間和TRANSACTION的大小有直接關係。因為ROLLBACK必須物理上恢複資料。COMMIT之所以快,是因為ORACLE在COMMIT之前已經作了很多工作(產生UNDO,修改BLOCK,REDO,LATCH分配),ROLLBACK慢也是基於相同的原因。

1. UNDO資料表空間用於存放UNDO資料。當執行DML操作時,Oracle會將這些操作的舊資料寫入UNDO段。管理UNDO資料不僅可以使用復原段,還可以使用UNDO資料表空間。

2. UNDO資料的作用:當使用者執行DML操作修改資料時,UNDO資料被存放在UNDO段,而新資料則被存放到資料區段中,如果事務操作存在問題,就需要回退事務,以取消事物變化。

例如:執行完UPDATE emp SET sal=1000 WHERE empno=7788後,發現應該修改僱員7963的工資,而不是7788.此時應該執行ROLLBACK語句。

3.讀一致性

使用者檢索資料時,ORACLE總是使使用者只能看到被提交過的資料,這是由Oracle自動提供的。當使用者修改資料,但是沒有提交時,另外一個使用者使用select語句尋找該值時,該值就是從undo資料表空間中取得的。

4.事務恢複

事務恢複是常式恢複的一部分,它是由Oracle Server自動完成的。如果在資料庫運行過程中出線曆程失敗,那麼當啟動OracleServer時,後台進程SMON會自動執行常式恢複。執行常式恢複時,Oracle會重做所有未應用的記錄。然後開啟資料庫,回退未提交事務。

5.倒敘查詢

倒敘查詢用於取得某一特定時間點的資料庫資料。

6.UNDO_MANAGEMENT

使用初始化參數用於指定UNDO資料的管理方式。如果使用自動管理員模式,必須設定該參數為AUTO,此時採用UNDO資料表空間管理UNDO資料;如果使用手工管理員模式,必須設定該值為MANUAl,此時採用復原段管理UNDO資料。

7.UNDO_TABLESPACE

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

使用RAC結構時,必須為每個常式配置一個獨立的UNDO資料表空間。

8.UNDO_RETENTION

該參數用於控制UNDO資料的最大保留時間,其預設值為900秒,該值時倒敘查詢可以查看到的最早時間點。

9.UNDO資料表空間上不能建立任何資料對象。

作者:51cto Oracle小混子

查看本欄目更多精彩內容: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.