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