同作業系統、同 DB2 版本、同位數(32/64-bit)環境下,將數據庫從源機器克隆到目標機器,且文件系統路徑、磁盤佈局不一致時,必須使用重定向恢復。
RESTORE DB ... REDIRECT:進入重定向模式,DB2 暫停恢復等待容器定義;SET TABLESPACE CONTAINERS FOR USING (...) :逐個重新定義需遷移的表空間容器;RESTORE DB ... CONTINUE:提交容器定義,完成數據頁恢復。鐵律:三條命令必須在同一 CLP 會話(或同一腳本管道)執行,否則報 SQL0900N 失敗。
REM 1. 源端離線完全備份
db2 backup db YNDC
REM 備份時間戳 20070315165040,映像位於 D:\backup\autobak\YNDC.0\DB2\NODE0000\CATN0000\20070315\165040\001\165040.0
REM 2. 目標端建立相同目錄樹並拷貝 165040.0
REM 3. 查詢源端表空間
db2 list tablespaces
REM 需重定向的 DMS 表空間 ID:3(YNDC)、5(USERTEMPSP)、6(TEMPSPACE8K)
REM SMS 表空間 0,1,2,4 系統自動管理,無需重定向
REM 4. 目標端執行重定向恢復腳本(單文件 redirect_restore.db2)
db2 create db YNDC;
restore db YNDC from d taken at 20070315165040 to d redirect;
set tablespace containers for 3 using (FILE "G:\DB2Containner_2\YNDC\YNDC" 5242880);
set tablespace containers for 5 using (FILE "G:\DB2Containner_2\YNDC\USERTEMPSP" 51200);
set tablespace containers for 6 using (FILE "G:\DB2Containner_2\YNDC\TEMPSPACE8K" 51200);
set tablespace containers for 4 using (PATH 'G:\DB2Containner_2\YNDC\sys');
restore db YNDC continue;
FILE + 大小(頁數);源端 SMS → 目標端 PATH。ALTER BUFFERPOOL ... SIZE 調整至目標機記憶體許可範圍。TO d 指定目標端備份映像所在磁盤根目錄,TAKEN AT 需與備份時間戳完全一致。
db2 list db directory
db2 connect to YNDC
db2 list tablespace containers for 3
db2 list tablespace containers for 5
db2 list tablespace containers for 6
db2 connect reset
db2 terminate
| 錯誤現象 | 根因 | 修正 |
|---|---|---|
| SQL0900N | 命令非同會話執行 | 寫入單一 .db2 腳本用 db2 -tvf 執行 |
| SQL2567N 容器類型不匹配 | SMS/DMS 定義混用 | 核對源端 LIST TABLESPACES SHOW DETAIL 類型 |
| 實例啟動失敗 SQL1477N | 緩衝池 SIZE 超過物理記憶體 | 恢復後連接數據庫執行 ALTER BUFFERPOOL |