啟用 LOGRETAIN=ON (歸檔日誌模式) 後,活動日誌目錄將累積大量聯機存檔日誌,若不及時歸檔將耗盡磁碟導致資料庫掛起。需建立自動化、可靠的歸檔與恢復機制。
| 狀態 | 定義 | 位置 |
|---|---|---|
| 活動日誌 | 含未提交/未外寫事務 | 活動日誌目錄 |
| 聯機存檔日誌 | 事務已提交並外寫,但仍在活動目錄 | 活動日誌目錄 |
| 脫機存檔日誌 | 聯機存檔複製至歸檔目錄/帶庫 | 歸檔路徑 (磁帶/磁碟/TSM) |
DB2 呼叫可執行程式 db2uext2 執行 ARCHIVE / RETRIEVE 操作,支援並行、重試、狀態碼回報。
db2 connect to sample
db2 update db cfg using LOGARCHMETH1 USEREXIT
db2 connect reset
| 平台 | 路徑 | 樣本 |
|---|---|---|
| Unix/Linux | sqllib/samples/c/ | db2uext2.ctsm (TSM)、.ctape (磁帶)、.cdisk (磁碟)、.cxbsa (XBSA, 僅 AIX) |
| Windows | sqllib/samples/c/ | db2uext2.ctsm、.cdisk |
# 編輯 db2uext2.cdisk.c
#define ARCHIVE_PATH "c:\\mylogs\\" // 歸檔目標目錄
#define RETRIEVE_PATH "c:\\mylogs\\" // 恢復來源目錄
#define AUDIT_ERROR_PATH "c:\\mylogs\\" // 錯誤審計日誌
生產建議:分離歸檔與恢復路徑、使用網路共享/NAS、配置磁碟配額監控。
# Windows (Visual Studio cl.exe)
cl db2uext2.cdisk.c
copy db2uext2.exe %DB2PATH%\BIN\
# Linux/Unix (gcc)
gcc -o db2uext2 db2uext2.cdisk.c
cp db2uext2 $DB2PATH/bin/
chmod 755 $DB2PATH/bin/db2uext2
db2 "archive log for db sample user db2admin using password"
# 檢查 c:\mylogs\ 是否產生 S0000001.LOG 等歸檔文件
| 參數 | 說明 |
|---|---|
| argc/argv[1] | 操作類型:ARCHIVE / RETRIEVE |
| argv[2] | 日誌文件名 (如 S0000012.LOG) |
| argv[3] | 資料庫別名 |
| argv[4] | 實例名 |
| 返回碼 | 0=成功,非 0=失敗 (DB2 將重試/報警) |
gzip,節省 70%+ 空間與網路頻寬md5sum 校驗,防靜默損壞.ctsm 樣本,支援版本管理、異地複製| 維度 | USEREXIT 自動化 | 手工 Copy |
|---|---|---|
| 可靠性 | DB2 內建重試、事務一致性 | 易遺漏、易誤刪活動日誌 |
| 恢復支援 | 前滾自動呼叫 RETRIEVE | 需人工干預、RTO 長 |
| 運維成本 | 一次開發、長期受益 | 持續人力投入 |
db2 update db cfg using MIRRORLOGPATH /path/to/mirrorLOGARCHMETH1 + LOGARCHMETH2) 雙路歸檔PRUNE LOGFILE PRIOR TO <log_file_name>「日誌是資料庫的生命線」——USEREXIT 將歸檔從人工風險動作轉為確定性自動化服務,是生產環境上線的必修課。