針對啟用前滾恢復模式(歸檔日誌)的 DB2 分區資料庫(DPF),本文以四分區資料庫 SAMPLE 為例,詳細闡述分區級備份、重導向還原至新資料庫 SAMPNEW、以及使用 OVERFLOW LOG PATH 進行跨分區前滾恢復的完整三階段操作流程與關鍵語法細節。
DB2 分區環境下,BACKUP/RESTORE 命令預設僅作用於當前連接的分區。需使用 db2_all 跨分區執行。為提升效能,採用並行語法:
<<+0<:僅針對分區 0(編目分區)執行。||<<-0< 或 <<-0<;:對除分區 0 外的所有分區並行執行。原則:備份/還原需獨佔編目分區,故必須先完成分區 0 操作,再並行處理其他分區。
db2_all "db2 backup db sample online"
# 1. 先備份編目分區 0
db2_all "<<+0< db2 backup db sample online"
# 2. 再並行備份其餘分區 (1,2,3)
db2_all "||<<-0< db2 backup db sample online"
# 或
db2_all "<<-0<; db2 backup db sample online"
注意:每個分區產生獨立備份映像檔,檔名含分區號與時間戳。
場景:將 SAMPLE 還原為同實例下的新資料庫 SAMPNEW,驗證異機/異名恢復能力。
db2_all "db2 restore db sample into sampnew without prompting"
Linux 平台陷阱:若無 WITHOUT PROMPTING,第二個分區還原時會跳出 SQL2529W 確認提示導致失敗(rc=4)。
# 1. 先還原編目分區 0(無需 WITHOUT PROMPTING,因目標庫不存在)
db2_all "<<+0< db2 restore db sample into sampnew"
# 2. 並行還原其餘分區
db2_all "||<<-0< db2 restore db sample into sampnew without prompting"
# 或
db2_all "<<-0<; db2 restore db sample into sampnew without prompting"
還原完成後,資料庫處於「前滾待定」狀態,必須執行 ROLLFORWARD。
新資料庫 SAMPNEW 的日誌路徑無來源 SAMPLE 的歸檔日誌。需將各分區歸檔日誌複製至統一路徑(如 /sampnew/NODExxxx/...),並在編目分區 0 發起前滾命令,透過 OVERFLOW LOG PATH 指定各分區日誌來源。
db2_all "db2 get db cfg for sample" | grep "Path"
# 輸出範例:
# Path to log files = /home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/
# Path to log files = /home/db2inst1/db2inst1/NODE0001/SQL00001/SQLOGDIR/
# ...
假設複製至 /sampnew/NODE0000/..., /sampnew/NODE0001/... 等對應目錄。
db2 "rollforward db sampnew to end of logs and complete overflow log path \
(/sampnew/NODE0000/SQL00001/SQLOGDIR, \
/sampnew/NODE0001/SQL00001/SQLOGDIR on dbpartitionnum 1, \
/sampnew/NODE0002/SQL00001/SQLOGDIR on dbpartitionnum 2, \
/sampnew/NODE0003/SQL00001/SQLOGDIR on dbpartitionnum 3)"
OVERFLOW LOG PATH 後接路徑清單,非編目分區必須加 on dbpartitionnum N。on dbpartitionnum 0,否則報 SQL0104N 語法錯誤。命令成功後,SAMPNEW 進入正常狀態,完成跨分區、異名資料庫的完整恢復演練。