專利名稱:一種數(shù)據(jù)庫同步方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)庫同步方法。
背景技術(shù):
數(shù)據(jù)庫同步指的是把源數(shù)據(jù)庫的待同步數(shù)據(jù)(可以是數(shù)據(jù)庫全部或者部分數(shù)據(jù)) 對目標數(shù)據(jù)庫的副本進行更新,使該副本與原數(shù)據(jù)庫待同步數(shù)據(jù)保持一致的操作。
通常應(yīng)用系統(tǒng)中的數(shù)據(jù)庫同步操作實現(xiàn)方法與應(yīng)用系統(tǒng)數(shù)據(jù)庫的具體結(jié)構(gòu)有關(guān)。 當(dāng)應(yīng)用系統(tǒng)需求發(fā)生變化時,數(shù)據(jù)庫同步的實現(xiàn)方法往往也需要隨之調(diào)整。因此,常規(guī)的數(shù)據(jù)同步方法不便于系統(tǒng)的維護與升級,在以下的內(nèi)容中對此做出詳細描述。
中國發(fā)明專利申請公開之《一種分布式數(shù)據(jù)庫同步系統(tǒng)、同步方法和節(jié)點管理方法》(公開號CN102693324A)提供了一種數(shù)據(jù)庫同步方法,該方法通過定期讀取管理節(jié)點的相關(guān)同步信息表,實現(xiàn)與其它節(jié)點的數(shù)據(jù)同步。該方案的目的是建立有效的多節(jié)點數(shù)據(jù)同步更新過程中的管理調(diào)度機制,沒有提供實現(xiàn)數(shù)據(jù)從原始數(shù)據(jù)到數(shù)據(jù)副本之間的復(fù)制更新的具體方法。
中國發(fā)明專利申請公開之《基于數(shù)據(jù)庫服務(wù)間的通用數(shù)據(jù)同步方法及其系統(tǒng)》(公開號CN102637214A)提供了一種數(shù)據(jù)庫同步方法,可以實現(xiàn)不同節(jié)點之間的磁盤文件的同步。該方案實現(xiàn)了數(shù)據(jù)文件從一個服務(wù)器復(fù)制到另一個服務(wù)器的操作,該方法用于數(shù)據(jù)庫同步,只能針對文件型數(shù)據(jù)庫,例如Microsoft Access,把文件型數(shù)據(jù)庫從一個節(jié)點完整復(fù)制到另一個節(jié)點。該方法不能把多個客戶端節(jié)點數(shù)據(jù)同步到公用的后臺服務(wù)器。
中國發(fā)明專利申請公開之《關(guān)系型數(shù)據(jù)庫之間的同步方法及系統(tǒng)》(公開號 CN102542007A)提供了一種方法,通過建立多個數(shù)據(jù)庫之間的針對變化數(shù)據(jù)的數(shù)據(jù)同步任務(wù)。該方法針對關(guān)系型數(shù)據(jù)庫開發(fā),利用關(guān)系型數(shù)據(jù)庫的觸發(fā)器機制和任務(wù)機制。由于觸發(fā)器和數(shù)據(jù)庫任務(wù)的建立都依賴應(yīng)用系統(tǒng)數(shù)據(jù)庫的具體結(jié)構(gòu),因此該方法與應(yīng)用需求密切相關(guān),不利于系統(tǒng)的維護和升級。
中國發(fā)明專利申請公開之《一種嵌入式設(shè)備與數(shù)據(jù)庫數(shù)據(jù)同步方法》(公開號 CN102456052A)提供了一種方法,實現(xiàn)嵌入式設(shè)備與遠程數(shù)據(jù)庫間的數(shù)據(jù)一致性。該方法只能解決嵌入式設(shè)備與服務(wù)器通訊中斷的情形下,通過緩存數(shù)據(jù),等通訊正常后續(xù)傳數(shù)據(jù)的功能,不屬于數(shù)據(jù)庫同步技術(shù)范疇。
中國發(fā)明專利申請公開之《一種數(shù)據(jù)庫同步方法及裝置》(公開號CN102426611A) 提供了一種方法,提供了一種數(shù)據(jù)庫同步方法及與方法對應(yīng)的裝置,用于將第一數(shù)據(jù)庫的內(nèi)容同步到第二數(shù)據(jù)庫中。該方法為數(shù)據(jù)庫的數(shù)據(jù)表建立了一個哈希字段,把表中的每條數(shù)據(jù)記錄轉(zhuǎn)變?yōu)楣V?,通過必將原始數(shù)據(jù)和數(shù)據(jù)副本得哈希值判斷數(shù)據(jù)是否一致,如果不一致的話就進行同步操作。這種同步方法具體實施的時候需要逐個對每個需要同步的數(shù)據(jù)表添加哈希值的計算管理模塊,與具體應(yīng)用需求關(guān)聯(lián)比較密切,不利于系統(tǒng)的維護與升級。
中國發(fā)明專利申請公開之《數(shù)據(jù)庫的數(shù)據(jù)同步信息處理方法及裝置》(公開號CN102413149A)提供了一種方法,將待同步的數(shù)據(jù)剝離出來并處理成待發(fā)送文件,實現(xiàn)同步 操作。“將待同步的數(shù)據(jù)剝離出來并處理成待發(fā)送文件”這一過程與具體的業(yè)務(wù)需求密切相 關(guān),不利于數(shù)據(jù)庫的后期維護與升級。發(fā)明內(nèi)容
因此,本發(fā)明的目的在于提供一種便于后期維護和升級的數(shù)據(jù)庫同步方法。
本發(fā)明采用以下技術(shù)方案一種數(shù)據(jù)庫同步方法,原數(shù)據(jù)庫中的待同步內(nèi)容與目標數(shù)據(jù)庫中對應(yīng)于待同步內(nèi)容的 副本具有相同或者等價的數(shù)據(jù)庫存儲結(jié)構(gòu);從而所述同步方法包括以下步驟1)分配數(shù)據(jù)表,順序存放所述待同步內(nèi)容產(chǎn)生數(shù)據(jù)變化的操作命令;以及2)目標數(shù)據(jù)庫調(diào)用所述數(shù)據(jù)表,執(zhí)行該數(shù)據(jù)表中匹配的所述操作命令完成對所述副本 的操作。
從以上的技術(shù)方案可以看出,通過分配數(shù)據(jù)表,記錄原數(shù)據(jù)庫的命令日志,通過原 數(shù)據(jù)庫命令日志傳送至目標服務(wù)器,讓目標服務(wù)器執(zhí)行原數(shù)據(jù)庫的所述數(shù)據(jù)表中或者說日 志中的操作命令而實現(xiàn)數(shù)據(jù)庫的同步。這種方法,與業(yè)務(wù)系統(tǒng)的耦合比較松,一些情況下與 具體的業(yè)務(wù)完全無關(guān),從而不會對后續(xù)的維護和升級產(chǎn)生太大的影響,而利于系統(tǒng)的后期 維護和升級。
在一些較佳的實施例中,上述數(shù)據(jù)庫同步方法,為每一個待同步內(nèi)容創(chuàng)建一個數(shù) 據(jù)表,并在步驟2)完成后,刪除該數(shù)據(jù)表,在避免重復(fù)執(zhí)行相應(yīng)操作命令的情況下,減輕服 務(wù)器的負擔(dān)。
在另一些實施例中,所有待同步內(nèi)容共用一個所述的數(shù)據(jù)表,而在步驟2)后刪除 對應(yīng)的操作命令或者做出執(zhí)行標記,也可以減輕服務(wù)器的負擔(dān),并可以針對不同的應(yīng)用其 靈活性更好。
在一些實施例中,上述數(shù)據(jù)庫同步方法,步驟2)調(diào)用所述數(shù)據(jù)表時采用順序執(zhí)行 的方式執(zhí)行所記錄的操作命令,并在同步過程中,基于命令指針的方式標記操作指令序列 的執(zhí)行位置,這種情形下,所執(zhí)行的命令被完整保存,有利于后續(xù)服務(wù)器的維護;同時,基于 命令指針,又不會充分執(zhí)行相應(yīng)的操作命令。
在一些實施例中,所述分數(shù)據(jù)表含有時間表項,所述執(zhí)行標記為獨立存放的一個 時間標志,這種方式也能夠準確的標定操作命令項的執(zhí)行位置。
在一些實施例中,所述數(shù)據(jù)表含有序列表項,從而在本次執(zhí)行完畢后,記錄當(dāng)前操 作命令的執(zhí)行完畢的序號,作為下次執(zhí)行的位置標志,存儲結(jié)構(gòu)更加簡單,且能夠?qū)?zhí)行位 置進行準確標識。
優(yōu)選地,所述數(shù)據(jù)表中被執(zhí)行完畢的操作命令被做出標記,使得該操作命令不能 夠在被執(zhí)行,也能夠避免相應(yīng)的操作命令被重復(fù)執(zhí)行。
上述數(shù)據(jù)庫同步方法,所述步驟2)與所述步驟I)在一天內(nèi)不同的時間段內(nèi)執(zhí)行, 減輕服務(wù)器的負擔(dān)。
圖I為一種數(shù)據(jù)庫同步裝置的結(jié)構(gòu)圖。
具體實施方式
參照說明書附圖1,一種數(shù)據(jù)庫同步裝置,其具有以下特點源數(shù)據(jù)庫代理模塊P在源數(shù)據(jù)庫進行操作時記錄對數(shù)據(jù)庫進行操作的操作命令,而生 成源數(shù)據(jù)庫執(zhí)行日志E,以數(shù)據(jù)表的形式進行存放。
其中數(shù)據(jù)表存放的應(yīng)當(dāng)是被同步的內(nèi)容所對應(yīng)的操作命令。
配置同步模塊Q,調(diào)用所述源數(shù)據(jù)庫執(zhí)行命令日志E,執(zhí)行所述源數(shù)據(jù)庫執(zhí)行命令 日志E中的操作命令而對目標數(shù)據(jù)庫B進行更新。
從而,把“源數(shù)據(jù)庫A”中的“待同步內(nèi)容C”同步到“目標數(shù)據(jù)庫B”中的“原數(shù)據(jù) 庫待同步內(nèi)容副本D”,參見附圖I。具體步驟如下I、“源數(shù)據(jù)庫A”中的“待同步內(nèi)容C”和“目標數(shù)據(jù)庫B”中的“原數(shù)據(jù)庫副本D”的具 有相同或者等價的數(shù)據(jù)庫存儲結(jié)構(gòu),以保證同步操作的順利進行。
在一些應(yīng)用中,采用不同存儲結(jié)構(gòu)的數(shù)據(jù)庫之間的同步實現(xiàn)起來非常困難而不具 有實際操作價值。
1-1、根據(jù)1,“源數(shù)據(jù)庫A”中的“待同步內(nèi)容C”是“源數(shù)據(jù)庫A”全部內(nèi)容。
這種實施方式中,若目標數(shù)據(jù)庫B與源數(shù)據(jù)庫A的數(shù)據(jù)結(jié)構(gòu)一致,可以認為目標數(shù) 據(jù)庫B是源數(shù)據(jù)庫A至少在內(nèi)容上的存儲內(nèi)容上鏡像。
加以對應(yīng)的以下幾種實施方式,本領(lǐng)域的技術(shù)人員可根據(jù)自己的實際需要靈活選擇。
1-2、根據(jù)1,“源數(shù)據(jù)庫A”中的“待同步內(nèi)容C”是“源數(shù)據(jù)庫A”部分數(shù)據(jù)項目。
1-3、根據(jù)1,“目標數(shù)據(jù)庫B”中的“源數(shù)據(jù)庫副本D”用于保存“源數(shù)據(jù)庫A”中的 “待同步內(nèi)容C”的副本。
1-4、根據(jù)1,“目標數(shù)據(jù)庫B”中的“源數(shù)據(jù)庫副本D”是“目標數(shù)據(jù)庫B”全部內(nèi)容。
1-5、根據(jù)1,“目標數(shù)據(jù)庫B”中的“源數(shù)據(jù)庫副本D”是“目標數(shù)據(jù)庫B”部分內(nèi)容。
1-6、根據(jù)1,“目標數(shù)據(jù)庫B”中的“源數(shù)據(jù)庫副本D”含“源數(shù)據(jù)庫A”中的“待同 步內(nèi)容C”副本以外其它內(nèi)容。
2、進而外部操作或者預(yù)定的內(nèi)部操作的對“源數(shù)據(jù)庫A”中的“待同步內(nèi)容C”的 數(shù)據(jù)修改操作通過“源數(shù)據(jù)庫代理模塊P”進行。
這里外部,如外部程序或者通過外部中斷產(chǎn)生的操作,以及預(yù)定的內(nèi)部操作,均指 會對源數(shù)據(jù)庫待同步內(nèi)容C產(chǎn)生影響的操作。
3、從而,“源數(shù)據(jù)庫代理模塊P”把影響對“源數(shù)據(jù)庫A”中的“待同步內(nèi)容C”產(chǎn)生 數(shù)據(jù)變化的操作命令按照執(zhí)行的先后順序記錄在“源數(shù)據(jù)庫執(zhí)行日志E”中。
其中,所述日志文件以數(shù)據(jù)表的形式存放??梢詾槊恳粋€源數(shù)據(jù)庫帶同步內(nèi)容創(chuàng) 建一個數(shù)據(jù)表,也可以共用一個數(shù)據(jù)表,當(dāng)共用一個數(shù)據(jù)表時,需要對數(shù)據(jù)表進行相應(yīng)的維 護。
3-1、根據(jù)3,“源數(shù)據(jù)庫代理模塊P”記錄在“源數(shù)據(jù)庫執(zhí)行日志E”中的操作命令 是SQL (Structured Query Language,結(jié)構(gòu)化查詢語言)命令。
3-2、根據(jù)3,“源數(shù)據(jù)庫代理模塊P”記錄在“源數(shù)據(jù)庫執(zhí)行日志E”中的操作命令 是NDL命令。
4、“同步模塊Q”在執(zhí)行同步操作時,從“源數(shù)據(jù)庫執(zhí)行日志E”按順序取出未曾執(zhí)行過的操作命令,提交“目標數(shù)據(jù)庫B ”執(zhí)行。應(yīng)當(dāng)理解,這里的未曾執(zhí)行應(yīng)指在目標數(shù)據(jù)庫端未曾執(zhí)行,同時應(yīng)當(dāng)理解,這里的未曾執(zhí)行而非如具體的某一個指令,而是如執(zhí)行序列中的對應(yīng)該序列的指令。其實,可以這樣來理解,源數(shù)據(jù)庫帶同步內(nèi)容副本D的操作匹配源數(shù)據(jù)庫帶同步內(nèi)容C的操作,具有完全相同或者基于等價數(shù)據(jù)庫存儲結(jié)構(gòu)的等價操作。5、“同步模塊Q”在執(zhí)行同步操作時,對“源數(shù)據(jù)庫執(zhí)行日志E”中已經(jīng)提交“目標數(shù)據(jù)庫B”執(zhí)行的命令,進行標記或刪除,防止重復(fù)提交執(zhí)行。對于標記的方式可以保存日志文件,供如后期維護時使用,對于刪除則可以節(jié)省出存儲空間。5-1、根據(jù)5,“同步模塊Q”保存“源數(shù)據(jù)庫執(zhí)行日志E”中上次讀取并執(zhí)行指令的位置,防止重復(fù)讀取執(zhí)行“源數(shù)據(jù)庫執(zhí)行日志E”中記錄的操作命令。5-1-1、根據(jù)5-1,“同步模塊Q”保存“源數(shù)據(jù)庫執(zhí)行日志E”中上次讀取并執(zhí)行指令的位置是時間標志。5-1-2、根據(jù)5-1,“同步模塊Q”保存“源數(shù)據(jù)庫執(zhí)行日志E”中上次讀取并執(zhí)行指令的位置是數(shù)據(jù)庫操作命令日志的有序編號。5-2、根據(jù)5,“同步模塊Q”設(shè)置“源數(shù)據(jù)庫執(zhí)行日志E”中上次讀取并執(zhí)行指令的標記,防止重復(fù)讀取執(zhí)行“源數(shù)據(jù)庫執(zhí)行日志E”中記錄的操作命令。5-3、根據(jù)5,“同步模塊Q”刪除“源數(shù)據(jù)庫執(zhí)行日志E”中已經(jīng)提交“目標數(shù)據(jù)庫B”執(zhí)行的命令。一個更具體的實施例,使相關(guān)技術(shù)手段得到更清楚地表述
下屬實例的業(yè)務(wù)部分來自一個銀行客戶分布式身份認證系統(tǒng),實現(xiàn)客戶端數(shù)據(jù)同步上傳志服務(wù)器,以保證服務(wù)器數(shù)據(jù)與客戶端數(shù)據(jù)的同步。工作步驟如下
客戶端數(shù)據(jù)庫“源數(shù)據(jù)庫A”采用Access2007設(shè)計,服務(wù)器端數(shù)據(jù)庫“目標數(shù)據(jù)庫B”采用 SQLServer2000 設(shè)計?!霸磾?shù)據(jù)庫A”和“目標數(shù)據(jù)庫B”具有相同的數(shù)據(jù)庫結(jié)構(gòu),數(shù)據(jù)表字段僅采用整型數(shù)字、浮點數(shù)字和文字三類Access2007與SQLServerfOOO在SQL命令中完全兼容的數(shù)據(jù)類型。 待同步數(shù)據(jù)是“源數(shù)據(jù)庫A”中全部數(shù)據(jù)?!霸磾?shù)據(jù)庫代理模塊P”運行在“源數(shù)據(jù)庫A”所在的客戶端節(jié)點,并在客戶端節(jié)點數(shù)據(jù)庫“源數(shù)據(jù)庫A”中添加數(shù)據(jù)表“源數(shù)據(jù)庫執(zhí)行日志E”,該表格包括兩個字段“操作順序號”和“操作SQL命令”?!霸磾?shù)據(jù)庫代理模塊P”僅在每天9:00-17:00時間段工作,在此期間“源數(shù)據(jù)庫代理模塊P”把接收并執(zhí)行的SQL命令保存到“源數(shù)據(jù)庫執(zhí)行日志E”?!巴侥KQ”每天夜間18:00-6:00執(zhí)行同步操作時,從“源數(shù)據(jù)庫執(zhí)行日志E”按順序取出全部操作命令,提交“目標數(shù)據(jù)庫B”執(zhí)行。“同步模塊Q”從“源數(shù)據(jù)庫執(zhí)行日志E”執(zhí)行完同步操作后,清空“源數(shù)據(jù)庫執(zhí)行日志E”全部內(nèi)容。
權(quán)利要求
1.一種數(shù)據(jù)庫同步方法,其特征在于,原數(shù)據(jù)庫中的待同步內(nèi)容與目標數(shù)據(jù)庫中對應(yīng)于待同步內(nèi)容的副本具有相同或者等價的數(shù)據(jù)庫存儲結(jié)構(gòu);從而所述同步方法包括以下步驟 1)分配數(shù)據(jù)表,順序存放所述待同步內(nèi)容產(chǎn)生數(shù)據(jù)變化的操作命令;以及 2)目標數(shù)據(jù)庫調(diào)用所述數(shù)據(jù)表,執(zhí)行該數(shù)據(jù)表中匹配的所述操作命令完成對所述副本的操作。
2.根據(jù)權(quán)利要求I所述的數(shù)據(jù)庫同步方法,其特征在于,為每一個待同步內(nèi)容創(chuàng)建一個數(shù)據(jù)表,并在步驟2)完成后,刪除該數(shù)據(jù)表。
3.根據(jù)權(quán)利要求I所述的數(shù)據(jù)庫同步方法,其特征在于,所有待同步內(nèi)容共用一個所述的數(shù)據(jù)表,而在步驟2)后刪除對應(yīng)的操作命令或者做出執(zhí)行標記。
4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)庫同步方法,其特征在于,步驟2)調(diào)用所述數(shù)據(jù)表時采用順序執(zhí)行的方式執(zhí)行所記錄的操作命令,并在同步過程中,基于命令指針的方式標記操作指令序列的執(zhí)行位置。
5.根據(jù)權(quán)利要求3所述的數(shù)據(jù)庫同步方法,其特征在于,所述分數(shù)據(jù)表含有時間表項,所述執(zhí)行標記為獨立存放的一個時間標志。
6.根據(jù)權(quán)利要求3所述的數(shù)據(jù)庫同步方法,其特征在于,所述數(shù)據(jù)表含有序列表項,從而在本次執(zhí)行完畢后,記錄當(dāng)前操作命令的執(zhí)行完畢的序號,作為下次執(zhí)行的位置標志。
7.根據(jù)權(quán)利要求3所述的數(shù)據(jù)庫同步方法,其特征在于,所述數(shù)據(jù)表中被執(zhí)行完畢的操作命令被做出標記。
8.根據(jù)權(quán)利要求I所述的數(shù)據(jù)庫同步方法,其特征在于,所述步驟2)與所述步驟I)在一天內(nèi)不同的時間段內(nèi)執(zhí)行。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)庫同步方法,原數(shù)據(jù)庫中的待同步內(nèi)容與目標數(shù)據(jù)庫中對應(yīng)于待同步內(nèi)容的副本具有相同或者等價的數(shù)據(jù)庫存儲結(jié)構(gòu);從而所述同步方法包括以下步驟1)分配數(shù)據(jù)表,順序存放所述待同步內(nèi)容產(chǎn)生數(shù)據(jù)變化的操作命令;以及2)目標數(shù)據(jù)庫調(diào)用所述數(shù)據(jù)表,執(zhí)行該數(shù)據(jù)表中匹配的所述操作命令完成對所述副本的操作。依據(jù)本發(fā)明便于后期維護和升級。
文檔編號G06F17/30GK102982171SQ201210547180
公開日2013年3月20日 申請日期2012年12月17日 優(yōu)先權(quán)日2012年12月17日
發(fā)明者許野平, 方亮 申請人:山東神思電子技術(shù)股份有限公司