劉 洋 衛(wèi)紅春
(西安石油大學(xué)計算機(jī)學(xué)院 陜西 西安 710065)
隨著各行業(yè)信息化建設(shè)的不斷深入,企業(yè)各部門信息系統(tǒng)數(shù)量不斷增加,這些系統(tǒng)之間存在著不同程度的隔離,導(dǎo)致資源無法相互使用,這就使得數(shù)據(jù)同步成為必然。
通常,目標(biāo)數(shù)據(jù)庫中所需的共享數(shù)據(jù)都是由源系統(tǒng)提供的。隨著數(shù)據(jù)量的不斷變化增長,資源和時間的消耗都是巨大的,特別是要求實時或近實時的生產(chǎn)庫,每次數(shù)據(jù)同步的間隔時間可能更短。因此如果只是加載自上次提取之后發(fā)生變化的數(shù)據(jù),那么效率就會明顯增加。但是,在數(shù)據(jù)量巨大的源系統(tǒng)中,識別并提取最新變化的數(shù)據(jù)即使是可能的,也非常困難。除了識別最新變化數(shù)據(jù)的挑戰(zhàn)之外,從一個源系統(tǒng)到多個目標(biāo)系統(tǒng)同步改變數(shù)據(jù)也是一個挑戰(zhàn)。
變化數(shù)據(jù)捕獲(Change Data Capture,CDC)就簡化了識別上次提取之后發(fā)生數(shù)據(jù)變化的過程,其也就成為解決各系統(tǒng)數(shù)據(jù)同步的基礎(chǔ)。CDC策略有多種,無論從實際應(yīng)用還是理論研究的角度,對于數(shù)據(jù)同步技術(shù)中變化數(shù)據(jù)捕獲的研究都具有重要的意義。
變化數(shù)據(jù)捕獲(CDC),是用來描述捕獲增量變化數(shù)據(jù)到其他數(shù)據(jù)庫或數(shù)據(jù)源。CDC能夠識別自上次提取之后發(fā)生變化的數(shù)據(jù),在對源表進(jìn)行增刪改操作的同時就可以提取,并且將變化數(shù)據(jù)保存在變更表中,然后以一種可控的方式利用視圖提供給目標(biāo)數(shù)據(jù)庫。
CDC是一個發(fā)布者/訂閱者模型。發(fā)布者識別捕獲變化數(shù)據(jù),將其保存在變更表中,提供給訂閱者;訂閱者創(chuàng)建訂閱者視圖,從發(fā)布者那里獲得授權(quán)的變化。一個發(fā)布者可以支持多個訂閱者用戶,也就是通常提到的一對多關(guān)系。
變更表中包含了源表中變更的數(shù)據(jù)。變更表中的數(shù)據(jù)分為兩部分,一部分是變更數(shù)據(jù)本身,發(fā)布者將源表的主鍵和訂閱者指定的數(shù)據(jù)加入到變更表中;另一部分是變更表中必要的和可選的控制數(shù)據(jù),可選的控制數(shù)據(jù)由發(fā)布者在創(chuàng)建變更表時指定??刂茢?shù)據(jù)由CDC來管理。
變更集是一組變更的數(shù)據(jù),它作為整體來管理,可以保證事務(wù)的一致性。一個變更集屬于一個變更源,一個變更源可以包括多個變更集。
當(dāng)前CDC有兩種捕獲數(shù)據(jù)方式:同步CDC和異步CDC。異步CDC又分為3種模式:異步HotLog模式、異步分布式HotLog模式、異步AutoLog模式。
圖1 同步CDC模式
同步CDC模式通常都是在源數(shù)據(jù)庫上配置觸發(fā)器進(jìn)行變化數(shù)據(jù)捕獲。由于數(shù)據(jù)實時、連續(xù)在源系統(tǒng)中進(jìn)行捕獲,他是沒有任何延遲的。當(dāng)對同步對象進(jìn)行數(shù)據(jù)增刪改等操作時,觸發(fā)器被喚醒,變化數(shù)據(jù)開始被捕獲。同步CDC利用變更表和訂閱者試圖來實現(xiàn)。變化數(shù)據(jù)寫入變更表,為使用CDC提供了一個可擴(kuò)展的基礎(chǔ)架構(gòu),訂閱者針對變更表的數(shù)據(jù)可以獲得一致數(shù)據(jù)變更集視圖。用戶可以擴(kuò)展和清除訂閱窗戶,通過數(shù)據(jù)庫視圖隱式的改變數(shù)據(jù)集。如果沒有任何用戶訂閱變化數(shù)據(jù),變更表中的數(shù)據(jù)可以被清除。同步CDC通過PL/SQL包進(jìn)行調(diào)用。同步CDC的優(yōu)勢在于配置簡單,不需要配置復(fù)制、傳輸、提取等功能。
在異步HotLog模式中,變化數(shù)據(jù)捕獲是從源數(shù)據(jù)庫的online redo log中提取事務(wù)數(shù)據(jù)。在數(shù)據(jù)提交和寫入日志時存在一定的時間差,這個捕獲會有一些延遲。因為我們要設(shè)置變更表來存取變化的數(shù)據(jù),所以這個變更表一定要在源數(shù)據(jù)庫這端。圖 2就是一個簡單的 HotLog配置,LGWR(Log Writer)紀(jì)錄提交的事務(wù)到在線重做日志文件 (online redo log)文件中,用Oracle Stream方式自動在HotLog數(shù)據(jù)源中填入變化數(shù)據(jù)到變更集中的數(shù)據(jù)變更表。
圖2 異步HotLog模式
在一個異步HotLog模式下,變化數(shù)據(jù)捕獲是從源數(shù)據(jù)庫的online redo log文件中提取事務(wù)數(shù)據(jù)。不像上述的兩種模式,異步分布HotLog模式需要創(chuàng)建中間數(shù)據(jù)庫(Staging Database),變化數(shù)據(jù)捕獲的對象和動作橫跨源數(shù)據(jù)庫和中間庫。變更源在源數(shù)據(jù)庫中被定義,在中間庫發(fā)布。圖3說明異步HotLog分布模式的配置,源數(shù)據(jù)庫的變更源 從在線重做日志文件中捕獲變化的數(shù)據(jù),寫入源數(shù)據(jù)庫的變更源,再用Stream方式填充到中間庫的變更集中,數(shù)據(jù)會保存到變更集的變更表中。
在這種模式中,有兩個發(fā)布者,一個是在源數(shù)據(jù)庫、一個是在中間數(shù)據(jù)庫。源數(shù)據(jù)庫發(fā)布者定義一個數(shù)據(jù)庫鏈接(DB Link)連接到中間數(shù)據(jù)庫作為中間數(shù)據(jù)庫的發(fā)布者,同時在中間數(shù)據(jù)庫發(fā)布者也定義一個反向的數(shù)據(jù)庫鏈接到源數(shù)據(jù)庫作為源數(shù)據(jù)庫的發(fā)布者。中間庫發(fā)布者執(zhí)行所有的發(fā)布操作,也就是源數(shù)據(jù)庫操作引起的。
在這種模式下,反向的數(shù)據(jù)庫鏈接創(chuàng)建是必須存在的,主要是為了創(chuàng)建、修改、刪除中間數(shù)據(jù)庫中的變更源、變更集、變更表使用的,在變化捕獲的時候這個反向數(shù)據(jù)庫鏈接并沒有起作用。一旦中間庫中的變化數(shù)據(jù)源、變更集、變更表啟用后,這個數(shù)據(jù)庫鏈接是可以被刪除的,若要重新建立中間庫,就需要重新啟用這個數(shù)據(jù)庫鏈接了。
圖3 異步分布HotLog模式
在異步AutoLog模式下,數(shù)據(jù)變化通過重做傳輸服務(wù)(Redo Transport Services)服務(wù)從重做日志文件或者歸檔日志文件(Archived Log Files)中進(jìn)行捕獲。重做傳輸服務(wù)自動捕獲日志從源數(shù)據(jù)庫到中間庫。配置這種模式,需要設(shè)置數(shù)據(jù)庫參數(shù)LOG_ARCHIVE_DEST_n做本地日志的歸檔目錄。源數(shù)據(jù)庫的發(fā)布者配置日志傳輸服務(wù),然后從源數(shù)據(jù)庫拷貝重做日志文件到中間庫,在中間庫自動注冊重做日志文件進(jìn)行數(shù)據(jù)同步。異步AutoLog模式中,異步AutoLog online模式是從重做日志文件中進(jìn)行捕獲,異步Autolog Archive模式是從歸檔日志文件中進(jìn)行捕獲。如果設(shè)置了AutoLog Online模式,重做日志傳輸服務(wù)會從源庫拷貝重做日志到中間庫或者目的庫的備用重做日志(Standby Redo Log)文件中。源數(shù)據(jù)庫提交事務(wù)后,中間庫的變更集被填充數(shù)據(jù)。在中間庫,只能有一個AutoLog Online變更源,也只能包含一個變更集。如果設(shè)置了AutoLog Archive模式,日志傳輸服務(wù)是拷貝歸檔日志到中間庫,等中間庫接受到歸檔日志后,變更集將被填充。
圖4 異步Autolog Archive模式
圖4顯示的是AutoLog online配置模式,LGWR進(jìn)程拷貝重做日志文件到中間庫的備用重做日志文件。LGWR進(jìn)程是用Oracle Net網(wǎng)絡(luò)發(fā)送數(shù)據(jù)給中間庫的遠(yuǎn)程文件服務(wù)(remote file server,RFS)進(jìn)程。中間庫的RFS進(jìn)程會寫重做日志數(shù)據(jù)到備用重做日志文件。變化數(shù)據(jù)再通過Oracle Stream downstream的方式填充變化數(shù)據(jù)到變更表中。
圖5 異步AutoLog Archive模式
圖5顯示的是AutoLog Archive配置模式,歸檔進(jìn)程歸檔重做日志到LOG_ARCHIVE_DEST_1,然后再拷貝數(shù)據(jù)到LOG_ARCHIVE_DEST_2指定的中間庫。歸檔進(jìn)程也是通過Oracle Net發(fā)送重做日志數(shù)據(jù)給RFS進(jìn)程。在中間庫,RFS進(jìn)程將重做日志數(shù)據(jù)寫到被拷貝的日志文件。再通過Streams downstream方式填充變化數(shù)據(jù)到變更表中。
上述共研究4類變化數(shù)據(jù)的捕獲方式,各種方式都有其優(yōu)缺點(diǎn),各自依托于實際的技術(shù)領(lǐng)域和運(yùn)行的業(yè)務(wù)環(huán)境,沒有哪一種方式能取代其他方式成為通用標(biāo)準(zhǔn)。通過表1我們將各種方式對實際系統(tǒng)的特點(diǎn)及影響做一個簡單比較。
通過比較,我們可以看出各類CDC模式的技術(shù)特點(diǎn)。比如,同步CDC模式通過在源數(shù)據(jù)庫上建立觸發(fā)器的方式來獲取增量數(shù)據(jù),因此可以做到實時抽取,但是對源系統(tǒng)影響較大;異步HotLog模式需要直接從源數(shù)據(jù)庫解析日志文件,會有一段時間的延時,并會對源數(shù)據(jù)庫有一定的壓力;異步AutoLog模式則是直接把源數(shù)據(jù)庫的日志文件傳到中間庫,然后進(jìn)行日志分析,這樣的方式對源庫性能影響最小、數(shù)據(jù)傳遞性能最大。
表1
因此,根據(jù)數(shù)據(jù)庫規(guī)模,合理的利用變化數(shù)據(jù)捕獲技術(shù)能使我們更好的達(dá)到數(shù)據(jù)快速抽取的目標(biāo),以滿足業(yè)務(wù)需求。
[1]尤玉林,張憲民.一種可靠的數(shù)據(jù)倉庫中ETL策略與架構(gòu)設(shè)計[J].計算機(jī)工程與應(yīng)用,2005,41(10):172-174.
[2]張震.異構(gòu)數(shù)據(jù)庫同步系統(tǒng)的研究與實現(xiàn)[J].計算機(jī)應(yīng)用,2002,22:43-45.
[3]Ooi B C,Shu Y F,Tan K L.Relational data sharing in peer-based data management systems[J].ACM SIGMOD Record,2003,32:59-64.