Oracle的Redo的作用及原理

2022-04-08 04:06:03 字數 2136 閱讀 2831

oracle的redo的作用及原理

redo的作用:

oracle通過redo來保證資料庫的事務可以被重演,從而使得在故障之後,資料可以被恢復。redo對於oracle資料庫來說至關重要。

在資料庫中,redo的功能主要通過3個元件來實現:redo log buffer、lgwr後台程序和redo log file(在歸檔模式下,redo log file最終會經由arcn程序寫出為歸檔日誌檔案)。

www.2cto.com  

redo log buffer位於sga之中,是一塊迴圈使用的記憶體區域,其儲存資料庫變更的相關資訊。這些資訊以重做條目(redo entries)形式儲存(redo entries也經常稱為redo records)。redo entries包含重構、重做資料庫變更的重要資訊,這些變更包括insert、update、delete、create、alter或者drop等。

redo entries的內容被oracle資料庫程序從使用者的記憶體空間(pga)複製到sga中的redo log buffer之中。redo entries在記憶體中占用連續的順序空間,由於redo log buffer是迴圈使用的,oracle通過乙個後台程序lgwr不斷把redo log buffer的內容寫出到redo log file中,redo log file同樣是迴圈使用的。

sql**  

select * from v$log;  

select * from v$backup_redolog;  

redo的原理:  www.2cto.com  

我們知道,使用者資料通常在buffer cache中修改,oracle通過快取記憶體來提高資料操作的效能。當使用者在buffer cache中修改資料時,oracle並不會立即將變更資料寫出到資料檔案上,因為獨立的離散寫出效率會很低。到目前為止,計算機系統中最容易出現瓶頸的仍然是磁碟的i/o操作,oracle這樣做的目的是為了減少io的壓力,當修改過的資料達到一定數量之後,可以進行高效地批量寫出。

大部分傳統資料庫(當然包括oracle)在處理資料修改時都遵循no-force-at-commit策略。也就是說,在提交時並不強制寫。那麼為了保證資料在資料庫發生故障時(例如:斷電)可以恢復,oracle引入了redo機制,通過連續的、順序的日誌條目的寫出將隨機的、分散的資料塊的寫出推延。這個推延使得資料的寫出可以獲得批量效應等效能提公升。

同redo log buffer類似,redo log file也是迴圈使用的,oracle允許使用最少兩個日誌組。預設的,資料庫建立時會建立3個日誌組。

sys@nei> select group#,members,status from v$log;

group#    members status

---------- ---------- ----------------

1          1 inactive

2          1 current

3          1 inactive

當乙個日誌檔案寫滿之後,會切換到另外乙個日誌檔案,這個切換過程稱為log switch。log switch會觸發乙個檢查點,促使dbwr程序將寫滿的日誌檔案保護的變更資料寫回資料庫。在檢查點完成之前,日誌檔案是不能被重用的。

由於redo機制對於資料的保護,當資料庫發生故障時,oracle就可以通過redo重演進行資料恢復。那麼乙個非常重要的問題是,恢復應該從何開始呢?如果讀取的redo過多,那麼必然導致恢復的時間過長,在生產環境中,我們必須保證恢復時間盡量的短。

oracle通過檢查點(checkpoint)來縮減恢復時間。檢查點只是乙個資料庫事件,它存在的根本意義在於減少恢復時間。

www.2cto.com  

當檢查點發生時(此時的scn被稱為checkpoint scn)oracle會通知dbwr程序,把修改過的資料,也就是此checkpoint scn之前的髒資料(dirty duffer)從buffer cache寫入磁碟,在檢查點完成後ckpt程序會相應地更新控制檔案和資料檔案頭,記錄檢查點資訊,標識變更。

在檢查點完成之後,此檢查點之前修改過的資料都已經寫回磁碟,重做日誌檔案中的相應重做記錄對於崩潰/例項恢復不再有用。如果此後資料庫崩潰,那麼恢復只需要從最後一次完成的檢查點開始恢復即可。如果資料庫執行在歸檔模式(所有生產資料庫,都建議執行在歸檔模式),日誌檔案在重用之前必須寫出到歸檔日誌檔案,歸檔日誌在介質恢復時可以用來恢復資料庫故障。 

Oracle中redo與undo的作用對比講解

一.什麼是redo 用於重做資料 redo也就是重做日誌檔案 redo log file oracle維護著兩類重做日誌檔案 online 重做日誌檔案和歸檔 archived 重做日誌檔案。這兩類重做日誌檔案都用於恢復 其主要目的是,萬一例項失敗或介質失敗,它們能夠恢復資料。由於資料庫緩衝,對磁碟...

Oracle的redo 和undo的區別

redo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新...

檢視Oracle的redo日誌切換頻率

兩個sql,原理是一樣的,第二個用到了統計函式。時間單位 分鐘 select from v log where a.thread 1 select b.sequence b.first time,a.sequence a.first time,round a.first time b.first t...