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