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