專利名稱:避免數(shù)據(jù)崩潰的多點(diǎn)數(shù)據(jù)庫(kù)同步協(xié)議的制作方法
背景技術(shù):
發(fā)明領(lǐng)域本發(fā)明主要涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,它允多個(gè)用戶同時(shí)訪問。進(jìn)一步說,本發(fā)明提出了一種系統(tǒng)和方法,它允許多個(gè)用戶同時(shí)訪問和編輯數(shù)據(jù)庫(kù)。
背景技術(shù):
數(shù)據(jù)庫(kù)是一個(gè)具有邏輯結(jié)構(gòu)的數(shù)據(jù)的集合,它允許用戶、應(yīng)用軟件、或者基于邏輯功能的裝置的訪問和使用。數(shù)據(jù)庫(kù)通常是以保存在存儲(chǔ)裝置上的以計(jì)算機(jī)程序或軟件應(yīng)用程序形式出現(xiàn),但是它也可以僅僅是以實(shí)用方式排列和訪問數(shù)據(jù)的一套規(guī)則。數(shù)據(jù)庫(kù)系統(tǒng)包括對(duì)數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)和操作的計(jì)算機(jī)、輸入數(shù)據(jù)和顯示或者輸出結(jié)果的輸入/輸出(I/O)裝置以及對(duì)數(shù)據(jù)庫(kù)不同部分進(jìn)行通信和連接系統(tǒng)。數(shù)據(jù)庫(kù)系統(tǒng)可以看作是一個(gè)物理系統(tǒng)(例如計(jì)算機(jī)終端,數(shù)據(jù)連接,輸入輸出裝置,存儲(chǔ)器,等等),而數(shù)據(jù)庫(kù)本身代表用來存儲(chǔ)和操作的數(shù)據(jù)信息。然而,實(shí)際當(dāng)中項(xiàng)目數(shù)據(jù)庫(kù)和項(xiàng)目數(shù)據(jù)庫(kù)系統(tǒng)之間常常交換著使用。
數(shù)據(jù)庫(kù)系統(tǒng)擁有的數(shù)據(jù)庫(kù)能夠?qū)?shù)據(jù)進(jìn)行方便的存儲(chǔ)、復(fù)查、操作、精確轉(zhuǎn)換、拷貝或者對(duì)相同數(shù)據(jù)庫(kù)結(jié)構(gòu)的數(shù)據(jù)進(jìn)行連接。這是靠數(shù)據(jù)存儲(chǔ)索引和伴隨數(shù)據(jù)的輔助信息的使用來實(shí)現(xiàn)的。數(shù)據(jù)庫(kù)通常都保存在永久或半永久存儲(chǔ)器系統(tǒng)上,這樣的存儲(chǔ)器一般叫作非易失存儲(chǔ)器它能在系統(tǒng)發(fā)生突然斷電時(shí)確保數(shù)據(jù)不會(huì)丟失。相比之下,保存在易失存儲(chǔ)器上的數(shù)據(jù),為避免數(shù)據(jù)丟失必須對(duì)其持續(xù)供電。授予Larsson等人的美國(guó)專利,編號(hào)為5745905,關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)問題的專利,在此一并引用。
數(shù)據(jù)庫(kù)系統(tǒng)可以配置成為多用戶系統(tǒng)。例如,零售店或許會(huì)發(fā)現(xiàn)開發(fā)維護(hù)一個(gè)與收銀機(jī)、貨物倉(cāng)庫(kù)和結(jié)算部門相連接的存貨清單數(shù)據(jù)庫(kù)將會(huì)非常有用。存貨清單數(shù)據(jù)庫(kù)允許多種行為對(duì)數(shù)據(jù)進(jìn)行即時(shí)更新。例如,在商品銷售過程中收銀機(jī)可以通過更新存貨清單數(shù)據(jù)庫(kù)來反映倉(cāng)庫(kù)中商品的銷售情況,當(dāng)數(shù)據(jù)庫(kù)信息提示貨架上的商品已經(jīng)減少到一定的程度后,與數(shù)據(jù)庫(kù)相連的貨物倉(cāng)庫(kù)就會(huì)迅速補(bǔ)充貨架上的商品。而且結(jié)算部門也可以通過連接數(shù)據(jù)庫(kù)并根據(jù)數(shù)據(jù)庫(kù)信息來更新資金周轉(zhuǎn)和稅收債務(wù)信息。因此數(shù)據(jù)庫(kù)既可以在交易過程中被收銀機(jī)更新、可以在補(bǔ)充商品是被貨物倉(cāng)庫(kù)更新,也可以被結(jié)算部門所更新。
數(shù)據(jù)庫(kù)系統(tǒng)的用戶通常被稱作為客戶,數(shù)據(jù)庫(kù)客戶可以是人,人通過計(jì)算機(jī)鍵盤,數(shù)據(jù)筆,條形碼讀入器,語(yǔ)音輸入系統(tǒng)或類似的輸入系統(tǒng)。同時(shí)數(shù)據(jù)庫(kù)用戶也可以是傳感器、計(jì)數(shù)器、探測(cè)器、監(jiān)控裝置、計(jì)算機(jī)程序、邏輯器件或者別的能產(chǎn)生和修改數(shù)據(jù)庫(kù)數(shù)據(jù)的系統(tǒng)。
數(shù)據(jù)庫(kù)管理器執(zhí)行下面一系列操作,例如,轉(zhuǎn)換數(shù)據(jù)的值和通過拷貝、移動(dòng)、連接或改變數(shù)據(jù)狀態(tài)來操作數(shù)據(jù)。管理器的另外一個(gè)重要的功能是控制數(shù)據(jù)庫(kù)的訪問,也就是說數(shù)據(jù)庫(kù)管理器控制著用戶對(duì)數(shù)據(jù)庫(kù)的訪問,其中包括控制不同用戶同時(shí)對(duì)多用戶數(shù)據(jù)庫(kù)的訪問。數(shù)據(jù)庫(kù)管理器一般是計(jì)算機(jī)程序/子程序或應(yīng)用軟件,它用一系列的規(guī)則或邏輯來組織數(shù)據(jù)并限制對(duì)數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)的訪問。本文中,術(shù)語(yǔ)數(shù)據(jù)庫(kù)管理器是指數(shù)據(jù)庫(kù)管理器功能或邏輯所駐留的計(jì)算機(jī)或物理處理裝置。
圖1A-D圖示了數(shù)據(jù)庫(kù)管理器101和客戶端102-106。數(shù)據(jù)庫(kù)管理器101在圖中作為文件服務(wù)器形式出現(xiàn)。實(shí)際上,數(shù)據(jù)庫(kù)管理器101可以置于任何不同的計(jì)算機(jī)或處理裝置內(nèi)。數(shù)據(jù)庫(kù)管理器的功能也可以由具有相同型號(hào)計(jì)算機(jī)用戶來實(shí)現(xiàn)。如圖1A-D所示,數(shù)據(jù)庫(kù)管理器的物理配置可用多種方式來實(shí)現(xiàn)。例如,數(shù)據(jù)庫(kù)服務(wù)器101可以通過總線同客戶端102-106相連,如圖1所示??梢原h(huán)形連接,如圖1B所示。也可以星形連接,如圖1C,或者如圖1D的通信網(wǎng)狀連接。在圖1D中,數(shù)據(jù)庫(kù)管理器101同客戶端102-106的通信構(gòu)成了通信網(wǎng)90。通信網(wǎng)90可以是因特網(wǎng),可以是局域網(wǎng),電話網(wǎng)絡(luò)系統(tǒng)(PSTN),也可以是無(wú)線網(wǎng)或者不同用戶間相互通信的其他形式的網(wǎng)絡(luò)。
一般來說,數(shù)據(jù)庫(kù)管理器既可以分布在網(wǎng)絡(luò)中心,也可以分布在網(wǎng)絡(luò)中的不同節(jié)點(diǎn),例如,圖1A-D的任何一個(gè),數(shù)據(jù)庫(kù)管理器既可以分布在單獨(dú)一臺(tái)計(jì)算機(jī)上如101,也可以分布在102-106不同的客戶端上。在分布式數(shù)據(jù)庫(kù)系統(tǒng)中制定一個(gè)使數(shù)據(jù)庫(kù)不同部分能相互通信和合作的方案是可取的,授予Samuelsson等人的美國(guó)專利,編號(hào)5761672,關(guān)于分布式數(shù)據(jù)庫(kù)系統(tǒng),在此一并引用。
在一個(gè)多用戶數(shù)據(jù)庫(kù)中,不同的用戶可以在不同的時(shí)間通過單一的入口訪問數(shù)據(jù)庫(kù),也可以多個(gè)用戶同時(shí)訪問。不同用戶同時(shí)訪問、操作數(shù)據(jù)庫(kù)可能導(dǎo)致數(shù)據(jù)庫(kù)數(shù)據(jù)的崩潰,也就是說某個(gè)客戶的數(shù)據(jù)被另一客戶不經(jīng)意的覆蓋或修改就可能導(dǎo)致該用戶數(shù)據(jù)的崩潰。例如,某一用戶在編輯數(shù)據(jù)后保存就可能把另一用戶修改后的數(shù)據(jù)覆蓋掉。在本文中,術(shù)語(yǔ)編輯和修改是可以相互交換著使用的,同時(shí)還包括刪除,添加或者對(duì)數(shù)據(jù)進(jìn)行任何形式的修改。一個(gè)完整性的數(shù)據(jù)庫(kù)方案,要求在多個(gè)用戶同時(shí)對(duì)它進(jìn)行編輯時(shí),能夠確保避免數(shù)據(jù)崩潰。
一種傳統(tǒng)的完整性策略是通過限制,即一次只允許一個(gè)一編輯為目的的用戶訪問數(shù)據(jù)庫(kù)來實(shí)現(xiàn)的。在這種策略下,同一時(shí)刻只允許一個(gè)用戶修改數(shù)據(jù)庫(kù)記錄。在此期間,其他任何用戶的權(quán)限為“只讀”,即不允許他們編輯數(shù)據(jù)庫(kù)。換句話說,某一時(shí)刻除了一個(gè)用戶外其他任何用戶對(duì)數(shù)據(jù)的編輯權(quán)限都是被禁止的。盡管這種方案能夠確保數(shù)據(jù)庫(kù)的完整性,但是它卻過度的加重了多用戶數(shù)據(jù)庫(kù)系統(tǒng)的負(fù)擔(dān)。
另一種傳統(tǒng)的數(shù)據(jù)庫(kù)完整性策略是,當(dāng)兩個(gè)或兩個(gè)以上用戶試圖同時(shí)編輯同一記錄時(shí),采用了一個(gè)新的唯一的被修改的記錄的標(biāo)識(shí)符。這樣,就允許多用戶編輯,但是這樣會(huì)導(dǎo)致產(chǎn)生數(shù)據(jù)庫(kù)記錄或整個(gè)數(shù)據(jù)庫(kù)文件的多個(gè)版本。這種方案中,因?yàn)橐4娌煌脩舻母鞣N數(shù)據(jù)版本,就必須增加額外的存儲(chǔ)設(shè)備,這是它的一大缺點(diǎn)。此外,既然每次當(dāng)多個(gè)用戶對(duì)數(shù)據(jù)進(jìn)行編輯后產(chǎn)生多種不同的版本,這種方案并不是真正意義上的多用戶數(shù)據(jù)庫(kù)系統(tǒng)。
因此,需要一種改進(jìn)的方法,在多個(gè)用戶編輯數(shù)據(jù)庫(kù)時(shí)確保數(shù)據(jù)庫(kù)的完整性發(fā)明概述本發(fā)明允許多個(gè)用戶同時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行編輯并能確保數(shù)據(jù)庫(kù)的完整性??偟膩碚f,本發(fā)明是通過使用一個(gè)能跟蹤不同數(shù)據(jù)庫(kù)數(shù)據(jù)的修改狀態(tài)的可變計(jì)數(shù)器,來實(shí)現(xiàn)避免數(shù)據(jù)庫(kù)崩潰的功能。因此,本發(fā)明的目的是提供一種在多用戶同時(shí)對(duì)數(shù)據(jù)進(jìn)行操作并保存而不會(huì)導(dǎo)致數(shù)據(jù)庫(kù)崩潰的方法。
按照本發(fā)明的一個(gè)方面,上述的目標(biāo)及其他目標(biāo)可以由第一個(gè)用戶訪問數(shù)據(jù)庫(kù)記錄來實(shí)現(xiàn)。一旦允許第一個(gè)用戶訪問數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)管理器記錄了可變計(jì)數(shù)器的值(CCV)。CCV有一個(gè)第一值,這個(gè)值是當(dāng)?shù)谝粋€(gè)用戶進(jìn)入數(shù)據(jù)庫(kù)時(shí)根據(jù)數(shù)據(jù)庫(kù)的狀態(tài)確定的。如果第一個(gè)用戶對(duì)數(shù)據(jù)編輯后,第二個(gè)用戶又對(duì)數(shù)據(jù)進(jìn)行了編輯,并保存了修改版的數(shù)據(jù),那么CCV的值就會(huì)增加。同時(shí),如果第一個(gè)用戶再想保存數(shù)據(jù)記錄的話,數(shù)據(jù)庫(kù)管理器將拒絕他的要求,因?yàn)镃CV的值已經(jīng)發(fā)生了改變,而CCV的改變意味著這樣的操作將會(huì)覆蓋掉第二個(gè)用戶的修改記錄。
附圖簡(jiǎn)述結(jié)合附圖的優(yōu)選實(shí)施方案的詳細(xì)描述可以讓本領(lǐng)域的技術(shù)人員很清楚的了解本發(fā)明的另外目標(biāo)和優(yōu)點(diǎn),其中相同參數(shù)代表相同的元件,其中圖1A-1D圖示了連接有多個(gè)客戶端的數(shù)據(jù)庫(kù)管理器的計(jì)算機(jī)系統(tǒng)配置;圖2描述了一個(gè)可能導(dǎo)致用戶數(shù)據(jù)崩潰的多用戶數(shù)據(jù)庫(kù)狀況;圖3描述了根據(jù)本發(fā)明典型的實(shí)施方案來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行同步操作的步驟;圖4描述了一系列可選操作,這些操作使客戶在訪問被拒絕的情況下保存修改過的數(shù)據(jù)成為可能;圖5描述了了一種實(shí)施方案,這種實(shí)施方案中的可選操作取決于用戶的預(yù)定的修改權(quán);圖6描述了一種方法,該方法根據(jù)本發(fā)明的一個(gè)可選實(shí)施方案對(duì)潛在的數(shù)據(jù)崩潰狀態(tài)提出警告。
優(yōu)選方案詳述圖2描述了一個(gè)可能導(dǎo)致用戶數(shù)據(jù)崩潰的多用戶數(shù)據(jù)庫(kù)狀況。在時(shí)間t=1時(shí),用戶A訪問數(shù)據(jù)庫(kù)記錄X。本文中,術(shù)語(yǔ)數(shù)據(jù)庫(kù)記錄是指剛被編輯過的一部分?jǐn)?shù)據(jù)。數(shù)據(jù)庫(kù)記錄可以是整個(gè)數(shù)據(jù)庫(kù)文件,可以是數(shù)據(jù)庫(kù)中的一小部分信息,也可以是數(shù)據(jù)庫(kù)的任何其他部分。時(shí)間t=2時(shí),用戶B訪問同一數(shù)據(jù)庫(kù)記錄,而此時(shí)數(shù)據(jù)庫(kù)記錄還沒有被用戶A修改過。當(dāng)然,事實(shí)上用戶B先于(例如時(shí)間t=0)用戶A訪問數(shù)據(jù)庫(kù)也可能發(fā)生數(shù)據(jù)庫(kù)崩潰。時(shí)間t=3時(shí),用戶B對(duì)數(shù)據(jù)庫(kù)記錄進(jìn)行了編輯、刪除或者修改并保存。用戶A和B分別在時(shí)間t=1和t=2下載數(shù)據(jù)庫(kù)記錄并且是對(duì)記錄的備份進(jìn)行編輯,所以用戶A和B不可能意識(shí)到對(duì)方對(duì)記錄的任何修改。
如圖2所示,如果用戶A在時(shí)間t=4時(shí)修改了數(shù)據(jù)庫(kù)記錄X,此時(shí)如果用戶A對(duì)修改后的數(shù)據(jù)進(jìn)行保存,那么用戶B修改后的數(shù)據(jù)就會(huì)丟失。用戶A在時(shí)間t=4時(shí)的保存覆蓋了用戶B在此之前修改并保存過的所有數(shù)據(jù),因?yàn)橛脩鬉所編輯的數(shù)據(jù)版本是來自時(shí)刻t=1先于時(shí)刻t=3,而用戶B對(duì)修改后的數(shù)據(jù)的保存是在時(shí)刻t=3。
因此,在適當(dāng)?shù)牡胤經(jīng)]有足夠的數(shù)據(jù)庫(kù)同步訪問方案,用戶A在時(shí)刻t=4對(duì)最新修改的數(shù)據(jù)進(jìn)行保存將會(huì)覆蓋掉用戶B在此之前修改并保存后的數(shù)據(jù)記錄,這將導(dǎo)致數(shù)據(jù)庫(kù)的崩潰。當(dāng)多個(gè)用戶對(duì)數(shù)據(jù)庫(kù)同時(shí)進(jìn)行編輯并保存,他們的這些操作又是彼此不知道的,這種情況就容易發(fā)生數(shù)據(jù)庫(kù)的崩潰。
縱觀這些描述,對(duì)用戶A和B的操作過程可以描述為先訪問數(shù)據(jù)庫(kù)然后對(duì)數(shù)據(jù)庫(kù)進(jìn)行編輯和修改并保存。事實(shí)上,當(dāng)某一用戶在編輯數(shù)據(jù)庫(kù)的同時(shí),就產(chǎn)生了記錄X的修改版,而這個(gè)修改版在保存以前是不允許任何其他用戶訪問和編輯的。任何用戶在隨后的訪問(記錄X)中都可以復(fù)查先此前對(duì)記錄X修改并保存過的版本。
圖3描述了根據(jù)本發(fā)明典型的實(shí)施方案來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行同步操作的步驟(流程)。在步驟S10,用戶A試圖訪問數(shù)據(jù)庫(kù)數(shù)據(jù),例如,記錄X。用戶A可以通過向數(shù)據(jù)庫(kù)管理器申請(qǐng)?jiān)L問權(quán)限來進(jìn)入數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)管理器控制著不同用戶對(duì)數(shù)據(jù)庫(kù)的訪問權(quán)。舉個(gè)例子,用戶A可以是零售店的收銀機(jī),它通過訪問和更新貨物清單數(shù)據(jù)庫(kù)里的記錄來來反映貨架上商品的銷售情況。作為本實(shí)施方案或別的方案中的可選步驟,用戶A在訪問數(shù)據(jù)庫(kù)時(shí)不必向管理器申請(qǐng)?jiān)L問權(quán),這種情況下,當(dāng)操作能確保數(shù)據(jù)完整性時(shí),數(shù)據(jù)庫(kù)管理器僅僅監(jiān)視用戶的訪問。
在步驟S12,根據(jù)一個(gè)典型實(shí)施方案,數(shù)據(jù)庫(kù)管理器允許用戶A的訪問并向用戶A提供或下載記錄X的一個(gè)復(fù)制版,同時(shí)為記錄X賦予一個(gè)可變計(jì)數(shù)器(CCV)的值。CCVs的使用提供了一種跟蹤不同數(shù)據(jù)庫(kù)修改記錄狀態(tài)的機(jī)制。CCV不一定是一個(gè)實(shí)際的數(shù),它可以是任何形式的一個(gè)量,只要這個(gè)量可以增加或減少,或可以變成另外一個(gè)量。例如,CCV可以是一個(gè)字母,可以是日期,可以是文件或記錄的大小,可以是記錄中的字?jǐn)?shù),可以奇偶校驗(yàn)檢,或者是數(shù)據(jù)庫(kù)記錄的其他的類似的度量。為方便說明,本文中CCV采用了數(shù)值形式的量。每次只要數(shù)據(jù)庫(kù)記錄被修改并保存后CCV得值就會(huì)增加一。圖3所列出得例子中,用戶A進(jìn)入數(shù)據(jù)庫(kù)得時(shí)候CCV的值是δc而用戶A對(duì)記錄第一次修改并保存后CCV的值就將增加1,即此時(shí)CCV=δc+1。簡(jiǎn)而言之,CCV=δc用作為參考值,它反映了用戶A訪問數(shù)據(jù)庫(kù)時(shí)數(shù)據(jù)庫(kù)記錄的狀態(tài)。
步驟S14代表一段時(shí)間,在這段時(shí)間里可以又多個(gè)用戶對(duì)數(shù)據(jù)庫(kù)記錄進(jìn)行編輯。在步驟S14中,除了用戶A外的其他用戶可以對(duì)記錄X進(jìn)行編輯,并且在數(shù)據(jù)庫(kù)管理器為用戶A提供記錄X后(見步驟12)可以對(duì)修改后的記錄進(jìn)行保存。根據(jù)本發(fā)明,判斷數(shù)據(jù)庫(kù)是否處于潛在的崩潰狀態(tài)并非取決于其他用戶對(duì)記錄X的訪問是在用戶A之前還是之后。它只取決于在其他用戶保存了修的記錄之后用戶A是否又修改了記錄并保存,如圖2所示,CCV=δc所反映了多用戶數(shù)據(jù)錄的編輯狀態(tài)。
根據(jù)本發(fā)明,在用戶A訪問數(shù)據(jù)庫(kù)期間,只要沒有別的用戶對(duì)記錄進(jìn)行修改并保存,那么用戶A就可以對(duì)記錄A進(jìn)行修改和保存。由于數(shù)據(jù)庫(kù)記錄的狀態(tài)取決于CCV的值,所以只要CCV=δc,數(shù)據(jù)庫(kù)管理器就允許用戶A對(duì)記錄X進(jìn)行修改和保存而不會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的崩潰。這是因?yàn)橛脩鬉對(duì)記錄修改后CCV的值與初始值是相同的,它說明在此期間并沒有別的用戶對(duì)記錄進(jìn)行修改,不然的話就意味著用戶A的修改版將不可避免地覆蓋掉別的用戶的修改記錄。換句話說,用戶A只有在CCV的值沒有發(fā)生改變的前提下才可以對(duì)記錄X的修改版進(jìn)行保存。
在步驟S16中,用戶A已經(jīng)對(duì)記錄X進(jìn)行了修改,并設(shè)法保存修改后的記錄。在保存之前用戶A必須征求數(shù)據(jù)庫(kù)管理器的保存許可。如果在某個(gè)時(shí)間點(diǎn)上允許用戶A保存修改后的記錄,而在此之前已經(jīng)有另外一個(gè)用戶保存了他的修改記錄并修改了CCV的值,那么就會(huì)導(dǎo)致數(shù)據(jù)庫(kù)數(shù)據(jù)的崩潰,因?yàn)橛脩鬉的修改記錄覆蓋了別的用戶的修改記錄。
為避免發(fā)生數(shù)據(jù)崩潰,聯(lián)系步驟S18,數(shù)據(jù)庫(kù)管理器通過比較CCV的值與δc是否同來確定用戶A訪問記錄X期間,是否有別的用戶修改并保存了記錄X,見步驟S12。如果步驟S18中的條件與“YES”相符合,也就是說CCV=δc,那么就會(huì)執(zhí)行步驟S20,即允許用戶A對(duì)記錄X的修改版進(jìn)行保存。相反,如果步驟S18中的條件與“NO”一致,數(shù)據(jù)庫(kù)管理器就認(rèn)為CCV>δc,那么就去執(zhí)行步驟S22,即不允許用戶A對(duì)記錄X的修改版進(jìn)行保存。在步驟S22中因CCV>δc從而拒絕了用戶A對(duì)記錄X修改版的保存。
在步驟S24中,管理器向用戶A發(fā)送了一個(gè)錯(cuò)誤信息,通知用戶A他的保存要求被拒絕。如果用戶A使用了顯示設(shè)備,如計(jì)算機(jī)顯示屏、移動(dòng)電話屏、電視監(jiān)視器等等,那么步驟S24的錯(cuò)誤警告信息將如下所示ERRORPERMISSION TO SAVE RECORD X IS DENIEDRECORD X WAS MODIFIED AFTER ACCESS BY CLIENT A或者,錯(cuò)誤信息可以以任何等效的方式傳達(dá)給用戶,因?yàn)楸绢I(lǐng)域的技術(shù)人員很容易辨認(rèn)這些錯(cuò)誤信息。這些等效的方式包括打印,語(yǔ)音提示或者其他類似的提示方法或裝置。在以顯示形式或信號(hào)形式通知用戶A錯(cuò)誤信息的同時(shí),程序流程將轉(zhuǎn)而處理步驟S28,步驟S28行用戶A傳達(dá)了一個(gè)選擇一個(gè)或多個(gè)可行操作的信息。步驟S30中用戶A在保存要求被拒絕后可以選擇一些其他的操作。
圖4描述了用戶A的保存要求受到拒絕后的一系列可選操作。緊接著是步驟S24,S24向用戶A發(fā)送了一個(gè)錯(cuò)誤信息,之后程序?qū)?zhí)行步驟S28。在步驟S28中,數(shù)據(jù)庫(kù)管理器向用戶A傳送了一個(gè)信息,要求用戶A選擇一個(gè)或多個(gè)可行操作。其中,可選操作可以是如下一些操作,如,它可以是步驟S34-S39中任何其中的一步或多步操作的混合。而用戶A的保存要求被拒絕后,對(duì)于一些本領(lǐng)域的技術(shù)員來說還可以選擇其它的一些操作。
在步驟S34中,用戶A可以通過更新最初訪問數(shù)據(jù)庫(kù)時(shí)的記錄X,見圖3中步驟S14,來判斷其他用戶是否已經(jīng)修改了記錄X。這樣做就能確保在保存記錄X之前用戶A的記錄X能夠正確反映其他用戶對(duì)記錄X的修改情況。可選操作步驟S34能夠以各種不同的方式來執(zhí)行。舉個(gè)例子,用戶A只有在確定與其他用戶不沖突的情況下才能更新其他用戶先前修改并保存過的記錄。另外,無(wú)論用戶A的修改記錄與其他用戶是不是沖突都可以更新其他用戶先前的修改記錄。或者,其他用戶可根據(jù)訪問數(shù)據(jù)庫(kù)的先后、訪問數(shù)據(jù)庫(kù)優(yōu)先權(quán)的高低或者其他形式的標(biāo)準(zhǔn)來更新全部或部分?jǐn)?shù)據(jù)庫(kù)記錄。
步驟S35允許用戶A對(duì)修改后的記錄保存在新的文件或記錄中。為避免不必要地增加相同記錄的版本,一般盡量避免把修改后的記錄保存為新的文件,除非不這樣做將導(dǎo)致數(shù)據(jù)崩潰。換句話說,步驟S35所提供的操作選擇適合于在其他用戶對(duì)記錄進(jìn)行了修改并保存,從而使CCV的值>δc的情況,而在兩個(gè)用戶僅僅是同時(shí)訪問數(shù)據(jù)庫(kù)的情況下,該操作是不可取的。
步驟S36中,數(shù)據(jù)庫(kù)管理器同意用戶A允許其他潛在數(shù)據(jù)崩潰可能的用戶在用戶A保存記錄之前再?gòu)?fù)查一下用戶A的修改記錄。通常,在用戶A訪問數(shù)據(jù)庫(kù)后,某個(gè)用戶對(duì)修改后的記錄的保存很可能引起另一用戶數(shù)據(jù)的潛在的崩潰。圖3中的步驟S14就是這種情況。當(dāng)另外一個(gè)用戶,例如用戶B訪問了數(shù)據(jù)記錄X,但是沒有對(duì)記錄X進(jìn)行實(shí)質(zhì)性的修改,這種情況下,步驟S36就顯得特別的有用。舉個(gè)例子,用戶B在訪問記錄X期間有可能因?yàn)榍脫翩I盤而不經(jīng)意地向記錄X插入一些空格,這種情況下,既然用戶B并沒有對(duì)記錄X進(jìn)行實(shí)質(zhì)性地修改,毫無(wú)疑問,用戶B允許用戶A對(duì)記錄X的修改版進(jìn)行保存,不然的話,也就是說如果用戶B對(duì)記錄X進(jìn)行了實(shí)質(zhì)性修改,那么用戶A的保存將導(dǎo)致數(shù)據(jù)崩潰。步驟S36的實(shí)施是通過向另外一些用戶(這些用戶對(duì)記錄X的修改將導(dǎo)致數(shù)據(jù)崩潰)如用戶B授權(quán),使他們?cè)试S用戶A對(duì)記錄X的修改版進(jìn)行保存,而允許用戶A保存修改記錄的前提是,要么通知用戶B,用戶A的記錄將保存并覆蓋掉用戶B的記錄,或者在征詢用戶B并獲得用戶B的同意后保存用戶A的修改記錄,但不給出提示信息,如用戶A的修改記錄將覆蓋用戶B的記錄的信息。
步驟S37中,用戶A可以將記錄X的修改版拷貝一份并保存到一個(gè)臨時(shí)存儲(chǔ)器里,如計(jì)算機(jī)或計(jì)算機(jī)應(yīng)用程序中的“剪切板”(clipboard)。把修改后的記錄保存到臨時(shí)存儲(chǔ)器后,用戶A就可以檢索記錄X的最新版本,此時(shí)CCV>δc。用戶A可以通過“粘貼”暫時(shí)被存儲(chǔ)在剪切板內(nèi)的記錄X的修改版而對(duì)記錄X的最新版進(jìn)行修改。這樣做就可以避免用戶B的修改記錄被用戶A不經(jīng)意地破壞掉。
步驟S38中,在用戶A保存當(dāng)前修改記錄之前允許他阻止(pull up)一份其他用戶先前修改保存過的記錄X的備份,以便復(fù)查。這就使用戶A有機(jī)會(huì),比如判斷先前保存過的記錄是否足夠保證避免因覆蓋其他用戶此前保存過的記錄而引起的數(shù)據(jù)崩潰,或者為其他編輯目的而查看記錄。
最后,在步驟S39中,允許用戶A把修改過的記錄保存到記錄X中,而無(wú)需考慮任何此前修改并保存過的其他記錄。毫無(wú)疑問,這將導(dǎo)致任何此前保存過的修改記錄的崩潰,一個(gè)可行的解決辦法是判斷不同的用戶是否先前已經(jīng)授予了修改記錄的權(quán)力,如圖5的連接處所討論的那樣。
圖5描述了了一種實(shí)施方案,這種實(shí)施方案中的可選操作是基于預(yù)定授予修改權(quán)的基礎(chǔ)上的。根據(jù)這個(gè)實(shí)施方案,在訪問記錄X之前,見圖3的步驟S10,管理器向用戶A制定了一個(gè)修改記錄的預(yù)定權(quán)限的尺度,來判斷是否可以對(duì)數(shù)據(jù)庫(kù)記錄進(jìn)行修改。用戶預(yù)定的修改記錄權(quán)限可以是對(duì)數(shù)據(jù)庫(kù)所有記錄都相同,也可以是有選擇的基于記錄-記錄,根據(jù)數(shù)據(jù)庫(kù)的每條不同記錄來確定。
在步驟S26,在執(zhí)行圖3的步驟S30之前,數(shù)據(jù)庫(kù)管理器通過復(fù)查用戶A的預(yù)定修改權(quán)限來決定用戶A保存修改記錄時(shí)是否設(shè)置一些權(quán)限。步驟S28中提供給用戶A的可選操作,如同圖4中的步驟S34-S39,決定于管理器向用戶設(shè)置的預(yù)定修改權(quán)限。
例如,如果用戶的預(yù)定的修改權(quán)限不受任何限制那么他可以選擇步驟S34-S39操作中的任何一步。反之,如果用戶的預(yù)定的修改權(quán)限受到不同程度的限制,那么他的可選操作將只能是步驟S34-S39中的某幾步,甚至不能選擇其中的任何一步。預(yù)定的修改權(quán)限就其本身來說取決于對(duì)數(shù)據(jù)安全、數(shù)據(jù)的私有性、數(shù)據(jù)崩潰的可能性或者數(shù)據(jù)庫(kù)的完整性方面的考慮。
步驟S28中,一旦管理器向用戶發(fā)出選擇操作的命令后,程序?qū)⑷?zhí)行步驟S30的操作。步驟S30中,在用戶A的修改記錄試圖覆蓋其他用戶的修改記錄的要求遭到拒絕后,可以選擇經(jīng)授權(quán)后的一種或多種操作。
圖6描述了一種方法,該方法根據(jù)本發(fā)明的一個(gè)可選實(shí)施方案對(duì)潛在的數(shù)據(jù)崩潰狀態(tài)提出警告。它警告用戶在用戶對(duì)數(shù)據(jù)記錄復(fù)查以后又有用戶對(duì)其進(jìn)行了修改,從而可以避免出現(xiàn)數(shù)據(jù)崩潰。換句話說,如果不允許用戶保存修改記錄,那么數(shù)據(jù)庫(kù)本身是不會(huì)產(chǎn)生數(shù)據(jù)崩潰的。當(dāng)然,如果保存權(quán)力被取消的話,用戶的修改記錄就會(huì)崩潰。
圖6的步驟S10中,用戶A通過向數(shù)據(jù)庫(kù)管理器請(qǐng)求訪問權(quán)限來訪問數(shù)據(jù)庫(kù)記錄X,數(shù)據(jù)庫(kù)管理器控制著用戶對(duì)記錄X的訪問。步驟S11在本實(shí)施方案或其他方案中決定用戶A對(duì)數(shù)據(jù)庫(kù)的訪問是只讀的還是可編輯的。在步驟S11中,如果選擇“只讀”那么程序?qū)⑷?zhí)行步驟S13,此時(shí)管理器禁止用戶對(duì)數(shù)據(jù)記錄進(jìn)行編輯。步驟S12中,管理器允許用戶A訪問記錄X,并向他提供或下載記錄X的復(fù)制版,同時(shí)設(shè)定參數(shù)CCV=δc。步驟S14中,將出現(xiàn)多用戶編輯數(shù)據(jù)庫(kù)的情況,因?yàn)樵谟脩鬉訪問記錄X后,見步驟S12,又有其他用戶訪問并編輯記錄X。
步驟S15中,另一用戶,如用戶B,對(duì)記錄X的編輯,產(chǎn)生了記錄X的一個(gè)新版本。因?yàn)橛涗沊已被修改,所以數(shù)據(jù)庫(kù)管理器將增加CCV的值使之等于δc+1。隨后,在步驟S23中,數(shù)據(jù)庫(kù)管理器向用戶A發(fā)出一個(gè)警告信息通知他記錄X已經(jīng)被另一用戶修改從而引起數(shù)據(jù)的潛在崩潰。發(fā)送給用戶A的信息可以是對(duì)用戶B保存了記錄X的修改版所提出的警告,也可以是對(duì)記錄X產(chǎn)生了新的修改版提出的警告。后一種情況中,系統(tǒng)要求用戶B在保存修改記錄之前通知數(shù)據(jù)庫(kù)管理器已經(jīng)修改了記錄。這樣就可以避免兩個(gè)不同的用戶產(chǎn)生額外的數(shù)據(jù)庫(kù)修改版從而使管理器很難協(xié)調(diào)處理這兩用戶對(duì)記錄的修改。
除了在步驟S23中發(fā)送警告信息外,系統(tǒng)還包括一些可選操作,這些操作在數(shù)據(jù)庫(kù)可能崩潰的情況下向用戶A提供了操作選擇,見步驟S30。這些可選操作可以與上文中,圖4的連接處所列出的操作一致,也可以與本領(lǐng)域中的技術(shù)員所采用的一些可選操作相類似。
本領(lǐng)域的技術(shù)人員應(yīng)該理解到在不背離其實(shí)質(zhì)和本質(zhì)特點(diǎn)的情況下,本發(fā)明可以以其他的特定形式出現(xiàn)。
權(quán)利要求
1.一種避免數(shù)據(jù)崩潰的多用戶同步數(shù)據(jù)庫(kù)方法,該方法包括以下步驟通過第一個(gè)用戶尋求訪問數(shù)據(jù)庫(kù)記錄而聯(lián)系數(shù)據(jù)庫(kù)管理器;由數(shù)據(jù)庫(kù)管理器允許第一個(gè)用戶訪問數(shù)據(jù)庫(kù)記錄;數(shù)據(jù)庫(kù)管理器在第一個(gè)用戶訪問記錄后保存一個(gè)可變計(jì)數(shù)器的值,該可變計(jì)數(shù)器的值是在第一個(gè)用戶訪問記錄后根據(jù)數(shù)據(jù)記錄的狀態(tài)確定的第一個(gè)值;第二個(gè)用戶在第一個(gè)用戶訪問數(shù)據(jù)庫(kù)記錄之后保存記錄的修改版;響應(yīng)第二個(gè)用戶對(duì)記錄的修改版的保存,可變計(jì)數(shù)器的值在原先的基礎(chǔ)上增加一第一個(gè)用戶尋求保存數(shù)據(jù)庫(kù)記錄;和如果確定可變計(jì)數(shù)器的值已經(jīng)由原來的值增加了,則數(shù)據(jù)庫(kù)管理器拒絕第一用戶保存數(shù)據(jù)庫(kù)記錄。
2.權(quán)利要求1的方法,其中由數(shù)據(jù)庫(kù)管理器允許第一個(gè)用戶訪問的步驟包括數(shù)據(jù)庫(kù)管理器向第一個(gè)用戶授權(quán)使其能夠訪問數(shù)據(jù)庫(kù)記錄。
3.權(quán)利要求1的方法,其中由數(shù)據(jù)庫(kù)管理器允許第一個(gè)用戶訪問數(shù)據(jù)庫(kù)記錄的步驟包括數(shù)據(jù)庫(kù)管理器通過監(jiān)控?cái)?shù)據(jù)庫(kù)記錄來判斷是否有用戶訪問了記錄。
4.權(quán)利要求1的方法,其中尋求保存數(shù)據(jù)庫(kù)記錄的步驟包括第一個(gè)用戶向數(shù)據(jù)庫(kù)管理器請(qǐng)求保存數(shù)據(jù)庫(kù)記錄的權(quán)限。
5.權(quán)利要求1的方法,還包括以下步驟第一個(gè)用戶的保存請(qǐng)求被拒絕以后為他提供可選操作。
6.權(quán)利要求5的方法,其中提供給第一個(gè)用戶的可選操作取決于他的預(yù)定的修改權(quán)。
7.權(quán)利要求6的方法,還包括以下步驟讓第一個(gè)用戶選擇至少一種可選操作。
8.權(quán)利要求1的方法,還包括以下步驟在拒絕第一個(gè)用戶的保存請(qǐng)求后,為其提供一個(gè)可選操作的列表;其中,可選操作還包括一個(gè)或多個(gè)以下步驟更新數(shù)據(jù)庫(kù)記錄以反映記錄在此之前已被第二個(gè)用戶修改并保存;數(shù)據(jù)庫(kù)記錄保存到新的文件中;第一個(gè)用戶向第二個(gè)用戶請(qǐng)求許可使其能夠保存至少一部分?jǐn)?shù)據(jù)庫(kù)記錄;如果有數(shù)據(jù)庫(kù)記錄的修改,拷貝和粘貼數(shù)據(jù)庫(kù)記錄的修改至剪切板;第一個(gè)用戶在保存記錄之前,如果有第二個(gè)用戶的修改記錄,復(fù)查一下第二個(gè)用戶的修改記錄;或保存記錄并覆蓋掉第二個(gè)用戶的修改記錄。
9.一種可避免數(shù)據(jù)庫(kù)里的數(shù)據(jù)或者加入數(shù)據(jù)庫(kù)的數(shù)據(jù)崩潰的多用戶同步訪問方法,該方法包括以下步驟第一個(gè)用戶訪問數(shù)據(jù)庫(kù);在第一個(gè)用戶訪問記錄后,數(shù)據(jù)庫(kù)管理器保存一個(gè)可變計(jì)數(shù)器的值,該可變計(jì)數(shù)器的值是在第一個(gè)用戶訪問記錄后根據(jù)數(shù)據(jù)記錄的狀態(tài)確定的第一個(gè)值;在第一個(gè)用戶訪問數(shù)據(jù)庫(kù)記錄之后,第二個(gè)用戶訪問記錄并對(duì)記錄進(jìn)行修改產(chǎn)生了新的版本;和通知第一個(gè)用戶數(shù)據(jù)庫(kù)記錄已經(jīng)被修改。
10.權(quán)利要求9的方法,其中還包括以下步驟第一個(gè)用戶的保存請(qǐng)求遭到拒絕以后為他提供一些可選操作。
11.權(quán)利要求10的方法,其中提供給第一個(gè)用戶的可選操作取決于他的預(yù)定的修改權(quán)。
12.權(quán)利要求11的方法,其中還包括以下步驟讓第一個(gè)用戶選擇至少一種可選操作。
13.權(quán)利要求9的方法,其中通知第一個(gè)用戶數(shù)據(jù)庫(kù)記錄已經(jīng)被修改的步驟是響應(yīng)第二個(gè)用戶已經(jīng)對(duì)修改版進(jìn)行保存而執(zhí)行的。
14.權(quán)利要求9的方法,其中通知第一個(gè)用戶數(shù)據(jù)庫(kù)記錄已經(jīng)被修改的步驟是響應(yīng)第二個(gè)用戶已經(jīng)對(duì)記錄進(jìn)行了修改而執(zhí)行的。
全文摘要
多點(diǎn)數(shù)據(jù)庫(kù)同步系統(tǒng)允許多個(gè)用戶同時(shí)訪問和編輯而不會(huì)產(chǎn)生意外的數(shù)據(jù)崩潰,并能夠保證數(shù)據(jù)庫(kù)的完整性??梢园磾?shù)據(jù)庫(kù)應(yīng)用軟件的一部分來配置的數(shù)據(jù)庫(kù)管理器,用一個(gè)可變計(jì)數(shù)器來跟蹤修改,當(dāng)修改后的記錄保存以后,管理器將增加可變計(jì)數(shù)器的值。當(dāng)用戶訪問數(shù)據(jù)庫(kù)記錄時(shí),數(shù)據(jù)庫(kù)管理器將自動(dòng)檢查可變計(jì)數(shù)器的值。然后,如果有用戶試圖把修改保存到數(shù)據(jù)庫(kù)記錄時(shí),管理器就會(huì)去檢查可變計(jì)數(shù)器的當(dāng)前值,以確定是否有別的用戶在該用戶提出存盤要求之前對(duì)記錄進(jìn)行了修改并保存。如果可變計(jì)數(shù)器的當(dāng)前值已經(jīng)增加,那么管理器就會(huì)拒絕該用戶的存盤要求,同時(shí)向該用戶提供一些可選操作。這種方法可以避免個(gè)用戶的數(shù)據(jù)庫(kù)記錄不小心被其他用戶覆蓋掉。
文檔編號(hào)G06F17/30GK1346472SQ0080592
公開日2002年4月24日 申請(qǐng)日期2000年2月7日 優(yōu)先權(quán)日1999年2月8日
發(fā)明者L·諾瓦克, J·比爾克勒 申請(qǐng)人:艾利森電話股份有限公司