專利名稱::多個數(shù)據(jù)庫的同步方法及裝置的制作方法
技術領域:
:本發(fā)明涉及在計算機系統(tǒng)中使數(shù)據(jù)庫相關的
技術領域:
。本發(fā)明具體公開了一種使多個不同數(shù)據(jù)庫同步的同步系統(tǒng)?,F(xiàn)今,人們越來越多地依賴計算機設備來安排生活。例如,有許多人使用計算機系統(tǒng)來保存?zhèn)€人信息,如電話號碼和地址列表、活動安排列表和個人日常計劃等。許多人將這種個人信息存儲在臺式個人計算機上的個人信息管理應用程序中。然而,當這些人離開他們的個人計算機時,由于有價值的個人信息存儲在臺式個人計算機中,所以就無法得到這些信息。一種可在其它位置上得到這種個人信息的方法是將個人信息放到連接到因特網(wǎng)的服務器上。為了保護個人信息,在服務器允許用戶訪問個人信息之前,服務器會要求用戶進行身份驗證。目前,有一個因特網(wǎng)網(wǎng)站(website)免費提供在因特網(wǎng)上存儲個人信息的服務(參見http//www.plantall.com)。然而,若要訪問存儲在因特網(wǎng)服務器上的個人信息,仍需訪問因特網(wǎng)。另一種可訪問個人信息的方法是將個人信息放到手持計算機系統(tǒng)上。為了實現(xiàn)這種功能,出現(xiàn)了新的一類便攜式手持計算機系統(tǒng)。例如,3Com公司的PalmPilot、3Com公司的PalmIII、以及基于WindowCE的掌上個人計算機均具有存儲個人信息的應用程序。當某人使用多于一個的這些個人信息存儲系統(tǒng)(個人計算機應用程序、因特網(wǎng)服務器、手持計算機等)時,他需要使這些個人信息存儲系統(tǒng)相同步,以便能夠從所有不同的存儲系統(tǒng)中獲得同樣的數(shù)據(jù)。某些上述系統(tǒng)能夠使兩種個人信息系統(tǒng)相同步。例如,3Com公司的PalmPilot根據(jù)個人信息管理程序使個人計算機與PalmPilot手持計算機系統(tǒng)相同步。然而,更希望能夠使多于兩種的個人信息存儲系統(tǒng)相同步,以使人們能夠同時使用多種個人信息系統(tǒng)。公開了一種數(shù)據(jù)庫同步系統(tǒng)。在該數(shù)據(jù)庫同步系統(tǒng)中,創(chuàng)建了一個同步數(shù)據(jù)庫。同步數(shù)據(jù)庫中存儲有表示每個數(shù)據(jù)庫上次何時試圖向其它各數(shù)據(jù)庫發(fā)送記錄的相對發(fā)送時間、表示每個數(shù)據(jù)庫上次何時試圖從其它各數(shù)據(jù)庫接收記錄的相對接收時間、以及表示上次何時在每個數(shù)據(jù)庫中創(chuàng)建或修改各記錄的相對記錄修改時間。該同步系統(tǒng)通過比較每個記錄的修改時間和相對發(fā)送時間以及相對接收時間來操作。只有一個記錄數(shù)據(jù)的相對記錄修改時間遲于表示第一數(shù)據(jù)庫上次何時向第二數(shù)據(jù)庫發(fā)送記錄數(shù)據(jù)的相對發(fā)送時間,并且此相對記錄修改時間早于表示第一數(shù)據(jù)庫上次何時從第二數(shù)據(jù)庫接收記錄數(shù)據(jù)的相對接收時間,才將該記錄數(shù)據(jù)從第一數(shù)據(jù)庫發(fā)往第二數(shù)據(jù)庫。參照附圖以及下面的詳細說明,將會清楚地理解本發(fā)明的其它目的、特征及優(yōu)點。通過下面的詳細說明,本領域普通技術人員將會清楚地理解本發(fā)明的目的、特征及優(yōu)點。附圖中圖1示出能夠應用本發(fā)明的系統(tǒng)結構;圖2a示出包含三種應用程序的全程同步系統(tǒng)的概念圖,其中各應用程序均存儲個人信息;圖2b示出包含三種應用程序的分布同步系統(tǒng)的概念圖,其中各應用程序均存儲個人信息;圖3示出具有兩個數(shù)據(jù)庫需要同步的系統(tǒng)的概念圖;圖4a示出利用全程同步系統(tǒng)同步三個數(shù)據(jù)庫的系統(tǒng)的概念圖;圖4b示出利用分布同步系統(tǒng)同步三個數(shù)據(jù)庫的系統(tǒng)的概念圖。公開了一種同步多個數(shù)據(jù)庫中信息的系統(tǒng)。在以下的說明中,為了便于說明以及全面理解本發(fā)明,給出了特定的具體技術術語。然而,對本領域普通技術人員顯而易見的是,這些具體細節(jié)對于實現(xiàn)本發(fā)明來說不是必需的。例如,本發(fā)明的說明參照的是如名稱、地址和電話號碼等個人信息。但是,對于在數(shù)據(jù)庫中存儲的其它類型信息,也能夠容易地采用相同的技術。多種個人信息管理程序圖1示出了連接到局域網(wǎng)140的一個個人計算機系統(tǒng)144。個人計算機系統(tǒng)144的用戶可使用特定的個人信息管理(PIM)程序,該程序是由他的信息服務(IS)商提供的。個人信息管理(PIM)程序存儲如電話號碼和地址列表、活動安排列表和個人日常計劃等信息。然而,為了訪問更多的個人信息,用戶還可使用其它的個人信息管理系統(tǒng)。一種常用的個人信息管理系統(tǒng)是手持計算機系統(tǒng)110,它包含存儲和顯示個人信息的應用程序。手持計算機系統(tǒng)110的例子可包括,但不限于,移動電話、個人數(shù)字助理(PDA)或一般用途的便攜式計算機。用戶可使用按鍵板118向手持計算機系統(tǒng)110輸入個人信息。手持計算機系統(tǒng)110在平板顯示器116上顯示個人信息。在一個實施例中,手持計算機系統(tǒng)110是蜂窩電話,它包括天線116和允許用戶通過無線網(wǎng)絡進行語音和數(shù)據(jù)通信的通信電子部件。為了保證手持計算機系統(tǒng)110中個人信息的實時性,手持計算機系統(tǒng)110可以與個人計算機系統(tǒng)144上的個人信息管理程序相同步。個人計算機系統(tǒng)144上的個人信息管理程序可以是或不是信息服務(IS)商為用戶提供的個人信息管理程序。另一種提供訪問用戶個人信息的方法是在因特網(wǎng)或內(nèi)部網(wǎng)服務器130上的個人事項管理程序上設置用戶的個人信息。圖1例子中的因特網(wǎng)/內(nèi)部網(wǎng)服務器130不僅連接到內(nèi)部LAN140還連接到全球因特網(wǎng)100上。所以,任何連接到內(nèi)部LAN140或全球因特網(wǎng)100的客戶機系統(tǒng),如終端站106、102和142,均可訪問用戶的個人信息。為了保護用戶的個人信息,因特網(wǎng)/內(nèi)部網(wǎng)服務器130上的個人事項管理程序應要求身份驗證。因特網(wǎng)/內(nèi)部網(wǎng)服務器130上的個人事項管理程序能夠提供這樣的功能,即允許用戶有選擇地與內(nèi)部LAN140和全球因特網(wǎng)100上的其它人共享該用戶的個人信息。一個有效用戶也許想使用上述的所有三種個人信息管理系統(tǒng)。圖2a示出了在個人計算機200中的三種應用程序的概念圖,這三個應用程序個人計算機信息管理程序230、因特網(wǎng)/內(nèi)部網(wǎng)服務器通信程序210以及手持計算機通信程序220均存儲個人信息。個人計算機信息管理程序230可以是下面幾種個人信息管理程序之一,即Qualcomn(高通)公司的EudoraPlanner、Lotus(蓮花)公司的Organizer、Microsoft(微軟)公司的OutlookExpress。個人計算機信息管理程序230具有它自己的用于個人計算機200的個人信息數(shù)據(jù)庫235。因特網(wǎng)/內(nèi)部網(wǎng)服務器通信程序210可以是在因特網(wǎng)/內(nèi)部網(wǎng)130上存儲信息的幾種程序之一。例如,LotusNotes在LotusDominoServer上存儲信息。同樣,PlanetAll提供的同步程序在駐留有PlanetAll的因特網(wǎng)服務器上存儲個人信息(參見http//www.PlanetAll.com)。因特網(wǎng)/內(nèi)部網(wǎng)服務器通信程序210可以具有它自己的用于因特網(wǎng)/內(nèi)部網(wǎng)服務器130的個人信息數(shù)據(jù)庫215?;蛘?,因特網(wǎng)/內(nèi)部網(wǎng)服務器通信程序210可以需要特殊的輸入格式的數(shù)據(jù)或采用與個人計算機信息管理程序230不同的現(xiàn)有個人計算機PIM程序。手持計算機通信程序220可以是與外部手持計算機系統(tǒng)110通信的幾種程序之一。用于手持計算機系統(tǒng)的通信程序的例子包括3Com公司的PilotDesktop和PumaTechnologies公司的Intellisync。手持計算機通信程序220可以具有它自己的用于外部手持計算機系統(tǒng)110的個人信息數(shù)據(jù)庫225。因此,如圖2a的例子所示,用戶可以具有三種或更多的正在使用的個人信息數(shù)據(jù)庫。于是,希望所有個人信息數(shù)據(jù)庫的內(nèi)容保持同步。多數(shù)據(jù)庫同步系統(tǒng)本發(fā)明提供一種保持幾種不同個人信息數(shù)據(jù)庫同步的系統(tǒng)。在下文中,公開了兩種不同的實施例,然而存在其它的變化。全程同步系統(tǒng)參照圖2a,本發(fā)明引入了一個全程同步模塊(globalsynchronizationmodule)250,它周期性地訪問不同的個人信息數(shù)據(jù)庫210、220和230并且使它們同步。全程同步模塊250具有它自己的同步數(shù)據(jù)庫255。同步數(shù)據(jù)庫255包含有關各個數(shù)據(jù)庫內(nèi)存儲的各種記錄的信息。具體地說,同步數(shù)據(jù)庫255記錄了從一個數(shù)據(jù)庫到另一個數(shù)據(jù)庫復制或移動各種記錄的時間。為了防止由于不同計算機系統(tǒng)的時鐘差異而引入的問題,使用時鐘信號的全程同步模塊250僅使用來自主機系統(tǒng)的時鐘的時鐘信號。同步數(shù)據(jù)庫255在每個個人信息數(shù)據(jù)庫中存儲了每個記錄的登錄項(entry)。具體地說,每個登錄項包含表示在特定數(shù)據(jù)庫中修改該記錄的時間的時戳。另外,同步數(shù)據(jù)庫255包含(1)上次每個數(shù)據(jù)庫向其它各個數(shù)據(jù)庫發(fā)送記錄的時間、以及(2)上次每個數(shù)據(jù)庫從其它各個數(shù)據(jù)庫接收記錄的時間。同步數(shù)據(jù)庫255可以為每個不同數(shù)據(jù)庫記錄分配唯一的記錄標識符。在一個實施例中,可以為不同數(shù)據(jù)庫中的相應記錄分配相同的唯一的記錄標識符,因為在各個數(shù)據(jù)庫中這些記錄是(或應是)相同的。分布同步系統(tǒng)圖2b示出了其中采用不同同步模塊來同步不同數(shù)據(jù)庫對的另一實施例。具體地說,示出了三個不同的同步模塊。第一同步模塊251管理在用于因特網(wǎng)/內(nèi)部網(wǎng)服務器通信程序210的數(shù)據(jù)庫215、和用于手持計算機通信程序220的數(shù)據(jù)庫225之間的數(shù)據(jù)同步操作。第二同步模塊252管理在用于因特網(wǎng)/內(nèi)部網(wǎng)服務器通信程序210的數(shù)據(jù)庫215、和用于個人計算機個人信息管理程序230的數(shù)據(jù)庫235之間的數(shù)據(jù)同步操作。第三同步模塊253管理在用于手持計算機通信程序220的數(shù)據(jù)庫225、和用于個人計算機個人信息管理程序230的數(shù)據(jù)庫235之間的數(shù)據(jù)同步操作。在這樣的實施例中,每個同步模塊251、252和253分別具有它自己的同步數(shù)據(jù)256、257和259。一個簡單實例為了說明如圖2a所示的利用全程同步系統(tǒng)來操作多個數(shù)據(jù)庫的簡單實例,參照下面的表和圖3提供了兩個數(shù)據(jù)庫的例子。表1數(shù)據(jù)庫A數(shù)據(jù)庫B修改記錄X1修改記錄Y1從B輸入輸出到B修改記錄X2修改記錄Y2從A輸入輸出到A100PM100PM101PM100PM101PM102PM100PM103PM101PM102PM100PM104PM103PM101PM102PM100PM105PM104PM103PM101PM102PM100PM106PM105PM104PM103PM101PM102PM100PM106PM105PM104PM103PM101PM102PM107PM</table></tables>表1的水平軸表示同步數(shù)據(jù)庫355的內(nèi)容,這些內(nèi)容用來控制圖3中所示的PIM程序A310中的PIMA數(shù)據(jù)庫315和PIM程序B320中的PIMB數(shù)據(jù)庫325的同步。垂直軸(即第n行)用來描述隨著記錄的變化和數(shù)據(jù)庫的同步,在同步數(shù)據(jù)庫355中的變化。表1的第一欄存儲在數(shù)據(jù)庫A中第一記錄即記錄X1的修改時間。第二欄存儲在數(shù)據(jù)庫A中第二記錄即記錄Y1的修改時間。表1中接下來的兩欄分別描述數(shù)據(jù)庫A315從數(shù)據(jù)庫B325接收記錄的時間、和數(shù)據(jù)庫A315向數(shù)據(jù)庫B325發(fā)送記錄的時間。具體地說,第三欄說明數(shù)據(jù)庫A315上次從數(shù)據(jù)庫B325接收記錄的時間,第四欄說明數(shù)據(jù)庫A315上次向數(shù)據(jù)庫B325發(fā)送記錄的時間。表1的第五欄存儲在數(shù)據(jù)庫B中相應的第一記錄即記錄X2的修改時間。第六欄存儲在數(shù)據(jù)庫B325中相應的第二記錄即記錄Y2的修改時間。注意,如果數(shù)據(jù)庫從來沒有被同步,如圖1所示,這些值可以為空或者甚至還可以不存在。第七欄說明數(shù)據(jù)庫B325上次從數(shù)據(jù)庫A315接收記錄的時間,第八欄說明數(shù)據(jù)庫B325上次向數(shù)據(jù)庫A315發(fā)送記錄的時間。參照表1的第2行,同步數(shù)據(jù)庫355為空,即沒有輸入過數(shù)據(jù)或記錄。于是,如表1的第3行所記錄的,在100pm,用戶向數(shù)據(jù)庫A315加入記錄X1。接著,如表1的第4行所說明的,在101pm,用戶向數(shù)據(jù)庫B325加入記錄Y2。在此時,每個數(shù)據(jù)庫包含一個記錄。創(chuàng)建的這兩個記錄沒有同步,因此,沒有那個數(shù)據(jù)庫能夠同時訪問這兩個記錄。通過讓數(shù)據(jù)庫A315向數(shù)據(jù)庫B325發(fā)送記錄,啟動并開始同步過程(然后,數(shù)據(jù)庫B325將向數(shù)據(jù)庫A315發(fā)送記錄)。如表1的第5行所示,同步數(shù)據(jù)庫355記錄了在102pm數(shù)據(jù)庫B325開始從數(shù)據(jù)庫A315接收記錄。檢查數(shù)據(jù)庫A315中的每個記錄,并且只有在滿足下面兩個條件時才向數(shù)據(jù)庫B325發(fā)送這些記錄(1)數(shù)據(jù)庫A中的記錄修改時間必須大于上次向數(shù)據(jù)庫B發(fā)送記錄的時間;以及(2)數(shù)據(jù)庫A中的記錄修改時間必須小于數(shù)據(jù)庫A上次從數(shù)據(jù)庫B接收記錄的時間。數(shù)據(jù)庫A中的記錄修改時間必須大于上次向數(shù)據(jù)庫B發(fā)送記錄的時間,這樣就只發(fā)送被修改的記錄。數(shù)據(jù)庫A中的記錄修改時間必須小于數(shù)據(jù)庫A上次從數(shù)據(jù)庫B接收記錄的時間,這樣就防止了剛從數(shù)據(jù)庫B接收的記錄被再發(fā)回數(shù)據(jù)庫B。由于X1從來沒有被發(fā)送到數(shù)據(jù)庫B325,所以修改時間大于上次發(fā)送時間。為了簡化處理過程,可以為新創(chuàng)建的記錄給定用字段設置的最早可能時間。于是,在數(shù)據(jù)庫B325中創(chuàng)建記錄X1作為記錄X2,并且將上次修改時間設置為表1第6行中的103pm。由于X1是數(shù)據(jù)庫A315中的唯一記錄,所以數(shù)據(jù)庫A315就完成了記錄發(fā)送。同步模塊350在同步數(shù)據(jù)庫355中記錄數(shù)據(jù)庫A315結束向數(shù)據(jù)庫B325發(fā)送記錄的結束時間,具體地說,表1的第7行將104pm記錄為向數(shù)據(jù)庫B325發(fā)送記錄的完成時間。然后,數(shù)據(jù)庫B325開始向數(shù)據(jù)庫A315發(fā)送記錄。同步模塊350在同步數(shù)據(jù)庫355中記錄數(shù)據(jù)庫A315開始從數(shù)據(jù)庫B325接收記錄的開始時間,具體地說,表1的第8行將105pm記錄為數(shù)據(jù)庫A315開始從數(shù)據(jù)庫B325接收記錄的時間。然后,同步模塊350進行從數(shù)據(jù)庫B325向數(shù)據(jù)庫A315發(fā)送記錄的過程。如前所述,只發(fā)送這樣的記錄,即數(shù)據(jù)庫B中的記錄修改時間大于上次向數(shù)據(jù)庫A發(fā)送記錄的時間、并且數(shù)據(jù)庫B中的記錄修改時間小于數(shù)據(jù)庫B上次從數(shù)據(jù)庫A接收記錄的時間。當同步模塊350要檢查數(shù)據(jù)庫B325中的記錄Y2時,由于記錄Y2是在上次向數(shù)據(jù)庫A315發(fā)送記錄之后修改的(101pm為最早時間)、并且記錄Y2是在上次從數(shù)據(jù)庫A接收記錄的時間之前修改的(101pm小于102pm),所以同步模塊350將向數(shù)據(jù)庫A發(fā)送記錄Y2。為新的記錄Y1給定當前時間作為修改時間。在本例中,在表1的第9行指定106pm作為修改時間。當同步模塊350要檢查數(shù)據(jù)庫B325中的記錄X2時,同步模塊350將不向數(shù)據(jù)庫A315發(fā)送記錄X2。不向數(shù)據(jù)庫A315發(fā)送記錄X2的原因是,由于該記錄不滿足前述條件的第二部分。具體地說,記錄X2不是在上次從數(shù)據(jù)庫A315接收記錄的時間之前修改的(103pm不小于102pm)。所以,不向數(shù)據(jù)庫A315發(fā)送記錄X2。這表示數(shù)據(jù)庫B325剛從數(shù)據(jù)庫A315接收到記錄X2并且還沒有修改它。最后,由于X2和Y2是數(shù)據(jù)庫B325中僅有的記錄,所以數(shù)據(jù)庫B325完成了向數(shù)據(jù)庫A315發(fā)送記錄。同步模塊350在同步數(shù)據(jù)庫355中記錄數(shù)據(jù)庫A315結束向數(shù)據(jù)庫B325發(fā)送記錄的結束時間。具體地說,表1的第10行將107pm記錄為向數(shù)據(jù)庫B325發(fā)送記錄的完成時間。時鐘差異在各種不同計算機系統(tǒng)中的時鐘常常不是精確同步的。例如,參照以下的表2,各個時鐘完全是異相的。表2數(shù)據(jù)庫A數(shù)據(jù)庫B表2的例子仍將正常工作,因為在比較中僅使用根據(jù)本地時鐘范圍記錄的時鐘值。如上面的例子所示,當修改、發(fā)送和接收數(shù)據(jù)庫記錄時,可以使用實際時間。然而,絕對時間并不重要。因此,本發(fā)明的系統(tǒng)還可以使用一個在執(zhí)行每個步驟之后改變的變化計數(shù)器。例如,參照上述各個例子,各個時間可以用遞增計數(shù)器值(100、101、102、103等)來代替。因此,記錄變化的準確時間不是必需的。要知道的重要事實是在特定同步之前或之后記錄是否有變化。參照圖3,同步模塊350可以不用從數(shù)據(jù)庫獲得特定記錄發(fā)生變化的準確時間。事實上,可以不告訴同步模塊350記錄變化的時間。然而,同步模塊350可以在同步之后存儲每個數(shù)據(jù)庫的拷貝。因此,當啟動同步時,同步模塊350首先比較所存儲的數(shù)據(jù)庫和改變后的數(shù)據(jù)庫,以判斷哪一個記錄已被修改。當前時間或遞增的計數(shù)器值將存儲在同步數(shù)據(jù)庫355中的修改記錄的修改時間字段內(nèi)。三個數(shù)據(jù)庫的例子本發(fā)明的同步系統(tǒng)能夠擴展到多個數(shù)據(jù)庫。下面的表3示出了多個數(shù)據(jù)庫同步的例子。為了簡化該例子,只考慮單個數(shù)據(jù)庫記錄的情況。表3數(shù)據(jù)庫A數(shù)據(jù)庫B數(shù)據(jù)庫C表3的水平軸表示同步數(shù)據(jù)庫455的內(nèi)容,這些內(nèi)容用來控制圖4a中所示的PIM程序A410中的PIMA數(shù)據(jù)庫415和PIM程序B420中的PIMB數(shù)據(jù)庫425的同步。垂直軸用來描述隨著一個記錄的輸入然后數(shù)據(jù)庫的同步,在同步數(shù)據(jù)庫455中的變化。在分布同步模塊環(huán)境中,如圖4b所示,表3的同步數(shù)據(jù)庫將分成三個不同的數(shù)據(jù)庫,每個同步模塊有一個數(shù)據(jù)庫。具體地說,同步數(shù)據(jù)456將包含A至B和B至A之間的數(shù)據(jù)交換,同步數(shù)據(jù)457將包含A至C和C至A之間的數(shù)據(jù)交換,同步數(shù)據(jù)459將包含C至B和B至C之間的數(shù)據(jù)交換?;仡^參照圖4a的全程同步實施例,表3的首先五欄(同步數(shù)據(jù)455)存儲在數(shù)據(jù)庫A中的記錄Xa、數(shù)據(jù)庫A415上次從數(shù)據(jù)庫B425接收記錄的時間、數(shù)據(jù)庫A415上次向數(shù)據(jù)庫B425發(fā)送記錄的時間、數(shù)據(jù)庫A415上次從數(shù)據(jù)庫C435接收記錄的時間、數(shù)據(jù)庫A415上次向數(shù)據(jù)庫C435發(fā)送記錄的時間。表3的中間五欄存儲在數(shù)據(jù)庫B425中的記錄Xb、數(shù)據(jù)庫B425上次從數(shù)據(jù)庫A415接收記錄的時間、數(shù)據(jù)庫B425上次向數(shù)據(jù)庫A415發(fā)送記錄的時間、數(shù)據(jù)庫B425上次從數(shù)據(jù)庫C435接收記錄的時間、數(shù)據(jù)庫B425上次向數(shù)據(jù)庫C435發(fā)送記錄的時間。表3的最后五欄存儲在數(shù)據(jù)庫C435中的記錄Xc、數(shù)據(jù)庫C435上次從數(shù)據(jù)庫A415接收記錄的時間、數(shù)據(jù)庫C435上次向數(shù)據(jù)庫A415發(fā)送記錄的時間、數(shù)據(jù)庫C435上次從數(shù)據(jù)庫B425接收記錄的時間、數(shù)據(jù)庫C435上次向數(shù)據(jù)庫B425發(fā)送記錄的時間。表3的垂直軸給出了一個三數(shù)據(jù)庫同步的例子。參照表3的第2行,同步數(shù)據(jù)庫355為空,即沒有輸入過數(shù)據(jù)或記錄。于是,如表3的第3行所記錄的,在100pm,用戶向數(shù)據(jù)庫A415加入記錄Xa。接著,在數(shù)據(jù)庫A和B之間啟動同步過程。該同步過程可以由用戶來啟動或自動啟動。該同步過程以數(shù)據(jù)庫A415向數(shù)據(jù)庫B425發(fā)送記錄來開始。同步數(shù)據(jù)庫455記錄了這樣的情況,即如表3的第4行所說明的,在101pm,數(shù)據(jù)庫B425開始從數(shù)據(jù)庫A415接收記錄。對數(shù)據(jù)庫A415中的每個記錄進行檢查,并且只有在滿足下面兩個條件時才向數(shù)據(jù)庫B425發(fā)送這些記錄(1)數(shù)據(jù)庫A中的記錄修改時間必須大于上次向數(shù)據(jù)庫B發(fā)送記錄的時間;以及(2)數(shù)據(jù)庫A中的記錄修改時間必須小于數(shù)據(jù)庫A上次從數(shù)據(jù)庫B接收記錄的時間。由于Xa從來沒有被發(fā)送到數(shù)據(jù)庫B425,所以修改時間大于上次發(fā)送時間(從來就沒有)。于是,在數(shù)據(jù)庫B425中創(chuàng)建記錄Xa為記錄Xb,并且將上次修改時間設置為表3第5行中的102pm。由于Xa是數(shù)據(jù)庫A415中的唯一記錄,所以數(shù)據(jù)庫A415就完成了記錄發(fā)送。同步模塊450在同步數(shù)據(jù)庫455中記錄數(shù)據(jù)庫A415結束向數(shù)據(jù)庫B425發(fā)送記錄的結束時間,具體地說,表3的第6行將103pm記錄為向數(shù)據(jù)庫B425發(fā)送記錄的完成時間。然后,數(shù)據(jù)庫B425開始向數(shù)據(jù)庫A415發(fā)送記錄。同步模塊450在同步數(shù)據(jù)庫455中記錄數(shù)據(jù)庫A415開始從數(shù)據(jù)庫B425接收記錄的開始時間,具體地說,表3的第7行將104pm記錄為數(shù)據(jù)庫A415開始從數(shù)據(jù)庫B425接收記錄的時間。然后,同步模塊450進行從數(shù)據(jù)庫B425向數(shù)據(jù)庫A415發(fā)送記錄的過程。如前所述,只發(fā)送這樣的記錄,即數(shù)據(jù)庫B中的記錄修改時間大于上次向數(shù)據(jù)庫A發(fā)送記錄的時間、并且數(shù)據(jù)庫B中的記錄修改時間小于數(shù)據(jù)庫B上次從數(shù)據(jù)庫A415接收記錄的時間。然而,由于在從數(shù)據(jù)庫A415接收記錄之后數(shù)據(jù)庫B425中的唯一記錄是所創(chuàng)建的記錄Xb,所以數(shù)據(jù)庫B425將不會發(fā)送記錄。于是,如表3的第8行所示,同步模塊450將記錄下在105pm數(shù)據(jù)庫B結束向數(shù)據(jù)庫A發(fā)送記錄。接著,在數(shù)據(jù)庫B和C之間啟動同步過程。該同步過程也可以由用戶來啟動或自動啟動。該同步過程以數(shù)據(jù)庫B425向數(shù)據(jù)庫C435發(fā)送記錄來開始。同步模塊450記錄了這樣的情況,即如表3的第9行所說明的,在106pm,數(shù)據(jù)庫C435開始從數(shù)據(jù)庫B425接收記錄。對數(shù)據(jù)庫B425中的每個記錄進行檢查,并且只有在滿足下面兩個條件時才向數(shù)據(jù)庫C435發(fā)送這些記錄(1)數(shù)據(jù)庫B中的記錄修改時間必須大于上次向數(shù)據(jù)庫C發(fā)送記錄的時間;以及(2)數(shù)據(jù)庫B中的記錄修改時間必須小于數(shù)據(jù)庫B上次從數(shù)據(jù)庫C接收記錄的時間。由于數(shù)據(jù)庫B425中的Xb從來沒有被發(fā)送到數(shù)據(jù)庫C435,所以修改時間大于上次發(fā)送時間(從來就沒有)。于是,在數(shù)據(jù)庫C435中創(chuàng)建記錄Xb為記錄Xc,并且將上次修改時間設置為表3第10行中的107pm。由于Xb是數(shù)據(jù)庫B425中的唯一記錄,所以同步模塊450在表3的第11行中記錄下,在108pm,數(shù)據(jù)庫B結束向數(shù)據(jù)庫C發(fā)送記錄的結束時間。在同步模塊450完成了從數(shù)據(jù)庫B向數(shù)據(jù)庫C發(fā)送記錄之后,同步模塊450開始從數(shù)據(jù)庫C向數(shù)據(jù)庫B發(fā)送記錄。在表3的第12行,同步模塊450記錄下在109pm數(shù)據(jù)庫B開始從數(shù)據(jù)庫C接收記錄。由于沒有記錄需要發(fā)送(記錄Xc是在從數(shù)據(jù)庫B接收之后創(chuàng)建的),所以如表3的第13行所示,同步模塊450將記錄下110pm作為數(shù)據(jù)庫C結束向數(shù)據(jù)庫B發(fā)送記錄的完成時間。接著,在數(shù)據(jù)庫A和C之間啟動同步過程。該同步過程以數(shù)據(jù)庫C435向數(shù)據(jù)庫A415發(fā)送記錄來開始。同步模塊450記錄了這樣的情況,即如表3的第14行所說明的,在111pm,數(shù)據(jù)庫A415開始從數(shù)據(jù)庫C435接收記錄。對數(shù)據(jù)庫C435中的每個記錄進行檢查,并且只有在滿足下面兩個條件時才向數(shù)據(jù)庫A415發(fā)送這些記錄(1)數(shù)據(jù)庫C中的記錄修改時間必須大于上次向數(shù)據(jù)庫A發(fā)送記錄的時間;以及(2)數(shù)據(jù)庫C中的記錄修改時間必須小于數(shù)據(jù)庫C上次從數(shù)據(jù)庫A接收記錄的時間。由于數(shù)據(jù)庫C435中的Xc從來沒有被發(fā)送到數(shù)據(jù)庫A415,所以修改時間大于上次發(fā)送時間(從來就沒有)。于是,記錄Xc被發(fā)送到數(shù)據(jù)庫A415。然而,數(shù)據(jù)庫A415要將所接收的記錄(記錄Xc)與現(xiàn)有記錄相比較,以判斷接收記錄是否是一個重復的記錄。若數(shù)據(jù)庫A415比較新接收的記錄和現(xiàn)有記錄Xa,則數(shù)據(jù)庫A415將判定這兩個記錄完全相同。于是,數(shù)據(jù)庫A415將舍棄新接收的記錄,因為它已經(jīng)具有該記錄。由于記錄Xc是數(shù)據(jù)庫C435中的唯一記錄,所以同步模塊450在表3的第15行中記錄下,在112pm,數(shù)據(jù)庫C結束向數(shù)據(jù)庫A415發(fā)送記錄的結束時間。然后,同步模塊450開始從數(shù)據(jù)庫A向數(shù)據(jù)庫C發(fā)送記錄。在表3的第16行,同步模塊450記錄下在113pm數(shù)據(jù)庫C開始從數(shù)據(jù)庫A接收記錄。在同步模塊450檢查記錄Xc之后,同步模塊450會試圖按修改的發(fā)送該記錄,因為在從數(shù)據(jù)庫C接收記錄之前,數(shù)據(jù)庫A上次已將記錄發(fā)送給數(shù)據(jù)庫C(從來就沒有)并且修改了Xa。然而,當數(shù)據(jù)庫C接收到該記錄時,數(shù)據(jù)庫C將舍棄該記錄,因為記錄Xa與現(xiàn)有記錄Xc完全相同。最后,同步模塊450將在表3的第17行中記錄下,在114pm數(shù)據(jù)庫A結束向數(shù)據(jù)庫C發(fā)送記錄。雙重修改解決方案在同步模塊檢測到在全部兩個數(shù)據(jù)庫中已加入或修改了一個記錄時,會發(fā)生雙重修改的情況。例如,考慮下面的例子1.用戶將記錄Xa加入到數(shù)據(jù)庫A。2.數(shù)據(jù)庫A與數(shù)據(jù)庫B同步。3.數(shù)據(jù)庫A與數(shù)據(jù)庫C同步。4.數(shù)據(jù)庫B與數(shù)據(jù)庫C同步。在該例子的第2步和第3步中,在數(shù)據(jù)庫B和數(shù)據(jù)庫C中都要加入記錄Xa。即使已知加入或修改每個記錄的準確時間,那也不一定是用來判斷要保存哪個記錄和要舍棄哪個記錄的正確信息。用于處理這種情況的現(xiàn)有技術處理過程在兩個數(shù)據(jù)庫中分別加入兩個記錄,這樣在結束時會有兩倍多的記錄。對于本發(fā)明的同步系統(tǒng)來說,這是不期望的,因為在上述的情況下,所有記錄都是雙倍的。簡而言之,當?shù)谝淮芜M行兩個數(shù)據(jù)庫的同步時,如果這兩個數(shù)據(jù)庫在過去分別與第三個數(shù)據(jù)庫同步,則會產(chǎn)生許多的記錄復本。為了處理這種情況,應能夠刪除完全相同的記錄并且能夠利用用戶的輸入來解決該情況的剩余問題。下面的步驟描述了一種處理在檢測到雙重修改或添加時的情況的可能方法1.比較各個記錄的內(nèi)容。如果記錄內(nèi)容完全相同,則舍棄一記錄,否則2.如果用戶選擇了一些判據(jù)則使用這些判據(jù),否則3.詢問用戶,給用戶列出下面的選項a)指定哪個數(shù)據(jù)庫“贏得”此記錄。b)指定在該同步過程中哪個數(shù)據(jù)庫“贏得”所有記錄。c)不同步此記錄。d)不同步任何沖突的記錄。e)復制這些記錄。f)復制所有沖突的記錄。上面已說明了一種同步多個數(shù)據(jù)庫的方法。本領域普通技術人員應理解,在不脫離本發(fā)明范圍的情況下,可以對本發(fā)明各成份的內(nèi)容或安排進行各種改變和修改。權利要求1.一種同步多個數(shù)據(jù)庫的方法,包括在第一數(shù)據(jù)庫存儲第一記錄;在所述第一數(shù)據(jù)庫和第二數(shù)據(jù)庫之間啟動同步;以及如果所述第一記錄是在所述第一數(shù)據(jù)庫上次向所述第二數(shù)據(jù)庫發(fā)送記錄之后創(chuàng)建或修改的、并且所述第一記錄是在所述第一數(shù)據(jù)庫上次從所述第二數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則向所述第二數(shù)據(jù)庫發(fā)送所述第一記錄。2.如權利要求1所述的方法,還包括如果在所述第一數(shù)據(jù)庫中已存在完全相同的記錄,則所述第二數(shù)據(jù)庫舍棄所述第一記錄。3.如權利要求1所述的方法,還包括如果第二記錄是在所述第二數(shù)據(jù)庫上次向所述第一數(shù)據(jù)庫發(fā)送記錄之后創(chuàng)建或修改的、并且所述第二記錄是在所述第二數(shù)據(jù)庫上次從所述第一數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則向所述第一數(shù)據(jù)庫發(fā)送所述第二數(shù)據(jù)庫中的所述第二記錄。4.如權利要求1所述的方法,還包括在所述第一數(shù)據(jù)庫和第三數(shù)據(jù)庫之間啟動同步;以及如果所述第一記錄是在所述第一數(shù)據(jù)庫上次向所述第三數(shù)據(jù)庫發(fā)送記錄之后創(chuàng)建或修改的、并且所述第一記錄是在所述第一數(shù)據(jù)庫上次從所述第三數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則向所述第三數(shù)據(jù)庫發(fā)送所述第一記錄。5.如權利要求1所述的方法,還包括在一個同步數(shù)據(jù)庫中存儲一組相對創(chuàng)建和修改時間,所述相對創(chuàng)建和修改時間指示一組何時創(chuàng)建或修改所述第一數(shù)據(jù)庫和所述第二數(shù)據(jù)庫中記錄的相對時間。6.如權利要求5所述的方法,其中,每個所述相對創(chuàng)建或修改時間包括來自系統(tǒng)時鐘的相對時間。7.如權利要求5所述的方法,其中,每個所述相對創(chuàng)建或修改時間包括來自遞增計數(shù)器的相對時間。8.如權利要求1所述的方法,還包括在所述第二數(shù)據(jù)庫和第三數(shù)據(jù)庫之間啟動同步;以及如果所述第一記錄是在所述第二數(shù)據(jù)庫上次向所述第三數(shù)據(jù)庫發(fā)送記錄之后創(chuàng)建或修改的、并且所述第一記錄是在所述第二數(shù)據(jù)庫上次從所述第三數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則從所述第二數(shù)據(jù)庫向所述第三數(shù)據(jù)庫發(fā)送所述第一記錄。9.一種用于同步第一數(shù)據(jù)庫和第二數(shù)據(jù)庫中記錄的同步系統(tǒng),包括一個同步數(shù)據(jù)庫,所述同步數(shù)據(jù)庫包括第一數(shù)據(jù)庫發(fā)往第二數(shù)據(jù)庫相對值,所述第一數(shù)據(jù)庫發(fā)往第二數(shù)據(jù)庫相對值存儲一個指示何時第一數(shù)據(jù)庫上次試圖向第二數(shù)據(jù)庫發(fā)送記錄的第一相對時間值,第一數(shù)據(jù)庫收自第二數(shù)據(jù)庫相對值,所述第一數(shù)據(jù)庫收自第二數(shù)據(jù)庫相對值存儲一個指示何時所述第一數(shù)據(jù)庫上次試圖從所述第二數(shù)據(jù)庫接收記錄的第二相對時間值,至少一個修改記錄值,每個修改記錄值對應于各個數(shù)據(jù)庫中的每個記錄,所述修改記錄值存儲一個表示何時創(chuàng)建或修改所述對應記錄的第三相對時間值;以及一個同步模塊,如果對應于第一記錄的第一修改記錄值所指定的時間遲于所述第一數(shù)據(jù)庫發(fā)往第二數(shù)據(jù)庫相對值、并且所述第一修改記錄值所指定的時間早于所述第一數(shù)據(jù)庫收自第二數(shù)據(jù)庫相對值,則所述同步模塊將所述第一記錄從所述第一數(shù)據(jù)庫發(fā)送到所述第二數(shù)據(jù)庫。10.如權利要求9所述的同步系統(tǒng),其中,所述同步數(shù)據(jù)庫還包括第二數(shù)據(jù)庫發(fā)往第一數(shù)據(jù)庫相對值,所述第二數(shù)據(jù)庫發(fā)往第一數(shù)據(jù)庫相對值存儲一個指示何時第二數(shù)據(jù)庫上次試圖向第一數(shù)據(jù)庫發(fā)送記錄的第四相對時間值,第二數(shù)據(jù)庫收自第一數(shù)據(jù)庫相對值,所述第二數(shù)據(jù)庫收自第一數(shù)據(jù)庫相對值存儲一個指示何時所述第二數(shù)據(jù)庫上次試圖從所述第一數(shù)據(jù)庫接收記錄的第五相對時間值,其中,如果對應于第二記錄的第二修改記錄值所指定的時間遲于所述第二數(shù)據(jù)庫發(fā)往第一數(shù)據(jù)庫相對值、并且所述第二修改記錄值所指定的時間早于所述第二數(shù)據(jù)庫收自第一數(shù)據(jù)庫相對值,則所述同步模塊將所述第二記錄從所述第二數(shù)據(jù)庫發(fā)送到所述第一數(shù)據(jù)庫。11.如權利要求9所述的同步系統(tǒng),其中,所述相對時間值包括系統(tǒng)時鐘時間。12.如權利要求9所述的同步系統(tǒng),其中,所述相對時間值包括遞增計數(shù)器。13.一種同步多個數(shù)據(jù)庫的方法,包括在所述多個數(shù)據(jù)庫之間啟動同步,所述多個數(shù)據(jù)庫包括至少兩個數(shù)據(jù)庫即第一數(shù)據(jù)庫和第二數(shù)據(jù)庫;檢查所述第一數(shù)據(jù)庫中的第一記錄,來判斷是否所述第一記錄是在所述第一數(shù)據(jù)庫上次向所述第二數(shù)據(jù)庫發(fā)送記錄之后、并且在所述第一數(shù)據(jù)庫上次從所述第二數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的;以及若所述第一記錄是在所述第一數(shù)據(jù)庫上次向所述第二數(shù)據(jù)庫發(fā)送記錄之后并且在所述第一數(shù)據(jù)庫上次從所述第二數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則向所述第二數(shù)據(jù)庫發(fā)送所述第一記錄的拷貝。14.如權利要求13所述的方法,還包括在所述第一數(shù)據(jù)庫中記錄一個第一值,以表示已經(jīng)將所述第一記錄的所述拷貝發(fā)送到所述第二數(shù)據(jù)庫。15.如權利要求14所述的方法,還包括在所述第二數(shù)據(jù)庫中記錄一個第二值,以表示已經(jīng)從所述第一數(shù)據(jù)庫接收到所述第一記錄的所述拷貝。16.如權利要求15所述的方法,其中,所述第一值和所述第二值來自(i)時鐘、(ii)計數(shù)器、(iii)不等序列號(numbers)之一。17.如權利要求13所述的方法,還包括檢查所述第二數(shù)據(jù)庫中的第二記錄,來判斷是否所述第二記錄是在所述第二數(shù)據(jù)庫上次向所述第一數(shù)據(jù)庫發(fā)送記錄之后、并且在所述第二數(shù)據(jù)庫上次從所述第一數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的;若所述第二記錄是在所述第二數(shù)據(jù)庫上次向所述第一數(shù)據(jù)庫發(fā)送記錄之后并且在所述第二數(shù)據(jù)庫上次從所述第一數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則向所述第一數(shù)據(jù)庫發(fā)送所述第二記錄的拷貝;以及在所述第二數(shù)據(jù)庫中記錄一個第三值,以表示已經(jīng)將所述第二記錄的所述拷貝發(fā)送到所述第一數(shù)據(jù)庫;以及在所述第一數(shù)據(jù)庫中記錄一個第四值,以表示已經(jīng)從所述第二數(shù)據(jù)庫接收到所述第二記錄的所述拷貝。18.如權利要求17所述的方法,其中,所述第三值和所述第四值來自(i)時鐘、(ii)計數(shù)器、(iii)不等序列號之一。19.一種用于同步多個數(shù)據(jù)庫的同步系統(tǒng),包括數(shù)據(jù)存儲設備,用于第一數(shù)據(jù)庫和第二數(shù)據(jù)庫;用于同步模塊的存儲器;連接到所述存儲器和所述數(shù)據(jù)存儲設備的處理器,所述處理器使所述同步模塊執(zhí)行下列操作檢查所述第一數(shù)據(jù)庫中的第一記錄,來判斷是否所述第一記錄是在所述第一數(shù)據(jù)庫上次向所述第二數(shù)據(jù)庫發(fā)送記錄之后、并且在所述第一數(shù)據(jù)庫上次從所述第二數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的;若所述第一記錄是在所述第一數(shù)據(jù)庫上次向所述第二數(shù)據(jù)庫發(fā)送記錄之后并且在所述第一數(shù)據(jù)庫上次從所述第二數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則向所述第二數(shù)據(jù)庫發(fā)送所述第一記錄的拷貝;檢查所述第二數(shù)據(jù)庫中的第二記錄,來判斷是否所述第二記錄是在所述第二數(shù)據(jù)庫上次向所述第一數(shù)據(jù)庫發(fā)送記錄之后、并且在所述第二數(shù)據(jù)庫上次從所述第一數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的;以及若所述第二記錄是在所述第二數(shù)據(jù)庫上次向所述第一數(shù)據(jù)庫發(fā)送記錄之后并且在所述第二數(shù)據(jù)庫上次從所述第一數(shù)據(jù)庫接收記錄之前創(chuàng)建或修改的,則向所述第一數(shù)據(jù)庫發(fā)送所述第二記錄的拷貝。20.如權利要求19所述的同步系統(tǒng),其中,所述第一數(shù)據(jù)庫記錄一個第一值,以識別已經(jīng)將所述第一記錄的所述拷貝發(fā)送到所述第二數(shù)據(jù)庫;以及,所述第二數(shù)據(jù)庫記錄一個第二值,以表示已經(jīng)從所述第一數(shù)據(jù)庫接收到所述第一記錄的所述拷貝。全文摘要一種設有同步數(shù)據(jù)庫的數(shù)據(jù)庫同步系統(tǒng),該同步數(shù)據(jù)庫中存儲有表示何時各個數(shù)據(jù)庫之間交換記錄的相對發(fā)送時間、相對接收時間以及每個數(shù)據(jù)庫中何時創(chuàng)建或修改記錄的相對記錄修改時間。該同步系統(tǒng)通過比較每個記錄的修改時間和相對發(fā)送時間以及相對接收時間來操作。在每個數(shù)據(jù)庫中,只有一個記錄的相對記錄修改時間遲于相對發(fā)送時間并早于相對接收時間,才發(fā)送該記錄。為了消除可能的循環(huán),舍棄相同的記錄。文檔編號G06F12/00GK1262481SQ0010114公開日2000年8月9日申請日期2000年1月21日優(yōu)先權日1999年1月27日發(fā)明者戴維·E·布雷西申請人:電話通有限公司