DB2數據庫的日誌文件管理

DB2數據庫的日誌文件管理html

DB2的日誌模式程序員

 

1.1循環日誌sql

  當循環日誌生效時,事務數據將經過循環的方式寫入主要日誌文件。當存儲於某個日誌文件中的全部記錄都再也不須要用於恢復時,該日誌文件將被重用,而且能夠在之後再次成爲活動日誌文件。這意味着在循環日誌模式中,日誌文件的內容最終將被新日誌條目重寫。因爲日誌文件的內容被重寫覆蓋了,所以咱們只能將數據庫恢復到最後一次完整的數據庫備份。不能使用循環日誌執行時間點(point-in-time)恢復。數據庫

1.2 歸檔日誌windows

  在歸檔日誌模式中,redo log條目將寫入主要日誌文件。可是,與循環日誌不一樣,這些日誌文件永遠都不可重用。當存儲於某個日誌文件中的全部記錄都再也不須要用於恢復時,該日誌文件將被標記爲非活動而不是可重用。這意味着它的內容永遠都不會被覆蓋。當第一個主要日誌文件變滿時,系統將分配一個新的日誌文件,這樣主要日誌文件的配置數量(LOGPRIMARY數據庫參數)將一直可用。安全

  與單個事務相關的全部條目必須在活動日誌空間中保持一致。若是長時間運行的事務所須要的日誌空間大於主要日誌文件能夠提供的空間,則可能會分配並使用次要日誌文件。在歸檔日誌模式中,經過結合使用數據庫備份映像和日誌文件,咱們能夠將數據庫恢復到具體的時間點。有關此流程的詳細描述請參見下文。工具

  設置了歸檔模式後,數據庫將支持前滾恢復。此時,系統中將會存在三種類型的日誌文件:spa

  活動日誌:該日誌包含還沒有提交或回滾的事務單元的相關信息,以及已提交但還沒有寫入數據庫文件的事務的信息。.net

  聯機存檔日誌:活動日誌中全部改動對正常處理已不須要,即該日誌中所記錄的事務都已提交併寫入數據庫文件時,該活動日誌轉換爲聯機存檔日誌。稱之爲聯機,是因爲它們與活動日誌存放在同一個目錄下。日誌

  脫機存檔日誌:將聯機存檔日誌從活動日誌目錄下Copy到另外的地方存檔,就稱爲脫機存檔日誌。這些日誌可能在數據庫前滾恢復的時候仍然須要。

  (所謂聯機歸檔日誌,就是歸檔日誌文件和活動日誌文件同在一個目錄下;而離線歸檔日誌,則是歸檔日誌與活動日誌分開存放)

日誌模式修改:https://www.cnblogs.com/net2012/archive/2013/02/04/2891502.html



管理數據庫日誌的工做能夠手工完成(即將聯機存檔日誌手工拷貝到某個archive目錄),也可由編寫USEREXIT程序自動維護。
 
手工管理數據庫LOG

既然 DB2 UDB 中用戶出口程序的目的是將數據庫日誌複製到歸檔目錄中,您最終將在活動日誌目錄(缺省是 SQLOGDIR)中獲得重複的日誌文件。您可能考慮除去這些重複的聯機歸檔日誌以釋放文件系統空間。在從數據庫目錄中除去這些日誌以前,要十分細心地驗證是否已經將它們成功地複製到歸檔目錄中。還必須確保數據庫管理器進行崩潰恢復時再也不須要它們。要肯定活動日誌目錄中哪些日誌文件不爲正常處理所需,可用如下命令檢查數據庫配置:

db2 "get db cfg for sample"

該命令的數據庫配置輸出將包括第一個活動日誌文件,例如:

First active log file = S000009.LOG

上面輸出中所示的日誌文件 S000009.LOG是數據庫的當前活動日誌。任何小於該編號的日誌文件都被認爲是聯機歸檔日誌。

下面是一個示例:

在下面的方案中,活動日誌目錄中有日誌文件 S000000.LOG - S000009.LOG,歸檔日誌目錄中有 S000000.LOG - S000008.LOG。由於 S000009.LOG是第一個活動日誌文件,因此,能夠從活動日誌目錄中刪除 S000001.LOG - S000008.LOG以釋放磁盤空間。必須將 S000009.LOG文件留在活動日誌目錄中,由於當前事務仍然在使用它。

也能夠檢查數據庫歷史文件,以查看活動日誌目錄中再也不須要哪些日誌文件。如下命令將列出數據庫備份信息:

    db2 "list history backup all for database sample"

下面是該命令的輸出示例:

              List History File for sample
Number of matching file entries = 4
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  
-- --- ------------------ ---- --- ------------ ------------ 
 B  D  20030416162026001   F    D  S0000010.LOG S0000014.LOG
------------------------------------------------------------
Contains 2 tablespace(s):
00001 SYSCATSPACE
00002 USERSPACE1
------------------------------------------------------------

在上面的輸出中,最先的日誌將代表:須要 S0000010.LOG及其以後的任何日誌。能夠安全地刪除 S00000010.LOG以前的任何日誌。再次提醒,在從活動日誌目錄中刪除日誌文件以前,驗證在活動日誌目錄中存在這些日誌文件的副本是很是重要的。

儘管能夠從活動日誌目錄手工刪除日誌文件,可是除去聯機歸檔日誌文件的更安全方法是經過 prune logfile命令。能夠使用該命令來刪除活動日誌目錄中的日誌文件。在下面的示例中,如下命令將刪除日誌文件 S000000.LOG - S000008.LOG

db2 "prune logfile prior to S000009.LOG"

注:根據您的恢復策略,在有些狀況下前面的前滾操做可能會在數據庫上執行。歸檔目錄中舊的日誌文件可能會被具備相同名稱的新日誌文件覆蓋,從而會阻止您使用舊日誌文件對數據庫進行時間點恢復。用戶出口程序的程序員須要考慮這種狀況,這一點很是重要


程序工具自動管理(未驗證)
因爲DB2對全部平臺都提供了相應的USEREXIT示例程序,並且很是易於修改和使用,因此IBM建議用戶使用USEREXIT程序來管理日誌文件。

使用USEREXIT程序的方法

要使用User exit program自動化log文件的archiving和retrieval過程:

1. 設置database cfg參數logarchmeth1 爲USEREXIT

connect to sample
update db cfg using logarchmeth1 USEREXIT
connect reset

2. 建立user exit programs。該程序必須是一個名爲db2uext2的可執行文件。DB2在各類平臺上都提供了User Exit的示例程序,用戶能夠經過直接修改該樣本文件來實現本身的user exit程序。

在UNIX(R) based的系統中,該程序存放在sqllib/samples/c目錄下.

There are four sample user exit programs for UNIX based systems:

• db2uext2.ctsm

This sample uses Tivoli(R) Storage Manager to archive and retrieve database log files.

• db2uext2.ctape

This sample uses tape media to archive and retrieve database log files .

• db2uext2.cdisk

This sample uses the operating system COPY command and disk media to archive and retrieve database log files.

• db2uxt2.cxbsa

This sample works with the XBSA Draft 0.8 published by the X/Open group. It can be used to archive and retrieve database log files. This sample is only supported on AIX.

• 在Windows(R) 系統中,該文件存放在sqllib/samples/c目錄下。

There are two sample user exit programs for Windows operating systems:

• db2uext2.ctsm

This sample uses Tivoli Storage Manager to archive and retrieve database log files.

• db2uext2.cdisk

This sample uses the operating system COPY command and disk media to archive and retrieve database log files.

3. 配置該示例程序,指定要將日誌文件Archive到哪一個系統目錄中(在windows平臺下,程序中默認爲c:\mylogs)。

#define ARCHIVE_PATH "c:\\mylogs\\"
#define RETRIEVE_PATH "c:\\mylogs\\"
#define AUDIT_ERROR_PATH "c:\\mylogs\\"

4. 編譯該C文件

cl db2uext2.c

5. 拷貝db2uext2.exe到/SQLLIB/BIN目錄下

6. 在db2cmd中鍵入archive log for db sample user db2admin using duan1980命令強制執行log日誌歸檔任務。查看c:\mylogs目錄下有無日誌文件歸檔,驗證是否成功。
 
 
參考原文;  https://blog.csdn.net/woshilipengfei/article/details/83327416
https://blog.csdn.net/xiyuan1999/article/details/7898683
相關文章
相關標籤/搜索