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