專利名稱:將數(shù)據(jù)庫(kù)從源計(jì)算機(jī)系統(tǒng)復(fù)制到目標(biāo)計(jì)算機(jī)系統(tǒng)的方法
技術(shù)領(lǐng)域:
本發(fā)明是關(guān)于數(shù)據(jù)處理的方法和裝置。本發(fā)明尤其涉及,但不僅僅涉及,用于數(shù)據(jù)庫(kù)復(fù)制的方法和裝置。
背景技術(shù):
在許多數(shù)據(jù)處理應(yīng)用中,從源系統(tǒng)發(fā)送的數(shù)據(jù)碎片必須處理成在目標(biāo)系統(tǒng)上所需要的數(shù)據(jù)格式。
在許多情況下,需要從源系統(tǒng)上的數(shù)據(jù)庫(kù)復(fù)制數(shù)據(jù)庫(kù)到目標(biāo)計(jì)算機(jī)系統(tǒng)上。該過(guò)程可以包括從源數(shù)據(jù)庫(kù)發(fā)送日志項(xiàng),以允許目標(biāo)數(shù)據(jù)庫(kù)的更新。數(shù)據(jù)庫(kù)可以包括一個(gè)或多個(gè)庫(kù),每個(gè)庫(kù)包含一個(gè)或多個(gè)文件,每個(gè)文件具有一個(gè)或多個(gè)項(xiàng)。每個(gè)項(xiàng)有一個(gè)表,該表有一行或多行。一個(gè)日志項(xiàng)可以包括庫(kù)的標(biāo)識(shí)符;文件;文件項(xiàng)和文件項(xiàng)的已改變的數(shù)據(jù)行。該日志項(xiàng)可以由目標(biāo)計(jì)算機(jī)系統(tǒng)用來(lái)更新它的數(shù)據(jù)庫(kù)。
以正確順序更新來(lái)自于給定表的數(shù)據(jù)庫(kù)輸入項(xiàng),以及以正確順序更新互相關(guān)聯(lián)的項(xiàng)是很重要的。為了保證日志項(xiàng)被正確處理,目標(biāo)計(jì)算機(jī)系統(tǒng)的接收處理過(guò)程可以將對(duì)象名稱(庫(kù)/文件/項(xiàng))與存儲(chǔ)在目標(biāo)計(jì)算機(jī)系統(tǒng)上的對(duì)象數(shù)據(jù)庫(kù)相比較。當(dāng)找到匹配的對(duì)象時(shí),與該對(duì)象相關(guān)聯(lián)的處理信息就可以用來(lái)處理該日志項(xiàng)。
傳統(tǒng)的方法是傳遞日志項(xiàng),存儲(chǔ)它們,并使用單個(gè)引擎來(lái)復(fù)制數(shù)據(jù)庫(kù)。這種方法慢且復(fù)雜。
希望數(shù)據(jù)庫(kù)復(fù)制系統(tǒng)滿足以下要求
1.保證日志項(xiàng)由數(shù)據(jù)庫(kù)項(xiàng)(以最低限度)以及由任意用戶規(guī)定的分組串行化。
2.支持一特別大數(shù)量的數(shù)據(jù)庫(kù)應(yīng)用程序,使得可以很容易地管理數(shù)據(jù)庫(kù)I/O(輸入/輸出)。
3.處理日志項(xiàng)是以這樣的方式在從日志中獲得的輸入項(xiàng)時(shí)與將輸入項(xiàng)應(yīng)用于復(fù)制數(shù)據(jù)庫(kù)時(shí)之間的這段時(shí)間里,最小化系統(tǒng)I/O(例如分頁(yè))的量。
4.功能支持任何一種類型的數(shù)據(jù)包,不僅僅是日志項(xiàng),以允許未來(lái)能擴(kuò)展到其它類型的復(fù)制(例如,對(duì)象、流文件等)。
5.系統(tǒng)對(duì)其它組成隱藏了存儲(chǔ)器管理功能的復(fù)雜性。
本發(fā)明的目的是提供信息復(fù)制的方法和裝置,它滿足了這些要求或至少向公眾提供有用的選擇。
發(fā)明內(nèi)容
按照本發(fā)明的第一個(gè)方面,提供了一種將數(shù)據(jù)庫(kù)從源計(jì)算機(jī)系統(tǒng)復(fù)制到目標(biāo)計(jì)算機(jī)系統(tǒng)的方法,它包括以下步驟1)、接收來(lái)自于源計(jì)算機(jī)系統(tǒng)的日志項(xiàng);以及2)、分配程序組成來(lái)處理日志項(xiàng)和更新目標(biāo)數(shù)據(jù)庫(kù),其中一控制程序?qū)⑷蝿?wù)分配給程序組成,并充分地控制程序組成,使得程序組成不互相干擾。
目標(biāo)計(jì)算機(jī)系統(tǒng)最好是多處理器計(jì)算機(jī)系統(tǒng)。
現(xiàn)在本發(fā)明將用舉例的方式加以描述,參考附圖,其中圖1示出了源計(jì)算機(jī)系統(tǒng)的示意圖,它將日志項(xiàng)提供給目標(biāo)計(jì)算機(jī)系統(tǒng)。
圖2是功能圖,說(shuō)明在目標(biāo)計(jì)算機(jī)系統(tǒng)數(shù)據(jù)庫(kù)復(fù)制過(guò)程中所涉及的幾個(gè)過(guò)程。
圖3示出了在目標(biāo)計(jì)算機(jī)系統(tǒng)內(nèi)存儲(chǔ)空間的映像。
圖4示出了將日志項(xiàng)分配給串行組的過(guò)程的流程圖。
具體實(shí)施例方式
以下描述了數(shù)據(jù)庫(kù)復(fù)制的方法,其中,源和目標(biāo)計(jì)算機(jī)系統(tǒng)是在OS/400操作系統(tǒng)下操作的IBM AS/400計(jì)算機(jī)。應(yīng)理解該方法作適當(dāng)?shù)男薷目蛇m用于其它系統(tǒng)。
請(qǐng)看圖1,源系統(tǒng)A包含一個(gè)主數(shù)據(jù)庫(kù)1。主數(shù)據(jù)庫(kù)1可以包含一個(gè)或多個(gè)的庫(kù)。每個(gè)庫(kù)可以包括一個(gè)或多個(gè)文件。每個(gè)文件可包含一個(gè)或多個(gè)項(xiàng)。每個(gè)項(xiàng)包含一個(gè)表,該表有一行或多行。一個(gè)唯一的庫(kù)/文件/項(xiàng)組合稱為一個(gè)對(duì)象。
當(dāng)主數(shù)據(jù)庫(kù)1的任何項(xiàng)的一行被修改時(shí),包含對(duì)象名稱和修改過(guò)的行的日志項(xiàng)被發(fā)送到本地日志接收器2。本地日志接收器2經(jīng)過(guò)通信鏈路3發(fā)送日志項(xiàng)到目標(biāo)計(jì)算機(jī)系統(tǒng)B的遠(yuǎn)程日志接收器4。數(shù)據(jù)庫(kù)復(fù)制過(guò)程5接收日志項(xiàng),并修改復(fù)制數(shù)據(jù)庫(kù)6的內(nèi)容,以使它與主數(shù)據(jù)庫(kù)1保持一致。
現(xiàn)在參考圖2,將描述復(fù)制目標(biāo)計(jì)算機(jī)系統(tǒng)的目標(biāo)數(shù)據(jù)庫(kù)6的過(guò)程和裝置。為了保證復(fù)制數(shù)據(jù)庫(kù)6的正確復(fù)制,數(shù)據(jù)庫(kù)項(xiàng)在數(shù)據(jù)庫(kù)6復(fù)制庫(kù)中更新的順序與它們?cè)谥鲾?shù)據(jù)庫(kù)1中修改的順序相同。為此,定義若干串行組8。有相同對(duì)象名稱的日志項(xiàng)被分組到公共串行組,使得它們以正確的順序得到更新。某些數(shù)據(jù)庫(kù)項(xiàng)可能與其它數(shù)據(jù)庫(kù)項(xiàng)有關(guān)系(聯(lián)合等),所以可被分配到公共串行組,以保證所有的相互關(guān)聯(lián)的項(xiàng)以正確的順序被更新。一個(gè)串行組因此包含若干對(duì)象的日志項(xiàng)。對(duì)這種串行組的使用使得數(shù)據(jù)庫(kù)復(fù)制能夠以合適的序列進(jìn)行,并且使有效的并行處理更容易。
接收處理過(guò)程7可以將接收到的日志項(xiàng)分配到串行組,將日志項(xiàng)分配到缺省串行組或丟棄該日志項(xiàng)。串行組分配是根據(jù)分配數(shù)據(jù)庫(kù)(MXSGMBAS)和臨時(shí)OS/400用戶索引對(duì)象而進(jìn)行的。日志項(xiàng)分配功能是經(jīng)一個(gè)ILE服務(wù)程序來(lái)提供的,該程序允許底層實(shí)現(xiàn)得到修改,而不用將重新編譯/連接調(diào)用功能。
分配數(shù)據(jù)庫(kù)MXSGMBAS包含所有對(duì)象、它們與其它對(duì)象的關(guān)系(也就是在處理過(guò)程中它們需要與其它對(duì)象一起分組)以及它們所需要的處理方式。將日志項(xiàng)分配到串行組8只要將每個(gè)所接收到的日志項(xiàng)的對(duì)象名稱與分配數(shù)據(jù)庫(kù)MXSGMBAS相比較,并且根據(jù)相關(guān)的信息將日志項(xiàng)分配到串行組就可以實(shí)現(xiàn)。不過(guò),分配數(shù)據(jù)庫(kù)MXSGMBAS包含許多對(duì)象,并且需要相當(dāng)多的處理時(shí)間進(jìn)行數(shù)據(jù)庫(kù)定位操作和提取相關(guān)的處理信息。按照本發(fā)明,使用一個(gè)項(xiàng)分配(MBIX)索引臨時(shí)對(duì)象來(lái)存儲(chǔ)對(duì)象的處理信息。這是對(duì)象的索引,這些對(duì)象給出了它們相關(guān)的串行組和相關(guān)的處理信息(包括到與它們相關(guān)的控制結(jié)構(gòu)的鏈路)。
現(xiàn)在請(qǐng)看圖2和圖4,將描述串行組分配。當(dāng)在步驟11接收到日志項(xiàng)時(shí),接收處理過(guò)程7在步驟12進(jìn)行比較,看該對(duì)象是否存在于MBIX索引中。如果是的話,則操作進(jìn)行到步驟13,返回串行組號(hào)和數(shù)據(jù)庫(kù)文件索引(DBFIDX),并且在所分配的串行組內(nèi)繼續(xù)進(jìn)行處理。
如果該對(duì)象名沒有存儲(chǔ)在MBIX索引中,則在步驟14中在MXSGMBAS數(shù)據(jù)庫(kù)9中進(jìn)行對(duì)象全稱查找。如果查找成功,則返回串行組,分配數(shù)據(jù)庫(kù)文件索引(DBFIDX),它將指向由相關(guān)的串行組保持的動(dòng)態(tài)陣列中所存儲(chǔ)的處理信息,并在步驟15中把一輸入項(xiàng)加到MBIX索引中。每個(gè)數(shù)據(jù)庫(kù)文件索引(DBFIDX)僅僅是通過(guò)增加一索引來(lái)產(chǎn)生的,該索引對(duì)于各串行組來(lái)說(shuō)是唯一的。
如果在步驟14沒有得到匹配,則在步驟16中進(jìn)行類屬名查找。這包括通過(guò)“庫(kù)/文件/*所有”然后通過(guò)“庫(kù)/*所有/*所有”來(lái)搜索。如果實(shí)現(xiàn)了類屬匹配,則在步驟17中將全稱加到MBIX表中,處理在步驟15和13像前面一樣繼續(xù)進(jìn)行。如果不能得到匹配,則在步驟18中刪除該日志項(xiàng)。
因此,開始時(shí),在MBIX索引10中將不存在輸入項(xiàng)。當(dāng)處理日志項(xiàng)時(shí),串行組和對(duì)象的處理信息將被添加到MBIX索引10中。從MBIX表10比從MXSGMBAS數(shù)據(jù)庫(kù)9可快得多地獲得串行組和處理信息。
該方法有以下顯著的性能好處1.串行組不需要搜索項(xiàng)的相關(guān)處理信息。它們僅僅在動(dòng)態(tài)陣列中保持處理信息,并保持?jǐn)?shù)據(jù)庫(kù)文件索引作為存取訪問(wèn)的手段。
2.所有關(guān)于某一特定名稱的操作可涉及串行組和數(shù)據(jù)庫(kù)文件索引值,來(lái)唯一識(shí)別項(xiàng)(一個(gè)“句柄”)。
現(xiàn)在請(qǐng)看圖3,將描述在目標(biāo)計(jì)算機(jī)系統(tǒng)內(nèi)存儲(chǔ)器管理的方法。存儲(chǔ)對(duì)象空間分成若干存儲(chǔ)單元SU1-SUN。每個(gè)存儲(chǔ)單元有存儲(chǔ)單元字頭20。存儲(chǔ)單元字頭20給出在該存儲(chǔ)單元中有日志項(xiàng)的串行組的數(shù)量。每個(gè)數(shù)據(jù)碎片由存儲(chǔ)輸入項(xiàng)字頭21和存儲(chǔ)輸入項(xiàng)22組成。存儲(chǔ)輸入項(xiàng)在16字節(jié)邊界處與填充塊23對(duì)齊,填充塊23填充了輸入項(xiàng)和16字節(jié)邊界之間的空白。
日志項(xiàng)從接收處理過(guò)程7傳送出去,以存儲(chǔ)在存儲(chǔ)對(duì)象空間24中。來(lái)自接收處理過(guò)程7的日志項(xiàng)存儲(chǔ)在塊22的存儲(chǔ)空間對(duì)象24中。每個(gè)日志項(xiàng)22有相關(guān)的存儲(chǔ)輸入項(xiàng)字頭21(或句柄),它包含關(guān)于在該串行組的存儲(chǔ)單元中下一個(gè)日志項(xiàng)的偏移信息,以及包含與日志項(xiàng)相關(guān)聯(lián)的項(xiàng)的處理信息的有關(guān)數(shù)據(jù)庫(kù)文件索引(DBFIDX)。處理信息在動(dòng)態(tài)存儲(chǔ)器中與數(shù)據(jù)庫(kù)文件索引一起保存,后者作為存取訪問(wèn)手段。
在正常操作中,日志項(xiàng)是連續(xù)寫到一個(gè)存儲(chǔ)單元的,直到存儲(chǔ)單元滿了為止,然后日志項(xiàng)寫到下一個(gè)可用的存儲(chǔ)單元。一旦完成寫入存儲(chǔ)單元,日志項(xiàng)可以從已輸入數(shù)據(jù)的存儲(chǔ)單元中讀出。當(dāng)系統(tǒng)資源沒有派其它用場(chǎng)(即無(wú)輸入的日志項(xiàng)需要存儲(chǔ))時(shí),就可以從部分存滿的存儲(chǔ)單元讀取。
這種方法意味著在讀和寫期間不需要將存儲(chǔ)器加鎖。在寫處理過(guò)程期間,接收處理過(guò)程7有專門的通路來(lái)寫到存儲(chǔ)單元。在讀操作期間不需要加鎖,因此日志項(xiàng)可以同時(shí)讀到它們相關(guān)的串行組。唯一需要加鎖的是當(dāng)一個(gè)串行組的最后一個(gè)日志項(xiàng)被讀出時(shí)要減少存儲(chǔ)單元字頭20的值。
可用存儲(chǔ)單元隊(duì)列(ASUQ)25控制使用空閑存儲(chǔ)單元的順序。ASUQ25包括后進(jìn)先出(LIFO)緩存器,它存儲(chǔ)空閑存儲(chǔ)單元的地址。串行組的日志項(xiàng)從一個(gè)存儲(chǔ)單元讀出,直到在存儲(chǔ)單元字頭中出現(xiàn)空值為止。隨著每個(gè)存儲(chǔ)輸入項(xiàng)22被讀出,存儲(chǔ)單元字頭20就遞減。當(dāng)從一個(gè)存儲(chǔ)單元完全讀出所有日志項(xiàng)時(shí),存儲(chǔ)單元字頭20減少到零并且存儲(chǔ)單元號(hào)返回給ASUQ,且當(dāng)新的日志項(xiàng)必須寫到存儲(chǔ)空間時(shí),該號(hào)是重新分配的第一個(gè)存儲(chǔ)單元。這樣,最近使用的存儲(chǔ)單元保持著有效,以將存儲(chǔ)單元的工作組減少到最少數(shù)量。
當(dāng)存儲(chǔ)單元中的所有的日志項(xiàng)已被讀出并且存儲(chǔ)單元被釋放時(shí),可以清除存儲(chǔ)單元的整個(gè)地址范圍,而不需要將數(shù)據(jù)寫入輔助存儲(chǔ)器。
再回到圖2,進(jìn)一步描述處理的方式??刂铺幚磉^(guò)程19監(jiān)視復(fù)制過(guò)程并控制接收處理過(guò)程7中和串行組8內(nèi)的處理。這樣一來(lái),可在每個(gè)串行組內(nèi)進(jìn)行處理,不用考慮在其它串行組內(nèi)處理。通過(guò)將整個(gè)處理過(guò)程由拱形的控制過(guò)程19控制,每個(gè)串行組就可獨(dú)立地進(jìn)行它的處理,而不用考慮整個(gè)操作的復(fù)雜性。
當(dāng)每個(gè)串行組按順序接收一個(gè)項(xiàng)的日志項(xiàng)時(shí),該項(xiàng)在復(fù)制數(shù)據(jù)庫(kù)6中的更新也是按順序進(jìn)行的。通過(guò)在某一特定的串行組中處理相鏈接的項(xiàng),串行組處理是流水線型的。
當(dāng)準(zhǔn)備制作復(fù)制數(shù)據(jù)庫(kù)6時(shí),必須去除主數(shù)據(jù)庫(kù)部分施加的任務(wù)。首先,控制處理過(guò)程19暫停接收處理過(guò)程7以及通過(guò)串行組8進(jìn)行的處理。然后控制處理過(guò)程19識(shí)別所有“開放”的任務(wù)組(如,未收到任務(wù)或重新運(yùn)行日志項(xiàng)的任務(wù)標(biāo)識(shí)符)。這些是以從最近的(即有最近日志項(xiàng)的任務(wù)組)到最早的順序連續(xù)地處理的,如下所述1)接收處理過(guò)程7的接收處理過(guò)程接收來(lái)自于日志接收器26的任務(wù)組的日志項(xiàng);2)把所有的輸入項(xiàng)分配到“缺省”串行組;3)輸入項(xiàng)以通常的方式存儲(chǔ)在存儲(chǔ)單元24中,但以相反順序鏈接(即列表的開頭是存儲(chǔ)單元的最近輸入項(xiàng),然后鏈接往后移直到存儲(chǔ)單元的第一個(gè)輸入項(xiàng));4)如果在任務(wù)組的輸入項(xiàng)完成之前存儲(chǔ)單元就滿了,則該存儲(chǔ)單元被壓入LIFO隊(duì)列TLQ27(而不是將它釋放到缺省串行組)。然后,分配新的存儲(chǔ)單元(像往常一樣),繼續(xù)存儲(chǔ)輸入項(xiàng);5)當(dāng)任務(wù)組的有效日志項(xiàng)被完全接收并存儲(chǔ)在存儲(chǔ)單元中時(shí),存儲(chǔ)單元以LIFO的順序被分配到缺省串行組。結(jié)果是串行組以相反次序接收日志項(xiàng)(從最近的到最早的);6)缺省串行組以“相反的”輸入項(xiàng)(這些輸入項(xiàng)包括一個(gè)表明它們是相反的輸入項(xiàng)的標(biāo)志符)來(lái)處理這些輸入項(xiàng)。結(jié)果是所有的插入被處理成刪除、更新被移動(dòng)到它們前一幅鏡像,刪除被插入等等。只有已經(jīng)被應(yīng)用到數(shù)據(jù)庫(kù)(例如在正常處理期間)的日志項(xiàng)才被處理。
7)缺省串行組直到接收到“數(shù)據(jù)任務(wù)組”日志項(xiàng)時(shí)才執(zhí)行關(guān)于“相反”輸入項(xiàng)的任務(wù)。這保證了如果在“清理”時(shí)遇到故障,則數(shù)據(jù)庫(kù)處于一已知的狀態(tài)中。這就能夠使“清理”能重新開始。
一旦所有“開放”的任務(wù)組已經(jīng)“去除”,則控制處理過(guò)程19暫停其它處理過(guò)程,復(fù)制數(shù)據(jù)庫(kù)就可作為主數(shù)據(jù)庫(kù)來(lái)使用。
除非次級(jí)數(shù)據(jù)庫(kù)實(shí)際上必須作為主數(shù)據(jù)庫(kù)這種情況以外,這種方法可以將部分施加的并不需要系統(tǒng)處理能力的任務(wù)快速地予以“清理”。
本發(fā)明的方法和裝置提供以下優(yōu)點(diǎn)1.存儲(chǔ)單元塊在存儲(chǔ)空間對(duì)象內(nèi)的分配和讀/寫控制避免了加鎖的需要以及讀/寫同時(shí)性的問(wèn)題;2.串行組的使用使得項(xiàng)可以連續(xù)的方式被更新,并且相互間有關(guān)系的項(xiàng)以正確的時(shí)序被更新。串行組使得一起處理相互間有關(guān)系的項(xiàng)時(shí),日志項(xiàng)的多個(gè)流可以同時(shí)被處理。
3.MBIX索引的使用極大地減少了對(duì)每個(gè)日志項(xiàng)的查找時(shí)間。對(duì)存儲(chǔ)輸入項(xiàng)字頭21(句柄)的使用使得串行組的下一個(gè)日志項(xiàng)可以很快地被定位。
4.使用一個(gè)控制處理過(guò)程來(lái)監(jiān)視接收處理過(guò)程的工作和串行組內(nèi)的處理,使得使得不需要與其它過(guò)程交互作用就能啟動(dòng)子過(guò)程有效地處理信息。
5.次級(jí)數(shù)據(jù)庫(kù)將被作為主數(shù)據(jù)庫(kù)的地方,簡(jiǎn)單地處理任務(wù)。
在以上的描述中,已引用了具有已知等同物的整數(shù)或組成,則在此包括的此類等同物如個(gè)別提出的一樣。
盡管本發(fā)明是通過(guò)舉例的形式,應(yīng)理解只要不偏離本發(fā)明的范圍或精神,可以做改進(jìn)和/或修改。
權(quán)利要求
1.一種將數(shù)據(jù)庫(kù)從源計(jì)算機(jī)系統(tǒng)復(fù)制到目標(biāo)計(jì)算機(jī)系統(tǒng)的方法,其特征在于,它包括以下步驟1)接收來(lái)自于源計(jì)算機(jī)系統(tǒng)的日志項(xiàng);以及2)分配程序組成來(lái)處理日志項(xiàng)和更新目標(biāo)數(shù)據(jù)庫(kù),其中一控制程序?qū)⑷蝿?wù)分配給程序組成,并充分地控制程序組成,使得程序組成不互相干擾。
2.如權(quán)利要求1所述的方法,其特征在于,目標(biāo)計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn)并行處理。
3.如權(quán)利要求1或2任一項(xiàng)所述的方法,其特征在于,目標(biāo)計(jì)算機(jī)系統(tǒng)是多處理器計(jì)算機(jī)。
4.一種計(jì)算機(jī)系統(tǒng),其特征在于,按照上述權(quán)利要求中的任一項(xiàng)的方法進(jìn)行工作。
全文摘要
本發(fā)明涉及數(shù)據(jù)處理的方法和系統(tǒng),包括把信息串分配到串行組來(lái)處理的數(shù)據(jù)復(fù)制的方法。當(dāng)沒有數(shù)據(jù)被寫入時(shí),從存儲(chǔ)空間區(qū)域讀出數(shù)據(jù)的存儲(chǔ)器管理方法。建立動(dòng)態(tài)表,以向數(shù)據(jù)庫(kù)項(xiàng)提供處理信息的復(fù)制數(shù)據(jù)庫(kù)的方法。程序組成之間不交互作用而把任務(wù)分配到程序組成的復(fù)制數(shù)據(jù)庫(kù)的方法。
文檔編號(hào)G06F12/00GK1841368SQ20051002284
公開日2006年10月4日 申請(qǐng)日期2001年10月1日 優(yōu)先權(quán)日2000年10月9日
發(fā)明者J·S·塔倍 申請(qǐng)人:最佳收益有限公司