實現(xiàn)DB2 分區(qū)數(shù)據(jù)庫備份與恢復的三步驟
下面的文章主要介紹的是實現(xiàn)DB2 分區(qū)數(shù)據(jù)庫備份與恢復的實際操作操作,其中主要包括對分區(qū)數(shù)據(jù)庫的備份操作,對分區(qū)數(shù)據(jù)庫的恢復操作以及對分區(qū)數(shù)據(jù)庫的前滾操作等內(nèi)容的詳細描述。
數(shù)據(jù)庫, 分區(qū)
舉例說明如何對啟用了前滾恢復模式的 DB2 分區(qū)數(shù)據(jù)庫,正確地利用 BACKUP/RESTORE/ROLLFORWARD 等命令進行備份,恢復以及帶有 OVERFLOW 選項的前滾操作。
對于 DB2 的分區(qū)數(shù)據(jù)庫,某些直接發(fā)出的 DB2 命令只作用于當前一個分區(qū),備份和恢復(BACKUP/RESTORE)就屬于這一類命令。但是對于硬盤數(shù)據(jù)恢復分區(qū)數(shù)據(jù)庫,由于同一數(shù)據(jù)庫的數(shù)據(jù)分布在多個分區(qū)上,則對它的備份和恢復操作就要考慮到各分區(qū)上數(shù)據(jù)的完整及同步問題,因此可以在 DB2 命令前加上 db2_all 命令,以便 DB2 命令在數(shù)據(jù)庫的各個分區(qū)上被執(zhí)行,而無需分別對每個分區(qū)重復發(fā)出相同的命令。
另外在 DB2 中,啟用了前滾數(shù)據(jù)恢復模式的數(shù)據(jù)庫,使用的是歸檔日志方式,而非缺省的循環(huán)日志方式。這樣,在進行恢復操作時,可在利用 RESTORE 命令恢復了數(shù)據(jù)庫或表空間的備份后,再通過前滾命令(ROLLFORWARD)命令前滾歸檔日志中的事務,恢復數(shù)據(jù)庫備份時間點之后提交的事務,最大程度的保護數(shù)據(jù)庫的數(shù)據(jù)。
與備份和恢復命令不同的是,前滾命令僅能通過在分區(qū)數(shù)據(jù)庫的編目分區(qū)上運行,來實現(xiàn)數(shù)據(jù)庫各分區(qū)的前滾操作。
下面就以一個啟用了前滾恢復模式的DB2 分區(qū)數(shù)據(jù)庫 SAMPLE 為例介紹其備份、恢復以及前滾操作的具體步驟。這里假設(shè)該數(shù)據(jù)庫創(chuàng)建在一臺服務器上,具有四硬盤數(shù)據(jù)恢復個分區(qū),其編目分區(qū)為0號分區(qū)。
一. 對分區(qū)數(shù)據(jù)庫的備份操作:
前面已經(jīng)介紹了,備份操作僅作用于DB2 分區(qū)數(shù)據(jù)庫的當前分區(qū),所以要使用“db2_all”的命令實現(xiàn)對所有分區(qū)進行備份(這里使用聯(lián)機備份方式),即:
- db2_all "db2 backup db sample online"
但是上述命令對各分區(qū)的備份是以串行方式進行的,為提高備份操作的性能,還有一種可使分區(qū)間以并行方式進行的方法。即在上述命令的 DB2 命令前加上以下選項來實現(xiàn)命令的并行:
<<+分區(qū)號< :表示后續(xù)命令作用于該分區(qū)。
<<-分區(qū)號< :表示后續(xù)命令作用于除該分區(qū)之外的其它分區(qū)。
||<<-分區(qū)號< 或 <<-分區(qū)號; :表示后續(xù)命令作用數(shù)據(jù)恢復于除該分區(qū)之外的其它分區(qū),并且是以并行方式進行的。
但由于備份和恢復操作要求獨占編目分區(qū),因此在對其它分區(qū)進行并行方式的備份操作之前,首先必須完成該分區(qū)的備份操作。其方法為:
db2_all "<<+0< db2 backup db sample online" -- 對編目分區(qū)的備份
db2_all "||<<-0< db2 backup db sample online" -- 對其它分區(qū)硬盤數(shù)據(jù)恢復的并行備份
或 db2_all "<<-0<; db2 backup db sample online"
注:分區(qū)數(shù)據(jù)庫的備份結(jié)束后會為每個分區(qū)都產(chǎn)生一個備份映象文件。
二. 對分區(qū)數(shù)據(jù)庫的恢復操作:
由于備份和恢復操作都只作用于當前數(shù)據(jù)庫分區(qū),因此也可分為串行和并行的方式。為了在前滾恢復中介紹 OVERFLOW 選項的使用,這里我們將 SAMPLE 數(shù)據(jù)庫恢復到同實例的一個名為 SAMPNEW 的新數(shù)據(jù)庫中,其命令應為:
分區(qū)間串行方式:
- db2_all "db2 restore db sample into sampnew without prompting"
注:由于是分區(qū)數(shù)據(jù)庫,因此在完成了第一個分區(qū)的恢復操作,開始第二個分區(qū)的恢復操作時系統(tǒng)會出現(xiàn) SQL2529W 的警告,表明數(shù)據(jù)庫已存在,是否要覆蓋數(shù)據(jù)恢復的提示,而在某些平臺下,如 Linux,這一提示會導致DB2 分區(qū)數(shù)據(jù)庫恢復操作的失敗,如:
- $ 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
因此建議在上述硬盤數(shù)據(jù)恢復命令中加入了“WITHOUT PROMPTING”的選項,湖南SEO,以避免該提示的出現(xiàn)。
分區(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ū)是第一個進行恢復的分區(qū),所以無需加“WITHOUT PROMPTING”選項。
由于我們使用的備份映象文件是通過聯(lián)機備份產(chǎn)生的,因此在恢復操作結(jié)束后,數(shù)據(jù)庫將處于前滾暫掛狀態(tài),必須通過前滾操作前滾歸檔日志,以取消前滾暫掛狀態(tài),使數(shù)據(jù)庫最終可用。
三. 對分區(qū)數(shù)據(jù)庫的前滾操作:
由于新數(shù)據(jù)庫 SAMPNEW 的日志路徑下不包含源 SAMPLE 數(shù)據(jù)庫日志路徑下的歸檔日志文件,所以在前滾操作之前,需要將 SAMPLE 的歸檔日志文件復制到一個特定的路徑下,然后在發(fā)出前滾命令時,使用 OVERFLOW 選項來指定該路徑,以替代 SAMPNEW 的數(shù)據(jù)恢復日志路徑來提供前滾操作要使用的歸檔日志文件。
為查找源 SAMPLE 數(shù)據(jù)庫歸檔日志存放的路徑,可利用如下命令:
- 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ū)的歸檔日志文件對應復制到 /sampnew 下,因前滾命令僅可在編目分區(qū)上執(zhí)行,所以在編目分區(qū)上前滾到日硬盤數(shù)據(jù)恢復志文件尾并結(jié)束前滾狀態(tài)的命令應寫為:
- 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,
- )"
注:對于0號分區(qū),在 OVERFLOW 選項中不能使用“ON DBPARTITIONNUM 0”的子句,否則會遇到:
- SQL0104N An unexpected token "on" was found following "<identifier>". Expected tokens may include: ")". SQLSTATE=42601
的報錯,表明命令語法不正確。
至此,我們完成了對已啟用硬盤數(shù)據(jù)恢復前滾恢復模式的 DB2 分區(qū)數(shù)據(jù)庫 SAMPLE,利用 BACKUP 命令進行聯(lián)機備份,并使用 RESTORE 和 ROLLFORWARD 命令恢復至一個新數(shù)據(jù)庫 SAMPNEW 的舉例介紹。如果要了解更多關(guān)于 DB2 數(shù)據(jù)庫備份、恢復和前滾數(shù)據(jù)恢復命令的其它選項及其功能,可參看 DB2 的《命令參考手冊》。
【編輯推薦】
- DB2數(shù)據(jù)庫備份是否成功的驗證方案描述
- 如何看待IBM DB2 9數(shù)據(jù)服務器的發(fā)展?
- DB2 9打開打開通往 XML 之門的鑰匙
- DB2編程的正確應用程序
- 如何用DB2 V9.1for z/OS來實現(xiàn)應用程序會話鎖定?