本文討論的內容限於同一平台下的 DB2 數據庫遷移。關於不同平台下的 DB2 數據庫遷移參見《不同平台之間的 DB2 數據庫遷移一例》。
數據庫恢復操作使用數據庫備份映象來重新創建數據庫。如果要將數據庫從一台機器克隆到另一台,最簡單的方法就是從備份映象恢復數據庫。除非源系統上的數據庫引用的文件系統和物理設備與目標系統的設置方法完全相同,否則在目標系統上還原數據庫就需要執行重定向恢復操作。
重定向恢復操作包括兩步數據庫恢復過程,並且中間有一個表空間容器定義步驟:
1. 帶 REDIRECT 選項發出 RESTORE DATABASE 命令。
2. 使用 SET TABLESPACE CONTAINERS 命令來定義被恢復的數據庫的表空間容器(DB2 需要知道您想要讓表空間駐留在目標系統上的什麼位置)。
3. 再次發出 RESTORE DATABASE 命令,這次指定 CONTINUE 選項。
重要!整個重定向恢復操作必須在同一個會話中調用;否則,將返回 SQL0900N,恢復操作會失敗,記住這一點很重要。確保不會發生這種情況的一個方法是創建並運行包含重定向恢復過程中全部三部分的腳本。
下面是一次相同平台的 DB2 數據庫使用重定向恢復的示例,腳本如下:
第一步,在源系統中離線完全備份數據庫
--源系統 ZYSJK
--源數據庫 YNDC
C:Documents and SettingsAdministrator>cd /d D:backupautobakdb2
D:backupautobakdb2>db2 backup db YNDC
這個映象的時間戳記是 20070315165040 ,該映象在 D:backupautobakYNDC.0DB2NODE0000CATN000020070315 中。
DB2 在發出 BACKUP DATABASE 命令的目錄中創建這個子目錄樹。子目錄名稱表示以下含義:
在這個子目錄樹中,將會有一個表示實際備份映象的文件(165040.0)。文件名表示獲取備份的時間。
第二步,在目標系統中創建相似的目錄,並將備份文件拷貝至 165040.0 的文件至該目錄下
C:Documents and SettingsAdministrator>cd
C:>mkdir D:backupautobakYNDC.0DB2NODE0000CATN000020070315
注意!這是關鍵步驟:如果沒有正確創建這個路徑,後續的數據庫恢復操作就會失敗。
第三步,查看源系統的數據庫表空間情況
C:Documents and SettingsAdministrator>db2 list tablespaces
當前數據庫的表空間
表空間標識 = 0
名稱 = SYSCATSPACE
類型 = 系統管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
表空間標識 = 1
名稱 = TEMPSPACE1
類型 = 系統管理空間
內容 = 系統臨時數據
狀態 = 0x0000
詳細解釋:
正常
表空間標識 = 2
名稱 = USERSPACE1
類型 = 系統管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
表空間標識 = 3
名稱 = YNDC
類型 = 數據庫管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
表空間標識 = 4
名稱 = SYSTOOLSPACE
類型 = 系統管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
表空間標識 = 5
名稱 = USERTEMPSP
類型 = 數據庫管理空間
內容 = 用戶臨時數據
狀態 = 0x0000
詳細解釋:
正常
表空間標識 = 6
名稱 = TEMPSPACE8K
類型 = 數據庫管理空間
內容 = 系統臨時數據
狀態 = 0x0000
詳細解釋:
正常
其中,標識為 0,1,2 的表空間是系統缺省的默認表空間,無需進行重定向操作,這裡可以不必“理會”它。
標識為 3,5,6 的表空間需要進行重定向操作,腳本如下(以下語句必須寫在一個腳本中執行):
第四步,在目標系統中創建數據庫 YNDC ,然後通過表空間重定向還原數據庫
db2 create db YNDC;
執行下面的腳本,腳本清單:
restore db YNDC from d taken at 20070315165040 to d redirect;USING ( 'D:DB2ContainerTestDBSysData' )
set tablespace containers for 4 using (PATH 'G:DB2Containner_2YNDCsys' );
set tablespace containers for 3 using (FILE "G:DB2Containner_2YNDCYNDC" 5242880);
set tablespace containers for 5 using (FILE "G:DB2Containner_2YNDCUSERTEMPSP" 51200);
set tablespace containers for 6 using (FILE "G:DB2Containner_2YNDCTEMPSPACE8K" 51200);
restore db YNDC continue;
第五步,驗證目標系統中還原的數據庫的表空間
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
Edit by pjj in 2007-03-16 9:09 關於數據庫重定向恢復數據庫還有一點補充:如果源數據庫的緩沖池較大,還原後目標數據庫啟動不了的情況下,在還原成功之後請修改緩沖池的大小。另外,在指定表空間容器的時候,需要注意目標表空間和源表空間的管理類型必須一致,系統管理表空間對應系統管理表空間,數據庫管理表空間對應數據庫管理表空間。就本例來說,標識為 3,5,6的表空間為數據庫管理表空間,其它的為系統管理表空間。具體的設置語句也有不同,詳細內容請參考上面的語句。