欲使用線上備份與增量備份,必須先將資料庫設為歸檔日誌模式:
# 1. 設定鏡像日誌路徑
db2 update db cfg for <dbname> using MIRRORLOGPATH /home/db2inst1/mirror_log/
# 2. 確認設定
db2 get db cfg for <dbname>
# 3. 啟用用戶出口 (User Exit)
db2 update db cfg for <dbname> using USEREXIT ON
# 4. 啟用日誌保留 (歸檔)
db2 update db cfg for <dbname> using LOGRETAIN ON
# 5. 啟用增量備份追蹤
db2 update db cfg for <dbname> using TRACKMOD ON
# 6. 重啟實例生效
db2stop force
db2start
# 7. 首次必須離線完整備份 (否則會報 SQL1116N)
db2 backup db <dbname> to /home/db2inst1/off_back
# 線上完整備份
db2 backup db <dbname> online to /home/db2inst1/on_back/
# 線上增量備份
db2 backup db <dbname> online incremental to /home/db2inst1/on_back/
# 查看備份歷史
db2 list history backup all for <dbname>
# 記下日誌路徑供 rollforward 使用
db2 get db cfg for <dbname> | grep -i logpath
# 1. 模擬災難:刪除資料庫
db2stop force; db2start; db2 drop db <dbname>
# 2. 使用 db2ckrst 取得建議還原順序
db2ckrst -d <dbname> -t 20070608032820
# 3. 還原完整備份
db2 restore db <dbname> incremental from /home/db2inst1/on_back taken at 20070608032820
# 4. 依序還原增量備份 (注意:必須按時間順序,先完整後增量)
# db2ckrst 輸出已列出正確順序
# 5. 前滾日誌至最新
db2 rollforward db <dbname> to end of logs and complete overflow log path ('/home/db2inst1/log')
關鍵提醒: 增量還原順序必須遵循 db2ckrst 建議,錯誤順序會導致 SQL2574N。
備份時加入 INCLUDE LOGS,還原可一次完成資料與日誌,簡化流程:
# 備份階段
db2 backup db <dbname> online to /home/db2inst1/on_back/ INCLUDE LOGS
db2 backup db <dbname> online incremental to /home/db2inst1/on_back/ INCLUDE LOGS
# 災難發生後
db2stop force; db2start; db2 drop db <dbname>
# 還原:AUTOMATIC 會自動尋找完整+增量鏈,LOGTARGET 指定日誌寫入位置
db2 RESTORE DB <dbname> INCREMENTAL AUTOMATIC \
FROM /home/db2inst1/on_back/ TAKEN AT 20070612070526 \
LOGTARGET /home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/
# 前滾完成
db2 rollforward db <dbname> to end of logs and complete
| 錯誤/現象 | 原因與對策 |
|---|---|
| SQL1116N | 資料庫處於 backup pending,需先做離線完整備份才能啟用線上備份 |
| SQL2574N | 增量還原順序錯誤,務必依 db2ckrst 建議順序執行 |
| 日誌不足導致 rollforward 失敗 | 確保 LOGRETAIN=ON、MIRRORLOGPATH 設定、備份保留足夠日誌檔 |
| 還原後資料庫無法連線 | 執行 db2 rollforward ... complete 結束前滾狀態 |
db2 list history 與 db2ckrst 輸出,確保備份鏈完整