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

DB2 表空間重定向恢復實戰指南:跨路徑異機備份還原全流程詳解

     編輯:DB2 教學

DB2 備份恢復在源端與目標端存儲路徑不一致時,必須啟用 重定向恢復 流程。本文基於一次真實生產環境異機還原實戰,將完整操作步驟、關鍵命令、狀態判讀與避坑要點系統化整理,供 DBA 參考實施。

場景背景

  • 源庫: `OLDDB`,備份文件存放於 `C:\OLDDBbak`
  • 目標庫: `NEWDB`,數據文件目標路徑 `C:\NEWDB\TBS\`
  • 備份時間戳: `20150717164847`(文件名體現:`OLDDB.0.DB2.NODE0000.CATN0000.20150717164847.001`)
  • 核心差異: 表空間容器路徑從 `E:\OLDDB\TBS\` 變更為 `C:\NEWDB\TBS\`

第一階段:發起重定向恢復

DB2 RESTORE DB OLDDB FROM "C:\OLDDBbak" TAKEN AT 20150717164847 TO "C:" INTO NEWDB REDIRECT

參數解析:

  • `FROM`:備份文件目錄
  • `TAKEN AT`:備份時間戳,精確到秒,必須與文件名一致
  • `TO "C:"`:目標實例根路徑(非具體表空間路徑)
  • `INTO NEWDB`:目標數據庫別名,無需預建
  • `REDIRECT`:啟用重定向模式,命令返回後進入「掛起」狀態,等待後續容器重定向

第二階段:表空間容器重定向

2.1 列出表空間狀態

DB2 LIST TABLESPACES

重點關注 State(狀態) 欄位中是否包含 0x2001100 並提示 「必須定義存儲器」。示例輸出:

表空間ID 名稱 類型 狀態解讀 是否需重定向
2 SYSTOOLSTMPSPACE 系統管理空間 (SMS) 恢復掛起 / 可定義存儲器 否(系統自動管理)
3 TBS_01 數據庫管理空間 (DMS) 恢復掛起 / 必須定義存儲器 / 可定義存儲器 是

2.2 查看目標表空間容器詳情

DB2 LIST TABLESPACE CONTAINERS FOR 3 SHOW DETAIL

輸出關鍵信息:

  • Container ID 0: `E:\OLDDB\TBS\CONTAINER_01_01` (File, 25600 頁, 不可訪問)
  • Container ID 1: `E:\OLDDB\TBS\CONTAINER_01_02` (File, 25600 頁, 不可訪問)
  • Accessible = No 確認目標機器無此路徑,必須重定向

2.3 執行容器重定向命令

原則: 新容器大小 ≥ 原容器大小;DMS 用 `FILE "路徑" 頁數`,SMS 用 `PATH "路徑"`。

方案 A:分容器重定向(保持原容器數量)

DB2 SET TABLESPACE CONTAINERS FOR 3 USING (
    FILE "C:\NEWDB\TBS\CONTAINER_01_01" 25600,
    FILE "C:\NEWDB\TBS\CONTAINER_01_02" 25600
)

方案 B:合併容器(減少容器數,便於管理)

DB2 SET TABLESPACE CONTAINERS FOR 3 USING (
    FILE "C:\NEWDB\TBS\CONTAINER_01" 51200
)

註:合併時總頁數 = 原容器頁數之和,單容器上限受文件系統/OS 限制。

2.4 批量處理多表空間實戰模板

-- DMS 表空間示例
DB2 SET TABLESPACE CONTAINERS FOR 3 USING (FILE "C:\NEWDB\TBS\CONTAINER_01" 51200)
DB2 SET TABLESPACE CONTAINERS FOR 4 USING (FILE "C:\NEWDB\TBS\CONTAINER_02" 25600)
DB2 SET TABLESPACE CONTAINERS FOR 5 USING (FILE "C:\NEWDB\TBS\CONTAINER_03" 51200)
DB2 SET TABLESPACE CONTAINERS FOR 6 USING (FILE "C:\NEWDB\TBS\CONTAINER_04" 64000)
DB2 SET TABLESPACE CONTAINERS FOR 7 USING (FILE "C:\NEWDB\TBS\CONTAINER_05" 153600)
DB2 SET TABLESPACE CONTAINERS FOR 8 USING (FILE "C:\NEWDB\TBS\CONTAINER_06" 51200)
DB2 SET TABLESPACE CONTAINERS FOR 9 USING (FILE "C:\NEWDB\TBS\CONTAINER_07" 25600)

-- SMS 表空間示例(臨時表空間、系統表空間常見)
DB2 SET TABLESPACE CONTAINERS FOR 10 USING (PATH "C:\NEWDB\TBS\TBS_SYSTEM_04")
DB2 SET TABLESPACE CONTAINERS FOR 11 USING (PATH "C:\NEWDB\TBS\TBS_SYSTEM_08")
DB2 SET TABLESPACE CONTAINERS FOR 12 USING (PATH "C:\NEWDB\TBS\TBS_USERTMP_04")
DB2 SET TABLESPACE CONTAINERS FOR 13 USING (PATH "C:\NEWDB\TBS\TBS_USERTMP_08")

2.5 驗證重定向完成

DB2 LIST TABLESPACES

再次執行,確認所有表空間狀態不再包含「必須定義存儲器」,均轉為「恢復掛起 / 可定義存儲器」即可進入下一階段。

第三階段:完成恢復

DB2 RESTORE DB OLDDB CONTINUE

此命令將基於已定義的容器映射繼續數據頁還原、日誌重放,最終將數據庫帶入一致性狀態。完成後執行 DB2 CONNECT TO NEWDB 驗證可用性。

關鍵避坑指南

  1. 時間戳精確匹配: `TAKEN AT` 必須與備份文件名時間戳完全一致,否則報 `SQL2539N`。
  2. 容器大小不可縮小: 新容器頁數 < 舊容器頁數將導致 `SQL0298N` 容器太小錯誤。
  3. SMS/DMS 命令語法區分: 混用會導致 `SQL1768N` 容器類型不匹配。
  4. 目標目錄預建與權限: `C:\NEWDB\TBS\` 需預先創建,DB2 服務賬戶需具備完全控制權限。
  5. 並行性優化: 大庫恢復可配合 `PARALLELISM n`、`BUFFERS n`、`BUFFER n` 參數加速。
  6. 日誌鏈完整性: 若為增量/差異備份鏈,需按順序依次 `RESTORE ... REDIRECT` 並 `CONTINUE`,不可跳過。

總結

DB2 重定向恢復的核心邏輯是:「備份元數據記錄舊路徑 → 恢復掛起 → 手動建立新路徑映射 → 繼續還原」。掌握 LIST TABLESPACES 狀態判讀、SET TABLESPACE CONTAINERS 語法差異、容器大小約束,即可從容應對異機遷移、存儲重組、災難恢復等高階場景。建議將上述命令模板化納入運維手冊,定期演練,確保關鍵時刻「手熟、心穩、數據不丟」。

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