專利名稱:利用同步進行數據恢復的方法和系統的制作方法
技術領域:
本發明涉及數據恢復的方法和系統,特別涉及利用同步進行數據恢復 的方法和系統。
背景技術:
近年來,隨著各類移動設備(如智能手機,個人數字助理,筆記本電 腦等)的廣泛使用,在機場、高級寫字樓、圖書館、餐館或咖啡館里,移 動辦公的人士比比皆是。移動設備的用戶實際上可以作為系統服務器的一 個客戶機,客戶機所取得的現場資料需要與系統服務器數據庫同步,當存
在數據的多個副本時,這些副本需要保持一致性, 一旦斷開連接,服務器 與每個客戶機都可以修改各自的數據。
實際中,在服務器端的管理員發現來自客戶端的最新數據存在問題時, 常常需要客戶端的數據恢復到歷史某個時間點的版本。例如,客戶機端數
據庫需要遠程數據庫恢復,傳統的RDBMS系統可以包含歸檔日志(archive log),歸檔日志將支持數據庫恢復,然而,移動數據庫系統中不具有類似 的本地歸檔日志以及支持數據庫恢復的能力。再例如,在系統升級過程中, 客戶機從服務器端得到新版本的數據和新版本的應用,然而,升級后的數 據和升級后的應用無法工作,為了正常使用客戶端舊的應用,需要客戶端 的數據降級到舊版本。在要求相同組群的所有客戶機都具有來自服務器的 相同數據版本的情況下, 一個客戶機的升級失敗將導致相同組群的所有客 戶機都降級到同 一數據版本。
在傳統數據恢復系統中,存在解決部分上述問題的方法,客戶機可以 使用備份工具在同步之前備份客戶端數據的副本,在同步之后如果需要返 回到之前的狀態,就使用備份的副本恢復本地數據庫。然而,系統需要額
6外的存儲開銷,并且每次都需要恢復整個數據庫,耗費了大量的存儲資源 和時間。并且在上述兩個例子的情形下,每次同步之前都進行備份也不現 實,因此這種數據恢復系統的效率非常低下。
因此,需要一種改進的、提高效率的方法來支持客戶機端的數據恢復 到之前的某個歷史狀態。
發明內容
為了解決上述問題,本發明設計了 一種利用同步進行數據恢復的方法 和系統。
根據本發明的一個方面,提供一種利用同步進行數據恢復的方法,包
括記錄數據記錄的變化歷史;響應于接收到的數據恢復請求,查詢所需 要恢復的數據記錄的歷史目標版本,合并所述數據記錄的歷史目標版本與 當前版本之間的變化歷史;發送所述合并結果。
根據本發明的另一方面,提供一種利用同步進行數據恢復的系統,包 括記錄裝置,用于記錄數據記錄的變化歷史;同步引擎,響應于接收到 的數據恢復請求,查詢所需要恢復的數據記錄的歷史目標版本,合并所述 數據記錄的目標版本與當前版本之間的變化歷史,并發送所述合并結果。
本發明的方法通過記錄數據記錄的變化歷史,在進行數據恢復時使用 高效的合并方法合并數據記錄的變化歷史,僅僅發送數據記錄中變化的字 段,從而節省了大量存儲資源。本發明的數據恢復方法僅將當前版本與歷 史目標版本之間的差異進行恢復,是一種高效率的增量數據恢復。且該方
法使得移動設備可以通過無線網絡隨時隨地通過同步進行恢復,是一種易 于使用的數據恢復方法。
附圖簡述
結合附圖,通過參考下列詳細的示例性實施例的描述,將會更好地理 解本發明本身、優選的實施方式以及本發明的目的和優點,其中
圖1示出本發明的利用同步進行數據恢復的方法流程圖;圖2示出根據本發明的服務器與客戶機之間利用同步進行數據恢復的 系統示意圖3示出根據本發明的服務器與客戶機之間利用同步進行數據恢復的 方法流程圖4示出標識客戶機同步方向的全局同步控制表;
圖5示出包含服務器端全部數據記錄歷史版本的全局數據記錄版本表;
圖6A示出服務器端源數據表的示例;
圖6B示出服務器端的歷史表模式;
圖6C示出服務器端第一次加載源數據表的歷史表的示例;
圖7A示出服務器端第一次發生變化之后的源數據表的示例;
圖7B示出服務器端第二次加載源數據表的歷史表的示例;
圖8示出對于每個源數據表的客戶機版本歷史表
圖9示出根據本發明的利用數據記錄的變化歷史進行合并的方法流程
圖IO詳細描述了圖9中合并數據記錄的工作過程流程圖; 圖11示出使用圖10中的方法進行合并的示例;
圖12示出本發明處理客戶機自身發起的變化對服務器和其它客戶機的 影響的流程圖13示出根據本發明的服務器與客戶機之間利用同步進行數據恢復的 系統示意圖。
具體實施例方式
下面結合附圖詳細描述本發明的數據恢復方法和系統。 本發明的數據恢復方法涉及存儲在任何存儲介質的數據記錄,數據記 錄包括多個表示數據記錄屬性、特征的字段。根據本發明的數據記錄能夠 利用某種屬性或特征來唯一標識,例如可以在數據記錄中創建一個字段, 這個字段的值是某種形式的唯一數值(如時間戳),用這個數值來唯一標 識數據記錄。參照圖1描述本發明的利用同步進行數據恢復的方法,在步驟101, 記錄數據記錄的變化歷史;在步驟102,響應于接收到的數據恢復請求, 查詢所需要恢復的歷史目標版本,合并所述數據記錄的歷史目標版本與當 前版本之間的變化歷史;在步驟103發送所述合并結果。
根據本發明的實施例,所述數據記錄的變化歷史為數據字段的變化歷 史。所述變化歷史通過變化類型、變化位以及版本號來記錄,所述變化類 型用于記錄所述數據記錄變化的變化類型,所述變化位用于記錄與所述數 據記錄的變化類型對應的字段變化狀態,并且所述版本號用于標記所述數 據記錄的有效時間點。
本發明的數據恢復的方法可以應用于服務器與一個客戶機之間以及月良 務器與多個客戶機之間的計算機網絡系統,在服務器與客戶機中存儲有數 據記錄,每個數據記錄包括多個表示數據記錄屬性、特征的字段。圖2示 出根據本發明的服務器與客戶機之間利用同步進行數據恢復的系統示意 圖,該系統包括服務器200和多個客戶機207, 210, 213,全局數據記錄 版本表201包含服務器端數據記錄的全局版本歷史,全局同步控制表202 控制所有客戶機的同步方向,服務器側存儲有需要與客戶機同步的數據記 錄表203,對于每個數據記錄表,存在記錄該數據記錄表中數據記錄變化 歷史的歷史表204,客戶機版本歷史表205記錄每個數據記錄表的全部客 戶機的版本歷史。客戶機207、 220、 213分別存儲有數據記錄表208、 211、 214,所述客戶機端數據記錄表包含與服務器側的數據記錄表相同或部分相 同的數據。歷史表204和數據記錄表208、 211、 214分別記錄服務器端和 客戶機端數據記錄的變化類型和變化位,從而記錄服務器端和客戶機端數 據記錄的變化狀態。服務器包括同步引擎206,客戶機207、 220、 213分 別包括同步引擎209、 212、 215,服務器同步引擎與客戶機同步引擎可以 進行通信來執行雙向數據同步。
圖3示出本發明的在服務器與客戶機之間利用同步進行數據恢復的 流程圖。在步驟301,系統管理員利用管理工具設置同步方向和歷史時間 標簽,歷史時間標簽指向數據恢復到之前同步的某個歷史時間點,對于每個客戶機,同步方向可以向前、向后以及保持當前的狀態,向前同步即將 數據同步到最新的狀態,向后同步,即將數據恢復到之前同步的某個歷史
時間點;在步驟302,在全局同步控制表中維護每個客戶機的同步方向和
歷史時間標簽;在步驟303,客戶機端應用可以使用所提供的API接口改
變同步方向和歷史時間標簽;在客戶機執行同步時,在步驟304,根據服 務器與客戶端雙方的設置確定同步方向和歷史時間標簽,通常服務器端的
設置將優先于客戶端的設置,但是在客戶端設置為向后同步的情況下,如 果服務器端是正常同步,則客戶端的設置將優先考慮;在步驟305,如果 確定為向后同步進行數據恢復,則利用客戶機版本歷史表和歷史時間標簽 查尋客戶機的歷史目標版本;在步驟306,為了使客戶機返回到之前的狀 態,查詢從客戶機歷史目標版本到當前版本之間的變化歷史,合并相同數
據記錄的增量變化字段。在步驟307,服務器將增量變化字段發送到客戶 端以恢復到歷史目標版本的數據。
圖4示出標識客戶機同步方向的全局同步控制表,客戶機ID表示客 戶機的標識,方向表示客戶機的同步方向,其中方向為1表示正常向前同 步,即客戶機同步到服務器的最新版本,方向為O表示保持當前狀態,方 向為-1表示客戶機進行數據恢復的后向同步。歷史時間標簽表示數據恢復 的歷史時間點,在系統管理員設置了客戶機的同步方向之后,將數值保存 在該表中,并且如果將同步方向設置為-1,則在數據恢復之后,方向將變 為默認值1。客戶機01被設置為向前同步;客戶機02被設置為保持當前 狀態;客戶機03被設置為向后同步,數據恢復到歷史時間標簽為2007年 8月8日12時的版本。
圖5示出包含服務器端全部數據記錄的歷史版本的全局數據記錄版本 表,該全局數據版本表記錄了服務器端的全部相對版本號以及該版本對應 的時間標簽。例如,該表中最后一行表示在時間標簽為2007年8月20日 12點的服務器端數據的相對版本號為1000,從一個較小版本號到一個較大 版本號,可能存在數據變化,這種數據變化將記錄在下文的歷史表中,最大值的版本號是當前服務器的版本。
根據本發明的實施例,服務器端和客戶機端的數據記錄可以存儲在數
據庫中,圖6A示出服務器端源數據表的示例,該源數據表中有三列整數 類型(Cl, C2, C3), 一列可變字符串類型(CCHAR),以及一列二進 制大數據類型(CBLOB ),其中Cl是主關鍵字列,其余C2, C3, CCHAR 以及CBLOB是非主關鍵字列,在該源數據表中存在初始化的兩行數據。
圖6B示出歷史表模式,歷史表記錄了服務器端源數據表中源數據行 的變化歷史,源數據行的變化將被定時捕捉,并將每個源數據行的變化用 歷史表中的一個變化行來表示。歷史表模式包含主關鍵字列PKcolumn、 非主關鍵字列Non-PK Column、 From版本號、To版本號、變化類型 ChangeType、變化位ChangeBits以及客戶端ID。 From版本號和to版 本號是用于標記源數據行的變化行在兩個相對時間點有效的版本號,from 版本號表示變化行開始存在的時間點,而to版本號表示變化行有效屆滿的 時間點,即意味著該變化行要出現新的變化,這里From版本號和To版本 號的值來自于全局數據版本表。源數據表的所有變化行都將被捕獲并被周 期地加載到歷史表中。根據本發明的實施例,如果添加源數據行,則可以 設置所述源數據行的變化類型ChangeType為'T (添加)并且標記變 化位Changebits,例如將變化位Changebits的所有位置為1;如果刪除源 數據行,則可以設置所述源數據行的變化類型ChangeType為 "D"(刪 除)并且標記變化位Changebits,例如將變化位Changebits的所有位置為 0;如果更新源數據行,則可以設置所述源數據行的變化類型ChangeType 為更新"U"并且標記變化位Changebits,例如可以將與所述源數據行的 更新的列相對應的變化位Changebits置為1以及將與所述源數據行的未更 新的列相對應的變化4立Changebits置為0。
圖6C示出第一次加載源數據表的歷史表,所有數據列與源數據表相 同。歷史表中的每一行用來記錄源數據表中的源數據行的每個變化行,對 于源數據行的每一個變化行,例如主關鍵字列Cl為1的源數據行,from 版本號是該源數據行開始存在的當前版本號1, to版本號是該源數據行有效屆滿的版本號oo(最大值oo表示該變化行對應源數據表中當前行)。 ChangeType為'T表明該源數據行的變化類型為"I"(添加),ChangeBits 是二進制數據類型(1111),它的位數是該源數據表中非主關鍵字列的數 目,因此對于源數據表中的四個非主關鍵列字,ChangeBits是四位二進制 數,其從左至右每一位表示主關鍵字列Cl為1、變化類型為'T,(添加) 的源數據行所對應的該源數據行的非主關鍵字列從左至右每列的變化狀 態。
圖7A-7B示出第一次發生變化之后的源數據表和歷史表,其中圖7A 示出第一次發生變化之后的源數據表,該源數據表中存在來自客戶機03 的多個變化,主關鍵字列C1為1的源數據行的C2列被更新為"11",并 且添加了主關鍵字列Cl為3的源數據行。圖7B示出第二次加載源數據表 的歷史表,相應地,在歷史表中存在一個主關鍵字列C1為3的新變化行, from版本號是該源數據行開始存在的當前版本號2, to版本號是該源數據 行有效屆滿的版本號oo,其中ChangeType是'T (添加)并且ChangeBits 是(llll),以此來標記新添加的源數據行。此外還存在另一個主關鍵字 列Cl為1的新變化行,from版本號是該源數據行開始存在的當前版本號 2, to版本號是該源數據行有效屆滿的版本號oo,其中ChangeType是"U" (更新)并且ChangeBits是(1000 ),以此來標記源數據表中主關鍵字列 Cl為1的源數據行的第一個非主關鍵字列被更新。同時原歷史表中主關鍵 字列Cl為1的變化行對應的to版本號被更新為1,表示該源數據行的變 化在版本號1之前生效。
圖8示出對于每個源數據表的客戶機版本歷史表,該客戶機版本歷史 表包含對于每個源數據表的全部客戶機的版本歷史。每次同步之后,客戶 機將得到一個新的版本號,并將其記錄在客戶機版本歷史表中新的一行。 客戶機版本歷史表中的版本號來自全局版本歷史表中的值,例如,第一行 表示客戶機01的版本在2007-08-08-12: 00: 00是100,之后,客戶機Ol 執行同步并且它的版本號在2007-08-08-12: 10: 00是300。當客戶機執行 數據恢復時,需要確定客戶機的當前數據版本號以及客戶機要進行數據恢復的歷史目標版本。當前的數據版本號是客戶機版本歷史表中最近的版本 號,而歷史目標版本需要根據客戶機進行數據恢復的時間標簽從客戶機版 本歷史表中查尋。
圖9示出合并的方法流程圖。在步驟901,從歷史記錄中取出該客戶 機自歷史目標版本與當前版本之間的數據記錄的變化歷史;在步驟卯2, 創建兩個變量合并后的變化類型MergedChangeType和合并后的變化位 MergedChangeBits;在步驟903,判斷是否存在相同數據記錄的下一個變 化數據記錄,判斷為"是,,,則前進到步驟904,否則過程結束;在步驟 904,將相同源數據行的變化行進行合并,并將得到的合并后的變化類型 MergedChangeType和合并后的變化位MergedChangeBits存儲在變量 MergedChangeType和MergedChangeBits中;在步驟905 , 取出 MergedChangeType的值,該值可以是以下四個值的其中之一"D"(刪 除),"DI"(刪除后添加),"U"(更新)以及'T,(添加)。如果 該值為"D",那么前進到步驟906,生成刪除行操作。如果該值為"DI", 則前進到步驟卯7,對所有字段產生先刪除,然后添加的操作;如果該值 為"U,,,則前進到步驟908,生成更新操作,其中包含MergedChangeBits 中標記變化的字段;如果該值為"I",則前進到步驟卯9,對所有要添加 的列生成添加操作。在步驟910,判斷是否存在下一個數據記錄的變化數 據記錄,如果判斷為"是",則過程返回到步驟卯3再次循環,否則前進 到步驟911結束過程。
圖IO詳細描述了圖9中的合并變化數據記錄的工作過程,即,如何高 效地計算出對于相同數據記錄的多個變化數據記錄的合并后的變化類型 MergedChangeType和合并后的變化位MergedChangeBits 。在該合并過程 中,為了使客戶機上的當前版本數據能夠回到歷史版本數據,歷史表中記 錄的數據操作將被逆轉并合并。逆轉是指為了使客戶機的當前版本恢復到 歷史目標版本,需要對原變化數據記錄中的部分變化類型進行逆轉添加 將被逆轉為刪除,刪除將被逆轉為添加,更新不進行逆轉。流程的輸入是 某個客戶機的歷史目標版本與當前版本之間的相同數據記錄的所有變化數
13據記錄,將所有變化數據記錄按照時間發生的先后順序排序,最先發生的 變化數據記錄將排在序列的最上面,當前變化數據記錄將排在序列的最下
面。在步驟1001,根據客戶機最先變化數據記錄的ChangeType進行不同
的步驟。
如果最先變化數據記錄的ChangeType是'T,(添加),那么過程 進行到步驟1002將合并后的變化類型MergedChangeType設置為"D"(刪 除)以及標記MergedChangeBits,例如將MergedChangeBits i殳置為全零, 并且下一步前行到步驟1213。
如果最先變化數據記錄的ChangeType是"D"(刪除),那么過程 進行到步驟1003,如果最先變化數據記錄之后不存在相同數據記錄的變化 數據記錄,則過程進行到1004, MergedChangeType被設置為添加'T, 以及標記MergedChangeBits ,例如將MergedChangeBits i殳置為全1;如 果最先變化數據記錄之后存在相同數據記錄的變化數據記錄,則該變化數 據記錄的ChangeType—定是添加,因為刪除操作一定伴隨一個添加操作, 不管在添加操作之后有多少次變化,合并后的變化類型 MergedChangeType最后都等同于刪除后添加的效果,過程進行到步驟 1005, MergedChangeType被設置為 "DI"(刪除后添加)以及標記 MergedChangeBits,例如將MergedChangeBits i殳置為全1。
如果最先變化數據記錄的ChangeType是"U"(更新),那么前進 到步驟1006,首先將變量MergedChangeType和MergedChangeBits的值設 置為最先變化數據記錄的ChangeType和ChangeBits;在步驟1007,檢查 最先變化數據記錄之后是否存在相同數據記錄的變化數據記錄,如果最先 變化數據記錄之后不存在相同數據記錄的變化數據記錄,則過程前進到步 驟1013,返回當前的MergedChangeType和MergedChangeBits;如果最 先變化數據記錄之后存在相同數據記錄的變化數據記錄,在步驟1008進一 步判斷該變化數據記錄的ChangeType,如果該變化數據記錄的 ChangeType是"U"(更新),則前進到步驟1009,該MergedChangeType 仍舊是更新"U"并且MergedChangeBits將是當前MergedChangeBits和該變化數據記錄ChangeBits的按位或邏輯運算結果,并且過程返回到1008 直到將相同數據記錄的所有變化數據記錄處理完;如果該變化數據記錄的 ChangeType是刪除"D",則在步驟1010,進一步檢查在該變化數據記錄 之后是否存在相同數據記錄的下一個變化數據記錄,如果存在相同數據記 錄的下一個變化數據記錄,則在步驟1011,該下一個變化數據記錄的 ChangeType—定是添加,將MergedChangeType設置為 "DI"(刪除 后添力。)以及標記MergedChangeBits,例如將MergedChangeBits i殳置為 全1;否則如果不存在相同數據記錄的下一個變化數據記錄,則在步驟 1012,將MergedChangeType設置為添加'T,并且標記MergedChangeBits, 例如將MergedChangeBits設置為全1;在步驟1011和步驟1012之后,過 程前進到步驟1013以返回MergedChangeType和MergedChangeBits,
圖ll示出使用圖10中的方法進行合并的示例,為了簡單、清楚起見, 以數據庫為例,在示例(1)至(3)中,從上至下是具有相同主關鍵字列 的相同源數據行的歷史狀態的變化行到當前狀態的變化行的ChangeType 和ChangeBits,在示例(1)中,具有相同主關鍵字列的相同源數據行的 最先變化行的ChangeType是"U"(更新),在更新之后的變化行的 ChangeType也是"U"(更新),逆轉之后對應于前兩個變化行的 ChangeType依然是"U",當前變化行的ChangeType是"D"(刪除), 逆轉之后對應于當前變化行的ChangeType是'T,(添加)。因此合并后 的MergedChangeType是添加'T,以及MergedChangeBits是(1111)。
在示例2中,具有相同主關鍵字列的相同源數據行的最先變化行的 ChangeType是添加"I",逆轉之后對應于該最先變化行的ChangeType 是刪除"D",并且在添加之后的所有變化都可以被忽略,因此合并后的 MergedChangeType是刪除以及MergedChangeBits是(0000)。
在示例3中,具有相同主關鍵字列的相同源數據行的所有變化行的 ChangeType都是更新"U",因此三個更新被合并,MergedChangeType 是更新"U",以及MergedChangeBits是三個ChangeBits的按位或邏輯 運算結果(0111)。圖12示出處理客戶機自身發起的變化對服務器和其它客戶機的影響 的流程圖。在步驟1201,取出來源于該客戶機的歷史目標版本與當前版本 之間的數據記錄的變化歷史;前進到步驟1202,取出一個變化數據記錄; 在步驟1203,在歷史記錄中該歷史目標版本與當前版本之間找到不是由該 客戶端發起的而是由服務器或其它客戶機發起的相同數據記錄的最近變化 數據記錄,若不存在由服務器或其它客戶機發起的相同數據記錄的最近變 化數據記錄,則取出該客戶機歷史目標版本的變化數據記錄;在步驟1204, 檢查步驟1202中的變化數據記錄是否是服務器最近的變化數據記錄;如果 判斷為"是",則在步驟1205,將步驟1202中的變化數據記錄更新為步 驟1203中得到的相同數據記錄的最近變化數據記錄;如果判斷為"否", 則在步驟1206,將步驟1202中的變化數據記錄從歷史表中刪除;在步驟 1207判斷相同數據記錄的所有變化數據記錄是否都處理過了 ,如果判斷為 是,則過程結束;如果判斷為否,則過程返回到步驟1202。
圖13示出本發明的利用同步進行數據恢復的系統1300,包括記錄 裝置1301,用于記錄數據記錄的變化歷史;同步引擎1302,響應于接收到 的數據恢復請求,查詢所需要恢復的數據記錄的歷史目標版本,合并所述 數據記錄的歷史目標版本與當前版本之間的變化歷史,并發送所述合并結 果。
該記錄裝置用于如果添加數據記錄,則記錄所述數據記錄的變化類 型為添加并且標記所述數據記錄的變化位;如果刪除數據記錄,則記錄所 述數據記錄的變化類型為刪除并且標記所述數據記錄的變化位;如果更新 數據記錄,則記錄所述數據記錄的變化類型為更新并且標記所述數據記錄 的變化位。
所述同步引擎還包括合并裝置,所述合并裝置用于分別將對應于相同 數據記錄的所有變化的變化類型和變化位進行合并,得到合并后的變化類 型和合并后的變化位。其中合并裝置還包括刪除逆轉合并裝置,如果所 述相同數據記錄的最先變化類型為刪除,則在所述最先數據記錄之后不存 在相同數據記錄的下一個變化數據記錄的情況下,則將合并后的變化類型
16設置為添加并標識合并后的變化位.否則在所述最先數據記錄之后存在相 同數據記錄的下一個變化數據記錄的情況下,將合并后的變化類型設置為
刪除后添加并標識合并后的變化位;添加逆轉合并裝置,如果所述相同數 據記錄的最先變化數據記錄的變化類型為添加,將合并后的變化類型設置 為刪除并標識合并后的變化位;更新合并裝置,在所述相同數據記錄的最 先變化記錄的變化類型為更新的情況下,如果在所述最先變化數據記錄之 后不存在相同數據記錄的下一個變化數據記錄,則將所述最先變化數據記 錄的變化類型和變化位分別設置為合并后的變化類型和合并后的變化位; 如果在所述最先變化數據記錄之后存在相同數據記錄的下一個變化數據記 錄并且所述下一個變化數據記錄的變化類型是更新,則合并后的變化類型 是更新,合并后的變化位是當前合并后的變化位與所述下一個變化數據記 錄的變化位的按位或邏輯運算結果。
當所述系統用于服務器與多個客戶機之間消除由客戶機自身的變化對 服務器與其它客戶機的影響時還包括處理裝置,所述處理裝置用于 1 )從客戶機的歷史目標版本與當前版本之間數據記錄的變化歷史中取出來 自于該客戶機的一個變化數據記錄;2)在目標版本與當前版本之間取出由 服務器或其它客戶機發起的相同數據記錄的最近變化數據記錄;3)判斷步 驟1)中的該變化數據記錄是否為服務器最近的變化數據記錄,如果判斷 為是,則將該變化數據記錄更新為步驟2)中的相同數據記錄的最近變化 數據記錄;如果判斷為否,則將該變化數據記錄從數據記錄的變化歷史中 刪除。
本發明的數據同步系統中合并裝置的具體實現方法可以參照圖9和圖 IO的合并方法的流程來實現,在此不--贅述。
本發明可以硬件、軟件、固件或其組合的方式實現。本發明可以集中 的方式在一個計算機系統中實現,或以分布方式實現,在這種分布方式中, 不同的部件分布在若千互連的計算機系統中。適于執行本文中描述的方法 的任何計算機系統或其它裝置都是合適的。優選地,本發明以計算機軟件 和通用計算機硬件的組合的方式實現,在這種實現方式中,當該計算機程序被加載和執行時,控制該計算機系統而使其執行本發明的方法,或構成 本發明的系統。
上面出于舉例說明的目的,給出了本發明的優選實施例的說明。優選 實施例的上述說明不是窮盡的,也不打算把本發明局限于公開的明確形式, 顯然鑒于上述教導,許多修改和變化是可能的。對本領域的技術人員來說 顯而易見的這種修改和變化包括在由附加的權利要求限定的本發明的范圍 內。
權利要求
1.一種利用同步進行數據恢復的方法,包括記錄數據記錄的變化歷史;響應于接收到的數據恢復請求,查詢所需要恢復的數據記錄的歷史目標版本;合并所述數據記錄的歷史目標版本與當前版本之間的變化歷史;發送所述合并結果。
2. 如權利要求l所述的方法,其中所述數據記錄的變化歷史為數據記 錄的字段的變化歷史。
3. 如權利要求2所述的方法,其中所述歷史目標版本通過歷史時間標 簽來確定。
4. 如權利要求3所述的方法,其中所述變化歷史通過變化類型、變化 位以及版本號來記錄,所述變化類型用于記錄所述數據記錄變化的變化類 型,所述變化位用于記錄與所述數據記錄的變化類型對應的字段變化狀態, 并且所述版本號用于標記所述數據記錄的有效時間點。
5. 如權利要求4所述的方法,其中合并所述變化歷史的步驟包括分 別將對應于相同lt據記錄的所有變化的變化類型和變化位進^ff合并,得到 合并后的變化類型和合并后的變化位。
6. 如權利要求5所述的方法,其中記錄數據記錄的變化歷史的步驟還 包括如果添加數據記錄,則i殳置所述數據記錄的變化類型為添加并且標記 所述數據記錄的變化位;如果刪除數據記錄,則設置所述數據記錄的變化類型為刪除并且標記 所述數據記錄的變化位;如果更新數據記錄,則設置所述數據記錄的變化類型為更新并且標記 所述數據記錄的變化位。
7. 如權利要求6所述的方法,其中所述合并相同數據記錄的所有變化數據記錄的變化類型和變化位的步驟還包括如果所W目同數據記錄的最先變化數據記錄的變化類型為添加,則將 合并后的變化類型設置為刪除并標識合并后的變化位;如果所^目同數據記錄的最先變化數據記錄的變化類型為刪除,則在 所述最先變化數據記錄之后不存在相同數據記錄的下一個變化數據記錄的 情況下,將合并后的變化類型設置為添加并標識合并后的變化位,否則在 所述最先數據記錄之后存在相同數據記錄的下一個變化數據記錄的情況 下,將合并后的變化類型設置為刪除后添加并標識合并后的變化位;在所勤目同數據記錄的最先變化記錄的變化類型為更新的情況下,如 果在所述最先變化數據記錄之后不存在相同數據記錄的下一個變化數據記 錄,則將合并后的變化類型和合并后的變化位分別設置為所述最先變化數 據記錄的變化類型和變化位;如果在所述最先變化數據記錄之后存在相同 源數據記錄的下一個變化數據記錄并且所述下一個變化數據記錄的變化類 型是更新,則合并后的變化類型是更新,合并后的變化位是當前合并后的 變化位與所述下一個變化數據記錄的變化位的按位或邏輯運算結果。
8. 如權利要求l所述的方法,當所述方法用于服務器與多個客戶機之 間消除客戶機自身的變化對服務器與其它客戶機的影響時還包括以下步1 )從客戶機的歷史目標版本與當前版本之間數據記錄的變化歷史中取 出 一個來自于該客戶機的變化數據記錄;2 )在所述歷史目標版本與當前版本之間取出由服務器或其它客戶機發 起的相同數據記錄的最近變化數據記錄;3)判斷步驟l)中的該變化數據記錄是否為服務器最近的變化數據記 錄,如果判斷為是,則將該變化數據記錄更新為步驟2)中的相同數據記 錄的最近變化數據記錄;如果判斷為否,則將該變化數據記錄從數據記錄 的變化歷史中刪除。
9. 如權利要求l-4所述的方法,其中所述數據記錄存儲在數據庫中。
10. —種利用同步進行數據恢復的系統,包括記錄裝置,用于記錄數據記錄的變化歷史;同步引擎,響應于接收到的數據恢復請求,查詢所需要恢復的數據記 錄的歷史目標版本,合并所述數據記錄的歷史目標版本與當前版本之間的 變化歷史,并發送所述合并結果。
11. 如權利要求10所述的系統,其中所述數據記錄的變化歷史為數據 記錄的字段的變化歷史。
12. 如權利要求ll所述的系統,其中所述歷史目標版本通過歷史時間 標簽來確定。
13. 如權利要求12所述的系統,其中所述變化歷史通過變化類型、變 化位以及版本號來記錄,所述變化類型用于記錄所述數據記錄變化的變化 類型,所述變化位用于記錄與所述數據記錄的變化類型對應的字段變化狀 態,并且所述版本號用于標記所述數據記錄的有效時間點。
14. 如權利要求13所述的系統,其中所述同步引擎還包括逆轉合并裝 置,所述合并裝置用于分別將對應于相同數據記錄的所有變化的變化類型 和變化位進行合并,得到合并后的變化類型和合并后的變化位。
15. 如權利要求14所述的系統,其中所述記錄裝置還用于 如果添加數據記錄,則記錄所述數據記錄的變化類型為添加并且標記所述數據記錄的變化位;如果刪除數據記錄,則記錄所述數據記錄的變化類型為刪除并且標記 所述數據記錄的變化位;如果更新數據記錄,則記錄所述數據記錄的變化類型為更新并且標記 所述數據記錄的變化位。
16. 如權利要求15所述的系統,其中所述同步引擎還包括 添加逆轉合并裝置,如果所述相同數據記錄的最先變化數據記錄的變化類型為添加,則將合并后的變化類型設置為刪除并標識合并后的變化位; 刪除逆轉合并裝置,如果所i^目同數據記錄的最先變化數據記錄的變 化類型為刪除,則在所述最先變化數據記錄之后不存在相同數據記錄的下 一個變化數據記錄的情況下,將合并后的變化類型設置為添加并標識合并后的變化位,否則在所述最先數據記錄之后存在相同數據記錄的下一個變 化數據記錄的情況下,將合并后的變化類型設置為刪除后添加并標識合并后的變化位;更新合并裝置,在所ii^目同數據記錄的最先變化記錄的變化類型為更 新的情況下,如果在所述最先變化數據記錄之后不存在相同數據記錄的下 一個變化數據記錄,則將所述最先變化數據記錄的變化類型和變化位分別 設置為合并后的變化類型和合并后的變化位;如果在所述最先變化數據記 錄之后存在相同數據記錄的下一個變化數據記錄并且所述下一個變化數據 記錄的變化類型是更新,則合并后的變化類型是更新,合并后的變化位是 當前合并后的變化位與所述下一個變化數據記錄的變化位的按位或邏輯運 算結果。
17. 如權利要求10所述的系統,當所述系統用于服務器與多個客戶機 之間消除由客戶機自身的變化對服務器與其它客戶機的影響時還包括處理 裝置,所述處理裝置用于1 )M戶機的歷史目標版本與當前版本之間數據記錄的變化歷史中取 出 一個來自于該客戶機的變化數據記錄;2 )在所述歷史目標版本與當前版本之間取出由服務器或其它客戶機發 起的相同數據記錄的最近變化數據記錄;3)判斷步驟l)中的該變化數據記錄是否為服務器最近的變化數據記 錄,如果判斷為是,則將該變化數據記錄更新為步驟2)中的相同數據記 錄的最近變化數據記錄;如果判斷為否,則將該變化數據記錄從數據記錄 的變化歷史中刪除。
18. 如權利要求10-14所述的方法,其中所述數據記M儲在數據庫中。
全文摘要
本發明公開一種利用同步進行數據恢復的方法,包括記錄數據記錄的變化歷史;響應于接收到的數據恢復請求,查詢所需要恢復的數據記錄的歷史目標版本,合并所述數據記錄的歷史目標版本與當前版本之間的變化歷史;發送所述合并結果。本發明通過高效的合并方法合并數據記錄的目標版本與當前版本之間的變化歷史,并通過遠程同步發送數據記錄中變化的字段,節省了大量存儲資源,實現了一種高效且方便的數據恢復方法。
文檔編號G06F11/14GK101593185SQ20081010887
公開日2009年12月2日 申請日期2008年5月29日 優先權日2008年5月29日
發明者亮 齊 申請人:國際商業機器公司