欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法及裝置與流程

文檔序號:11590425閱讀:160來源:國知局
本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法及裝置。
背景技術(shù)
::在容災(zāi)、數(shù)據(jù)備份、統(tǒng)計等應(yīng)用中,經(jīng)常會遇到數(shù)據(jù)庫復(fù)制問題,對于千萬級以上的大表的復(fù)制,由于性能的原因,一般采用增量復(fù)制。相關(guān)技術(shù)中常用的數(shù)據(jù)庫復(fù)制方法有oracle數(shù)據(jù)庫的流(stream)復(fù)制和goldengate,這兩種方法都是基于源數(shù)據(jù)庫日志文件的挖掘來獲取同步信息,這種方法的優(yōu)點是對應(yīng)用透明,缺點是依賴于具體的數(shù)據(jù)庫,且日志文件的挖掘需要占用較多的機器資源,對源數(shù)據(jù)的負(fù)荷影響較大。另外一種常用的數(shù)據(jù)庫復(fù)制方法是oracle的物化視圖。物化視圖也能提供增量刷新和保證數(shù)據(jù)一致性,但主要的缺點是不能在異構(gòu)數(shù)據(jù)庫環(huán)境中使用,且實現(xiàn)不同表間數(shù)據(jù)一致需要用到組刷新,而組刷新需要鎖表,不適合于源數(shù)據(jù)庫運行聯(lián)機事務(wù)處理(on-linetransactionprocessing,簡稱oltp)類型應(yīng)用且每秒交易量很高的場景。針對相關(guān)技術(shù)中的增量數(shù)據(jù)庫復(fù)制方法依賴于具體數(shù)據(jù)庫的類型的問題,目前尚未提出有效的解決方案。技術(shù)實現(xiàn)要素:本發(fā)明提供了一種數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法及裝置,以至少解決相關(guān)技術(shù)中的增量數(shù)據(jù)庫復(fù)制方法依賴于具體數(shù)據(jù)庫的類型的問題。根據(jù)本發(fā)明的一個方面,提供了一種數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法,包括:目標(biāo)數(shù)據(jù)庫按照預(yù)設(shè)規(guī)則采集源數(shù)據(jù)庫中的日志記錄;其中,預(yù)設(shè)規(guī)則包括:日志記錄的事務(wù)序列號大于已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號;目標(biāo)數(shù)據(jù)庫將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中;其中,目標(biāo)數(shù)據(jù)庫和源數(shù)據(jù)庫都為異構(gòu)數(shù)據(jù)庫。進(jìn)一步地,在目標(biāo)數(shù)據(jù)庫將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中之前,方法還包括:目標(biāo)數(shù)據(jù)庫獲取目標(biāo)數(shù)據(jù)庫本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號;按照預(yù)定規(guī)則從本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號中選擇一個事務(wù)序列號作為本次采集的事務(wù)序列號。進(jìn)一步地,按照預(yù)定規(guī)則從本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號中選擇一個事務(wù)序列號作為本次采集的事物序列號包括:對于本次采集的每個日志記錄所在的日志表,目標(biāo)數(shù)據(jù)庫獲取日志表中所有日志記錄對應(yīng)的事務(wù)序列號中的最大事務(wù)序列號;目標(biāo)數(shù)據(jù)庫將所有日志表的最大事務(wù)序列號中的最小事務(wù)序列號作為本次采集的事務(wù) 序列號。進(jìn)一步地,在目標(biāo)數(shù)據(jù)庫將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中之后,方法還包括:目標(biāo)數(shù)據(jù)庫記錄本次采集的事務(wù)序列號。進(jìn)一步地,目標(biāo)數(shù)據(jù)庫將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中包括:針對每個日志記錄所在的日志表,目標(biāo)數(shù)據(jù)庫根據(jù)日志表對應(yīng)的主鍵,獲取日志表中事務(wù)序列號最大的日志記錄;目標(biāo)數(shù)據(jù)庫將日志表中事務(wù)序列號最大的日志記錄復(fù)制到目標(biāo)表中。進(jìn)一步地,目標(biāo)數(shù)據(jù)庫將日志表中事務(wù)序列號最大的日志記錄復(fù)制到目標(biāo)表中包括:目標(biāo)數(shù)據(jù)庫根據(jù)日志表的主鍵,查找主鍵對應(yīng)的目標(biāo)表;目標(biāo)數(shù)據(jù)庫根據(jù)日志表中事務(wù)序列號最大的日志記錄的操作類型和日志表的主鍵,對目標(biāo)表進(jìn)行操作。進(jìn)一步地,目標(biāo)數(shù)據(jù)庫根據(jù)日志表中事務(wù)序列號最大的日志記錄的操作類型和日志表的主鍵,對目標(biāo)表進(jìn)行操作包括以下至少之一:在操作類型為刪除操作時,目標(biāo)數(shù)據(jù)庫根據(jù)日志表的主鍵刪除目標(biāo)表中與日志表的主鍵對應(yīng)的記錄;在操作類型為新增操作或者修改操作,以及目標(biāo)表中不存在與日志表的主鍵對應(yīng)的記錄時,目標(biāo)數(shù)據(jù)庫將日志記錄的內(nèi)容作為新的記錄添加在目標(biāo)表中;在操作類型為新增操作或者修改操作,以及目標(biāo)表中已存在與日志表的主鍵對應(yīng)的記錄時,目標(biāo)數(shù)據(jù)庫以日志記錄的內(nèi)容更新目標(biāo)表中與日志表的主鍵對應(yīng)的記錄。進(jìn)一步地,目標(biāo)數(shù)據(jù)庫將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中包括:目標(biāo)數(shù)據(jù)庫以目標(biāo)數(shù)據(jù)庫中已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號加1為起點事務(wù)序列號,以本次采集的事務(wù)序列號為終點事務(wù)序列號,采用事務(wù)序列號遞增的方式,將每個日志表中與事務(wù)序列號所對應(yīng)的日志記錄依次復(fù)制到目標(biāo)表中。根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制裝置,應(yīng)用于目標(biāo)數(shù)據(jù)庫中,包括:采集模塊,用于按照預(yù)設(shè)規(guī)則采集源數(shù)據(jù)庫中的日志記錄;其中,預(yù)設(shè)規(guī)則包括:日志記錄的事務(wù)序列號大于已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號;復(fù)制模塊,用于將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中;其中,目標(biāo)數(shù)據(jù)庫和源數(shù)據(jù)庫都為異構(gòu)數(shù)據(jù)庫。進(jìn)一步地,裝置還包括:獲取模塊,用于獲取目標(biāo)數(shù)據(jù)庫本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號;選擇模塊,用于按照預(yù)定規(guī)則從本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號中選擇一個事務(wù)序列號作為本次采集的事物序列號。進(jìn)一步地,選擇模塊包括:第一獲取單元,用于對于本次采集的每個日志記錄所在的日志表,獲取日志表中所有日志記錄對應(yīng)的事務(wù)序列號中的最大事務(wù)序列號;比較單元,用于將所有日志表的最大事務(wù)序列號中的最小事務(wù)序列號作為本次采集的事務(wù)序列號。進(jìn)一步地,裝置還包括:記錄模塊,用于記錄本次采集的事務(wù)序列號。進(jìn)一步地,復(fù)制模塊包括:第二獲取單元,用于針對每個日志記錄所在的日志表,根據(jù)日志表對應(yīng)的主鍵,獲取日志表中事務(wù)序列號最大的日志記錄;第一復(fù)制單元,用于將日志表中事務(wù)序列號最大的日志記錄復(fù)制到目標(biāo)表中。進(jìn)一步地,第一復(fù)制單元包括:查找子單元,用于根據(jù)日志表的主鍵,查找主鍵對應(yīng)的目標(biāo)表;操作子單元,用于根據(jù)日志表中事務(wù)序列號最大的日志記錄的操作類型和日志表的主鍵,對目標(biāo)表進(jìn)行操作。進(jìn)一步地,操作子單元包括:刪除單元,用于在操作類型為刪除操作時,根據(jù)日志表的主鍵刪除目標(biāo)表中與日志表的主鍵對應(yīng)的記錄;添加單元,用于在操作類型為新增操作或者修改操作,以及目標(biāo)表中不存在與日志表的主鍵對應(yīng)的記錄時,將日志記錄的內(nèi)容作為新的記錄添加在目標(biāo)表中;更新單元,用于在操作類型為新增操作或者修改操作,以及目標(biāo)表中已存在與日志表的主鍵對應(yīng)的記錄時,以日志記錄的內(nèi)容更新目標(biāo)表中與日志表的主鍵對應(yīng)的記錄。進(jìn)一步地,復(fù)制模塊包括:第二復(fù)制單元,用于以目標(biāo)數(shù)據(jù)庫中已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號加1為起點事務(wù)序列號,以本次采集的事務(wù)序列號為終點事務(wù)序列號,采用事務(wù)序列號遞增的方式,將每個日志表中與事務(wù)序列號所對應(yīng)的日志記錄依次復(fù)制到目標(biāo)表中。通過本發(fā)明,采用目標(biāo)數(shù)據(jù)庫將從源數(shù)據(jù)中采集到的事務(wù)序列號大于已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號的事務(wù)序列號對應(yīng)的日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的技術(shù)手段,其中,源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫都為異構(gòu)數(shù)據(jù)庫,即實現(xiàn)了異構(gòu)數(shù)據(jù)庫間的增量數(shù)據(jù)復(fù)制方法,進(jìn)而使得增量復(fù)制方式不再需要依賴于數(shù)據(jù)庫的類型,進(jìn)而解決了相關(guān)技術(shù)中的增量數(shù)據(jù)庫復(fù)制方法依賴于具體數(shù)據(jù)庫的類型的問題。附圖說明此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:圖1是根據(jù)本發(fā)明實施例的數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法的流程圖;圖2是根據(jù)本發(fā)明優(yōu)選實施的源數(shù)據(jù)庫的數(shù)據(jù)操作標(biāo)示流程圖;圖3是根據(jù)本發(fā)明優(yōu)選實施例的目標(biāo)數(shù)據(jù)庫的增量數(shù)據(jù)復(fù)制流程圖;圖4是根據(jù)本發(fā)明優(yōu)選實施例的目標(biāo)數(shù)據(jù)庫的全量數(shù)據(jù)復(fù)制流程圖;圖5是根據(jù)本發(fā)明實施例的數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制裝置的結(jié)構(gòu)框圖一;圖6是根據(jù)本發(fā)明實施例的數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制裝置的結(jié)構(gòu)框圖二;圖7是根據(jù)本發(fā)明實施例的復(fù)制模塊54的結(jié)構(gòu)圖一;圖8是根據(jù)本發(fā)明實施例的復(fù)制模塊54的結(jié)構(gòu)圖二。具體實施方式下文中將參考附圖并結(jié)合實施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。在本實施例中提供了一種數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法,圖1是根據(jù)本發(fā)明實施例的數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法的流程圖,如圖1所示,該流程包括如下步驟:步驟s102,目標(biāo)數(shù)據(jù)庫按照預(yù)設(shè)規(guī)則采集源數(shù)據(jù)庫中的日志記錄;其中,預(yù)設(shè)規(guī)則包括:日志記錄的事務(wù)序列號大于已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號;步驟s104,目標(biāo)數(shù)據(jù)庫將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中;其中,目標(biāo)數(shù)據(jù)庫和源數(shù)據(jù)庫都為異構(gòu)數(shù)據(jù)庫。通過上述步驟,采用目標(biāo)數(shù)據(jù)庫將從源數(shù)據(jù)中采集到的事務(wù)序列號大于已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號的事務(wù)序列號對應(yīng)的日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的技術(shù)手段,其中,源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫都為異構(gòu)數(shù)據(jù)庫,即實現(xiàn)了異構(gòu)數(shù)據(jù)庫間的增量數(shù)據(jù)復(fù)制方法,進(jìn)而使得增量復(fù)制方式不再需要依賴于數(shù)據(jù)庫的類型,進(jìn)而解決了相關(guān)技術(shù)中的增量數(shù)據(jù)庫復(fù)制方法依賴于具體數(shù)據(jù)庫的類型的問題。需要說明的是,源數(shù)據(jù)庫為被復(fù)制的日志記錄所在的數(shù)據(jù)庫;目標(biāo)數(shù)據(jù)庫為目標(biāo)表所在的數(shù)據(jù)庫。一個元數(shù)據(jù)庫可以給多個目標(biāo)數(shù)據(jù)庫同步數(shù)據(jù),不同的目標(biāo)數(shù)據(jù)庫可以配置有不同的復(fù)制策略,比如:對用于容災(zāi)備份的目標(biāo)數(shù)據(jù)庫,可將采集周期設(shè)置為分鐘級;對用于統(tǒng)計的目標(biāo)數(shù)據(jù)庫,可將采集周期設(shè)置為小時或天一級。在本發(fā)明的一個實施例中,在步驟s104之前,上述方法還可以包括:目標(biāo)數(shù)據(jù)庫獲取目標(biāo)數(shù)據(jù)庫本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號;按照預(yù)定規(guī)則從本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號中選擇一個事務(wù)序列號作為本次采集的事務(wù)序列號。具體的,可以通過以下方式確定本次采集的事務(wù)序列號:對于本次采集的每個日志記錄所在的日志表,目標(biāo)數(shù)據(jù)庫獲取日志表中所有日志記錄對應(yīng)的事務(wù)序列號中的最大事務(wù)序列號;目標(biāo)數(shù)據(jù)庫將所有日志表的最大事務(wù)序列號中的最小事務(wù)序列號作為本次采集的事務(wù)序列號。在本發(fā)明的一個實施例中,上述步驟s104可以有多種表現(xiàn)形式,例如第一種表現(xiàn)方式:針對每個日志記錄所在的日志表,目標(biāo)數(shù)據(jù)庫根據(jù)日志表對應(yīng)的主鍵,獲取日志表中事務(wù)序列號最大的日志記錄;目標(biāo)數(shù)據(jù)庫將日志表中事務(wù)序列號最大的日志記錄復(fù) 制到目標(biāo)表中;第二種表現(xiàn)方式:目標(biāo)數(shù)據(jù)庫以目標(biāo)數(shù)據(jù)庫中已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號加1為起點事務(wù)序列號,以本次采集的事務(wù)序列號為終點事務(wù)序列號,采用事務(wù)序列號遞增的方式,將每個日志表中與事務(wù)序列號所對應(yīng)的日志記錄依次復(fù)制到目標(biāo)表中。對于第一種表現(xiàn)方式通過將日志表中事務(wù)序列號最大的日志記錄復(fù)制到目標(biāo)表中,對每一個變更日志記錄,由于采用了最大事務(wù)序列號復(fù)制的方式,即采用只復(fù)制最終結(jié)果,省略了中間結(jié)果的復(fù)制,提高了復(fù)制效率,第一種表現(xiàn)方式由于省略了中間步驟,需要所有的更新記錄一次提交(commit)以保證表間數(shù)據(jù)的一致性。對于第二種表現(xiàn)方式可以按照事物序列號遞增的順序追個復(fù)制,每個事務(wù)序列號處理完后都可以單獨提交,避免第一種表現(xiàn)方式一次性提交的數(shù)據(jù)量過多可能引起的rollback段溢出問題。具體地,采用哪種表現(xiàn)方式,可以根據(jù)實際需要進(jìn)行選擇,也可以兩者方式結(jié)合使用,并不限于此。對于第一種表現(xiàn)方式,目標(biāo)數(shù)據(jù)庫將日志表中事務(wù)序列號最大的日志記錄復(fù)制到目標(biāo)表中可以通過以下方式實現(xiàn):目標(biāo)數(shù)據(jù)庫根據(jù)日志表的主鍵,查找主鍵對應(yīng)的目標(biāo)表;目標(biāo)數(shù)據(jù)庫根據(jù)日志表中事務(wù)序列號最大的日志記錄的操作類型和日志表的主鍵,對目標(biāo)表進(jìn)行操作。具體地,目標(biāo)數(shù)據(jù)庫根據(jù)日志表中事務(wù)序列號最大的日志記錄的操作類型和日志表的主鍵,對目標(biāo)表進(jìn)行操作包括以下至少之一方式:在操作類型為刪除操作時,目標(biāo)數(shù)據(jù)庫根據(jù)日志表的主鍵刪除目標(biāo)表中與日志表的主鍵對應(yīng)的記錄;在操作類型為新增操作或者修改操作,以及目標(biāo)表中不存在與日志表的主鍵對應(yīng)的記錄時,目標(biāo)數(shù)據(jù)庫將日志記錄的內(nèi)容作為新的記錄添加在目標(biāo)表中;在操作類型為新增操作或者修改操作,以及目標(biāo)表中已存在與日志表的主鍵對應(yīng)的記錄時,目標(biāo)數(shù)據(jù)庫以日志記錄的內(nèi)容更新目標(biāo)表中與日志表的主鍵對應(yīng)的記錄。上述方法通過記錄表的增刪改日志記錄的方式實現(xiàn)變更數(shù)據(jù)的增量采集,同時給每個事務(wù)分配遞增的事務(wù)序列號,確保在采集不同表時,保持表間的數(shù)據(jù)一致性。對于第二種表現(xiàn)方式,可以在每次處理完一個事務(wù)序列號后提交,也可以處理一批事務(wù)序列號后提交。在所有日志表處理完畢后,將本次采集的事務(wù)序列號記錄到已采集的事務(wù)序列號中。為了更好地理解本申請,以下結(jié)合優(yōu)選的實施例對本申請做進(jìn)一步解釋。本發(fā)明提供了一種優(yōu)選的數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制方法,具體包括:源數(shù)據(jù)庫的數(shù)據(jù)操作標(biāo)示算法,目標(biāo)數(shù)據(jù)庫的增量數(shù)據(jù)復(fù)制算法,目標(biāo)數(shù)據(jù)庫的全量數(shù)據(jù)復(fù)制算法。(1)源數(shù)據(jù)庫的數(shù)據(jù)操作標(biāo)示算法:圖2是根據(jù)本發(fā)明優(yōu)選實施的源數(shù)據(jù)庫的數(shù)據(jù)操作標(biāo)示流程圖,如圖2所示,包括以下步驟:步驟s202,每一個需要同步的表(稱為源表),在源數(shù)據(jù)庫建立一個對應(yīng)的操作日 志表。操作日志表除了包含源表的所有列,同時包含以下三列:事務(wù)(transaction)序列號:用于記錄該操作對應(yīng)的事務(wù)序列號;增刪改操作標(biāo)志:記錄該日志對應(yīng)的數(shù)據(jù)庫操作,包括增加、修改、刪除三種操作;操作時間:該操作發(fā)生的時間;確定源表的主鍵;被復(fù)制的源表必須有唯一的主鍵;該主鍵唯一地標(biāo)識源表中每一條記錄,用來查找日志記錄或者進(jìn)行其他操作。所有需要同步的源表必須包含“事務(wù)序列號”列,用于記錄操作該條記錄時所對應(yīng)的事務(wù)序列號;步驟s204,每個事務(wù)(transaction)開始前,先申請事務(wù)序列號;步驟s206,在對源表中記錄進(jìn)行操作時,將申請的事務(wù)序列號填寫到源表的“事務(wù)序列號”列,在操作完源表后,將已操作記錄對應(yīng)的操作日志寫入日志表,寫入日志和操作源表在同一個事務(wù)中提交(commit),確保日志表和源表的數(shù)據(jù)一致性;步驟s208,源數(shù)據(jù)庫設(shè)置刷新最長時間間隔,超過最長刷新時間間隔的日志將被刪除,避免日志表過大影響性能。(2)目標(biāo)數(shù)據(jù)庫的增量數(shù)據(jù)復(fù)制算法:圖3是根據(jù)本發(fā)明優(yōu)選實施例的目標(biāo)數(shù)據(jù)庫的增量數(shù)據(jù)復(fù)制流程圖,如圖3所示,包括以下步驟:步驟s302,目標(biāo)數(shù)據(jù)庫讀取上次已同步的事務(wù)序列號,如果為第一次同步,已同步事務(wù)序列號為0。步驟s304,將源數(shù)據(jù)庫中所有事務(wù)序列號大于已同步序列號的日志記錄采集到目標(biāo)數(shù)據(jù)庫(相當(dāng)于上述實施例中步驟s104)。步驟s306,計算本次采集的事務(wù)序列號:取已采集的每個日志表最大的事務(wù)序列號;取所有日志表最大序列號中最小的事務(wù)序列號為本次采集的事務(wù)序列號(相當(dāng)于上述實施例中的本次采集的事務(wù)序列號)。步驟s308,判斷是否采用一次提交的復(fù)制算法,如果是,執(zhí)行步驟s310;如果否,執(zhí)行步驟s312。步驟s310,數(shù)據(jù)復(fù)制算法1(相當(dāng)于上述實施例中步驟s104的第一種表現(xiàn)形式):針對每個已采集到目標(biāo)數(shù)據(jù)庫的日志表,針對每個主鍵值,取日志表中事務(wù)序列號最大的記錄,將其復(fù)制到目標(biāo)表中。對于每個變更記錄,由于采用了最大事務(wù)序列號復(fù)制的方式,省略了該記錄中間變更過程的復(fù)制,提高了復(fù)制效率。本復(fù)制算法由于省略了中間步驟,需要所有的更新記錄一次提交(commit)以保證表間數(shù)據(jù)的一致性。具體的復(fù)制算法:根據(jù)日志表的主鍵查找目標(biāo)表,如果日志表的操作類型為刪除,則根據(jù)主鍵刪除目標(biāo)表對應(yīng)記錄;如果日志記錄的操作類型為新增或修改,且目標(biāo)表對應(yīng)的主鍵記錄不存在,則根據(jù)日志的內(nèi)容在目標(biāo)表新增一條記錄;如果日志記錄的操作類型為新增或修改,且目標(biāo)表對應(yīng)的主鍵記錄已存在,則以日志表的內(nèi)容更新目標(biāo)表的對應(yīng)記錄;所有記錄更新完畢后一次性提交(commit)。步驟s312,數(shù)據(jù)復(fù)制算法2((相當(dāng)于上述實施例中步驟s104的第二種表現(xiàn)形式)):本復(fù)制算法和數(shù)據(jù)復(fù)制算法1的區(qū)別是,按照事務(wù)序列號遞增的順序逐個復(fù)制,優(yōu)點是每個事務(wù)序列號處理完后都可單獨提交(commit),避免算法d)由于一次提交的數(shù)據(jù)量過多可能引起rollback段溢出問題。具體復(fù)制算法為:步驟1,以上次同步的事務(wù)序列號+1為起點,搜索所有的日志表,如有命中的記錄,進(jìn)行相應(yīng)的數(shù)據(jù)復(fù)制操作;步驟2,事務(wù)序列號遞增,搜索日志表,重復(fù)步驟1的操作;步驟3,事務(wù)序列號等于第c)步所獲取的事務(wù)序列號后終止循環(huán);步驟4,可以每次處理完一個事務(wù)序列號后提交,也可以處理一批事務(wù)序列號后提交(commit)復(fù)制任務(wù)。步驟s314,所有日志表處理完畢后,將本次采集的事務(wù)序列號記錄到已采集的事務(wù)序列號中;(3)目標(biāo)數(shù)據(jù)庫的全量數(shù)據(jù)復(fù)制算法:圖4是根據(jù)本發(fā)明優(yōu)選實施例的目標(biāo)數(shù)據(jù)庫的全量數(shù)據(jù)復(fù)制流程圖,如圖4所示,包括以下步驟:步驟s402,將目標(biāo)表清空后,將所有源表的數(shù)據(jù)全量復(fù)制到目標(biāo)數(shù)據(jù)庫;對于大業(yè)務(wù)量的oltp系統(tǒng),在采集的過程中,可能有數(shù)據(jù)不斷更新,全量采集后的數(shù)據(jù)不能確保表間的數(shù)據(jù)一致性;后續(xù)的三個步驟用來重新獲得目標(biāo)表間的數(shù)據(jù)一致性;步驟s404,取目標(biāo)數(shù)據(jù)庫中目標(biāo)表的最大事務(wù)序列號;步驟s406,定時掃描源數(shù)據(jù)庫的日志表的最大事務(wù)序列號;步驟s408,當(dāng)獲取的源數(shù)據(jù)庫日志表最大事務(wù)序列號大于全量采集目標(biāo)表的最大序列號時,啟動增量復(fù)制;具體過程同“目標(biāo)數(shù)據(jù)庫的增量數(shù)據(jù)復(fù)制算法”步驟s410,增量采集完成后,目標(biāo)數(shù)據(jù)庫實現(xiàn)了整庫數(shù)據(jù)一致性;將增量采集的事務(wù)序列號寫入已采集事務(wù)序列號中。下面以兩個源表table1和table2為示例,以偽碼的方式說明三個算法中的關(guān)鍵部分。假設(shè)源數(shù)據(jù)庫中有兩個表需要復(fù)制,分別為table1和table2表1:table1{pk/*主鍵*/col1/*列1*/col2/*列2*/transaction_seq/*事務(wù)序列號*/}表2:table2{pk/*主鍵*/col1/*列1*/col2/*列2*/transaction_seq/*事務(wù)序列號*/}對應(yīng)的兩個日志表:table1_sync_log{pk/*主鍵*/col1/*列1*/col2/*列2*/transaction_seq/*事務(wù)序列號*/operation_flagoperation_time}table2_sync_log{pk/*主鍵*/col1/*列1*/col2/*列2*/transaction_seq/*事務(wù)序列號*/operation_flagoperation_time}幾個主要算法的說明:源數(shù)據(jù)庫的數(shù)據(jù)操作標(biāo)示算法示例:update_transaction(i_table1_pk,i_table1_col1,i_table1_col2,i_table2_pk,i_table2_col1,i_table2_col2,)目標(biāo)數(shù)據(jù)庫獲取復(fù)制事務(wù)序列號算法示例,即步驟s306:目標(biāo)數(shù)據(jù)庫復(fù)制算法1,即步驟s310:目標(biāo)數(shù)據(jù)庫復(fù)制算法2,即步驟s312:本發(fā)明實施例通過記錄表的增刪改日志的方式實現(xiàn)變更數(shù)據(jù)的增量采集,同時給每個事務(wù)分配遞增的事務(wù)序列號,確保在采集不同表時,保持表間的數(shù)據(jù)一致性。本發(fā)明的特點是源數(shù)據(jù)庫只負(fù)責(zé)記錄數(shù)據(jù)庫操作日志和事務(wù)序列號,目標(biāo)數(shù)據(jù)庫負(fù)責(zé)采集算法。本發(fā)明的另一特點是數(shù)據(jù)復(fù)制時只復(fù)制最終結(jié)果,省略了記錄修改中間結(jié)果的復(fù)制,提高了復(fù)制效率。例如,一條記錄在數(shù)據(jù)同步間隔期間發(fā)生了多次變更,在日志表中有多條對應(yīng)的操作記錄,目標(biāo)數(shù)據(jù)庫復(fù)制數(shù)據(jù)時只根據(jù)事務(wù)序列號最大的日志做更新操作,忽略了中間的更新過程,提升了同步效率。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。在本實施例中還提供了一種數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制裝置,該裝置用于實現(xiàn)上述實施例及優(yōu)選實施方式,已經(jīng)進(jìn)行過說明的不再贅述。如以下所使用的,術(shù)語“模塊”可以實現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以下實施例所描述的裝置較佳地以軟件來實現(xiàn),但是硬件,或者軟件和硬件的組合的實現(xiàn)也是可能并被構(gòu)想的。圖5是根據(jù)本發(fā)明實施例的數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制裝置的結(jié)構(gòu)框圖一,如圖5所示,該裝置包括:采集模塊52,用于按照預(yù)設(shè)規(guī)則采集源數(shù)據(jù)庫中的日志記錄;其中,預(yù)設(shè)規(guī)則包括:日志記錄的事務(wù)序列號大于已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號;復(fù)制模塊54,與上述采集模塊52連接,用于將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中;其中,目標(biāo)數(shù)據(jù)庫和源數(shù)據(jù)庫都為異構(gòu)數(shù)據(jù)庫。通過上述裝置,實現(xiàn)了源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫間的增量復(fù)制方法,而源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫為異構(gòu)數(shù)據(jù)庫,進(jìn)而使得增量復(fù)制方式不再需要依賴于數(shù)據(jù)庫的類型,實現(xiàn)了異構(gòu)數(shù)據(jù)庫間的增量數(shù)據(jù)復(fù)制方法,進(jìn)而解決了相關(guān)技術(shù)中的增量數(shù)據(jù)庫復(fù)制方法依賴于具體數(shù)據(jù)庫的類型的問題。需要說明的是,源數(shù)據(jù)庫為被復(fù)制的日志記錄所在的數(shù)據(jù)庫;目標(biāo)數(shù)據(jù)庫為目標(biāo)表 所在的數(shù)據(jù)庫。一個元數(shù)據(jù)庫可以給多個目標(biāo)數(shù)據(jù)庫同步數(shù)據(jù),不同的目標(biāo)數(shù)據(jù)庫可以配置有不同的復(fù)制策略,比如:對用于容災(zāi)備份的目標(biāo)數(shù)據(jù)庫,可將采集周期設(shè)置為分鐘級;對用于統(tǒng)計的目標(biāo)數(shù)據(jù)庫,可將采集周期設(shè)置為小時或天一級。圖6是根據(jù)本發(fā)明實施例的數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制裝置的結(jié)構(gòu)框圖二,如圖6所示,上述裝置還包括:獲取模塊62,用于獲取目標(biāo)數(shù)據(jù)庫本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號;選擇模塊64,與上述獲取模塊62連接,用于按照預(yù)定規(guī)則從本次采集的所有日志記錄所對應(yīng)的事務(wù)序列號中選擇一個事務(wù)序列號作為本次采集的事物序列號。需要說明的是,上述選擇模塊64可以包括:第一獲取單元642,用于對于本次采集的每個日志記錄所在的日志表,獲取日志表中所有日志記錄對應(yīng)的事務(wù)序列號中的最大事務(wù)序列號;比較單元644,用于將所有日志表的最大事務(wù)序列號中的最小事務(wù)序列號作為本次采集的事務(wù)序列號。記錄模塊66,用于記錄本次采集的事務(wù)序列號。在本發(fā)明的一個實施例中,上述復(fù)制模塊54可以有多種表現(xiàn)方式,圖7是根據(jù)本發(fā)明實施例的復(fù)制模塊54的結(jié)構(gòu)圖一,如圖7所示,上述復(fù)制模塊54可以包括:第二獲取單元542,用于針對每個日志記錄所在的日志表,根據(jù)日志表對應(yīng)的主鍵,獲取日志表中事務(wù)序列號最大的日志記錄;第一復(fù)制單元544,用于將日志表中事務(wù)序列號最大的日志記錄復(fù)制到目標(biāo)表中。第一復(fù)制單元544可以包括:查找子單元5442,用于根據(jù)日志表的主鍵,查找主鍵對應(yīng)的目標(biāo)表;操作子單元5444,用于根據(jù)日志表中事務(wù)序列號最大的日志記錄的操作類型和日志表的主鍵,對目標(biāo)表進(jìn)行操作。需要說明的是,上述操作子單元5444可以包括刪除單元和/或添加單元和/或更新單元(圖中未示出):刪除單元,用于在操作類型為刪除操作時,根據(jù)日志表的主鍵刪除目標(biāo)表中與日志表的主鍵對應(yīng)的記錄;添加單元,用于在操作類型為新增操作或者修改操作,以及目標(biāo)表中不存在與日志表的主鍵對應(yīng)的記錄時,將日志記錄的內(nèi)容作為新的記錄添加在目標(biāo)表中;更新單元,用于在操作類型為新增操作或者修改操作,以及目標(biāo)表中已存在與日志表的主鍵對應(yīng)的記錄時,以日志記錄的內(nèi)容更新目標(biāo)表中與日志表的主鍵對應(yīng)的記錄。通過包含圖7所示的復(fù)制模塊54的裝置,實現(xiàn)了將日志表中事務(wù)序列號最大的日志記錄復(fù)制到目標(biāo)表中,對每一個變更日志記錄,通過采用最大事務(wù)序列號復(fù)制的方式,即采用只復(fù)制最終結(jié)果,省略了中間結(jié)果的復(fù)制,提高了復(fù)制效率,并且需要所有的更新記錄一次提交(commit)以保證表間數(shù)據(jù)的一致性。圖8是根據(jù)本發(fā)明實施例的復(fù)制模塊54的結(jié)構(gòu)圖二,如圖8所示,上述復(fù)制模塊54可以包括:第二復(fù)制單元82,用于以目標(biāo)數(shù)據(jù)庫中已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所 對應(yīng)的事務(wù)序列號加1為起點事務(wù)序列號,以本次采集的事務(wù)序列號為終點事務(wù)序列號,采用事務(wù)序列號遞增的方式,將每個日志表中與事務(wù)序列號所對應(yīng)的日志記錄依次復(fù)制到目標(biāo)表中。通過包含圖8所示的復(fù)制模塊54的裝置,可以按照事物序列號遞增的順序追個復(fù)制,每個事務(wù)序列號處理完后都可以單獨提交,避免第一種表現(xiàn)方式一次性提交的數(shù)據(jù)量過多可能引起的rollback段溢出問題具體地,在上述數(shù)據(jù)庫間數(shù)據(jù)的復(fù)制裝置中包含哪種結(jié)構(gòu)的復(fù)制模塊54,可以根據(jù)實際需要進(jìn)行選擇,也可以結(jié)合使用,并不限于此。需要說明的是,上述各個模塊是可以通過軟件或硬件來實現(xiàn)的,對于后者,可以通過以下方式實現(xiàn),但不限于此:上述各個模塊均位于同一處理器中;或者,上述各個模塊分別位于多個處理器中。本發(fā)明的實施例還提供了一種存儲介質(zhì)??蛇x地,在本實施例中,上述存儲介質(zhì)可以被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:s1,按照預(yù)設(shè)規(guī)則采集源數(shù)據(jù)庫中的日志記錄;其中,預(yù)設(shè)規(guī)則包括:日志記錄的事務(wù)序列號大于已同步至目標(biāo)數(shù)據(jù)庫中的數(shù)據(jù)所對應(yīng)的事務(wù)序列號;s2,將日志記錄復(fù)制到目標(biāo)數(shù)據(jù)庫中的目標(biāo)表中;其中,目標(biāo)數(shù)據(jù)庫和源數(shù)據(jù)庫都為異構(gòu)數(shù)據(jù)庫??蛇x地,在本實施例中,上述存儲介質(zhì)可以包括但不限于:u盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)??蛇x地,本實施例中的具體示例可以參考上述實施例及可選實施方式中所描述的示例,本實施例在此不再贅述。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何 修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
芦溪县| 焦作市| 巨鹿县| 宣武区| 济源市| 平顺县| 黔江区| 天气| 中山市| 墨脱县| 长岭县| 巴林左旗| 永州市| 沙洋县| 安仁县| 鹤峰县| 长岭县| 广东省| 新兴县| 临邑县| 保康县| 孟津县| 扶沟县| 许昌市| 蒙城县| 五河县| 大埔区| 台东市| 东宁县| 孟村| 兴业县| 邢台县| 叙永县| 奉新县| 屏东市| 滦平县| 喀喇沁旗| 游戏| 渝北区| 桂阳县| 禹城市|