IBM DB2數(shù)據(jù)庫(kù)快速恢復(fù)操作步驟
以下的文章主要向大家講述的是正確利用表空間的備份來對(duì)IBM DB2數(shù)據(jù)庫(kù)進(jìn)行快速的恢復(fù)的實(shí)際操作步驟,以下就是對(duì)IBM DB2數(shù)據(jù)庫(kù)恢復(fù)的實(shí)際操作步驟的介紹,希望會(huì)給你帶來一些幫助在此方面。
IBM DB2 數(shù)據(jù)庫(kù)
在DB2 V9版本中,提供了一個(gè)重要的新特性,即利用DB2表空間的備份來快速恢復(fù)數(shù)據(jù)庫(kù),甚至可以根據(jù)數(shù)據(jù)的重要性選擇恢復(fù)一部分重要數(shù)據(jù),達(dá)到快速恢復(fù)的目的。本文結(jié)合實(shí)例對(duì)DB2 V9的該重要技術(shù)特性做了詳細(xì)介紹,希望對(duì)用戶規(guī)劃系統(tǒng)備份/恢復(fù)策略有所幫助。
關(guān)于DB2數(shù)據(jù)庫(kù)的恢復(fù)(Rebuild)
當(dāng)我們的DB2數(shù)據(jù)庫(kù)由于一些嚴(yán)重錯(cuò)誤 ( 如存儲(chǔ)損壞等 ) 而導(dǎo)致數(shù)據(jù)庫(kù)庫(kù)損壞時(shí),我們通常需要在修復(fù)相關(guān)錯(cuò)誤后,通過Restore命令來進(jìn)行數(shù)據(jù)庫(kù)的恢復(fù)(DB2目前也支持通過 HADR 等多機(jī)容錯(cuò)機(jī)制實(shí)現(xiàn)系統(tǒng)高可用,本文僅對(duì)單機(jī)數(shù)據(jù)庫(kù)損壞,需要進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)的情況進(jìn)行探討 )。
一般的做法是通過以前的數(shù)據(jù)庫(kù)全備份來進(jìn)行整庫(kù)恢復(fù),然后通過日志對(duì)數(shù)據(jù)庫(kù)進(jìn)行前滾(RollForward),從而使數(shù)據(jù)庫(kù)恢復(fù)到接近災(zāi)難點(diǎn)的時(shí)間。但當(dāng)我們數(shù)據(jù)庫(kù)的數(shù)據(jù)量較大時(shí),數(shù)據(jù)庫(kù)的全備份和整庫(kù)恢復(fù)都會(huì)很是非常消耗時(shí)間的。
在DB2 V9版本中,提供了一個(gè)重要的新特性,即利用DB2表空間的備份來快速恢復(fù)IBM DB2數(shù)據(jù)庫(kù),甚至可以根據(jù)數(shù)據(jù)的重要性選擇恢復(fù)一部分重要數(shù)據(jù),達(dá)到快速恢復(fù)的目的。本文結(jié)合實(shí)例對(duì)DB2 V9的該重要技術(shù)特性做了詳細(xì)介紹,希望對(duì)用戶規(guī)劃系統(tǒng)備份 / 恢復(fù)策略有所幫助。
場(chǎng)景1:利用表空間備份來重建整個(gè)DB2數(shù)據(jù)庫(kù)
在進(jìn)行數(shù)據(jù)庫(kù)重建時(shí),DB2 V9現(xiàn)在能夠支持通過表空間一級(jí)的備份來重建整個(gè)數(shù)據(jù)庫(kù),而不需要整個(gè)數(shù)據(jù)庫(kù)的全備份。DB2的此項(xiàng)能力使得我們對(duì)核心系統(tǒng)的重要數(shù)據(jù)進(jìn)行快速備份和恢復(fù)成為可能。讓我們首先看以下的一個(gè)例子:
假設(shè)我們有一個(gè)數(shù)據(jù)庫(kù)TEST,該數(shù)據(jù)庫(kù)采用歸檔日志。某天,系統(tǒng)突然掉電,導(dǎo)致數(shù)據(jù)庫(kù)存放的磁盤損壞了。這時(shí),數(shù)據(jù)庫(kù)將處于不可用的狀態(tài),作為 DBA,我們需要迅速對(duì)數(shù)據(jù)庫(kù)進(jìn)行恢復(fù)。假如該數(shù)據(jù)庫(kù)有以下的表空間:
SYSCATSPACE ( 系統(tǒng)表空間 )
USERSPACE1 ( 用戶數(shù)據(jù)表空間 1)
USERSPACE2 ( 用戶數(shù)據(jù)表空間 2)
USERSPACE3 ( 用戶數(shù)據(jù)表空間 3)
你手頭可用于進(jìn)行IBM DB2數(shù)據(jù)庫(kù)恢復(fù)的數(shù)據(jù)包括 :
所有數(shù)據(jù)庫(kù)日志文件由于日志被存放在另外的磁盤上(而且很多時(shí),我們還會(huì)對(duì)日志進(jìn)行鏡像,因?yàn)樗鼈儗?shí)在太重要了),因此它們沒有損壞。
你沒有數(shù)據(jù)庫(kù)的全備份,但是你有以下的表空間備份:
TEST.3.DB2.NODE0000.CATN0000.20060515135047.001 - SYSCATSPACE 和 USERSPACE 1 表空間在 2006051513504 7 時(shí)間點(diǎn)的備份;
TEST.3.DB2.NODE0000.CATN0000.20060516135136.001 - USERSPACE 2 和 USERSPACE 3 表空間在 2006051613513 6 時(shí)間點(diǎn)的備份;
TEST.3.DB2.NODE0000.CATN0000.20060517135208.001 - USERSPACE 3 表空間在 2006051713520 8 時(shí)間點(diǎn)的備份。
對(duì)于傳統(tǒng)的Restore和Rollforward的DB2恢復(fù)策略,我們需要一個(gè)數(shù)據(jù)庫(kù)的全備份影像來進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)然后利用日志來進(jìn)行數(shù)據(jù)庫(kù)的前滾(Rollforward)操作,但不幸的是,在本例中,我們并沒有數(shù)據(jù)庫(kù)的全備份,而只有不同時(shí)間做的表空間備份。
錯(cuò)誤的數(shù)據(jù)庫(kù)恢復(fù)方法
如果我們?cè)噲D直接用表空間備份來恢復(fù)整個(gè)數(shù)據(jù)庫(kù),我們會(huì)得到以下的錯(cuò)誤提示:
清單1 :直接用表空間備份來恢復(fù)整個(gè)數(shù)據(jù)庫(kù)的錯(cuò)誤提示
- db2 restore db test taken at 20060517135208
- SQL2560N The target database is not identical to the source database
- for a restore from a table space level backup.
上述命令支持完整數(shù)據(jù)庫(kù)備份的數(shù)據(jù)庫(kù)恢復(fù),不支持表空間級(jí)別的數(shù)據(jù)庫(kù)恢復(fù)。
利用表空間備份恢復(fù)數(shù)據(jù)庫(kù)
在DB2 V9中,提供了一個(gè)新的功能,就是通過表空間備份和日志來快速重建整個(gè) IBM DB2數(shù)據(jù)庫(kù),這個(gè)功能是通過在RESTORE DATABASE命令中加入REBUILD選項(xiàng)來實(shí)現(xiàn)的。
以下的步驟幫助我們通過REBUILD選項(xiàng)來利用表空間備份恢復(fù)TEST數(shù)據(jù)庫(kù):
***步,我們利用表空間備份執(zhí)行帶REBUILD選項(xiàng)的RESTORE DATABASE命令恢復(fù)數(shù)據(jù)庫(kù)。
清單2:通過REBUILD選項(xiàng)來利用表空間備份恢復(fù)TEST數(shù)據(jù)庫(kù)
- db2 restore db test rebuild with all tablespaces in database taken at 20060517135208
這一步我們是從已有的幾個(gè)表空間備份影像中選取一個(gè)備份來進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)。一般,我們會(huì)選取最近備份的表空間影像,這個(gè)備份影像我們稱之為“目標(biāo)影像”(Target Image),因?yàn)樗宋覀冇糜诨謴?fù) TEST 數(shù)據(jù)庫(kù)所需的***的表空間備份、數(shù)據(jù)庫(kù)配置參數(shù)、日志序列等重要信息。實(shí)際上,這個(gè)“目標(biāo)影像”可以是任何一種備份 ( 全備份、表空間備份、增量備份、在線或離線的備份 )。在本例中,最近的一個(gè)備份影像是TEST.3.DB2.NODE0000.CATN0000.20060517135208.001,因此我們就選取它作為我們進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)的“目標(biāo)影像”。
當(dāng)我們執(zhí)行完上述RESTORE命令之后,TEST數(shù)據(jù)庫(kù)的結(jié)構(gòu)將被重建和恢復(fù)。我們可以得到IBM DB2數(shù)據(jù)庫(kù)的參數(shù)和其備份歷史之類的信息。如果我們發(fā)出LIST HISTORY命令 ( 如:LIST HISTORY ALL FOR TEST),我們將得到以下的輸出(參照清單 3) 。
清單3 :使用 LIST HISTORY查詢數(shù)據(jù)庫(kù)備份歷史信息
- Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
- R D 20060519121107001 F 20060517135208
- Contains 1 tablespace(s):
- 00001 USERSPACE3
- Comment: RESTORE TEST WITH RF
- Start Time: 20060519121107
- End Time: 20060519121108
- Status: A
- EID: 7 Location:
- Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
- R P 20060519121108001 F 20060515135047
- Contains 2 tablespace(s):
- 00001 USERSPACE1
- 00002 SYSCATSPACE
- Comment: RESTORE TEST WITH RF
- Start Time: 20060519121108
- End Time: 20060519121113
- Status: A
- EID: 8 Location:
- Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
- R P 20060519121113001 F 20060516135136
- Contains 1 tablespace(s):
- 00001 USERSPACE2
- Comment: RESTORE TEST WITH RF
- Start Time: 20060519121113
- End Time: 20060519121114
- Status: A
- EID: 9 Location:
- Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
- R D 20060519121107 R S0000001.LOG S0000003.LOG 20060518135208
- Contains 4 tablespace(s):
- 00001 USERSPACE3
- 00002 USERSPACE2
- 00003 USERSPACE1
- 00004 SYSCATSPACE
- Comment: REBUILD TEST WITH RF
- Start Time: 20060519121107
- End Time: 20060519121115
- Status: A
- EID: 10 Location:
如上,LIST HISTORY 命令產(chǎn)生了 4 條輸出條目 (EID 7 – EID 10),它們都和我們數(shù)據(jù)庫(kù)的恢復(fù)有關(guān)。***個(gè)條目,EID 7,包含了在 20060517135208 時(shí)間點(diǎn)做的備份影像,該備份影像中我們只對(duì) USERSPACE3 做了備份。然而,回顧我們進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)時(shí)發(fā)出的命令,參照清單 4。
清單4:使用ALL TABLESPACES參數(shù)恢復(fù)數(shù)據(jù)庫(kù)
- db2 restore db test rebuild with all tablespaces in database taken at 20060517135208
我們使用了ALL TABLESPACES參數(shù)要求恢復(fù)所有的表空間,所以DB2會(huì)利用LIST HISTORY中所看到的其它備份影像來恢復(fù)數(shù)據(jù)庫(kù)其它的表空間( 注意,在使用 TEST.3.DB2.NODE0000.CATN0000.20060516135136.001備份影像進(jìn)行恢復(fù)時(shí)EID=9,雖然該影像包括 USERSPACE2 和 USERSPACE3 的備份,但 DB2只恢復(fù)了USERSPACE2,因?yàn)?USERSPACE3 已經(jīng)通過更新的備份影像 TEST.3.DB2.NODE0000.CATN0000.20060517135208.001完成恢復(fù)了 )。
在完成上述恢復(fù)后,表空間將處于 ROLL-FORWARD 狀態(tài)。通過LIST HISTORY命令,我們可以看到表空間都被置成了 WITH RF 標(biāo)志,表明這些表空間處于ROLL-FORWARD 狀態(tài)。另外,為了使該恢復(fù)順利完成,所有備份影像都需要放在 HISTORY FILE所表明的備份路徑下,否則 DB2將會(huì)給出一個(gè)無法找到備份影像的錯(cuò)誤提示。
第二步,通過ROLLFORWARD DATABASE命令及TO END OF LOGS選項(xiàng)來前滾IBM DB2數(shù)據(jù)庫(kù)TEST,使其恢復(fù)到最近的一個(gè)同步時(shí)間點(diǎn)(Point in Time)。
清單5:前滾數(shù)據(jù)庫(kù)到最近的一個(gè)同步時(shí)間點(diǎn)
- db2 rollforward db test to end of logs
當(dāng)所有表空間恢復(fù)完畢,它們將處于rollforward pending的狀態(tài),我們需要通過數(shù)據(jù)庫(kù)日志和 rollforward 命令來對(duì)數(shù)據(jù)庫(kù)進(jìn)行前滾操作,從而將數(shù)據(jù)庫(kù)置為正常(Normal)狀態(tài)。
為了順利完成前滾操作,從上述備份影像最早一個(gè)時(shí)間點(diǎn)到最近一個(gè)時(shí)間點(diǎn)之間的數(shù)據(jù)庫(kù)日志必須存在,以用于將上述通過不同時(shí)間點(diǎn)備份影像進(jìn)行恢復(fù)的表空間前滾到同一時(shí)間點(diǎn)上。本例中,從 20060515135047 到 20060517135208 時(shí)間點(diǎn)的日志必須存在,我們才可以將表空間同步到同一個(gè)時(shí)間點(diǎn)。如果我們還想繼續(xù)前滾數(shù)據(jù)庫(kù),則我們還需要從 20060517135208 時(shí)間點(diǎn)往后的日志文件。
在本例中,我們假設(shè)這些日志文件都能夠在LOGPATH數(shù)據(jù)庫(kù)配置參數(shù)所指定的目錄中找到,如果它們被移動(dòng)了位置,則我們還需要在 ROLLFORWARD 命令中通過OVERFLOW LOG PATH選項(xiàng)來指定這些日志文件的新位置。
第三步,通過執(zhí)行ROLLFORWARD DATABASE命令來結(jié)束數(shù)據(jù)庫(kù)前滾的狀態(tài)。
清單6:結(jié)束IBM DB2數(shù)據(jù)庫(kù)前滾的命令
- db2 rollforward db test stop
該命令執(zhí)行完畢后,TEST數(shù)據(jù)庫(kù)就恢復(fù)到NORMAL狀態(tài),這樣您就可以正常使用它了。
【編輯推薦】
- DB2數(shù)據(jù)庫(kù)和PostgreSQL在開發(fā)的異同點(diǎn)有哪些?
- DB2 9打開打開通往 XML 之門的鑰匙
- 如何看待IBM DB2 9數(shù)據(jù)服務(wù)器的發(fā)展?
- 對(duì)DB2日志設(shè)置參數(shù)正確用法的描述
- 初學(xué)者必看的DB2數(shù)據(jù)庫(kù)的一些經(jīng)驗(yàn)總結(jié)