前滾恢復(fù)模式的DB2分區(qū)數(shù)據(jù)庫(kù)的啟用
本文將為您介紹前滾恢復(fù)模式的DB2 分區(qū)數(shù)據(jù)庫(kù)的啟用方法,并將正確地利用BACKUP/RESTORE/ROLLFORWARD等命令進(jìn)行備份、恢復(fù)等操作,供您參考,希望對(duì)您有所幫助。
對(duì)于 DB2 的分區(qū)數(shù)據(jù)庫(kù),某些直接發(fā)出的 DB2 命令只作用于當(dāng)前一個(gè)分區(qū),備份和恢復(fù)(BACKUP/RESTORE)就屬于這一類(lèi)命令。但是對(duì)于分區(qū)數(shù)據(jù)庫(kù),由于同一數(shù)據(jù)庫(kù)的數(shù)據(jù)分布在多個(gè)分區(qū)上,則對(duì)它的備份和恢復(fù)操作就要考慮到各分區(qū)上數(shù)據(jù)的完整及同步問(wèn)題,因此可以在 DB2 命令前加上 db2_all 命令,以便 DB2 命令在數(shù)據(jù)庫(kù)的各個(gè)分區(qū)上被執(zhí)行,而無(wú)需分別對(duì)每個(gè)分區(qū)重復(fù)發(fā)出相同的命令。
另外在 DB2 中,啟用了前滾恢復(fù)模式的數(shù)據(jù)庫(kù),使用的是歸檔日志方式,而非缺省的循環(huán)日志方式。這樣,在進(jìn)行恢復(fù)操作時(shí),可在利用 RESTORE 命令恢復(fù)了數(shù)據(jù)庫(kù)或表空間的備份后,再通過(guò)前滾命令(ROLLFORWARD)命令前滾歸檔日志中的事務(wù),恢復(fù)數(shù)據(jù)庫(kù)備份時(shí)間點(diǎn)之后提交的事務(wù),最大程度的保護(hù)數(shù)據(jù)庫(kù)的數(shù)據(jù)。與備份和恢復(fù)命令不同的是,前滾命令僅能通過(guò)在分區(qū)數(shù)據(jù)庫(kù)的編目分區(qū)上運(yùn)行,來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)各分區(qū)的前滾操作。
下面就以一個(gè)啟用了前滾恢復(fù)模式的分區(qū)數(shù)據(jù)庫(kù) SAMPLE 為例介紹其備份、恢復(fù)以及前滾操作的具體步驟。這里假設(shè)該數(shù)據(jù)庫(kù)創(chuàng)建在一臺(tái)服務(wù)器上,具有四個(gè)分區(qū),其編目分區(qū)為0號(hào)分區(qū)。
一. 對(duì)分區(qū)數(shù)據(jù)庫(kù)的備份操作:
前面已經(jīng)介紹了,備份操作僅作用于分區(qū)數(shù)據(jù)庫(kù)的當(dāng)前分區(qū),所以要使用“db2_all”的命令實(shí)現(xiàn)對(duì)所有分區(qū)進(jìn)行備份(這里使用聯(lián)機(jī)備份方式),即:
db2_all "db2 backup db sample online"
但是上述命令對(duì)各分區(qū)的備份是以串行方式進(jìn)行的,為提高備份操作的性能,還有一種可使分區(qū)間以并行方式進(jìn)行的方法。即在上述命令的 DB2 命令前加上以下選項(xiàng)來(lái)實(shí)現(xiàn)命令的并行:
<<+分區(qū)號(hào)< :表示后續(xù)命令作用于該分區(qū)。
<<-分區(qū)號(hào)< :表示后續(xù)命令作用于除該分區(qū)之外的其它分區(qū)。
||<<-分區(qū)號(hào)< 或 <<-分區(qū)號(hào); :表示后續(xù)命令作用于除該分區(qū)之外的其它分區(qū),并且是以并行方式進(jìn)行的。#p#
但由于備份和恢復(fù)操作要求獨(dú)占編目分區(qū),因此在對(duì)其它分區(qū)進(jìn)行并行方式的備份操作之前,首先必須完成該分區(qū)的備份操作。其方法為:
db2_all "<<+0< db2 backup db sample online" -- 對(duì)編目分區(qū)的備份
db2_all "||<<-0< db2 backup db sample online" -- 對(duì)其它分區(qū)的并行備份
或 db2_all "<<-0<; db2 backup db sample online"
注:分區(qū)數(shù)據(jù)庫(kù)的備份結(jié)束后會(huì)為每個(gè)分區(qū)都產(chǎn)生一個(gè)備份映象文件。
二. 對(duì)分區(qū)數(shù)據(jù)庫(kù)的恢復(fù)操作:
由于備份和恢復(fù)操作都只作用于當(dāng)前數(shù)據(jù)庫(kù)分區(qū),因此也可分為串行和并行的方式。為了在前滾恢復(fù)中介紹 OVERFLOW 選項(xiàng)的使用,這里我們將 SAMPLE 數(shù)據(jù)庫(kù)恢復(fù)到同實(shí)例的一個(gè)名為 SAMPNEW 的新數(shù)據(jù)庫(kù)中,其命令應(yīng)為:
·分區(qū)間串行方式:
db2_all "db2 restore db sample into sampnew without prompting"
注:由于是分區(qū)數(shù)據(jù)庫(kù),因此在完成了第一個(gè)分區(qū)的恢復(fù)操作,開(kāi)始第二個(gè)分區(qū)的恢復(fù)操作時(shí)系統(tǒng)會(huì)出現(xiàn) SQL2529W 的警告,表明數(shù)據(jù)庫(kù)已存在,是否要覆蓋的提示,而在某些平臺(tái)下,如 Linux,這一提示會(huì)導(dǎo)致分區(qū)數(shù)據(jù)庫(kù)恢復(fù)操作的失敗,如:
$ db2_all "db2 restore db sample into sapmnew"
DB20000I The RESTORE DATABASE command completed successfully.
rhas3: db2 restore db sample into sapmnew completed ok
SQL2529W Warning! Restoring to an existing database that is different from the backup image database, and the alias name "SAPMNEW" of the existing database do es not match the alias name "SAMPLE" of the backup image, and the database name "SAPMNEW" of the existing database does not match the database name "SAMPLE" of the backup image. The target database will be overwritten by the backup version. The Roll-forward recovery logs associated with the target database will be deleted.
Do you want to continue ? (y/n) SQL2001N The utility was interrupted. The output data may be incomplete.
rhas3: db2 restore db sample into sapmnew completed rc=4
因此建議在上述命令中加入了“WITHOUT PROMPTING”的選項(xiàng),以避免該提示的出現(xiàn)。#p#
·分區(qū)間并行方式
db2_all "<<+0< db2 restore db sample into sampnew"
db2_all "||<<-0< db2 restore db sample into sampnew without prompting"
或 db2_all "<<-0<; db2 restore db sample into sampnew without prompting"
因編目分區(qū)是第一個(gè)進(jìn)行恢復(fù)的分區(qū),所以無(wú)需加“WITHOUT PROMPTING”選項(xiàng)。
由于我們使用的備份映象文件是通過(guò)聯(lián)機(jī)備份產(chǎn)生的,因此在恢復(fù)操作結(jié)束后,數(shù)據(jù)庫(kù)將處于前滾暫掛狀態(tài),必須通過(guò)前滾操作前滾歸檔日志,以取消前滾暫掛狀態(tài),使數(shù)據(jù)庫(kù)最終可用。
三. 對(duì)分區(qū)數(shù)據(jù)庫(kù)的前滾操作:
由于新數(shù)據(jù)庫(kù) SAMPNEW 的日志路徑下不包含源 SAMPLE 數(shù)據(jù)庫(kù)日志路徑下的歸檔日志文件,所以在前滾操作之前,需要將 SAMPLE 的歸檔日志文件復(fù)制到一個(gè)特定的路徑下,然后在發(fā)出前滾命令時(shí),使用 OVERFLOW 選項(xiàng)來(lái)指定該路徑,以替代 SAMPNEW 的日志路徑來(lái)提供前滾操作要使用的歸檔日志文件。
為查找源 SAMPLE 數(shù)據(jù)庫(kù)歸檔日志存放的路徑,可利用如下命令:
db2_all "db2 get db cfg for sample" | grep "Path"
Path to log files = /home/db2inst1/db2inst1/NODE0000/SQL00001/SQLOGDIR/
Path to log files = /home/db2inst1/db2inst1/NODE0001/SQL00001/SQLOGDIR/
Path to log files = /home/db2inst1/db2inst1/NODE0002/SQL00001/SQLOGDIR/
Path to log files = /home/db2inst1/db2inst1/NODE0003/SQL00001/SQLOGDIR/
這里假設(shè)將各分區(qū)的歸檔日志文件對(duì)應(yīng)復(fù)制到 /sampnew 下,因前滾命令僅可在編目分區(qū)上執(zhí)行,所以在編目分區(qū)上前滾到日志文件尾并結(jié)束前滾狀態(tài)的命令應(yīng)寫(xiě)為:
db2 "rollforward db sampnew to end of logs and complete overflow log path
(/sampnew/NODE0000/SQL00001/SQLOGDIR,
/sampnew/NODE0001/SQL00001/SQLOGDIR on dbpartitionnum 1,
/sampnew/NODE0002/SQL00001/SQLOGDIR on dbpartitionnum 2,
/sampnew/NODE0003/SQL00001/SQLOGDIR on dbpartitionnum 3,
)"
注:對(duì)于0號(hào)分區(qū),在 OVERFLOW 選項(xiàng)中不能使用“ON DBPARTITIONNUM 0”的子句,否則會(huì)遇到:
SQL0104N An unexpected token "on" was found following "
的報(bào)錯(cuò),表明命令語(yǔ)法不正確。
至此,我們完成了對(duì)已啟用前滾恢復(fù)模式的 DB2 分區(qū)數(shù)據(jù)庫(kù) SAMPLE,利用 BACKUP 命令進(jìn)行聯(lián)機(jī)備份,并使用 RESTORE 和 ROLLFORWARD 命令恢復(fù)至一個(gè)新數(shù)據(jù)庫(kù) SAMPNEW 的舉例介紹。