三種日誌模式對比
| 模式 | 主要日誌 | 次要日誌 | 特點 |
| 循環日誌 | 預分配 LOGPRIMARY 個,循環覆寫 | 視需要動態分配,上限 LOGSECOND | 預設,適合純 OLTP,無法時間點恢復 |
| 歸檔日誌 | 預分配 LOGPRIMARY,滿則新增,永不覆寫 | 不使用 | 支援前滾恢復,需磁碟空間管理 |
| 無限活動日誌 | 同歸檔模式 | LOGSECOND = -1 (無限制) | 混合優勢,跨主/歸檔日誌的長交易 |
啟用無限活動日誌
db2 UPDATE DB CFG FOR <db> USING USEREXIT ON LOGSECOND -1
USEREXIT ON:啟用用戶出口程式,將關閉的日誌檔移至歸檔位置 (避免磁碟填滿)。
LOGSECOND -1:允許無限次要日誌,配合 LOGPRIMARY、LOGFILSIZ 控制活躍日誌區大小。
運作機制
- 活躍日誌區保留
LOGPRIMARY 個主日誌檔。
- 長交易超出主日誌,自動分配次要日誌 (無上限)。
- 讀取已歸檔日誌時,DB2 呼叫
userexit 從歸檔區取回並快取至活躍區,後續讀取加速。
- DB2 自動管理快取日誌的取回、複製、移除。
優點
- 彈性應對超大/長交易 (如月末結帳、大量匯入)。
- 避免「日誌滿」錯誤 (SQL0964C)。
- 配合
USEREXIT 實現日誌自動歸檔,免人工干預。
代價與風險
- ROLLBACK 變慢:需從歸檔區讀取日誌反向套用,Savepoint/Transaction 回滾明顯延遲。
- 崩潰恢復變慢:同理需大量歸檔日誌回放。
- 磁碟 I/O 壓力增加,需規劃高效能歸檔存儲 (SSD/獨立磁碟)。
適用場景建議
- ✅ 批次處理窗口、大載入作業、長時間報表交易
- ❌ 核心高頻 OLTP、嚴格 RTO/RPO 要求的核心系統
最佳實踐
- 設定足夠
LOGPRIMARY (如 50-100) 覆蓋 95% 交易,減少次要日誌分配。
LOGFILSIZ 建議 1024-4096 頁 (4-16MB),平衡檔案數與分配頻率。
USEREXIT 腳本需具備高可靠性、冪等性、並行複製能力。
- 定期演練崩潰恢復與時間點恢復,驗證 RTO。