一種異構(gòu)數(shù)據(jù)庫復(fù)制事務(wù)一致性保障方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種異構(gòu)數(shù)據(jù)庫復(fù)制的事務(wù)一致性保障方法,尤指一種基于事務(wù)提交 表的異構(gòu)數(shù)據(jù)庫復(fù)制事務(wù)一致性保障方法及系統(tǒng)。
【背景技術(shù)】
[0002] 隨著企業(yè)信息化系統(tǒng)的廣泛應(yīng)用,信息化系統(tǒng)已經(jīng)成為企業(yè)維持業(yè)務(wù)運轉(zhuǎn)的關(guān) 鍵。企業(yè)多樣化的業(yè)務(wù)類型導(dǎo)致數(shù)據(jù)訪問需求日趨復(fù)雜化,同時數(shù)據(jù)量的急劇攀升也導(dǎo)致 數(shù)據(jù)庫服務(wù)器不堪重負。企業(yè)迫切需要提高信息系統(tǒng)的可用性,保證業(yè)務(wù)的連續(xù)性,最大限 度地減少因災(zāi)難或故障所帶來的損失。為此,分布式異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)復(fù)制是一種常用的 技術(shù)手段。
[0003] 目前,抽取源數(shù)據(jù)庫的事務(wù)日志,獲得源數(shù)據(jù)庫的數(shù)據(jù)操作,包括插入(INSERT)、 刪除(DELETE)、更新(UPDATE),然后通過網(wǎng)絡(luò)發(fā)送給復(fù)制系統(tǒng)的目的端,目的端恢復(fù)成原始 的SQL語句在目的數(shù)據(jù)庫上執(zhí)行,是一種常用的數(shù)據(jù)庫復(fù)制技術(shù)。它具有對源數(shù)據(jù)庫的性能 和數(shù)據(jù)模式影響小,可采用非常靈活的方式配置出各種拓撲結(jié)構(gòu),支持跨異構(gòu)的操作系統(tǒng) 和數(shù)據(jù)庫平臺復(fù)制等優(yōu)點。
[0004] 保障目的數(shù)據(jù)庫與源數(shù)據(jù)庫的事務(wù)一致性,并在任何軟硬件故障下具備恢復(fù)數(shù)據(jù) 復(fù)制的能力,是這種復(fù)制系統(tǒng)需要考慮的問題。目前存在的一些數(shù)據(jù)復(fù)制系統(tǒng),例如Oracle 的GoldenGate,通過自身的文件管理復(fù)制信息,在源端和目的端的文件中保存抽取到的事 務(wù)日志,當(dāng)系統(tǒng)出現(xiàn)軟硬件故障時,根據(jù)文件中保存的日志執(zhí)行位置,日志抽取位置等信 息,重新在源數(shù)據(jù)庫的事務(wù)日志中進行定位,繼續(xù)數(shù)據(jù)復(fù)制過程。
[0005] 然而,上述方法中復(fù)制系統(tǒng)使用的文件管理獨立于目的數(shù)據(jù)庫的事務(wù)管理,無法 保證復(fù)制事務(wù)的一致性。例如,復(fù)制系統(tǒng)目的端首先提交一個事務(wù),然后在自己的文件中登 記此事務(wù)的ID和LSN,在文件可靠的刷新到不易失存儲介質(zhì)之前,發(fā)生了故障。系統(tǒng)重啟后, 因為目的數(shù)據(jù)庫的事務(wù)已經(jīng)提交,該數(shù)據(jù)庫的故障恢復(fù)和事務(wù)管理機制將保證事務(wù)的持久 性,即事務(wù)對于數(shù)據(jù)的影響已經(jīng)生效,但復(fù)制系統(tǒng)的內(nèi)部文件并未正確登記這一信息,導(dǎo)致 恢復(fù)數(shù)據(jù)復(fù)制時,復(fù)制系統(tǒng)再次將此事務(wù)的日志傳到目的數(shù)據(jù)庫執(zhí)行,同一事務(wù)執(zhí)行多次, 造成了源數(shù)據(jù)庫和目的數(shù)據(jù)庫的事務(wù)不一致。
[0006] 由此可見,傳統(tǒng)的復(fù)制系統(tǒng)利用自身文件管理復(fù)制信息,無法保證源數(shù)據(jù)庫和目 的數(shù)據(jù)庫雙方事務(wù)執(zhí)行的一致性,需要發(fā)明新的異構(gòu)數(shù)據(jù)庫復(fù)制的事務(wù)一致性保障方法。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明提供了一種異構(gòu)數(shù)據(jù)庫復(fù)制的事務(wù)一致性保障方法及系統(tǒng),其目的在于, 解決現(xiàn)有異構(gòu)數(shù)據(jù)庫復(fù)制系統(tǒng)采用基于事務(wù)日志的數(shù)據(jù)復(fù)制時,源數(shù)據(jù)庫和目的數(shù)據(jù)庫雙 方事務(wù)執(zhí)行可能存在的不一致性,導(dǎo)致雙方數(shù)據(jù)不一致的技術(shù)問題。
[0008] 為了解決上述問題,本發(fā)明采用以下技術(shù)方案:
[0009] -種基于提交表的異構(gòu)數(shù)據(jù)庫復(fù)制事務(wù)一致性保障方法,包括如下步驟:
[0010] 目的數(shù)據(jù)庫與源數(shù)據(jù)庫事務(wù)同步的操作步驟,具體為:在目的數(shù)據(jù)庫創(chuàng)建提交事 務(wù)表,在復(fù)制系統(tǒng)目的端的內(nèi)存中創(chuàng)建未提交事務(wù)表;從源數(shù)據(jù)庫中獲取事務(wù)的操作日志, 復(fù)制系統(tǒng)目的端根據(jù)所述操作日志在目的數(shù)據(jù)庫中執(zhí)行相應(yīng)的數(shù)據(jù)操作;將事務(wù)第一次操 作信息作為一條記錄插入未提交事務(wù)表,將事務(wù)的最后一次提交操作信息作為一條記錄插 入提交事務(wù)表,同時從未提交事務(wù)表中刪除已提交事務(wù)的記錄;
[0011] 復(fù)制系統(tǒng)目的端的定時檢查步驟,具體為:在未提交事務(wù)表中找到尚未提交的、最 早發(fā)生的事務(wù),在提交事務(wù)表中刪除該事務(wù)之前的所有事務(wù)記錄,同時在提交事務(wù)表中插 入一條包含尚未提交的、最早發(fā)生的事務(wù)信息的檢查點記錄;
[0012] 故障恢復(fù)步驟,具體為:從提交事務(wù)表中的檢查點記錄獲取尚未提交的、最早發(fā)生 的事務(wù)信息,復(fù)制系統(tǒng)源端以該事務(wù)作為恢復(fù)起點,將事務(wù)相關(guān)的操作日志發(fā)送給目的端; 如果提交事務(wù)表中沒有該日志對應(yīng)事務(wù)的記錄,則復(fù)制系統(tǒng)目的端根據(jù)收到的操作日志在 目的數(shù)據(jù)庫中執(zhí)行相應(yīng)數(shù)據(jù)操作。
[0013] 進一步地,所述目的數(shù)據(jù)庫與主數(shù)據(jù)庫事務(wù)同步步驟的具體實現(xiàn)過程為:
[0014] 11)在目的數(shù)據(jù)庫創(chuàng)建提交事務(wù)表,在復(fù)制系統(tǒng)目的端內(nèi)存中創(chuàng)建未提交事務(wù)表;
[0015] 12)抽取源數(shù)據(jù)庫中的操作日志,操作日志包含事務(wù)ID、事務(wù)序列號LSN和內(nèi)容;
[0016] 13)若操作日志的事務(wù)ID是第一次出現(xiàn),表明抽取到的是事務(wù)的第一條操作日志, 則在未提交事務(wù)表中插入一條包含事務(wù)第一條操作日志LSN信息的事務(wù)記錄,執(zhí)行日志內(nèi) 容指定的數(shù)據(jù)操作,返回步驟12);否則,執(zhí)行步驟14);
[0017] 14)若抽取到的日志內(nèi)容表明是提交操作,則執(zhí)行步驟15);若抽取到的日志內(nèi)容 表明是提交以外的數(shù)據(jù)操作,則執(zhí)行步驟16);
[0018] 15)在提交事務(wù)表插入一條包含事務(wù)提交操作日志LSN信息的事務(wù)記錄,將提交事 務(wù)表與事務(wù)涉及的所有數(shù)據(jù)操作一并進行事務(wù)提交,從未提交事務(wù)表中刪除等于提交事務(wù) ID的事務(wù)記錄;
[0019] 16)執(zhí)行相應(yīng)數(shù)據(jù)操作,返回步驟12);
[0020] 進一步地,所述目的數(shù)據(jù)庫的定時檢查步驟的具體實現(xiàn)過程為:
[0021] 21)在未提交事務(wù)表中找到序列號LSN最小的記錄,對應(yīng)當(dāng)前尚未提交的、最早發(fā) 生的事務(wù),記該記錄的序列號LSN為LSN0;
[0022] 22)在提交事務(wù)表中刪除小于等于LSN0的所有記錄;
[0023] 23)在提交事務(wù)表中插入一條檢查點記錄,檢查點記錄包含有LSN0信息;
[0024] 進一步地,所述故障恢復(fù)步驟的具體實現(xiàn)過程為:
[0025] 31)復(fù)制系統(tǒng)源端向復(fù)制系統(tǒng)目的端發(fā)送查詢檢查點的請求;
[0026] 32)復(fù)制系統(tǒng)目的端在目的數(shù)據(jù)庫查詢到檢查點記錄,將其存儲的LSN0信息反饋 給復(fù)制系統(tǒng)源端;
[0027] 33)復(fù)制系統(tǒng)源端在源數(shù)據(jù)庫的操作日志文件中搜索等于LSN0的事務(wù)記錄作為恢 復(fù)起點,依次將此事務(wù)及后續(xù)事務(wù)相關(guān)操作日志發(fā)送給復(fù)制系統(tǒng)目的端。
[0028] 34)復(fù)制系統(tǒng)目的端在目的數(shù)據(jù)庫根據(jù)恢復(fù)用的操作日志的事務(wù)ID在提交事務(wù)表 中搜索,若搜索到等于事務(wù)ID的事務(wù)記錄,則不操作,結(jié)束;否則對目的數(shù)據(jù)庫按照恢復(fù)用 的操作日志執(zhí)行相應(yīng)數(shù)據(jù)操作。
[0029] -種基于提交表的異構(gòu)數(shù)據(jù)庫復(fù)制事務(wù)一致性保障系統(tǒng),包括:源數(shù)據(jù)庫、目的數(shù) 據(jù)庫、復(fù)制系統(tǒng)、創(chuàng)建于目的數(shù)據(jù)庫的提交事務(wù)表、創(chuàng)建于復(fù)制系統(tǒng)目的端內(nèi)存的未提交事 務(wù)表;
[0030] 復(fù)制系統(tǒng)源端將源數(shù)據(jù)庫中事務(wù)的操作日志轉(zhuǎn)發(fā)給目的端,目的端在目的數(shù)據(jù)庫 中執(zhí)行相應(yīng)的數(shù)據(jù)操作;目的端將收到的事務(wù)的第一次操作信息作為一條記錄插入未提交 事務(wù)表,將事務(wù)的最后一次提交操作?目息作為一條記錄插入提交事務(wù)表,從未提交事務(wù)表 中刪除已提交事務(wù)的記錄;
[0031] 復(fù)制系統(tǒng)目的端定時在未提交事務(wù)表中找到尚未提交的、最早發(fā)生的事務(wù),在提 交事務(wù)表中刪除該事務(wù)之前的所有事務(wù)記錄,同時在提交事務(wù)表中插入一條包含尚未提交 的、最早發(fā)生的事務(wù)信息的檢查點記錄;
[0032] 復(fù)制系統(tǒng)目的端從提交事務(wù)表中的檢查點記錄獲取尚未提交的、最早發(fā)生的事務(wù) 信息,復(fù)制系統(tǒng)源端以該事務(wù)作為恢復(fù)起點,將源數(shù)據(jù)庫中此事務(wù)及后續(xù)事務(wù)相關(guān)的操作 日志發(fā)送給目的端;如果提交事務(wù)表中沒有該事務(wù)的記錄,則復(fù)制系統(tǒng)目的端根據(jù)收到的 操作日志在目的數(shù)據(jù)庫中執(zhí)行相應(yīng)數(shù)據(jù)操作。
[0033] 本發(fā)明對比現(xiàn)有技術(shù)有以下優(yōu)越性:
[0034] 本發(fā)明利用目的數(shù)據(jù)庫中一張?zhí)峤皇聞?wù)表保存已提交的事務(wù)和尚未提交的最早 的事務(wù),對此表的更新與對應(yīng)的事務(wù)一并提交,充分利用了目的數(shù)據(jù)庫自身的故障恢復(fù)功 能,將復(fù)制事務(wù)自身的操作與事務(wù)執(zhí)行的信息合成為一個事務(wù),一起進行提交。如此,事務(wù) 的原子性保證了事務(wù)自身的數(shù)據(jù)操作與事務(wù)成功執(zhí)行的信息存儲的一致性,而事務(wù)執(zhí)行的 信息存儲是復(fù)制系統(tǒng)故障恢復(fù)的依據(jù),從而保證了異構(gòu)數(shù)據(jù)庫復(fù)制的事務(wù)一致性和數(shù)據(jù)一 致性??朔藗鹘y(tǒng)方法中復(fù)制系統(tǒng)的檢查點信息與目的數(shù)據(jù)庫分離存儲可能產(chǎn)生的不一致 性。
【附圖說明】
[0035]圖1是本發(fā)明的復(fù)制模型示意圖。
[0036] 圖2是本發(fā)明在數(shù)據(jù)復(fù)制過程中,對于提交事務(wù)表和未提交事務(wù)表的管理流程示 意圖。
[0037] 圖3是本發(fā)明檢查點過程的流程示意圖。
[0038] 圖4是本發(fā)明故障恢復(fù)過程的流程示意圖。
[0039] 圖5是按照本發(fā)明的一個實例示意圖,其中,圖5(a)是tl時刻提交事務(wù)表和未提交 事務(wù)表示意圖,圖5(b)為檢查點記錄插入過程示意圖,圖5(c)為故障恢復(fù)過程示意圖。
【具體實施方式】
[0040] 為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對 本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要 彼此之間未構(gòu)成沖突就可以相互組合。
[0041] 本發(fā)明包含三個步驟:目的數(shù)據(jù)庫與主數(shù)據(jù)庫事務(wù)同步的操作步驟、目的數(shù)據(jù)庫 的定時檢查步驟和故障恢復(fù)步驟。下面詳細說明:
[0042] 圖2是本發(fā)明目的數(shù)據(jù)庫與主數(shù)據(jù)庫事務(wù)同步的操作步驟流程圖,具體為:
[0043] 11)在目的數(shù)據(jù)庫創(chuàng)建一張?zhí)峤皇聞?wù)表,字段要求如下。
[0044]
[0045] 在復(fù)制系統(tǒng)的內(nèi)存中,創(chuàng)建一張未提交事務(wù)表,字段要求如下。
[0046]
[0047] 12)在源數(shù)據(jù)庫,復(fù)制系統(tǒng)抽取源數(shù)據(jù)庫中的操作日志,日志包含事務(wù)ID、事務(wù)序 列號LSN和內(nèi)容。
[0048] 13)若操作日志的事務(wù)ID是第一次出現(xiàn),表明抽取到的是事務(wù)的第一條操作日志, 則在未提交事務(wù)表中插入一條包含事務(wù)第一條操作日志LS