本文將為您介紹DB2數據庫中避免目標數據庫中的配置文件不被映像文件中的所覆蓋的方法。 供您參考,希望對您有所幫助。
在將DB2 用BACKUP 命令方式創建的數據庫備份映像文件由RESTORE命令復原到一個不同名的目標數據庫中時,DB2 將把源數據庫中的配置文件復制到復原的目標數據庫中,從而覆蓋了該數據庫原有的各配置參數的設置。在此提供一種避免目標數據庫中的配置文件不被映像文件中的所覆蓋的方法。
一. 數據庫種子值的概念:
在介紹這一方法之前,首先要介紹一下數據庫種子值(seed)的概念,它是數據庫的唯一標識,在數據庫的整個生命周期中,這個值都將始終保持不變。種子值是在數據庫創建時由數據庫管理器指定的,而在復原操作中,DB2 始終使用的是備份映像中的種子值。為獲取備份映像中的種子值,可通過 DB2ckbkp 命令從輸出中查詢。
將一個DB2 數據庫的全備份映像復原到一個已存在的數據庫中時,兩個數據庫的別名,數據庫名,及種子值都可能不相同,復原實用程序將對該數據庫進行一系列的操作,其中包括的一項操作就是比較源和目標數據庫的兩個種子值,如果種子值不同,則將備份映像中的數據庫配置文件復制到目標數據庫中,以覆蓋其原有的各配置參數;如果兩個值相同,則保留目標數據庫中的配置文件。
二. 結合實例說明實現的步驟:
下面我們舉例說明避免復原DB2 數據庫備份映像至不同名數據庫時,目標數據庫的配置文件被映像中的所覆蓋的方法,這裡源數據庫名SAMPLE,目標數據庫名為TEST,以對數據庫參數UTIL_HEAP_SZ 的修改來舉例:
·源數據庫種子值的獲取:
1. 查看源數據庫中 UTIL_HEAP_SZ 的值:
DB2 get db cfg for sample |find /i "util_"
實用程序堆大小(4KB) (UTIL_HEAP_SZ) = 5000
2. 脫機全備份源數據庫:
DB2 backup db sample
備份成功。此備份映像的時間戳記是:20050117162957
3. 查找源數據庫的種子值:
DB2ckbkp -H SAMPLE.0DB2NODE0000CATN00000501172957.001
=====================
MEDIA HEADER REACHED:
=====================
Server Database Name -- SAMPLE
Server Database Alias -- SAMPLE
ClIEnt Database Alias -- SAMPLE
Timestamp -- 20050117162957
Database Partition Number -- 0
Instance -- DB2
Sequence Number -- 1
Release ID -- A00
Database Seed -- 423AD856
:
:
從輸出中可知 SAMPLE 數據庫的種子值為 423AD856。
·目標數據庫種子值的獲取:
4. 創建目標數據庫:
DB2 create db test
5. 查看目標數據庫中 UTIL_HEAP_SZ 的值:
DB2 get db cfg for test |find /i "util_"
實用程序堆大小(4KB) (UTIL_HEAP_SZ) = 5000
6. 更改目標數據庫中參數值,並確認已與源數據庫的值不同:
DB2 update db cfg for test using util_heap_sz 10000
DB2 get db cfg for test |find /i "util_"
實用程序堆大小(4KB) (UTIL_HEAP_SZ) = 10000
7. 脫機全備份目標數據庫:
DB2 backup db test
備份成功。此備份映像的時間戳記是:20050126144943
8. 查找目標數據庫的種子值:
DB2ckbkp -H TEST.0DB2NODE0000CATN00000501264943.001
=====================
MEDIA HEADER REACHED:
=====================
Server Database Name -- TEST
Server Database Alias -- TEST
ClIEnt Database Alias -- TEST
Timestamp -- 20050126144943
Database Partition Number -- 0
Instance -- DB2
Sequence Number -- 1
Release ID -- A00
Database Seed -- 41F7C3EA
:
:
從輸出中可知 TEST 數據庫的種子值為 423AD856,也就是說,源和目標數據庫庫的種子值是互不相同的,它們分別唯一標識了源數據庫 SAMPLE 和目標數據庫 TEST。
·第一次復原操作(種子值不相同時):
9. 將源數據庫的映像文件復原到目標數據庫中:
DB2 restore db sample into test
SQL2528W 警告!復原到與備份映像數據庫相同的現有數據庫,但是現有數據庫的別名 "TEST" 與備份映像的別名 "SAMPLE" 不匹配,並且現有數據庫的數據庫名 "TEST" 與備份映像
的數據庫名 "SAMPLE" 不匹配。目標數據庫將被備份版本覆蓋。
想要繼續嗎?(y/n)y
10.復原操作完成後,再次查看目標數據庫中 UTIL_HEAP_SZ 的值:
DB2 get db cfg for test |find /i "util_"
實用程序堆大小(4KB) (UTIL_HEAP_SZ) = 5000
可以看到盡管在進行復原操作之前,TEST 庫中的 UTIL_HEAP_SZ 已被修改為 10000,但完成了復原操作之後,這一參數又被改回 5000,這就是由於源和目標庫的種子值不同,復原操作會將備份映像配置文件復制到目標數據庫中,從而覆蓋了原來目標數據庫的配置所導致的,所以 UTIL_HEAP_SZ 參數的值由原來的 10000 覆蓋回備份映像中的 5000。
·第一次復原操作後檢查目標庫的種子值變化:
11.復原操作完成後,再次脫機備份目標數據庫:
DB2 backup db test
備份成功。此備份映像的時間戳記是:20050126145640
12.利用新的備份映像再次查找目標數據庫的種子值:
DB2ckbkp -H 145640.001
=====================
MEDIA HEADER REACHED:
=====================
Server Database Name -- TEST
Server Database Alias -- TEST
ClIEnt Database Alias -- TEST
Timestamp -- 20050126145640
Database Partition Number -- 0
Instance -- DB2
Sequence Number -- 1
Release ID -- A00
Database Seed -- 423AD856
:
:
可以發現,復原操作之後目標數據庫 TEST 的種子值已和源數據庫 SAMPLE 的相同,均為 423AD856 了!這說明目標數據庫在復原操作的過程中獲取了備份映像中種子值,覆蓋了原種子值。
·第二次復原操作(種子值相同時):
13.再次更改目標數據庫中參數值,並確認更改已生效:
DB2 update db cfg for test using util_heap_sz 15000
DB2 get db cfg for test |find /i "util_"
實用程序堆大小(4KB) (UTIL_HEAP_SZ) = 15000
14.再次將源數據庫的映像文件復原到目標數據庫中:
DB2 restore db sample into test
15.復原操作完成後,再對目標數據庫中 UTIL_HEAP_SZ 的值進行查看:
DB2 get db cfg for test |find /i "util_"
實用程序堆大小(4KB) (UTIL_HEAP_SZ) = 15000
可以看到,這次對目標數據庫參數的修改未被剛完成的復原操作所使用的源數據庫映象所覆蓋,其原因就在於在這一復原操作之前,目標數據庫的種子值已因第一次的復原操作而與源數據庫的相同,從而未觸發覆蓋目標數據庫配置文件的操作,這樣就最終實現了避免復原 DB2 數據庫備份映像文件至不同名數據庫時,目標數據庫的配置文件被映像中的所覆蓋的情況。