【DB2 學習】在復原過程中重定義表空間

楊奇龍發表於2010-09-21

      在備份資料庫的時候,備份的表空間使用的所有表空間容器都將儲存在一個記錄中。在復原過程中,備份中列出的所有表空間將被檢查是否可以訪問。如果因為其他的一些原因有一個或多個容器不可使用,復原將失敗。解決辦法是在復原過程中重新定向表空間容器。包括了新增,修改,刪除表空間的容器。
        另外一種情況是在備份中所選列的容器在系統中並不存在,但使用者仍然需要在這些容器中復原。比如在備份之外的地方進行恢復,新的系統中可能沒有定義所需的容器 。解決辦法:在復原時重定向表空間容器到另外一個支援的容器。

db2 => create database product automatic storage no on 'd:\PRODUCT' user tablesp
ace managed by database using (file 'd:\PRODUCT\userdata.dat' 512)
SQL1052N  資料庫路徑 "D:\PRODUCT" 不存在。
SQL1052N  資料庫路徑 "" 不存在。--遇到的一個錯誤

說明:
該命令的 "" 引數中指定的路徑無效。不存在該名稱的路徑,或者在
DB2_CREATE_DB_ON_PATHS 登錄檔變數被禁用時,指定了路徑(僅限於 Windows)。
在 Windows 或 UNIX 環境下的分割槽資料庫環境中,分割槽資料庫組中的每個節點都
必須有相同的硬碟驅動器規範(路徑)可用並且具有可用空間,才能成功執行
CREATE DATABASE 命令。硬碟驅動器路徑是在資料庫管理器配置中指定的。如果
DFTDBPATH 為空白,那麼預設值將是例項擁有的機器上安裝了 DB2 的硬碟驅動器路徑(即,db2 安裝路徑)。
無法處理該命令。
使用者響應:
用正確的資料庫路徑重新提交該命令。
在 Windows 或 UNIX 環境下的分割槽資料庫環境中,遵循下列步驟:
*  確定所需要的硬碟驅動器規範(路徑)。該路徑是在錯誤訊息中指定的。
*  確定資料庫分割槽的哪個節點遇到了問題。通常可以在例項擁有的節點的
   db2diag.log 檔案中找到此資訊。
*  更正遇到問題的節點上的驅動器問題,或著更改資料庫管理器配置中的驅動器
   規範,以使分割槽資料庫組的每個節點上都可以使用同一驅動器並且具有足夠的
   空間。
*  重新發出該命令。
*  在 Windows 上,如果所有將訪問該資料庫的應用程式都基於版本 9 或更高版
   本的外部 API,那麼可以啟用 DB2_CREATE_DB_ON_PATHS 環境變數以支援將路
   徑作為資料庫路徑。

db2 => create database product
       automatic storage no on 'd:\'
       user tablespace managed by database
       using (file 'd:\PRODUCT\userdata.dat' 512)

DB20000I  CREATE DATABASE命令成功完成。
db2 => backup database product to "d:\backup"
備份成功。此備份映像的時間戳記是:20100921111126
db2 => restore database product from d:\backup into newprod redirect without rolling forward
SQL1277W  正在執行重定向復原操作。現在,可以檢視錶空間配置,並且不使用自動儲存器
的表空間可以重新配置它們的容器。
DB20000I  RESTORE DATABASE命令成功完成。
db2 => list tablespaces
           當前資料庫的表空間

 表空間標識                        = 0
 名稱                       = SYSCATSPACE
 型別                                       = 系統管理空間
 內容                                = 所有持久資料。常規表空間。
 狀態                   = 0x2001100
   詳細解釋:
     復原暫掛
     必須定義儲存器
     可以定義儲存器

 表空間標識                        = 1
 名稱                       = TEMPSPACE1
 型別                                       = 系統管理空間
 內容                                = 系統臨時資料
 狀態                   = 0x2001100
   詳細解釋:
     復原暫掛
     必須定義儲存器
     可以定義儲存器

 表空間標識                        = 2
 名稱                       = USERSPACE1
 型別                                       = 資料庫管理空間
 內容                                = 所有持久資料。大型表空間。
 狀態                   = 0x2001100
   詳細解釋:
     復原暫掛
     必須定義儲存器
     可以定義儲存器

注意:上面提示所有的表空間都處於 必須定義儲存器 狀態。為了繼續進行,使用如下方式重定義容器。

db2 => set tablespace containers for 0 using (path "D:\newprod01")
DB20000I  SET TABLESPACE CONTAINERS命令成功完成。
db2 => set tablespace containers for 1 using (path "D:\newprod02")
DB20000I  SET TABLESPACE CONTAINERS命令成功完成。
db2 => set tablespace containers for 2 using (file "D:\newprod03\user.dat" 5120)
DB20000I  SET TABLESPACE CONTAINERS命令成功完成。

完成了容器的重定義,進行重定向復原。
db2 => restore database product continue
DB20000I  RESTORE DATABASE命令成功完成。
db2 => list tablespaces

           當前資料庫的表空間

 表空間標識                        = 0
 名稱                       = SYSCATSPACE
 型別                                       = 系統管理空間
 內容                                = 所有持久資料。常規表空間。
 狀態                   = 0x0000
   詳細解釋:
     正常

 表空間標識                        = 1
 名稱                       = TEMPSPACE1
 型別                                       = 系統管理空間
 內容                                = 系統臨時資料
 狀態                   = 0x0000
   詳細解釋:
     正常

 表空間標識                        = 2
 名稱                       = USERSPACE1
 型別                                       = 資料庫管理空間
 內容                                = 所有持久資料。大型表空間。
 狀態                   = 0x0000
   詳細解釋:
     正常

檢查表空間的狀態,重定向復原成功!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-674553/,如需轉載,請註明出處,否則將追究法律責任。

相關文章