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

DB2 資料庫備份還原實戰經驗:Windows 環境重導向還原完整操作指南

     編輯:DB2 教學

前言

在 Windows 環境下進行 DB2 資料庫的異機還原或重導向還原時,常因路徑、容器映射不匹配而報錯。本文結合實際操作經驗,詳細記錄從建立新資料庫、重導向還原、表空間容器重映射到前滾日誌的完整流程,供 DBA 參考。

操作環境與前置條件

  • 作業系統:Windows Server
  • DB2 版本:9.7 / 10.5 / 11.1 等通用版本
  • 備份檔案存放於 D:\db_bak\,目錄結構保持 DB2 原生備份結構(如 D:\db_bak\GXDB.0\DB2\NODE0000\CATN0000\)
  • 目標資料庫名稱:JMAMGX31(新建)
  • 來源資料庫名稱:GXDB(備份來源)

步驟 1:建立目標資料庫(僅建立骨架)

  1. 開啟 DB2 命令視窗(db2cmd)。
  2. 建立資料庫於 D 槽:
db2 create db JMAMGX31 on d:

系統將在 D:\DB2\NODE0000\SQL00006\(編號視實際情況)產生預設表空間容器。記下實際生成的 SQL 目錄編號(如 SQL00006),後續容器重映射需用到。

步驟 2:執行重導向還原

  1. 切換至根目錄:cd \
  2. 執行 restore ... redirect:
db2 restore db GXDB from D:\db_bak\ taken at 20070302160117 into JMAMGX31 redirect
  • taken at:從 db2 list history backup all for GXDB 獲取的備份時間戳。
  • redirect:進入重導向模式,允許後續修改容器路徑。

執行後會提示 SQL1277N(表空間容器不可存取,需重新定義)與 DB20000I(命令成功完成,進入重導向狀態)。

步驟 3:重新定義表空間容器——核心步驟

根據步驟 1 新建資料庫生成的實際路徑,逐一對應修改每個表空間的容器定義。語法:

db2 set tablespace containers for <表空間ID> using (path "新容器完整路徑")

實際修改範例(假設新資料庫目錄為 SQL00006):

表空間 ID原容器路徑(備份中)新容器路徑(目標)命令範例
0 (SYSCATSPACE)D:\DB2\NODE0000\SQL00005\SQLT0000.0D:\DB2\NODE0000\SQL00006\SQLT0000.0db2 set tablespace containers for 0 using (path "D:\DB2\NODE0000\SQL00006\SQLT0000.0")
1 (TEMPSPACE1)D:\DB2\NODE0000\SQL00005\SQLT0001.0D:\DB2\NODE0000\SQL00006\SQLT0001.0db2 set tablespace containers for 1 using (path "D:\DB2\NODE0000\SQL00006\SQLT0001.0")
2 (USERSPACE1)D:\DB2\NODE0000\SQL00005\SQLT0002.0D:\DB2\NODE0000\SQL00006\SQLT0002.0db2 set tablespace containers for 2 using (path "D:\DB2\NODE0000\SQL00006\SQLT0002.0")
3 (用戶定義 DMS 表空間)D:\tbs\mam311.DBFD:\tbs\JMAMGX.DBFdb2 set tablespace containers for 3 using (file "D:\tbs\JMAMGX.DBF" 12500)
4 (用戶定義暫存表空間)D:\tbs\mam311_Temp.DBFD:\tbs\JMAMGX_Temp.DBFdb2 set tablespace containers for 4 using (file "D:\tbs\JMAMGX_Temp.DBF" 12500)

關鍵點:

  • 容器類型需一致:path 對應 SMS/DMS 目錄容器,file 對應 DMS 檔案容器(需指定大小,單位為頁)。
  • 新路徑的目錄必須預先存在,DB2 不會自動建立目錄。
  • 表空間 ID 可透過 db2 list tablespaces show detail 於來源庫查詢,或在重導向狀態下輸入 db2 list tablespaces 確認。

步驟 4:完成還原

db2 restore db GXDB continue

若提示 SQL2539W(警告:資料庫已存在,將被覆蓋),確認無誤後繼續。

步驟 5:複製歸檔日誌並前滾

  1. 將來源資料庫的所有歸檔日誌檔案複製至目標資料庫的日誌目錄:
    D:\DB2\NODE0000\SQL00006\SQLOGDIR\
  2. 執行前滾至日誌末尾並完成:
db2 rollforward db JMAMGX31 to end of logs and complete

完整命令腳本匯總(可存為 .bat 或 .sh 執行)

db2 create db JMAMGX31 on d:
cd \
db2 restore db GXDB from D:\db_bak\ taken at 20070718115305 into JMAMGX31 redirect
db2 set tablespace containers for 0 using (path "D:\DB2\NODE0000\SQL00005\SQLT0000.0")
db2 set tablespace containers for 1 using (path "D:\DB2\NODE0000\SQL00005\SQLT0001.0")
db2 set tablespace containers for 2 using (path "D:\DB2\NODE0000\SQL00005\SQLT0002.0")
db2 set tablespace containers for 3 using (file "D:\tbs\JMAMGX.DBF" 12500)
db2 set tablespace containers for 4 using (file "D:\tbs\JMAMGX_Temp.DBF" 12500)
db2 restore db GXDB continue
db2 rollforward db JMAMGX31 to end of logs and complete

經驗總結與避坑指南

  1. 容器路徑必須精確: 任何拼寫錯誤、目錄不存在都會導致 SET CONTAINERS 失敗或後續 RESTORE CONTINUE 報錯。
  2. 表空間 ID 不變: 重導向還原不改變表空間 ID,務必對應正確。
  3. 日誌路徑: 若目標機器日誌路徑與來源不同,可在 RESTORE 階段使用 NEWLOGPATH 參數指定新日誌路徑,避免前滾找不到日誌。
  4. 備份歷史文件: 還原後新資料庫會繼承來源的備份歷史,若需獨立管理,可考慮 db2 prune history 清理舊記錄。
  5. 測試驗證: 還原完成後,務必執行 db2 connect to JMAMGX31 並查詢核心業務表行數、檢查索引狀態,確認資料完整性。

遵循上述流程,即可在 Windows 平台順利完成 DB2 資料庫的異機重導向還原與災難恢復演練。

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