本文記錄一次 IBM DB2 UDB (V8/V9) 線上增量備份與異機還原的完整實戰演練,從 為什麼選擇線上增量備份 的決策分析,到 歸檔模式配置、備份執行、映像檔驗證 (db2ckbkp)、異機重導向還原 (REDIRECT)、容器路徑重定義、前滾恢復 的每一條命令與輸出,堪稱教科書級操作手冊。
connect to testdb;
update db cfg using logretain on;
update db cfg using trackmod on;
db2stop force; db2start;
# 建議額外配置
update db cfg using mirrorlogpath /safe/path # 日誌鏡像異地備份
預設循環日誌必須改為歸檔日誌 (LOGRETAIN ON 或 USEREXIT ON),TRACKMOD ON 標記修改頁支援增量。
# 全備份
backup db testdb online to /backup/path
# 增量備份
backup db testdb online incremental to /backup/path
# 差異/Delta 備份
backup db testdb online incremental delta to /backup/path
# 建立標準目錄結構
F:\db2備份數據\LW.0\DB2\NODE0000\CATN0000\20070308\085446.001
# 驗證映像
db2ckbkp -h F:\db2備份數據\LW.0\DB2\NODE0000\CATN0000\20070308\085446.001
# 關鍵輸出:The proper image path would be: LW.0\DB2\NODE0000\CATN0000\20070308\085446.001
核心原則:目標機映像目錄結構**必須**與 db2ckbkp -h 顯示的標準路徑完全一致,否則 RESTORE 找不到映像。
restore db lw from F:\db2備份數據 taken at 20070308085446 to f into loanmgr redirect
返回 SQL1277N 要求定義容器。
set tablespace containers for 0 using (path 'e:\db2\ts0');
set tablespace containers for 1 using (path 'e:\db2\ts1');
# 重複執行,直到提示 "表空間標識無效" 為止
# 使用 list tablespaces 驗證容器定義狀態
技巧:源端 LIST TABLESPACES SHOW DETAIL 可獲取真實 ID 與類型 (SMS/DMS),目標端按序定義。
restore db lw continue
注意:命令仍用**源資料庫名稱 lw**,而非目標名 loanmgr。返回 DB20000I RESTORE DATABASE 命令成功完成。
# 查詢目標庫日誌路徑
get db cfg for loanmgr
# 關鍵輸出:
# 日誌文件路徑 = F:\DB2\NODE0000\SQL00001\SQLOGDIR\
# 第一活動日誌文件 = S0001216.LOG
# 鏡像日誌路徑 = e:\Db2MirrorLogPath\NODE0000\
# 複製歸檔日誌群 (含 S0001216.LOG 及之後所有) 至上述日誌路徑
# 執行前滾
rollforward db loanmgr to end of logs and complete
資料庫進入 NORMAL 狀態,演練圓滿結束。
| 環節 | 關鍵動作 | 常見錯誤 |
|---|---|---|
| 歸檔配置 | LOGRETAIN ON + TRACKMOD ON + MIRRORLOGPATH | 忘記 TRACKMOD 導致增量備份失敗 |
| 映像目錄結構 | 完全符合 db2ckbkp -h 輸出的標準路徑 | 手動建目錄層級缺失/命名錯誤 |
| 映像驗證 | 每次備份後 db2ckbkp -h 驗證 | 假設備份成功實際損壞 |
| 容器重定義 | 按源端 ID 逐一 SET CONTAINERS | ID 對應錯誤、DMS 檔案未預建 |
| RESTORE CONTINUE | 使用源庫名稱 (lw) | 誤用目標庫名稱 (loanmgr) |
| 前滾日誌準備 | 複製完整日誌鏈至 LOGPATH,含首個活動日誌 | 日誌缺口導致 SQL4970N |
此演練流程已在多個生產遷移專案中驗證,核心心法:**標準化目錄結構、db2ckbkp 先驗證、容器 ID 精準對應、日誌鏈零缺口**。