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