深入淺出Oracle:Redo的作用

來源:互聯網
上載者:User

標籤:style   blog   http   ar   io   使用   sp   for   java   

深入淺出Oracle:Redo的作用

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

    在資料庫中,Redo的功能主要通過3個組件來實現:Redo Log Buffer、LGWR後台進程和Redo Log File(在歸檔模式下,Redo Log File最終會寫出為歸檔記錄檔)。

    在Oracle的SGA中,存在一塊共用記憶體,稱為Redo Log Buffer,6-1所示。


圖6-1  Oracle Instance

    Redo Log Buffer位於SGA之中,是一塊迴圈使用的記憶體地區,其中儲存資料庫變更的相關資訊。這些資訊以重做條目(Redo Entries)形式儲存(Redo Entries也經常被稱為Redo Records)。Redo Entries包含重構、重做資料庫變更的重要訊息,這些變更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。在必要的時候Redo Entries被用於資料庫恢複。

    Redo Entries的內容被Oracle資料庫進程從使用者的記憶體空間複製到SGA中的Redo Log Buffer之中。Redo Entries在記憶體中佔用連續的順序空間,由於Redo Log Buffer是迴圈使用的,Oracle通過一個後台進程LGWR不斷地把Redo Log Buffer的內容寫出到Redo Log File中。     

    當使用者在Buffer Cache中修改資料時,Oracle並不會立即將修改資料寫出到資料檔案上,因為那樣做效率會很低,到目前為止,電腦系統中最繁忙的部分是磁碟的I/O操作,Oracle這樣做的目的是為了減少IO的次數,當修改過的資料達到一定數量之後,可以進行高效地批量寫出。

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

    同Redo Log Buffer類似,Redo Log File也是迴圈使用的,Oracle允許使用最少兩個日誌組。預設情況下,資料庫建立時會建立3個日誌組。

    SQL> 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)來縮減恢復。回顧一下第1章中所提到的內容:檢查點只是一個資料庫事件,它存在的根本意義在於減少恢復。

    當檢查點發生時(此時的SCN被稱為Checkpoint SCN)Oracle會通知DBWR進程,把修改過的資料,也就是此Checkpoint SCN之前的髒資料(Dirty Buffer)從Buffer Cache寫入磁碟,在檢查點完成後CKPT進程會相應地更新控制檔案和資料檔案頭,記錄檢查點資訊,標識變更。

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

深入淺出Oracle:Redo的作用

聯繫我們

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