Oracle 和 DB2 的比較和相容性/程序模型/日誌/Oracle
在 Oracle 中,事務透過將它們寫入記憶體中的撤銷日誌緩衝區來記錄。然後將這些緩衝區寫入磁碟上的日誌檔案,並且可以選擇將磁碟日誌檔案寫入歸檔。所有對資料庫的更改,包括使用 DDL(建立、更改和刪除語句)進行的結構更改,都會被記錄。在一個活動的資料庫中,變化是持續的,因此變化量加上撤銷日誌為了安全而被複制的事實意味著 DBMS 在其操作過程中會生成大量資料。在共享記憶體中進行的更改會寫入到映象的磁碟日誌檔案中,以便將每次更改記錄兩次。這樣做是為了在其中一組磁碟日誌檔案不可用時保護資料庫,這是一種雙保險的方法。由於映象的磁碟日誌檔案彼此備份,因此它們應該位於不同的磁碟驅動器和不同的控制器上。映象的磁碟日誌檔案稱為組,當一個組填滿時,DBMS 會切換到下一個日誌檔案組。這個過程會一直持續到該系列中的最後一個組填滿,然後該過程會從第一個組開始重新開始。日誌檔案是迴圈覆蓋的。執行此操作所需的最小組數為兩個,但通常至少有三個。由於日誌檔案是迴圈覆蓋的,因此它們不是永久性的,在將來某個時刻它們將被再次寫入。可以將已滿的磁碟日誌檔案寫入歸檔,從理論上講可以保護對資料庫的所有更改。歸檔過程 (ARCH) 處理此操作,並且 ARCH 完成後會標記它剛剛歸檔的撤銷日誌可供覆蓋。如果您使用 ARCH,那麼重要的是要為歸檔分配足夠的儲存空間,因為如果該目錄填滿,資料庫將停止。
寫入撤銷日誌的程序是日誌寫入器 (LGWR)。LGWR 定期將記憶體中撤銷日誌段的內容複製到磁碟上的撤銷日誌檔案。此外,當重做日誌檔案已滿時,LGWR 會發出檢查點訊號。檢查點將所有已提交的事務寫入磁碟上的日誌檔案,並向後臺寫入器程序 (DBWR) 發出訊號,以將髒緩衝區寫入磁碟。
每個日誌切換都用一個日誌序列號進行標記,該日誌序列號寫入資料檔案頭和控制檔案,以便在恢復過程中使用適當的日誌檔案。
在 Oracle 中,事務被寫入記憶體中的重做日誌緩衝區。LGWR 程序會定期將重做日誌緩衝區寫入重做日誌檔案,如果資料庫以歸檔模式執行,則 ARCn 程序會將重做日誌檔案寫入離線儲存。
上圖描述了與日誌記錄相關的記憶體、磁碟和程序。
日誌記錄程序 (LGWR) 將資訊從重做日誌緩衝區寫入日誌檔案。日誌檔案是所有對資料庫進行的更改的記錄。這些檔案在恢復時至關重要,因此它們被複制,並且重做日誌資訊被寫入兩個成員(多路複用)。日誌檔案中儲存的資訊是所有更改表和索引的 DML、所有 DDL(例如建立、刪除和更改)以及所有提交。
然後,多路複用的日誌檔案被組織成組。當一組日誌檔案填滿時,Oracle 會進行檢查點和切換,並且組中的下一組檔案會被寫入(稱為日誌切換)。資料庫至少有兩組日誌檔案組,通常有三個,最大可以有 255 個。日誌檔案以迴圈方式寫入,因此當一組日誌檔案填滿時,就會寫入該系列中的下一組檔案。當該系列中的最後一組檔案被寫入時,該過程會從該系列中的第一組檔案重新開始。
可以透過在日誌檔案填滿時對其進行歸檔來獲得額外的安全級別,以便在再次寫入它們時不會覆蓋資料 - 這稱為歸檔模式。您需要確保有足夠的儲存空間來儲存歸檔的日誌檔案,因為如果資料庫試圖歸檔到已滿的目錄,它將會掛起。歸檔器程序 (ARCn) 負責歸檔日誌檔案,它會在每次日誌切換時將重做日誌檔案複製到離線儲存。歸檔器程序只存在於啟用了日誌歸檔的例項中,並且由 LGWR 根據系統負載發出訊號。
每次 Oracle 切換到一組新的重做日誌檔案時,它都會生成一個日誌序列號,該序列號被寫入控制檔案。此日誌序列號用於確定在恢復過程中使用哪些日誌檔案。控制檔案包含資料庫的結構,並且每個資料庫至少應該有 3 個。它們包含諸如資料庫名稱、建立日期、所有資料檔案的完整路徑以及每個資料庫的檢查點資訊等內容。它們用於掛載資料庫、開啟資料庫以及訪問資料庫。它們在資料庫需要恢復時儲存同步資料。由於控制檔案和日誌檔案儲存了有關資料庫的如此重要的資訊,因此它們應該位於不同的驅動器和控制器上。
日誌寫入器 (LGWR) 將資料從重做日誌緩衝區池寫入當前組的聯機撤銷日誌。當事務提交時,日誌寫入器會寫入重做日誌條目提交記錄,然後將提交以及與該提交相關的所有更改寫入磁碟。當重做日誌條目被寫入磁碟時,只有自上次 LGWR 寫入以來新增到緩衝區的條目才會被寫入磁碟(這樣就不會寫入重複項)。LGWR 每三秒鐘寫入磁碟一次,並且在重做日誌變為三分之一滿時也會寫入磁碟。如果資料庫寫入器程序 (DBWn) 將髒緩衝區寫入磁碟,LGWR 也會寫入磁碟。在 DBWn 寫入磁碟之前,LGWR 會寫入與已更改資料相關的所有重做條目。LGWR 透過發出檢查點 (CKPT) 訊號來實現這一點。CKPT 向更新的已提交塊發出一個後臺寫入 (DBWn) 訊號,以便寫入磁碟上的資料檔案,並確保日誌檔案中的已提交事務被寫入磁碟。
