| 策略 | 運作機制 | 日誌檔案重用 | 適用場景 |
|---|---|---|---|
| 循環日誌 | 主日誌寫滿且不可用時,配置次要日誌;受 logsecond 限制總數 | 是(循環覆寫) | 一般 OLTP、可接受交易回滾 |
| 封存日誌 | 主日誌寫滿即配置新主日誌,永不重用;僅受磁碟空間限制 | 否 | 需時間點復原、高可用/災難復原 |
| 無限活動日誌 | 混合模式:允許活動交易跨越主日誌與封存日誌,有效支援無限量日誌空間 | 主日誌循環,封存日誌不重用 | 超大型長交易、批次作業、ETL 處理 |
預設最大日誌檔案總數(主 + 次)為 256 個。若交易量大或執行時間長,仍可能耗盡日誌空間。頻繁配置次要日誌會影響效能。無限活動日誌透過以下參數組合實現:
userexit = YES:啟用使用者離開程式,日誌關閉時自動呼叫,將非作用中日誌移至永久儲存位置(磁帶、網路儲存等),釋放作用中日誌路徑空間。logsecond = -1:啟用無限次要日誌模式。此時 logprimary 與 logfilsiz 仍定義作用中日誌路徑保留的主日誌數量與大小。userexit 程式從封存位置擷取該日誌檔。# 以實例擁有者身分執行
db2 update db cfg for <資料庫名> using userexit on
db2 update db cfg for <資料庫名> using logsecond -1
# 視需求調整主日誌數量與大小
db2 update db cfg for <資料庫名> using logprimary 50
db2 update db cfg for <資料庫名> using logfilsiz 4096 # 4MB 頁面數
修改後需重新啟動資料庫生效(db2stop; db2start)。
sqllib/samples/c/userexit.c,需自行編譯部署至 sqllib/bin/。logprimary 設為足以涵蓋 95% 以上交易負載的數量,減少次要日誌配置頻率。db2 get snapshot for database on | grep -i log ,設定告警閾值。LOAD 非記錄模式、分批 Commit、或使用 NOT LOGGED INITIALLY 表空間。