什么是重做日志?


恢復操作的最關鍵結構是重做日志,它由兩個或多個預先分配的文件組成,這些文件存儲數據庫發生的所有更改。 Oracle數據庫的每個實例都有一個關聯的重做日志,用於在發生實例故障時保護數據庫。

重做的線程

在多個數據庫實例的環境中講話時,每個數據庫實例的重做日志也稱為重做線程。在典型的配置中,只有一個數據庫實例訪問Oracle數據庫,因此只有一個線程存在。但是,在Oracle Real Application Clusters環境中,兩個或更多實例同時訪問單個數據庫,並且每個實例都有自己的重做線程。每個實例都有一個單獨的重做線程,可以避免爭用一組重做日志文件,從而消除潛在的性能瓶頸。

本章介紹如何配置和管理標准單實例Oracle數據庫上的重做日志。在所有討論和語句示例中,線程數可以假定為1。有關Oracle Real Application Clusters環境中的重做日志組的信息,請參閱Oracle Real Application Clusters管理和部署指南。

重做日志內容

重做日志文件充滿重做記錄。重做記錄也稱為重做條目,由一組變化向量組成,每個變化向量描述對數據庫中的單個塊所做的更改。例如,如果更改員工表中的工資值,則會生成包含更改向量的重做記錄,這些更改向量描述對表的數據段塊,撤消段數據塊以及撤消段的事務處理表的更改。

重做條目記錄可用於重建對數據庫所做的所有更改(包括還原段)的數據。因此,重做日志還保護回滾數據。當您使用重做數據恢復數據庫時,數據庫將讀取重做記錄中的更改向量並將更改應用到相關塊。

重做記錄以循環方式緩存在SGA的重做日志緩沖區中(請參閱“Oracle數據庫如何寫入重做日志”),並由日志編寫器(LGWR)數據庫后台進程寫入其中一個重做日志文件。無論何時提交事務,LGWR都會將事務重做記錄從SGA的重做日志緩沖區寫入重做日志文件,並為每個已提交事務分配一個系統更改編號(SCN)以標識重做記錄。只有在聯機日志中與給定事務關聯的所有重做記錄安全地位於磁盤上時,用戶進程才會通知事務已提交。

在提交相應的事務之前,重做記錄也可以寫入重做日志文件。如果重做日志緩沖區填滿或其他事務提交,則LGWR會將重做日志緩沖區中的所有重做日志條目刷新到重做日志文件,即使某些重做記錄可能未提交。如有必要,數據庫可以回滾這些更改。

Oracle數據庫如何寫入重做日志

數據庫的重做日志由兩個或更多重做日志文件組成。數據庫至少需要兩個文件才能保證一個文件可以隨時寫入而另一個正在歸檔(如果數據庫處於ARCHIVELOG模式)。有關更多信息,請參閱“管理已歸檔的重做日志”。

LGWR以循環方式寫入重做日志文件。當前重做日志文件填滿后,LGWR開始寫入下一個可用的重做日志文件。當最后一個可用的重做日志文件被填充時,LGWR返回到第一個重做日志文件並寫入它,再次啟動周期。圖12-1顯示了重做日志文件的循環寫入。每行旁邊的數字表示LGWR寫入每個重做日志文件的順序。

根據是否啟用歸檔,填充的重做日志文件可供LGWR重復使用。

  • 如果禁用了存檔(數據庫處於NOARCHIVELOG模式),則寫滿的重做日志文件在其中記錄的更改已寫入數據文件后可用。
  • 如果存檔已啟用(數據庫處於ARCHIVELOG模式),則在LGWR中記錄的更改已寫入數據文件並且文件已存檔后,可以使用寫滿的重做日志文件。

Figure 12-1 Reuse of Redo Log Files by LGWR

活動(當前)和非活動重做日志文件

Oracle數據庫一次僅使用一個重做日志文件來存儲從重做日志緩沖區寫入的重做記錄。 LGWR正在積極寫入的重做日志文件稱為當前重做日志文件。

實例恢復所需的重做日志文件稱為活動重做日志文件。實例恢復不再需要的重做日志文件稱為非活動重做日志文件。

如果已啟用存檔(數據庫處於ARCHIVELOG模式),則數據庫無法重新使用或覆蓋活動的聯機日志文件,直到其中一個歸檔后台進程(ARCn)歸檔其內容。如果禁用了存檔(數據庫處於NOARCHIVELOG模式),那么當最后一個重做日志文件已滿時,LGWR將繼續在序列中的下一個日志文件變為非活動狀態時覆蓋該日志文件。

日志切換和日志序列號

日志切換是數據庫停止寫入到一個重做日志文件並開始寫入另一個日志文件的位置。通常,當當前重做日志文件被完全填滿並且寫入必須繼續到下一個重做日志文件時,會發生日志切換。但是,無論當前重做日志文件是否完全填滿,您都可以將日志切換配置為定期執行。您也可以手動強制日志切換。

每次發生日志切換時,Oracle數據庫都會為每個重做日志文件分配一個新的日志序列號,並且LGWR開始寫入日志序列號。當數據庫歸檔重做日志文件時,歸檔日志保留其日志序列號。重新使用的重做日志文件是下一個可用的日志序列號。

每個聯機或歸檔重做日志文件都由其日志序列號唯一標識。在崩潰,實例或介質恢復期間,數據庫通過使用必需的歸檔日志文件和重做日志文件的日志序列號,按升序正確應用重做日志文件。

 

參考資料

https://docs.oracle.com/cd/E11882_01/server.112/e25494/onlineredo.htm#ADMIN11302


免責聲明!

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



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