本系列第三篇聚焦兩項關鍵的日常維護任務:歸檔日誌 (Archive Log) 的安全清理 與 診斷日誌 (db2diag.log) 的尺寸控管。錯誤操作可能導致資料庫無法恢復或實例掛起,本文提供標準化作業程序 (SOP) 確保萬無一失。
db2 connect to <dbname>
db2 get db cfg for <dbname> | grep "First active log file"
# 輸出範例:First active log file = S0015913.LOG
db2 prune logfile prior to S0015913.LOG
ls -l /archive_log_path/ | head -20
# 確認最早歸檔檔案即為 S0015913.LOG 或更晚
PRUNE 會同步更新 DB2 內部目錄,確保恢復鏈完整建立排程腳本,結合備份完成事件觸發:
#!/bin/bash
# post_backup_prune.sh
DBNAME=$1
db2 connect to $DBNAME
FIRST_ACTIVE=$(db2 get db cfg for $DBNAME | awk '/First active log file/ {print $NF}')
db2 prune logfile prior to $FIRST_ACTIVE
db2 connect reset
db2 get dbm cfg | grep DIAGPATH
# Diagnostic data directory path (DIAGPATH) = /home/db2inst1/sqllib/db2dump
日誌完整路徑:/home/db2inst1/sqllib/db2dump/db2diag.log
db2diag.log 超過 1 GB (影響開啟/搜尋速度)db2list # 確無連線
db2stop # 停止實例
cp /home/db2inst1/sqllib/db2dump/db2diag.log \
/backup/logs/db2diag_$(date +%Y%m%d).log
rm /home/db2inst1/sqllib/db2dump/db2diag.log
db2diag.log):
db2start
避免手動清理,配置 diagsize 參數自動限制總大小並輪轉:
db2 update dbm cfg using DIAGSIZE 1024 # 單位 MB,總大小上限 1 GB
db2diag.log.1, .2... 最多保留 DIAGNUM 個 (預設 10)| 誤區 | 後果 | 正確做法 |
|---|---|---|
| 直接 rm db2diag.log 而未停實例 | 檔案控制代碼未釋放,磁碟空間不釋放;DB2 可能掛起 | 必須 db2stop 後再刪除 |
| PRUNE 至最新作用中日誌 | 切斷恢復鏈,PITR (時間點恢復) 失效 | 保留至少一個完整備份週期的日誌 |
| 清理 db2diag.log 但未備份 | 遺失歷史錯誤線索,事後分析盲區 | 務必先備份再刪除 |
日誌管理是 DB2 穩定運行的生命線。PRUNE 而非 rm、備份後再清理、善用自動輪轉參數 三大原則貫徹執行,即可在合規與磁碟空間間取得平衡。