在 Windows 環境下進行 DB2 資料庫的異機還原或重導向還原時,常因路徑、容器映射不匹配而報錯。本文結合實際操作經驗,詳細記錄從建立新資料庫、重導向還原、表空間容器重映射到前滾日誌的完整流程,供 DBA 參考。
D:\db_bak\,目錄結構保持 DB2 原生備份結構(如 D:\db_bak\GXDB.0\DB2\NODE0000\CATN0000\)JMAMGX31(新建)GXDB(備份來源)db2cmd)。db2 create db JMAMGX31 on d:
系統將在 D:\DB2\NODE0000\SQL00006\(編號視實際情況)產生預設表空間容器。記下實際生成的 SQL 目錄編號(如 SQL00006),後續容器重映射需用到。
cd \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(命令成功完成,進入重導向狀態)。
根據步驟 1 新建資料庫生成的實際路徑,逐一對應修改每個表空間的容器定義。語法:
db2 set tablespace containers for <表空間ID> using (path "新容器完整路徑")
實際修改範例(假設新資料庫目錄為 SQL00006):
| 表空間 ID | 原容器路徑(備份中) | 新容器路徑(目標) | 命令範例 |
|---|---|---|---|
| 0 (SYSCATSPACE) | D:\DB2\NODE0000\SQL00005\SQLT0000.0 | D:\DB2\NODE0000\SQL00006\SQLT0000.0 | db2 set tablespace containers for 0 using (path "D:\DB2\NODE0000\SQL00006\SQLT0000.0") |
| 1 (TEMPSPACE1) | D:\DB2\NODE0000\SQL00005\SQLT0001.0 | D:\DB2\NODE0000\SQL00006\SQLT0001.0 | db2 set tablespace containers for 1 using (path "D:\DB2\NODE0000\SQL00006\SQLT0001.0") |
| 2 (USERSPACE1) | D:\DB2\NODE0000\SQL00005\SQLT0002.0 | D:\DB2\NODE0000\SQL00006\SQLT0002.0 | db2 set tablespace containers for 2 using (path "D:\DB2\NODE0000\SQL00006\SQLT0002.0") |
| 3 (用戶定義 DMS 表空間) | D:\tbs\mam311.DBF | D:\tbs\JMAMGX.DBF | db2 set tablespace containers for 3 using (file "D:\tbs\JMAMGX.DBF" 12500) |
| 4 (用戶定義暫存表空間) | D:\tbs\mam311_Temp.DBF | D:\tbs\JMAMGX_Temp.DBF | db2 set tablespace containers for 4 using (file "D:\tbs\JMAMGX_Temp.DBF" 12500) |
關鍵點:
path 對應 SMS/DMS 目錄容器,file 對應 DMS 檔案容器(需指定大小,單位為頁)。db2 list tablespaces show detail 於來源庫查詢,或在重導向狀態下輸入 db2 list tablespaces 確認。db2 restore db GXDB continue
若提示 SQL2539W(警告:資料庫已存在,將被覆蓋),確認無誤後繼續。
D:\DB2\NODE0000\SQL00006\SQLOGDIR\db2 rollforward db JMAMGX31 to end of logs and complete
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
SET CONTAINERS 失敗或後續 RESTORE CONTINUE 報錯。RESTORE 階段使用 NEWLOGPATH 參數指定新日誌路徑,避免前滾找不到日誌。db2 prune history 清理舊記錄。db2 connect to JMAMGX31 並查詢核心業務表行數、檢查索引狀態,確認資料完整性。遵循上述流程,即可在 Windows 平台順利完成 DB2 資料庫的異機重導向還原與災難恢復演練。