DB2 資料庫的備份與還原是資料庫管理員(DBA)的核心職責之一。本文將系統性地梳理 DB2 資料庫備份還原的三大核心階段:歸檔參數配置、線上資料庫備份、線上資料庫還原,並針對實操中常見的細節與易錯點進行深度解析,助您構建可靠的資料保護體系。
在進行線上備份前,必須將資料庫設定為「歸檔日誌模式」(Archival Logging),否則僅能執行離線備份。以下為關鍵配置步驟(以實例使用者 db2inst1 為例):
db2 update db cfg for <資料庫名> using mirrorlogpath /home/db2inst1/mirror_log/
db2 get db cfg for <資料庫名>
確認 Mirror log path 已正確顯示。
db2 update db cfg for <資料庫名> using userexit on
db2 update db cfg for <資料庫名> using logretain on
關鍵點: userexit 與 logretain 至少需啟用一項才能進入歸檔模式。生產環境建議兩者皆開啟,並配合用戶腳本將日誌歸檔至遠端儲存。
db2 update db cfg for <資料庫名> using trackmod on
db2stop force
db2start
啟用歸檔參數後,資料庫進入 Backup Pending 狀態,必須先做一次離線全量備份才能解除:
db2 backup db <資料庫名> to /home/db2inst1/off_back
若直接嘗試線上備份,將報錯 SQL1116N。
完成上述配置後,即可執行線上備份,業務零中斷。
db2 backup db <資料庫名> online to /home/db2inst1/on_back/
db2 backup db <資料庫名> online incremental to /home/db2inst1/on_back/
補充: DB2 另支援 incremental delta(差異增量),僅備份上次任意備份後變更的頁面,體積更小但還原鏈更長。
db2 list history backup all for <資料庫名>
記錄下每次備份的時間戳記,還原時必須精確指定。
db2 get db cfg for <資料庫名> | grep "Log path"
將 Log path 下的所有日誌檔案複製至安全目錄(如 /home/db2inst1/log_archive/),供後續 rollforward 使用。
db2stop force; db2start; db2 drop db <資料庫名>
還原遵循「全量備份 → 增量備份 → 前滾日誌」的鐵律,順序絕不可逆。
db2ckrst -d <資料庫名> -t <目標時間戳> -r database
工具會輸出建議的還原命令順序,**務必遵循此順序**,否則會遇到 SQL2574N 錯誤(增量還原順序錯誤)。
db2 restore db <資料庫名> incremental from /home/db2inst1/on_back/ taken at <全量備份時間戳>
db2 restore db <資料庫名> incremental from /home/db2inst1/on_back/ taken at <增量備份時間戳1>
db2 restore db <資料庫名> incremental from /home/db2inst1/on_back/ taken at <增量備份時間戳2>
...
注意: DB2 不會自動尋找全量備份檔案,每個 restore 命令必須顯式指定 taken at 時間戳。
db2 rollforward db <資料庫名> to end of logs and complete overflow log path ('/home/db2inst1/log_archive')
to end of logs:前滾至日誌末尾(最新狀態)。and complete:結束前滾狀態,資料庫可連線。overflow log path:指定歸檔日誌所在目錄(即步驟 4 複製的目錄)。使用 include logs 選項,備份映像檔內將包含該時間點所需的活動日誌,還原時無需單獨尋找日誌檔案,極大簡化災難恢復流程。
db2 backup db <資料庫名> online to /home/db2inst1/on_back/ include logs
db2 backup db <資料庫名> online incremental to /home/db2inst1/on_back/ include logs
db2 restore db <資料庫名> incremental automatic from /home/db2inst1/on_back/ taken at <時間戳> logtarget /home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/
db2 rollforward db <資料庫名> to end of logs and complete
此模式下無需額外指定 overflow log path,因日誌已隨備份映像檔還原至 LOGTARGET 目錄。
db2 list history 失敗記錄與備份耗時異常。掌握上述三大階段與細節,即可構建起 DB2 資料庫堅實的資料防護防線。