
摘要:隨著財務系統數據庫的使用時間增長,數據庫中的數據量也會增加,數據量越大也意味著數據庫備份與恢復所需要的成本就越高,不僅是備份所需時間越來越長,恢復數據所需時間也隨之增長;當數據庫發生意外而導致數據庫中的數據不可修復的時候,容災遠比備份更能快速有效的恢復生產業務的數據;在實際的使用過程中,我們也可以把容災當做是一個活動的備份來使用,主要介紹了Oracle Data Guard和GoldenGate。
關鍵詞:Oracle Data Guard;GoldenGate;Redo Log;Archive Log;Standby Redo Log
一、前言
財務系統作為企業關鍵信息系統,財務數據的保護顯得尤為重要。Data Guard和GoldenGate都是數據庫的容災工具,我們在做容災工具選型時,使用哪一個容災工具更好,就需要清楚Data Guard和GoldenGate的工作方式,從需求去思考選擇哪一款容災工具更適合業務架構。
二、日志文件
Oracle Data Guard和GoldenGate實現數據同步都與數據庫的日志文件密不可分,因此要先了解Redo Log和Archive Log,明白他們是如何使數據同步的,才能做出合適的選擇。
(一) Redo Log
Redo Log也稱為重做日志或者聯機重做日志,重做日志由兩個或多個重做日志文件組成,這些文件存儲了數據庫運行期間的所有操作,記錄了數據庫更新信息,每個Oracle數據庫實例都有一個正在處于使用中的重做日志,也是數據庫數據恢復的關鍵,更能在數據庫實例發生故障時保護數據。
(二) Archive Log
Archive Log也可以稱為歸檔日志或者歸檔重做日志,官方解釋是將已經寫滿的重做日志保存到一個或多個離線日志文件,統稱為歸檔日志,相當于重做日志文件的一個離線備份。只有數據庫處于歸檔模式下才會產生歸檔日志文件,歸檔日志的主要價值是數據庫恢復[1]。
“圖1 重做日志與歸檔日志實際參考”中顯示了重做日志文件的SEQUENCE對應了當前已經歸檔的文件編號,v$log視圖中SEQUENCE的9、10都已經歸檔并可以查看到,11代表著重做日志正在記錄當前數據庫所有更改操作。
“圖2日志歸檔后的實際參考”,說明當一個重做日志已經被寫滿或者手動切換日志后,都會生產一個歸檔日志。
(三) Standby Redo Log
備用重做日志用于Data Guard中,備用重做日志相當于重做日志的一個在線備份,在Data Guard最高性能模式中推薦使用備用重做日志。官方建議,創建的備用重做日志組最好比重做日志組多一組,這樣備份數據庫始終有一個日志處于ACTIVE狀態。
三、Data Guard
(一) Data Guard簡介
Oracle Data Guard是當前Oracle數據庫容災最有效的解決方案,用于保護數據庫的高可用性、數據保護和災難恢復。提供了一整套服務,來用于創建、維護、管理和監控一個或多個備用數據庫。它將這些備用數據庫作為主數據庫的副本進行維護,防止主數據庫的數據損壞。如果主數據庫不可用,它就可以將任何一個備用數據庫切換為主數據庫,最大限度地減少停機時間;Data Guard一旦創建便會自動維護每個備用數據庫。
(二) Data Guard備用數據庫的三種類型
1. 物理備用數據庫
物理備用數據庫(Physical standby database),提供物理結構上與主數據庫相同的備用數據庫,相當于主數據庫的副本或者是一個主數據庫的克隆,與主數據保持完全相同。物理備用數據庫通過重做日志應用技術與主數據保持一致,重做日志應用技術將從主數據庫接收到的重做日志數據應用到物理備用數據庫中。
物理備用數據庫在“READ ONLY”和“MOUNTED”狀態時都接收和應用重做日志的數據。
2. 邏輯備用數據庫
邏輯備用數據庫(Logical standby database),與主數據庫相同的邏輯數據信息。邏輯備庫是通過 SQL的應用與主庫保持同步,將從主庫接收到的重做日志里的數據內容轉換為SQL語句,然后在備用數據庫上執行這些SQL語句[2]。
使用邏輯備用數據庫,還可以接近于不停機的升級 Oracle 數據庫。因此,邏輯備用數據庫也可以同時用于數據保護和數據庫升級。
3. 快照備用數據庫
快照備用數據庫(Snapshot Standby Database)是完全可以更新數據的備用數據庫,也就是說快照備用數據庫可對外提供讀寫功能。
快照備用數據庫也可以正常從主數據庫接收和歸檔重做日志數據。與物理或邏輯備用數據庫不同的是,在關閉使用快照備用數據庫所做的任何數據更新之前,是不會應用接收到的重做日志數據。直到快照備用數據庫轉換回物理備用數據庫之后,才會應用接收到的重做日志數據[3]。
快照備用數據庫適用于對主數據庫有需求,但又不想在主數據庫上發生任何更改的時候,將物理備用數據庫轉換為快照備用數據庫后,可以臨時將備用數據庫當主數據使用。請注意,由于快照備用數據庫接收到的重做數據在轉換回物理備用之前不會應用,因此從主數據庫故障中恢復所需的時間與需要應用的重做數據量成正比。
(三) Data Guard三種數據保護模式
1.最大可用性模式
在不會損害主數據庫的可用性之下提供數據保護。事務提交后,等數據寫入重做日志或歸檔日志,并將日志同步到至少一個備用數據庫后才算完成工作。如果主數據庫沒有寫入到至少一個備用數據庫,這種情況就與最高性能模式一樣來運行,從而保障主數據庫的可用性,直到它再次將重做數據寫入并同步的備用數據庫才能以最大可用性模式運行[4]。
最大可用性模式可以確保數據的零丟失,除非主數據庫和備用數據庫同時出現故障。
2.最高性能模式
也是Data Guard默認保護模式。在不影響主數據庫性能的情況下提供數據保護。只要主數據庫的事務正常提交就代表事務已經完成。主數據庫的重做日志數據也會被寫入一個或多個備用數據庫;它允許備用數據庫與主數據庫的數據寫入有時間差,因此主數據庫性能不會受到備用數據庫的影響。
最高性能模式提供的數據保護低于最大可用性模式,如果主數據庫的事務及相關數據沒有發送到備庫,這些事務數據可能會被丟失,不能保證數據的零損失。
3.最大保護模式
最大保護模式可以確保在主數據庫發生故障時不會發生數據丟失。事務所需數據必須在事務提交之前同步到至少一個備用數據庫上的在線重做日志和備用重做日志。為了確保不會發生數據丟失,如果主數據庫沒有將數據同步到至少一個備用數據庫,主數據庫將會自動關閉,不再繼續處理事務。
最大保護模式雖然可以保證備用數據庫零數據丟失,但是會影響主數據庫的可用性。
(四) Data Guard的三種服務介紹
1.重做傳輸服務
控制重做日志數據從主數據庫到一個或者多個備用數據庫的自動傳輸,管理和解決因為網絡故障導致歸檔重做日志文件中的任何間隙問題,自動檢測備用數據庫丟失或者損壞的歸檔重做日志文件,并自動從主數據庫或者另一個備用數據庫檢索替換歸檔重做日志文件。
2.申請服務
申請重做備用數據庫上的數據以保持與主數據庫的事務同步。可以從歸檔的重做日志文件中應用重做數據,或者啟用實時應用,直接從備用重做日志文件填充它們,而不需要先在備用數據庫存檔重做數據。
3.角色轉換服務
通過數據庫切換和故障轉移來實現主備之間的角色轉換,在主備之間角色切換后,確保數據沒有丟失;角色轉換一般用于主數據庫的計劃維護;故障轉移只有在主數據庫發生故障時才會執行故障轉移,并且故障轉移會后,備用數據庫直接轉換為主數據庫。
四、GoldenGate
Oracle GoldenGate作為大多數用戶的關鍵業務系統容災、數據復制、數據同步的首選解決方案,被Oracle公司歸到中間件產品中。
它提供了日志的雙向數據復制,甚至將多個主數據庫的數據都采集操同一個備用數據庫,用作數據存儲或者數據分析。可以滿足零宕機時間數據庫的升級和遷移,實現亞秒級近實時數據的同步。
GoldenGate的主要進程
1.Manager進程
控制進程,負責啟動、監控和維護Extract、Pump、Replicate進程,創建事件、錯誤和閾值報告等。
2.Extract進程
Extract運行在主數據庫,負責從主數據庫的重做日志和歸檔日志文件中捕獲DML或者DDL操作的數據;Extract將捕獲的數據變化轉換為一種GoldenGate專有格式的文件記錄到Trail文件中,如果數據庫某個事物并沒有提交更改,而是執行了回滾操作,Extract在寫入Trail文件之前將丟棄該事務的操作。
3.Pump進程
Pump進程運行在主數據庫,負責將主數據庫的追蹤文件以數據塊形式通過TCP/IP協議發送到備用數據庫,一個備用數據庫至少對應一個Pump進程。
Replicate進程
Replicate進程運行在備用數據庫,負責讀取Pump進程發送過來的追蹤文件內容,并將追蹤文件重構 DML 或 DDL 操作,然后應用到備用數據庫中。
Extract和Replicate內部都有checkpoint機制,周期性檢查記錄讀寫位置,保證進程重啟或者系統宕機后,GoldenGate能夠恢復到以前狀態,保障數據不會有損失[5]。
五、Data Guard與GoldenGate區別
(一)從數據同步上分析
GoldenGate是捕獲重做日志或歸檔日志中的DML語句和DDL語句,然后再到備用數據庫執行,來實現數據同步。這個就與Data Guard的邏輯備用數據庫很相似,但是,在都使用Oracle產品的情況下會使用Data Guard的物理備用數據庫。
Data Guard容災主要是通過將整個重做日志或歸檔日志文件同步到物理備用數據庫,去應用歸檔日志文件來實現數據同步,物理備用數據庫可以實現和主數據庫的完全一致。
GoldenGate有個需要注意的地方,如果要捕獲DDL語句,就需要在主數據庫建立一個Oracle全庫級的Trigger來捕捉DDL操作到中間表,Extract去讀取中間表的DDL語句,并與DML語句根據CSN排序,通過這個方式來實現DDL操作的同步。
作為災備Data Guard的穩定性是高于GoldenGate的,如果只是實現容災功能,首推Data Guard。
(二)從備用數據庫對外服務上分析
GoldenGate的備用數據庫處于OPEN WRITE狀態,能夠正常對業務系統和用戶提供讀寫功能,但是要實現主備數據庫數據一致,就需要GoldenGate的雙向復制功能,主數據庫和備用數據庫雙向同步數據,不然就無法保障容災功能。
Data Guard的備用數據庫處于MOUNTED或者OPEN WRITE狀態下都能實現數據同步,但備用數據庫只有在READ ONLY狀態時,才能對外提供短時間的查詢服務。
(三)從主備切換上分析
GoldenGate可以實現即時切換。
Data Guard的主備之間的角色切換。
當出現意外事故,主數據庫不可恢復的情況下,GoldenGate接管時間小于Data Guard,甚至可以實現即時接管。
(四)從類型與版本選擇上分析
GoldenGate可以在不同類型、不同版本之間進行數據庫復制。
Data Guard僅運行在Oracle數據庫中。
(五)從運維角度上分析
Data Guard維護簡單,一旦配置完成后就很少出現問題。GoldenGate就需要使用它的命令方式來檢查和維護,對管理人員也有更高的技術要求。
(六)從配置結構上分析
GoldenGate可以實現一主一備、一主多備、多主一備、主備之間的雙向復制等多種結構。Data Guard可以實現一主對一備或者一主對多備的結構。
六、結語
現在數據庫中存儲的數據越來越多元化,數據可用范圍也越來越廣,無論是從商業價值還是研究價值,數據都很重要。那么數據的保護也就越來越重要,容災是每個數據庫都需要考慮的保護技術。
參考文獻
[1]戴冠平.叱咤風云:GoldenGate企業級運維實戰[M].清華大學出版社,2012.
[2]Database Online Documentation Library 11g Release 2 (11.2)之Data Guard Concepts and Administration
[3]Database Online Documentation Library 11g Release 2 (11.2)之Data Guard Broker
[4]Database Online Documentation Library 11g Release 2 (11.2)之Database Administrator's Guide
[5]GoldenGate Administering Oracle GoldenGate for Windows and UNIX
(作者單位:魏萬瓊、王亦然,中國石油勘探開發研究院西北分院計算機技術研究所、中國石油天然氣集團有限公司物聯網重點實驗室; 趙旭,中國石油勘探開發研究院西北分院計劃財務處)