對DB2 增量備份的正確運用描述
以下的文章主要是描述DB2 增量備份,我們大家都知道增量備份是 IBM® DB2® 9.5 for Linux®, UNIX®, and Windows® 在數(shù)據(jù)倉庫環(huán)境中的最為關(guān)鍵高可用性特性之一。本文描述DB2 增量備份的工作原理、何時應(yīng)該使用增量備份和確保順利恢復(fù)的策略。
本文根據(jù) DB2 9.5 進行了更新。
簡介
DB2 9.5 提供許多用于數(shù)據(jù)庫可用性和恢復(fù)的功能,包括:
按需日志歸檔
從分隔映像備份
雙份日志
在 Solaris 上的 Veritas 集群支持
本文討論對數(shù)據(jù)倉庫的最大備份改進之一 —— 增量備份。增量備份意味著僅對更改進行備份。這個功能允許您在某些數(shù)據(jù)庫環(huán)境中更加靈活地設(shè)計備份策略。
為什么僅備份更改?
您有沒有經(jīng)歷過對保存在文字處理器中的文檔進行少量更改,然后重新保存整個文檔?您這樣做的原因是什么?這很可能是因為您想要確保最后的更改被保存。使用關(guān)系數(shù)據(jù)庫時,有些東西比用于管理數(shù)據(jù)的硬件和軟件更加有價值,它就是數(shù)據(jù),數(shù)據(jù)本身是最有價值的資產(chǎn)。只有保護好數(shù)據(jù),才能產(chǎn)生其他價值。
DB2 有一些 DB2 引擎可以直接使用的備份和恢復(fù)命令。只要數(shù)據(jù)庫發(fā)生了變化,備份可以是離線(沒有用戶連接到數(shù)據(jù)庫)或在線進行的。一般 DB2 備份都是有 DBA 調(diào)度的,讓它們在特定的時間間隔運行,比如每周、每晚或每小時。“我更改了很多東西,所以我要保存我的工作” 的概念不適用于 DB2(用戶正在提交數(shù)據(jù)除外,不過這也不會復(fù)制出一個獨立的副本)。
相反,每個備份映像之間的更改被 DB2 日志捕獲。這兩個部分(備份映像和反映備份之后的所有更改的日志)是 DB2 災(zāi)難恢復(fù)計劃的基礎(chǔ)構(gòu)建塊。將備份映像和日志保存到處理 DB2 事務(wù)的機器之外的其他地方,這樣,即使運行 DB2 的機器進水或發(fā)生其他故障,您仍然可以恢復(fù)數(shù)據(jù)。
日志備份映像和日志的概念是為包含許多事務(wù)的傳統(tǒng)數(shù)據(jù)庫模型設(shè)計的,比如倉庫中的庫存系統(tǒng)。不過,在關(guān)系數(shù)據(jù)庫接管了 Information Technology 領(lǐng)域的時候,DB2 仍然用于儲存頻繁更改的數(shù)據(jù)。汽車部件倉庫的數(shù)據(jù)庫是非常活躍的(汽車比軟件更容易崩潰),但財產(chǎn)稅數(shù)據(jù)庫中的大部分行的更改則不是很頻繁,因為住戶入住一所房屋之后,一般都要呆上好幾年。
在紙張或縮微膠片上的數(shù)據(jù)難以估量,但大部分都需要我們保存,它們在關(guān)系數(shù)據(jù)庫中是非常有價值的。但是,如果為了保存每 n 個星期更改一次的內(nèi)容而備份美國國會圖書館,則抵消了使用數(shù)字儲存的好處。
在多媒體應(yīng)用程序中,大部分數(shù)據(jù)都儲存為大對象(LOB),這些 LOB 數(shù)據(jù)一般不需要進行日志記錄。對于這些情況,即使使用備份-日志策略也不夠理想。為此,DB2 引入了增量備份 —— 它僅保存最后的備份之后的更改。
增量備份的優(yōu)點
您可以通過兩種方式來使用 DB2 跟蹤更改,并將更改儲存到其他地方以備日后恢復(fù)使用:
讓 DB2 將每個 INSERT、UPDATE、DELETE、CREATE、ALTER、DROP、GRANT 和 REVOKE 語句寫到日志中。當需要執(zhí)行恢復(fù)時,可以進入最后的數(shù)據(jù)庫備份,然后讓 DB2 運行日志并重新創(chuàng)建所有更改(類似于福爾摩斯通過跟蹤每個可疑者的蹤跡來重構(gòu)犯罪事實)。這種方法在發(fā)生大量事務(wù)的環(huán)境中非常有效。
第二種方法是讓 DB2 在每個頁被更改時保存該頁的一個副本。這就是DB2 增量備份的工作原理。
如果數(shù)據(jù)庫非常活躍,那么在每個頁發(fā)生更改時保存它的副本沒有任何意義。因此這最終會在數(shù)據(jù)庫中保留每個頁的副本(幾乎是一個新的備份映像),這就背離了僅跟蹤漸進的頁更改的目標。對于這種情況,記錄 SQL 的日志可能更快。
另一方面,如果所有更改都集中在少量頁上,或者大部分頁幾乎不發(fā)生變化,那么在DB2 增量備份映像中儲存更改的頁能夠節(jié)省時間和儲存空間。如果一個頁面未發(fā)生任何更改,增量備份就會跳過它。
增量備份在事務(wù)比較少的數(shù)據(jù)庫上非常高效,因為您僅保存最后備份之后發(fā)生的更改,而不是數(shù)據(jù)庫中的所有頁。這使得備份和恢復(fù)操作更快、備份映像的體積更小。
啟用增量備份
要指定是否對數(shù)據(jù)庫啟用增量備份,需要使用 TRACKMOD 配置參數(shù)。這個參數(shù)指定數(shù)據(jù)庫管理器是否跟蹤數(shù)據(jù)庫修改,以讓備份工具能夠檢測到應(yīng)該對數(shù)據(jù)庫的哪些部分進行增量備份,并將其包含到備份映像中。
TRACKMOD 配置參數(shù)可以使用以下值之一:
NO — 禁用增量備份。不跟蹤或記錄數(shù)據(jù)庫頁更新。這是默認值。
YES — 啟用增量備份。當啟用了更新跟蹤之后,首次成功連接到數(shù)據(jù)庫之后更改將變得有效。注意,在DB2 增量備份對特定表空間執(zhí)行備份之前,必須對該表空間進行一個完整的備份(下面的例子提供詳細 解析)。
下面的例子顯示了如何為 SAMPLE 啟用增量備份:
- DB2 UPDATE DATABASE CONFIGURATION FOR SAMPLE USING TRACKMOD YES
在將 TRACKMOD 設(shè)置為 YES 之后,您必須在允許應(yīng)用程序更改數(shù)據(jù)之前備份數(shù)據(jù)庫。換句話說,您必須對數(shù)據(jù)庫進行完整的備份,從而為執(zhí)行增量備份提供一個基準點。此外,如果您隨后在數(shù)據(jù)庫中創(chuàng)建了一個新的表空間,那么必須進行包含該表空間的備份。這可以是數(shù)據(jù)庫備份或表空間備份。在備份之后,增量備份就可以包含新的表空間。
備份數(shù)據(jù)的類型
有兩種類型的增量備份:
完整增量備份:最后一次完整備份(不管該備份是完整的還是表空間備份映像)之后更改的所有頁的映像。例如,以下命令對 SAMPLE 數(shù)據(jù)庫執(zhí)行完整的增量備份:
- DB2 BACKUP DB SAMPLE ONLINE INCREMENTAL USE TSM
增量(Delta)。最后一次備份(增量、漸進或完整的備份映像)之后更改的所有頁。例如,以下命令對 SAMPLE 數(shù)據(jù)庫執(zhí)行DB2 增量備份:
- DB2 BACKUP DB SAMPLE ONLINE INCREMENTAL DELTA USE TSM
這為恢復(fù)受損數(shù)據(jù)庫提供 4 種類型的備份數(shù)據(jù):
完整的備份映像。這是任何恢復(fù)策略的構(gòu)建塊,如果沒有完整的備份映像,就不能開始恢復(fù)過程。如果讓備份上線,則需要在備份發(fā)生時發(fā)出的所有事務(wù)的日志。要恢復(fù)完整的備份,重播備份之后的所有事務(wù)的日志,該過程結(jié)束之后恢復(fù)就完成了。
增量備份。這包含最后完整備份之后的所有更改。要恢復(fù)增量備份,重播增量備份之后的所有事務(wù)的日志,該過程結(jié)束之后恢復(fù)就完成了。
增量備份。這包含最后一次任何類型的備份之后的所有更改。如果最后的備份是一個完整的備份映像,那么它和增量備份將提供最完整的備份。如果在增量備份之前執(zhí)行了增量備份,則需要增量備份、增量備份以及增量備份所依賴的完整備份映像。如果一個增量備份之前執(zhí)行了一個或多個其他增量備份,那么您需要在執(zhí)行增量備份或完整備份映像之后執(zhí)行的所有增量備份。
日志。日志包含可以恢復(fù)的最后一次備份之后的所有事務(wù)。
還可以從另一個角度考察備份 —— DB2 支持在整個數(shù)據(jù)庫級別和特定表空間級別的備份(更加細粒度的備份和恢復(fù)允許您將備份和恢復(fù)限制到關(guān)鍵的表空間)。備份和恢復(fù)增量和漸進映像同樣適用于表空間。
恢復(fù)策略
讓我們先看這樣一個針對數(shù)據(jù)庫的恢復(fù)策略,該策略將在每個星期日執(zhí)行一次完整備份,而在每天晚上執(zhí)行一次增量備份,如 圖 1 所示(圖中沒有顯示日志,但在最后的恢復(fù)之后需要使用)。
如果您需要恢復(fù)到 Monday,則需要使用 Sunday 夜間備份映像進行恢復(fù),并應(yīng)用所有可用的日志。
如果您需要恢復(fù) Tuesday 和 Sunday 之間的數(shù)據(jù),則需要恢復(fù)前一個 Sunday 的完整備份映像,然后恢復(fù)前一個夜間的DB2 增量備份映像,最后應(yīng)用恢復(fù)的漸進映像之后的所有日志。
所有恢復(fù)都需要:
一個完整的備份映像
0 個或 1 個增量備份
一天的日志
注意,在這些場景中,每個增量備份都會不斷增長,直到構(gòu)成一個完整的備份。這是因為隨著時間的推移,DB2 增量備份包含越來越多的更改頁。例如,Saturday 備份可能包含 6 天的更改,而 Monday 備份僅包含一天的更改。
自動恢復(fù)
如果您使用 INCREMENTAL AUTOMATIC 關(guān)鍵字進行恢復(fù),那么 DB2 將決定恢復(fù)什么內(nèi)容。例如:
- DB2 RESTORE DATABASE SAMPLE INCREMENTAL AUTOMATIC TAKEN AT (SAT)
當您指定 INCREMENTAL AUTOMATIC 時,DB2 決定是否需要以前的備份映像并嘗試自動恢復(fù)它們。歷史文件決定所需的備份映像的順序。DB2 從最后一個包含需要恢復(fù)的所有表空間的完整副本的備份映像開始,然后應(yīng)用隨后的漸進映射。隨后的備份映射不需要包含正在恢復(fù)的所有表空間。
在開始恢復(fù)之前,您還可以使用 db2ckrst 實用程序解析歷史文件并獲取所需的備份映像的描述。
【編輯推薦】