Oracle redo與undo


https://www.cnblogs.com/yhq1314/p/10180158.html

https://blog.csdn.net/indexman/article/details/7747720

 1 redo

   重做日志文件redo log,是數據庫的事務日志,oracle維護着2類重做日志,在線重做日志文件和歸檔重做日志文件,歸檔日志文件就是重做日志的副本,系統將日志文件填滿時arch進程會在另一個位置建立一個在線重做日志的副本

   每個oracle數據庫至少有2個重做日志組,以便切換日志,每個日志組至少有1個日志組成員,這些在線重做日志文件是以循環寫的方式使用,

2 undo

 你對數據庫執行修改時,數據庫會生成undo信息,以便回滾到更改前的狀態,undo用於取消一條語句或一組語句的作用,undo在數據庫內部存放在一組特殊的段中,

為undo段(回滾段 rollback segment),利用undo,數據庫只是邏輯的恢復到原來的樣子,所有修改都邏輯的取消,但是數據結構以及數據塊本身在回滾后可能不大相同,

 對於undo生成對於直接路徑操作不適用,直接路徑操作能夠繞過表上的undo生成。

什么是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的根本原因) ROLLBACK ROLLBACK和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自動完成的。如果在數據庫運行過程中出線例程失敗,那么當啟動Oracle Server時,后台進程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表空間上不能建立任何數據對象。

 

一.undo中數據的特點:
1。是數據修改前的備份,主要是保證用戶的讀一致性
2. 在事務修改數據時產生
3。至少保存到事務結束

二。undo數據的作用:
1.回滾(rollback)操作
2.實現讀一致性與閃回查詢
3.從失敗的事務中還原數據
4. 非正常停機后的實例恢復

三.undo回滾段的特點:
1.回滾段是由實例自動創建用於支持事務運行的專用段,同樣是區和塊組成,回滾頂會按實際需要自動進行增長或收縮,是一段可以給指定事務循環使用的存儲緩沖區。
2.每個事務只會使用一個回滾段,一個回滾段在同一時刻可能會服務於多個事務
3.當一個事務開始的時候,會指定一個回滾段,在事務進行的過程中,當數據被修改時,原始的數據會被復制到回滾段。
4。在回滾段中,事務會不斷填充盤區,直到事務結束或所有的空間被用完,如果當前的盤區不夠用,事務會在段中請求擴展下一個盤區,如果所有已分配的盤區都被用完,事務會覆蓋最初的盤區或者在回滾段允許的情況下擴展新的盤區來使用.
5。回滾段存在於undo表空間中,在數據庫中可以存在多個undo表空間,但同一時刻只能使用一個undo表空間。

四.回滾段中的數據類型:
回滾段中的數據主要分為以下三種:
1.Uncommitted undo information; 未提交的回滾數據,該數據所關聯的事務並未提交,用於實現讀一致性,所以該數據不能被其它事務的數據所覆蓋
2.Committed undo information;已經提交但未過期的回滾數據,該數據關聯的事務已經提交,但是仍受到undo retention參數保持時間的影響
3.Expired undo information;事務已經提交,而且數據保存時間已經超過undo retention參數指定的時間,屬於已經過期的數據
當回滾段滿了后,會優先覆蓋Expired undo information,當過期數據空間用完后,會再覆蓋Committed undo information的區域,這時undo retention參數所規定的保持時間會被破壞,Uncommitted undo information的數據是不允許覆蓋的,如果要求提交的數據在undo retention參數規定的時間內不會被覆蓋,可以在undo表空間上指定RETENTION GUARANTEE,語法如下:
ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;

五。undo數據與redo數據的區別:
1.undo記錄數據修改之前的操作,redo記錄磁盤數據將要進行的操作.
2.undo用於數據的回滾操作,和實現一致性讀,redo用於前滾數據庫操作
3.undo存儲在回滾段里,redo存儲在重做日志文件里
4.undo用於在多用戶並發的系統里保證一致性讀,redo用於防止數據丟失

六.與undo有關的相關參數
undo_management = auto 自動的undo表空間管理
undo_tablespace = undotbs1 設置undo表空間的名稱,可以存在多個undo表空間,但同時只能使用一個
undo_retention = 900(秒) 設置快照保存的最少時間,設置后在此時間段內仍有可能會被覆蓋
ALTER TABLESPACE UNDO_TS RETENTION GUARANTEE; 強制所有快照必須保存 undo_retention所規定的時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM