首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 分區資料庫啟用前滾恢復模式完整操作指南

     編輯:DB2 教學

分區資料庫環境 (DPF) 下,備份/恢復/前滾操作的分散式協調是 DBA 必備技能。本文以 4 分區資料庫 SAMPLE (編目分區 0) 為例,詳細說明 db2_all 並行控制語法、聯機備份、跨分區恢復至新資料庫 SAMPNEW、歸檔日誌收集與 OVERFLOW LOG PATH 指定的完整實戰流程。

核心概念釐清

操作作用範圍執行位置關鍵指令
BACKUP 單一分區 各分區 (可用 db2_all 並行) db2 backup db ... ONLINE
RESTORE 單一分區 各分區 (可用 db2_all 並行) db2 restore db ... INTO ...
ROLLFORWARD 全資料庫 (所有分區) 僅編目分區 db2 rollforward db ... TO END OF LOGS AND COMPLETE OVERFLOW LOG PATH (...)

一、分區資料庫聯機備份

1. 串行備份 (簡單、慢)

db2_all "db2 backup db sample online"

2. 並行備份 (推薦生產環境)

db2_all 並行控制語法:

  • <<+n< : 後續指令僅在分區 n 執行
  • <<-n< : 後續指令在除分區 n 外所有分區執行
  • ||<<-n< 或 <<-n<; : 並行在除分區 n 外所有分區執行

最佳實踐:先備份編目分區 (獨佔),再並行備份其餘分區

# 步驟 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"

產出:每個分區產生獨立備份映像檔,檔名含分區號、時間戳記。

二、跨分區恢復至新資料庫 (SAMPNEW)

場景:將 SAMPLE 聯機備份恢復為同實例下新資料庫 SAMPNEW,驗證備份可用性或建立測試環境。

1. 串行恢復 (含 WITHOUT PROMPTING 抑制覆蓋確認)

db2_all "db2 restore db sample into sampnew without prompting"

陷阱:Linux 平台上,第 2 個分區恢復時會彈出 SQL2529W 覆蓋確認提示,導致 db2_all 中斷 (rc=4)。解決:所有分區指令均加上 WITHOUT PROMPTING。

2. 並行恢復 (編目分區先行,其餘並行)

# 編目分區 0 先行 (無需 WITHOUT PROMPTING,因首個分區無覆蓋提示)
db2_all "<<+0< db2 restore db sample into sampnew"

# 其餘分區並行恢復 (必加 WITHOUT PROMPTING)
db2_all "||<<-0< db2 restore db sample into sampnew without prompting"
# 或
db2_all "<<-0<; db2 restore db sample into sampnew without prompting"

恢復後狀態:因使用聯機備份映像,資料庫處於 前滾暫止 狀態,必須執行前滾操作才能上線。

三、前滾恢復與 OVERFLOW LOG PATH 實戰

新資料庫 SAMPNEW 的日誌路徑不含源資料庫 SAMPLE 的歸檔日誌,必須手動收集並透過 OVERFLOW LOG PATH 指定替代路徑。

1. 查詢各分區歸檔日誌路徑

db2_all "db2 get db cfg for sample" | grep "Path to log files"
# 輸出範例:
# Path to log files = /home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/
# Path to log files = /home/db2inst1/db2inst1/NODE0001/SQL00001/SQLOGDIR/
# ...

2. 收集歸檔日誌至統一暫存區

假設將 4 個分區的歸檔日誌分別複製至 /sampnew/NODE000x/SQL00001/SQLOGDIR/ 目錄結構。

3. 編目分區執行前滾 (含 OVERFLOW LOG PATH)

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
)"

關鍵語法規則 (避坑指南)

  • 分區 0 (編目分區) 不能寫 on dbpartitionnum 0,否則報 SQL0104N 語法錯誤。
  • 路徑須用逗號分隔,括號內換行僅為可讀性,實際執行可單行。
  • TO END OF LOGS AND COMPLETE 表示前滾至日誌尾端並結束前滾暫止狀態,資料庫變為可用。
  • 若需指定時間點恢復 (PITR):TO 2024-01-15-10.30.00 AND COMPLETE。

四、完整流程腳本化範例 (供自動化參考)

#!/bin/ksh
# 變數
SRC_DB=SAMPLE
TGT_DB=SAMPNEW
ARCH_ROOT=/sampnew
PARTITIONS="0 1 2 3"
CAT_PART=0

# 1. 備份
db2_all "<<+${CAT_PART}< db2 backup db ${SRC_DB} online"
db2_all "||<<-${CAT_PART}< db2 backup db ${SRC_DB} online"

# 2. 恢復
db2_all "<<+${CAT_PART}< db2 restore db ${SRC_DB} into ${TGT_DB}"
for p in ${PARTITIONS}; do
  if [ $p -ne ${CAT_PART} ]; then
    db2_all "<<+${p}< db2 restore db ${SRC_DB} into ${TGT_DB} without prompting" &
  fi
done
wait

# 3. 收集歸檔日誌 (略,需依實際路徑 cp -r)

# 4. 前滾
OVERFLOW_PATHS="${ARCH_ROOT}/NODE0000/SQL00001/SQLOGDIR"
for p in 1 2 3; do
  OVERFLOW_PATHS="${OVERFLOW_PATHS},${ARCH_ROOT}/NODE000${p}/SQL00001/SQLOGDIR on dbpartitionnum ${p}"
done
db2 "rollforward db ${TGT_DB} to end of logs and complete overflow log path (${OVERFLOW_PATHS})"

echo "Rollforward completed. Database ${TGT_DB} is now available."

總結:分區資料庫前滾恢復的關鍵在於 備份並行化 (db2_all 控制語法)、恢復抑制提示 (WITHOUT PROMPTING)、歸檔日誌集中化 (OVERFLOW LOG PATH)、編目分區單點前滾 四大要素。掌握此流程,即可支援 DPF 環境下的 PITR、異機恢復、測試環境快速刷新等核心運維場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved