程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> db2歸檔日志與循環日志

db2歸檔日志與循環日志

編輯:DB2教程

db2歸檔日志與循環日志     DB2 數據庫支持兩種不同的日志模式:循環(Circular)和歸檔(Archival)。當新數據庫創建時,系統默認的日志模式為循環。如果業務需求要求更高級的功能,您可以將日志模式從循環修改為歸檔。        DB2 將一直嘗試將日志條目寫入主要日志文件集,也就是數據庫活動時間自動分配的日志文件。如果某個事務將所有主要日志文件消耗怠盡(所有主要日志文件都被標記為 unavailable),則數據庫管理員將分配一個次要日志文件。當這個文件變滿時,數據庫管理員將再次檢查主要日志文件的狀態是否為 unavailable。如果是,則再分配一個次要日志文件並繼續在其中寫入條目。該過程將不斷重復,直到所有次要日志文件都分配並寫滿。如果沒有主要日志文件可供寫入 Redo 條目,並且已經分配最大數量的次要日志文件,則應用程序將收到以下錯誤消息:    SQL0964C The transaction log for the database is full.     希望您曾經遇到過這種錯誤。但是,如果遇到此錯誤,則應該根據需要增加主要和次要日志文件(或者它們的大小)的數量。在理想情況下,主要日志文件的數量或大小應該足夠保存最大的事務。分配次要日志文件相當消耗資源,因為它將在運行時執行。因此,我們應該將需要在高峰工作負荷期間分配的次要日志文件數量降到最低。要更新主要或次要日志文件的數量,可以發起以下命令:    UPDATE DB CFG FOR db_name USING LOGPRIMARY value    UPDATE DB CFG FOR db_name USING LOGSECOND value     注意:如果出現此問題,則應該分析造成整個日志文件空間變滿的原因是什麼。它可能是由失控查詢或用戶錯誤造成的,因此增加日志文件的數量或大小只能在表面上解決問題。比如說,假設某個用戶發起了一個 DELETE FROM tab1 語句,且 TAB1 是一個相當大的表。雖然這一語句看上去沒什麼問題,每行生成一條刪除日記記錄,但是如果未經過配置處理它可以輕易地將日志空間填滿。          循環日志        當循環日志生效時,事務數據將通過循環的方式寫入主要日志文件。當存儲於某個日志文件中的所有記錄都不再需要用於恢復時,該日志文件將被重用,並且可以在以後再次成為活動日志文件。這意味著在循環日志模式中,日志文件的內容最終將被新日志條目重寫。由於日志文件的內容被重寫覆蓋了,因此我們只能將數據庫恢復到最後一次完整的數據庫備份。不能使用循環日志執行時間點(point-in-time)恢復。        歸檔日志        在歸檔日志模式中,redo log 條目將寫入主要日志文件。但是,與循環日志不同,這些日志文件永遠都不可重用。當存儲於某個日志文件中的所有記錄都不再需要用於恢復時,該日志文件將被標記為非活動 而不是可重用。這意味著它的內容永遠都不會被覆蓋。當第一個主要日志文件變滿時,系統將分配一個新的日志文件,這樣主要日志文件的配置數量(LOGPRIMARY 數據庫參數)將一直可用。    與單個事務相關的所有條目必須在活動日志空間中保持一致。如果長時間運行的事務所需要的日志空間大於主要日志文件可以提供的空間,則可能會分配並使用次要日志文件。在歸檔日志模式中,通過結合使用數據庫備份映像和日志文件,我們可以將數據庫恢復到具體的時間點。有關此流程的詳細描述請參見下文。        何修改日志模式        創建新的 DB2 數據庫時,默認的日志模式為循環日志 。如果希望將日志模式從循環修改為歸檔,可以執行以下步驟:    在磁盤上創建一個文件夾(比如說 e:\db_name\archive),磁盤上必須有足夠的空間存儲歸檔日志文件。保證歸檔文件目標文件夾與活動日志文件目標文件夾分開。        終止與數據庫的連接:    TERMINATE    更新歸檔日志文件目標文件夾(為歸檔日志文件指定路徑可以將歸檔日志模式打開)。    UPDATE DB CFG FOR db_name USING LOGARCHMETH1 "Disk:e:\db_name\archive"    重新連接到數據庫:    CONNECT TO db_name    連接失敗並顯示以下錯誤消息:    SQL1116N A connection to or activation of database db_name cannot be made because of backup pending: SQLSTATE=57019        出現錯誤消息的原因是,日志模式已經從循環更改為歸檔,並且需要執行完全數據庫備份。數據庫處於循環日志模式時執行的備份並不充分,因此當切換模式後需要執行新備份。        使用以下命令執行完全數據庫備份:    BACKUP DATABASE db_name TO d:\db_name\backup      嘗試再次連接到數據庫。這次應該能夠成功。    CONNECT TO db_name        事務是邏輯工作單元。每一個事務在事務日記文件中都存儲有相應的日志記錄。每個事務都有一個相應的 Redo Log 條目。Redo Log 條目將寫入當前的活動日志文件。當活動日志文件變滿時,它將被標記為 unavailable。此時,DB2 將接著此活動日志文件另外創建一個日志文件,並繼續在其中寫入日志條目。當前活動日志文件變滿時,DB2 將重復這一循環過程。當事務完成後(發起 COMMIT 或 ROLLBACK 語句),相應的日志條目將被釋放,因為不再需要將它們用於恢復數據庫。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved