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