專利名稱:用于數(shù)據(jù)庫(kù)結(jié)構(gòu)比較的方法、裝置和計(jì)算機(jī)程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于比較數(shù)據(jù)庫(kù)模式以及/或比較字節(jié)碼庫(kù)或倉(cāng)庫(kù)的方法和裝置。
背景技術(shù):
目前,計(jì)算機(jī)實(shí)現(xiàn)的數(shù)據(jù)庫(kù)及應(yīng)用程序接口(“API”)的使用是諸如關(guān)系數(shù)據(jù)庫(kù)和程序代碼庫(kù)的各種類型信息的檔案及使用的基礎(chǔ)。為關(guān)系數(shù)據(jù)庫(kù)和API提供數(shù)據(jù)定義的數(shù)據(jù)結(jié)構(gòu)在這里通常被稱為“數(shù)據(jù)庫(kù)結(jié)構(gòu)”,并且包括但不限于用于例如關(guān)系數(shù)據(jù)庫(kù)和諸如Java檔案數(shù)據(jù)庫(kù)(“JAR”)的API的數(shù)據(jù)庫(kù)模式的數(shù)據(jù)描述。由于它們的普遍存在,數(shù)據(jù)庫(kù)結(jié)構(gòu)包含廣泛的軟件包的基本元素,并且在編譯、編目、分類和檢索信息的許多方面均是有用的,并且用于控制程序執(zhí)行的各方面。然而,升級(jí)的數(shù)據(jù)庫(kù)結(jié)構(gòu)的使用通常受限于升級(jí)或改變數(shù)據(jù)庫(kù)結(jié)構(gòu)或軟件設(shè)計(jì)時(shí)遇到的問(wèn)題。特別地,在原始的數(shù)據(jù)庫(kù)結(jié)構(gòu)下正確運(yùn)行的功能完備的數(shù)據(jù)庫(kù)系統(tǒng)或其他應(yīng)用,由于數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的改變而通常不能在升級(jí)的數(shù)據(jù)庫(kù)結(jié)構(gòu)下運(yùn)行。相似地,由于數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì)內(nèi)的改變,依賴原始數(shù)據(jù)庫(kù)結(jié)構(gòu)的功能或操作支持的軟件或應(yīng)用通常不能在升級(jí)的數(shù)據(jù)庫(kù)結(jié)構(gòu)下正確運(yùn)行。更進(jìn)一步,當(dāng)升級(jí)的數(shù)據(jù)包括例如JAR的字節(jié)碼庫(kù)時(shí),升級(jí)的JAR中的不相容性可以引起已有應(yīng)用中的操作問(wèn)題。因此,每當(dāng)原始數(shù)據(jù)庫(kù)結(jié)構(gòu)升級(jí)時(shí),就存在原始數(shù)據(jù)庫(kù)結(jié)構(gòu)下工作的數(shù)據(jù)庫(kù)或應(yīng)用將不能在升級(jí)的數(shù)據(jù)庫(kù)結(jié)構(gòu)下正確運(yùn)行的風(fēng)險(xiǎn)。
例如,如果一個(gè)DB2數(shù)據(jù)庫(kù)在第一數(shù)據(jù)庫(kù)定義集下正確地運(yùn)行,那么如果該DB2數(shù)據(jù)庫(kù)升級(jí)為使用與第一定義集在某些方面不同的升級(jí)定義集,則該DB2也許根本不能運(yùn)行。
當(dāng)升級(jí)包含多個(gè)API的JAR時(shí),存在相似的問(wèn)題。特別地,一個(gè)應(yīng)用可在利用第一API集的第一JAR下正確運(yùn)行,但是在利用與第一集某些方面不同(例如通過(guò)改變類構(gòu)造函數(shù),或包括諸如參數(shù)的數(shù)量和順序的方法特征信息)的第二API集的第二JAR下根本不運(yùn)行。
已知有用來(lái)比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的現(xiàn)存方法,包括數(shù)據(jù)庫(kù)模式、JAR、API和其他數(shù)據(jù)結(jié)構(gòu),但是這些常規(guī)方法缺少明確地識(shí)別兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)之間的重要差異的能力。例如,一種常規(guī)方法可識(shí)別出兩個(gè)數(shù)據(jù)庫(kù)模式是不同的,但是不能識(shí)別它們是如何不同,以使一個(gè)數(shù)據(jù)庫(kù)可相應(yīng)地被改變來(lái)運(yùn)行。通過(guò)另一個(gè)例子,已知的方法涉及完全反編譯兩個(gè)JAR并比較兩個(gè)反編譯的輸出。然而,這樣的比較不能提供關(guān)于兩個(gè)JAR之間的相關(guān)差異的有用信息。因此,已知的數(shù)據(jù)庫(kù)結(jié)構(gòu)比較方法不能識(shí)別在具體應(yīng)用中兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的向前和向后相容性。
另外,已知的方法缺少精確比較手段,并且基于不準(zhǔn)確的比較,經(jīng)常不準(zhǔn)確地產(chǎn)生多個(gè)不存在的不相容性。例如,已知的數(shù)據(jù)庫(kù)結(jié)構(gòu)比較方法利用標(biāo)準(zhǔn)的對(duì)稱比較,該方法逐字符或逐行地比較兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的字符,以確定兩個(gè)結(jié)構(gòu)是否相同。因此,兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)可就其功能是完全一致的,但是如果一個(gè)數(shù)據(jù)庫(kù)包含額外的嵌入空白,或不依賴于數(shù)據(jù)庫(kù)結(jié)構(gòu)并且與數(shù)據(jù)庫(kù)結(jié)構(gòu)無(wú)關(guān)的任何其它元素,則常規(guī)比較方法會(huì)認(rèn)為兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)是不同的。類似地,通過(guò)包含相同部分,兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)可在功能上是相等的,但是如果各部分在每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中被安置在不同位置,則常規(guī)比較方法會(huì)認(rèn)為兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)是不同的。
發(fā)明內(nèi)容
在各種實(shí)施例中,本發(fā)明提供了能夠識(shí)別兩個(gè)數(shù)據(jù)庫(kù)之間的結(jié)構(gòu)差異的方法和計(jì)算機(jī)結(jié)構(gòu)。
在各種實(shí)施例中,本發(fā)明提供了通過(guò)僅比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的相關(guān)部分從而能夠準(zhǔn)確地比較兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的方法和計(jì)算機(jī)結(jié)構(gòu)。
在各種實(shí)施例中,本發(fā)明提供了能夠比較兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu),使得每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)各段的位置不影響比較結(jié)果的方法和計(jì)算機(jī)結(jié)構(gòu)。
應(yīng)該理解,上面所列的優(yōu)點(diǎn)不必全部由此處所要求保護(hù)的發(fā)明來(lái)實(shí)現(xiàn)。通過(guò)最優(yōu)實(shí)施例的詳細(xì)說(shuō)明、權(quán)利要求書(shū)以及附圖將能夠明白本發(fā)明的更多的優(yōu)點(diǎn)。
相應(yīng)地,在各種實(shí)施例中,提供了用來(lái)比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的方法。數(shù)據(jù)庫(kù)比較方法包括從第一信息庫(kù)中提取第一數(shù)據(jù)庫(kù)結(jié)構(gòu),從第二信息庫(kù)中提取第二數(shù)據(jù)庫(kù)結(jié)構(gòu),從每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中過(guò)濾結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù),不對(duì)稱地比較第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu),以及基于比較,識(shí)別第一信息庫(kù)和第二信息庫(kù)之間的不相容性。
在各種實(shí)施例中,提供了一種用于比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的方法。該方法涉及從包含第一多個(gè)相關(guān)部分的第一關(guān)系數(shù)據(jù)庫(kù)中提取第一模式。接著,從包含第二多個(gè)相關(guān)部分的第二關(guān)系數(shù)據(jù)庫(kù)中提取第二模式。然后通過(guò)識(shí)別第一和第二模式中的相關(guān)部分并忽略不相關(guān)部分,來(lái)自第一和第二模式的相關(guān)數(shù)據(jù)被過(guò)濾。接著,不對(duì)稱地比較第一和第二模式的所識(shí)別的相關(guān)部分以識(shí)別包括在一個(gè)模式內(nèi)但不包括在另一個(gè)模式內(nèi)的相關(guān)差異,其中,第一和第二模式中相關(guān)部分的位置不影響不對(duì)稱比較的結(jié)果。更進(jìn)一步地,基于該不對(duì)稱比較,第一和第二關(guān)系數(shù)據(jù)庫(kù)之間的任何不相容性被識(shí)別出,并且基于任何所識(shí)別的不相容性,確定第一和第二關(guān)系數(shù)據(jù)庫(kù)的向前和向后相容性。
在各種實(shí)施例中,提供了一種用于比較字節(jié)碼庫(kù)的方法。該方法涉及基于要提取對(duì)象的描述,反編譯及過(guò)濾來(lái)自第一字節(jié)碼庫(kù)的第一對(duì)象集,以及基于要提取對(duì)象的描述,反編譯及過(guò)濾來(lái)自第二字節(jié)碼庫(kù)的第二對(duì)象集。然后基于第一對(duì)象集,形成第一對(duì)象表征符(objectcharacterizer)集。接著,基于第二對(duì)象集,形成第二對(duì)象表征符集。更進(jìn)一步地,不對(duì)稱地比較第一和第二對(duì)象表征符集來(lái)識(shí)別第一和第二對(duì)象集之間的相關(guān)差異,并且基于該不對(duì)稱比較,識(shí)別第一和第二字節(jié)碼庫(kù)之間的任何不相容性。
可以理解,前面的概述以及后續(xù)的不同實(shí)施例的描述兩者都僅是示范性和說(shuō)明性的,并不限制該要求保護(hù)的發(fā)明。結(jié)合并組成該說(shuō)明一部分的附示了一些實(shí)施例,并與描述一起用來(lái)解釋此處所描述的實(shí)施例的原理。
技術(shù)人員將理解下面所述的附圖僅是為說(shuō)明的目的。附圖不旨在在任何方面限制本發(fā)明的范圍。
圖1是圖示了用于比較第一數(shù)據(jù)庫(kù)或字節(jié)碼檔案與第二數(shù)據(jù)庫(kù)或字節(jié)碼檔案的示例性方法的流程圖;圖2是圖示了用于根據(jù)本發(fā)明比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的計(jì)算機(jī)結(jié)構(gòu)的方框圖。
具體實(shí)施例方式
現(xiàn)在具體參照附圖中所圖示的一些實(shí)施例和例子。只要可能,全部附圖使用相同的附圖標(biāo)記來(lái)表示相同或同類部分。
首先參見(jiàn)圖1,本發(fā)明涉及用來(lái)比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的計(jì)算機(jī)實(shí)現(xiàn)的方法。圖1中的步驟100-110概述了一個(gè)示范的計(jì)算機(jī)實(shí)現(xiàn)的比較模式。此處所描述的該方法可被編程并存儲(chǔ)在由諸如個(gè)人計(jì)算機(jī)或計(jì)算機(jī)網(wǎng)絡(luò)的標(biāo)準(zhǔn)計(jì)算設(shè)備可讀的設(shè)備上。適合的程序存儲(chǔ)設(shè)備包括,例如,CD、DVD、內(nèi)部計(jì)算機(jī)硬盤(pán)驅(qū)動(dòng)器、以及外部網(wǎng)絡(luò)硬盤(pán)驅(qū)動(dòng)器。類似地,此處所描述的方法可由標(biāo)準(zhǔn)計(jì)算設(shè)備執(zhí)行或由計(jì)算網(wǎng)絡(luò)上駐留的多個(gè)計(jì)算設(shè)備分別執(zhí)行。
圖2圖解了用于本發(fā)明的一個(gè)示范的計(jì)算機(jī)結(jié)構(gòu)。該計(jì)算機(jī)結(jié)構(gòu)廣泛地包括數(shù)據(jù)庫(kù)比較模塊10,為比較和識(shí)別每個(gè)數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14之間結(jié)構(gòu)上的不同,其可操作以訪問(wèn)第一數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12以及第二數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)14。數(shù)據(jù)庫(kù)比較模塊10通過(guò)常規(guī)手段,例如通過(guò)訪問(wèn)本地或遠(yuǎn)程存儲(chǔ)的信息,可訪問(wèn)數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14。數(shù)據(jù)庫(kù)比較模塊10包括過(guò)濾器模塊16,其利用過(guò)濾器參數(shù)集18過(guò)濾來(lái)自數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14的信息。在各種實(shí)施例中,過(guò)濾器參數(shù)18包含正則表達(dá)式。在各種實(shí)施例中,過(guò)濾器16包括可以將層次關(guān)系數(shù)據(jù)庫(kù)模式提取成基本上扁平的格式的模式提取器和正則表達(dá)式分析器,例如提取成數(shù)據(jù)庫(kù)模式的結(jié)構(gòu)化查詢語(yǔ)言定義的ASCII表示,包括可以從一般的或無(wú)關(guān)部分中分離出SQL定義的相關(guān)部分的正則表達(dá)式分析器。在各種實(shí)施例中,過(guò)濾器模塊16包含字節(jié)碼反編譯器,最好是基于正則表達(dá)式的反編譯器,其可以從字節(jié)碼庫(kù)中只提取那些匹配例如一個(gè)特定的正則表達(dá)式或正則表達(dá)式集的對(duì)象。
比較模塊10包括不對(duì)稱比較器20,用來(lái)比較過(guò)濾的數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14,以及識(shí)別數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)之間結(jié)構(gòu)上的不同。比較模塊10將所識(shí)別的差異或不相容性存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀的比較輸出22中。在各種實(shí)施例中,比較模塊10執(zhí)行兩個(gè)數(shù)據(jù)庫(kù)模式的相關(guān)部分的不對(duì)稱比較。在其他各種實(shí)施例中,比較模塊執(zhí)行涉及字節(jié)碼庫(kù)中不同對(duì)象的對(duì)象表征符的不對(duì)稱比較。此處所使用的“對(duì)象表征符”通常是指一個(gè)對(duì)象的特征描述,用于諸如識(shí)別API相容性的目的?!皩?duì)象表征符”包括但不限于對(duì)象方法的名稱、方法的參數(shù)的數(shù)量、順序及類型、異常轉(zhuǎn)移、返回值類型、對(duì)象方法的方法可訪問(wèn)性的ASCII表示。
在各種實(shí)施例中,比較輸出為一個(gè)比較文件??梢岳斫猓容^輸出22可用包括如ASCII格式文本文件的若干種方法來(lái)實(shí)現(xiàn)。下面更詳細(xì)地描述比較模塊10的更詳細(xì)操作??梢岳斫猓诓槐畴x本發(fā)明的精神和范圍的前提下,此處所描述的方法和結(jié)構(gòu)可由計(jì)算機(jī)程序,而不是示范的數(shù)據(jù)庫(kù)比較模塊10來(lái)完成。
返回到圖1,在步驟100和102中,數(shù)據(jù)庫(kù)比較模塊10通過(guò)任何方便的手段訪問(wèn)數(shù)據(jù)庫(kù)或代碼庫(kù)12、14,并且從第一數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12中提取第一數(shù)據(jù)庫(kù)結(jié)構(gòu),及從第二數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)14中提取第二數(shù)據(jù)庫(kù)結(jié)構(gòu)。數(shù)據(jù)庫(kù)結(jié)構(gòu)可從現(xiàn)存的諸如數(shù)據(jù)庫(kù)或代碼庫(kù)12、14的數(shù)據(jù)庫(kù)中提取,或者,可以另外例如通過(guò)訪問(wèn)不是從數(shù)據(jù)庫(kù)提取的已存儲(chǔ)的數(shù)據(jù)庫(kù)結(jié)構(gòu)來(lái)提供數(shù)據(jù)庫(kù)結(jié)構(gòu)。每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)包括多個(gè)數(shù)據(jù)定義或代碼部分,其以諸如SQL或Java表示的任何方便格式描述或定義了數(shù)據(jù)庫(kù)結(jié)構(gòu)的功能或操作。在一個(gè)實(shí)施例中,數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14為DB2數(shù)據(jù)庫(kù),并且數(shù)據(jù)庫(kù)結(jié)構(gòu)為以SQL表示的數(shù)據(jù)定義語(yǔ)言(DDL)。在第二實(shí)施例中,數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14為JAR,并且數(shù)據(jù)庫(kù)結(jié)構(gòu)為Java語(yǔ)言表示的API。
DB2是由IBM公司提供的數(shù)據(jù)庫(kù)管理系統(tǒng)。DB2數(shù)據(jù)庫(kù)通常根據(jù)DDL來(lái)構(gòu)造,DDL可以使數(shù)據(jù)庫(kù)的結(jié)構(gòu)和實(shí)例按人和機(jī)器可讀的形式來(lái)定義。本發(fā)明所利用的DB2數(shù)據(jù)庫(kù)可包含單一DDL或多個(gè)DDL。DDL包括允許表和相關(guān)元素的定義的多個(gè)數(shù)據(jù)定義,還包含利于數(shù)據(jù)的存儲(chǔ)、檢索、比較及排序的SQL關(guān)鍵字。然而,本發(fā)明可用于任何類型數(shù)據(jù)庫(kù),包括非常規(guī)的DDL或SQL數(shù)據(jù)庫(kù)結(jié)構(gòu),并且不限于此處所描述的數(shù)據(jù)庫(kù)結(jié)構(gòu)。
JAR是包括至少一個(gè)API的庫(kù),應(yīng)用該API可開(kāi)發(fā)出各種的應(yīng)用程序。例如,一個(gè)程序員通過(guò)應(yīng)用具體的API中或在具體JAR中所提供的多個(gè)API中所提供函數(shù)可開(kāi)發(fā)出應(yīng)用程序。與本發(fā)明結(jié)合使用的JAR可包括單一API或多個(gè)API。更進(jìn)一步,每個(gè)API包括能實(shí)現(xiàn)期望的功能的多個(gè)對(duì)象。由給定的API或JAR所提供的特定Java或應(yīng)用功能不限制本發(fā)明的范圍。另外,本發(fā)明可與任何類型編程語(yǔ)言或API一起使用,并且不限于此處所描述的常規(guī)或標(biāo)準(zhǔn)化格式。
在各種實(shí)施例中,例如,就JAR而言,最好利用關(guān)系數(shù)據(jù)庫(kù)模式提取器(就關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)而言)及反編譯器從數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14中提取數(shù)據(jù)庫(kù)結(jié)構(gòu)??梢岳斫?,在不偏離本發(fā)明的范圍的前提下,可使用其他的數(shù)據(jù)庫(kù)提取器,例如,用于編譯型C#的反編譯器??梢岳斫?,不同的計(jì)算機(jī)實(shí)現(xiàn)工具可以用來(lái)從DB2數(shù)據(jù)庫(kù)提取DDL,例如,來(lái)自IBM公司的DB2LOOK。此外,反編譯器可以用來(lái)從JAR中提取特定的API和相關(guān)的對(duì)象。在不同的實(shí)施例中,所提取的數(shù)據(jù)庫(kù)結(jié)構(gòu)按計(jì)算機(jī)可讀格式存儲(chǔ),使得它們可以如下面所描述的被比較模塊10訪問(wèn)。
步驟104中,所提取的數(shù)據(jù)庫(kù)結(jié)構(gòu)被過(guò)濾器模塊16過(guò)濾。特別地,通過(guò)識(shí)別數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的相關(guān)數(shù)據(jù)定義或代碼部分及從數(shù)據(jù)庫(kù)結(jié)構(gòu)中消除一般(generic)部分,結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)被從每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中過(guò)濾。此處所定義的“結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)”為包含在數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的數(shù)據(jù),其與數(shù)據(jù)庫(kù)的結(jié)構(gòu)無(wú)關(guān),或與該數(shù)據(jù)庫(kù)結(jié)構(gòu)相應(yīng)的數(shù)據(jù)庫(kù)的向前和向后兼容性無(wú)關(guān)??梢岳斫猓瑪?shù)據(jù)庫(kù)結(jié)構(gòu)通常包含結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)來(lái)執(zhí)行不涉及數(shù)據(jù)庫(kù)結(jié)構(gòu)的不同功能,例如,包括描述數(shù)據(jù)庫(kù)結(jié)構(gòu)的功能的注釋的API非特定部分、僅與特定并唯一的數(shù)據(jù)庫(kù)實(shí)現(xiàn)有關(guān)的用戶特定信息、僅涉及特定數(shù)據(jù)庫(kù)當(dāng)前狀態(tài)的動(dòng)態(tài)信息等。
可以期望從所提取的數(shù)據(jù)庫(kù)結(jié)構(gòu)中過(guò)濾或消除結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)來(lái)提供數(shù)據(jù)庫(kù)或字節(jié)碼庫(kù)12、14的更準(zhǔn)確的比較,因?yàn)榧词箶?shù)據(jù)庫(kù)結(jié)構(gòu)在功能上是相等的,結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)通常在數(shù)據(jù)庫(kù)之間變化。例如,包含用戶特定信息和動(dòng)態(tài)信息的代碼部分對(duì)于特定數(shù)據(jù)庫(kù)結(jié)構(gòu)通常是特定的,并且如果應(yīng)用于另一個(gè)功能相等的數(shù)據(jù)庫(kù)結(jié)構(gòu),會(huì)產(chǎn)生不同。因此,從所提取的數(shù)據(jù)庫(kù)結(jié)構(gòu)中過(guò)濾結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)允許準(zhǔn)確確定所提取的數(shù)據(jù)庫(kù)結(jié)構(gòu)的功能等效性。
根據(jù)過(guò)濾器參數(shù)18過(guò)濾數(shù)據(jù)庫(kù)結(jié)構(gòu)。在各種實(shí)施例中,過(guò)濾器參數(shù)18為正則表達(dá)式,利用其來(lái)分析數(shù)據(jù)庫(kù)模式的重要部分,或在API比較的情況下,用于利用反編譯器從字節(jié)碼檔案中僅提取相關(guān)對(duì)象。過(guò)濾器參數(shù)18被用來(lái)識(shí)別出現(xiàn)在每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中的相關(guān)部分。相關(guān)部分的識(shí)別利于進(jìn)行比較,例如,正則表達(dá)式使得發(fā)明的比較工具更加靈活。因此,本發(fā)明可用于多個(gè)信息庫(kù)和數(shù)據(jù)庫(kù)結(jié)構(gòu),而不用花費(fèi)必需的時(shí)間和精力來(lái)為每個(gè)特定數(shù)據(jù)庫(kù)結(jié)構(gòu)生成定制的過(guò)濾器。
過(guò)濾器參數(shù)18可由比較模塊10自動(dòng)提供,或可由模塊10的用戶提供及定制。優(yōu)選地,過(guò)濾器參數(shù)18基于包含在數(shù)據(jù)庫(kù)12、14內(nèi)的數(shù)據(jù)的性質(zhì),并且在完成比較以使過(guò)濾器參數(shù)18最優(yōu)化之后,可由比較模塊10或用戶動(dòng)態(tài)地定制,使得最大量的結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)被從每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中消除。例如,如果比較的結(jié)果不是期望的,例如,如果比較表明不相容性的量超出合理的程度,那么過(guò)濾器參數(shù)可被動(dòng)態(tài)地定制以過(guò)濾每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中的附加信息,從而將不相容性的量減少到一個(gè)合理量。
在涉及與關(guān)系數(shù)據(jù)庫(kù)相關(guān)的數(shù)據(jù)庫(kù)結(jié)構(gòu)的各種實(shí)施例中,優(yōu)選地,過(guò)濾器參數(shù)18指示過(guò)濾器16識(shí)別具有每個(gè)DDL的相關(guān)的數(shù)據(jù)定義部分,從而忽略例如無(wú)關(guān)數(shù)據(jù)定義部分。相關(guān)數(shù)據(jù)定義部分可包含DDL模式,其特定于具體的應(yīng)用,而不是特定于例如用戶定制。因此,相關(guān)數(shù)據(jù)定義部分可包含所利用的包括函數(shù)、索引、表、觸發(fā)器、唯一索引、以及視圖元素的DDL模式。基于在DDL中所利用的具體代碼部分,相關(guān)部分可包含其他的或附加的數(shù)據(jù)定義部分。
在涉及與字節(jié)碼庫(kù)相關(guān)的數(shù)據(jù)庫(kù)結(jié)構(gòu)的各種實(shí)施例中,優(yōu)選地,過(guò)濾器參數(shù)18指示可被實(shí)現(xiàn)為選擇性的、基于正則表達(dá)式的字節(jié)碼反編譯器的過(guò)濾器16識(shí)別并提取每個(gè)API內(nèi)的相關(guān)部分。在各種實(shí)施例中,基于正則表達(dá)式的字節(jié)碼反編譯器接收至少一個(gè)正則表達(dá)式,其中基于該表達(dá)式從字節(jié)碼庫(kù)反編譯出匹配對(duì)象。在各種實(shí)施例中,使用正則表達(dá)式以避免字節(jié)碼庫(kù)的不相關(guān)部分的不必要的反編譯。在各種實(shí)施例中,不相關(guān)部分包括例如,(i)反編譯的方法及/或函數(shù)中的實(shí)際語(yǔ)義;(ii)私有方法的API特征(例如,參數(shù)的數(shù)量、順序、以及類型);(iii)嵌入的實(shí)用類;(iv)以及私有數(shù)據(jù)成員。
在各種實(shí)施例中,相關(guān)部分通常包括涉及API公共方面的功能的Java元素。在各種實(shí)施例中,相關(guān)代碼部分一般包括Java方法、構(gòu)造函數(shù)、參數(shù)、參數(shù)順序、參數(shù)類型、由方法處理的異常、返回值,以及方法的可訪問(wèn)性限定符?;诿總€(gè)API內(nèi)所利用的具體代碼部分,相關(guān)部分可另外包括其他的或附加的Java特征。在各種實(shí)施例中,之后相關(guān)部分被提取成對(duì)象表征符。在各種實(shí)施例中,對(duì)象表征符對(duì)應(yīng)于與方法相應(yīng)的單行ASCII表示,包括參數(shù)數(shù)量、參數(shù)順序、參數(shù)類型、異常轉(zhuǎn)移、返回值類型,以及方法的可訪問(wèn)性的方法特征。
過(guò)濾器模塊16識(shí)別并過(guò)濾出已被識(shí)別為相關(guān)的數(shù)據(jù)庫(kù)結(jié)構(gòu)的部分。未識(shí)別的部分與數(shù)據(jù)庫(kù)12、14的向前和向后相容性不相關(guān)。
在涉及數(shù)據(jù)庫(kù)模式的各種實(shí)施例中,不相關(guān)的部分可包含嵌入的空白、動(dòng)態(tài)數(shù)據(jù)庫(kù)信息、SQL序列號(hào)、用戶定義的表引用,以及用戶定義的索引引用。在涉及字節(jié)碼庫(kù)的比較的其他各種實(shí)施例中,不相關(guān)部分可包含私有函數(shù),或被用來(lái)當(dāng)做私有函數(shù)操作的公共函數(shù),其在API中通常不被一般公共函數(shù)利用或訪問(wèn)。然而,可以理解,不相關(guān)部分可包含決定于過(guò)濾器參數(shù)18和相關(guān)代碼部分的任何特征或特征的組合。
所識(shí)別的結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)可或者從提取的數(shù)據(jù)庫(kù)結(jié)構(gòu)中消除或者被屏蔽,使得如下面所述所識(shí)別的結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)在比較中不被利用。因此,過(guò)濾器模塊16從每個(gè)數(shù)據(jù)結(jié)構(gòu)中可過(guò)濾結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)以滿足具體用戶或數(shù)據(jù)庫(kù)的需要,例如,屏蔽結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)以保存數(shù)據(jù)庫(kù)或結(jié)構(gòu)的原始結(jié)構(gòu),或者當(dāng)數(shù)據(jù)庫(kù)原始結(jié)構(gòu)不重要時(shí)刪除結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)。
在步驟106中,利用不對(duì)稱比較器20比較過(guò)濾出的數(shù)據(jù)來(lái)識(shí)別數(shù)據(jù)庫(kù)結(jié)構(gòu)之間的功能差異。特別地,比較過(guò)濾數(shù)據(jù)的每個(gè)部分來(lái)識(shí)別出現(xiàn)在一個(gè)所過(guò)濾的數(shù)據(jù)庫(kù)結(jié)構(gòu)中但不在另一個(gè)中的代碼部分。不包含相同部分的所過(guò)濾的數(shù)據(jù)庫(kù)結(jié)構(gòu)是不相容的。另外,如果數(shù)據(jù)庫(kù)12、14包含多于兩個(gè)的數(shù)據(jù)庫(kù)結(jié)構(gòu),附加的數(shù)據(jù)庫(kù)結(jié)構(gòu)可用如下所描述的相同的方式來(lái)比較。因此,本發(fā)明可比較涉及兩個(gè)或更多的數(shù)據(jù)庫(kù)的兩個(gè)或更多的數(shù)據(jù)庫(kù)結(jié)構(gòu),并確定每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的不相容性以及每個(gè)數(shù)據(jù)庫(kù)的向前和向后相容性。
不對(duì)稱比較器20不同于常規(guī)的計(jì)算機(jī)輔助比較方法,例如,Unix工具diff和comp,以及Windows工具fc和WINDIFF的地方在于,每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的代碼部分的特定位置不影響不對(duì)稱比較,但是會(huì)影響常規(guī)的比較。例如,利用常規(guī)的比較方法,如果第一數(shù)據(jù)庫(kù)結(jié)構(gòu)在行1包含代碼部分A,而第二數(shù)據(jù)庫(kù)結(jié)構(gòu)在行2包含代碼部分A,代碼部分A將被常規(guī)的比較方法識(shí)別為第一和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)之間的結(jié)構(gòu)差異,即使代碼部分A為兩個(gè)結(jié)構(gòu)所共用并且兩個(gè)結(jié)構(gòu)在功能上是相等的。與此相反,不對(duì)稱比較,例如比較器20所利用的比較,不會(huì)將代碼部分A識(shí)別為數(shù)據(jù)庫(kù)結(jié)構(gòu)之間的差異,并且會(huì)將兩個(gè)數(shù)據(jù)庫(kù)識(shí)別為功能上相等。
不對(duì)稱比較利用元素,例如一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的元素之間的關(guān)系,來(lái)確定兩個(gè)元素是否相等。與此相反,常規(guī)比較方法僅僅逐行或逐字節(jié)地比較兩個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)來(lái)確定結(jié)構(gòu)的不同之處。例如,在不對(duì)稱比較中,如果第一數(shù)據(jù)庫(kù)結(jié)構(gòu)包含部分X,而第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含代碼部分Y,不考慮X和Y在數(shù)據(jù)庫(kù)結(jié)構(gòu)中的位置,如果X(R)Y并且Y(R)X,其中(R)是一種諸如大于、小于等的關(guān)系,則X等于Y。因此,諸如數(shù)據(jù)庫(kù)結(jié)構(gòu)中代碼部分X和Y的行號(hào)或字符位置的特定位置不影響比較??梢粤私?,示例性代碼部分X和Y可為單一元素,或諸如多個(gè)數(shù)據(jù)定義部分、函數(shù)塊,或類結(jié)構(gòu)的多個(gè)元素。在各種實(shí)施例中,利用與Java編程語(yǔ)言結(jié)合提供的集合操作方法來(lái)執(zhí)行不對(duì)稱比較。但是可以理解,在不背離本發(fā)明的原則或范圍的前提下,可使用任何不對(duì)稱比較操作。
優(yōu)選地,比較器20將第一數(shù)據(jù)庫(kù)結(jié)構(gòu)中的每個(gè)代碼部分與第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中的每個(gè)代碼部分比較以確定各元素是否相同。因此,數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)每個(gè)元素的特定順序或位置不影響比較的結(jié)果,因?yàn)樵氐捻樞蛟跀?shù)據(jù)庫(kù)結(jié)構(gòu)的不對(duì)稱比較中沒(méi)有被用到。
在步驟108中,基于出現(xiàn)在一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中但不在另一個(gè)中的代碼部分識(shí)別出數(shù)據(jù)庫(kù)12、14之間的不相容性。出現(xiàn)在一個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)但不在另一個(gè)中的部分作為不相容性被存儲(chǔ)在比較文件22中。除了存儲(chǔ)所識(shí)別的不相容性之外,通過(guò)指明每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)所缺少的各個(gè)元素或代碼部分,比較文件22還提供每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的特定不相容性。例如,如果第一數(shù)據(jù)庫(kù)包含代碼部分A而第二數(shù)據(jù)庫(kù)缺少代碼部分A,則比較文件22會(huì)指明代碼部分A為第二數(shù)據(jù)庫(kù)的不相容性。類似地,如果比較多于兩個(gè)的數(shù)據(jù)庫(kù)結(jié)構(gòu)或多于兩個(gè)的數(shù)據(jù)庫(kù),每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的特定的不相容性也被提供。
步驟110中,基于所識(shí)別的不相容性確定每個(gè)數(shù)據(jù)庫(kù)12、14的相容性。當(dāng)數(shù)據(jù)庫(kù)12包含具有代碼部分的數(shù)據(jù)庫(kù)結(jié)構(gòu)并且該代碼部分同樣包含在數(shù)據(jù)庫(kù)14中時(shí),數(shù)據(jù)庫(kù)12與數(shù)據(jù)庫(kù)14相容,反之亦然。每個(gè)數(shù)據(jù)庫(kù)12、14的向前和向后相容性取決于數(shù)據(jù)庫(kù)12、14的序列。例如,如果數(shù)據(jù)庫(kù)12包含出現(xiàn)在數(shù)據(jù)庫(kù)14中的每個(gè)代碼部分,則數(shù)據(jù)庫(kù)12向后相容數(shù)據(jù)庫(kù)14,而數(shù)據(jù)庫(kù)14向前相容數(shù)據(jù)庫(kù)12。在多個(gè)數(shù)據(jù)庫(kù)比較的情況下,可基于每個(gè)數(shù)據(jù)庫(kù)的各種不相容性建立向前和向后相容性的類似層次結(jié)構(gòu)。
存儲(chǔ)在比較文件22內(nèi)的所識(shí)別的不相容性可被排序或分類,使得用戶或其它計(jì)算機(jī)程序可容易地確定所比較的數(shù)據(jù)庫(kù)結(jié)構(gòu)的向前和向后相容性。例如,通過(guò)指明每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)的公共和獨(dú)特的數(shù)據(jù)庫(kù)結(jié)構(gòu)或代碼部分,表或網(wǎng)格可按計(jì)算機(jī)可讀格式被安裝并存儲(chǔ)以說(shuō)明每個(gè)比較的數(shù)據(jù)庫(kù)的向前和向后相容性。
比較文件22也可被用來(lái)修改不相容數(shù)據(jù)庫(kù)結(jié)構(gòu),使得不相容的數(shù)據(jù)庫(kù)結(jié)構(gòu)與期望的數(shù)據(jù)庫(kù)正常運(yùn)行。例如,如果升級(jí)的數(shù)據(jù)庫(kù)版本要取代先前的數(shù)據(jù)庫(kù)版本,但是升級(jí)的數(shù)據(jù)庫(kù)版本在其結(jié)構(gòu)內(nèi)缺少代碼部分A,則比較文件22會(huì)這樣指明并且代碼部分A可被容易地添加到升級(jí)的數(shù)據(jù)庫(kù)版本中,使得在先前的數(shù)據(jù)庫(kù)版本下運(yùn)行的數(shù)據(jù)庫(kù)或應(yīng)用可以在升級(jí)的數(shù)據(jù)庫(kù)版本下運(yùn)行。
雖然本發(fā)明是結(jié)合各種實(shí)施例描述的,但是不意味本發(fā)明局限于這樣的實(shí)施例。相反,本發(fā)明包含可被本領(lǐng)域技術(shù)人員理解的各種可選方式、修改和等同。
權(quán)利要求
1.一種用于比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的方法,該方法包括從第一信息庫(kù)提取第一數(shù)據(jù)庫(kù)結(jié)構(gòu);從第二信息庫(kù)提取第二數(shù)據(jù)庫(kù)結(jié)構(gòu);過(guò)濾第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu);不對(duì)稱地比較第一數(shù)據(jù)庫(kù)結(jié)構(gòu)與第二數(shù)據(jù)庫(kù)結(jié)構(gòu),從而導(dǎo)致不對(duì)稱比較;以及基于該不對(duì)稱比較,識(shí)別在第一信息庫(kù)和第二信息庫(kù)之間的相關(guān)不同。
2.根據(jù)權(quán)利要求1的方法,其中過(guò)濾第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)一步包括基于至少一個(gè)正則表達(dá)式反編譯與第一信息庫(kù)和第二信息庫(kù)相關(guān)的字節(jié)碼。
3.根據(jù)權(quán)利要求1的方法,其中過(guò)濾第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)進(jìn)一步包含提取對(duì)應(yīng)于第一信息庫(kù)的第一數(shù)據(jù)庫(kù)模式和對(duì)應(yīng)于第二信息庫(kù)的第二數(shù)據(jù)庫(kù)模式,以及基于至少一個(gè)正則表達(dá)式分析第一數(shù)據(jù)庫(kù)模式和第二數(shù)據(jù)庫(kù)模式。
4.根據(jù)權(quán)利要求1的方法,其中第一信息庫(kù)和第二信息庫(kù)為關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),并且第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含對(duì)應(yīng)于關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)數(shù)據(jù)庫(kù)結(jié)構(gòu)的數(shù)據(jù)定義。
5.根據(jù)權(quán)利要求1的方法,其中第一信息庫(kù)和第二信息庫(kù)為JAR,并且第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含API。
6.根據(jù)權(quán)利要求1的方法,其中過(guò)濾步驟進(jìn)一步包含從第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中消除結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)。
7.根據(jù)權(quán)利要求6的方法,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包括不相關(guān)部分。
8.根據(jù)權(quán)利要求1的方法,其中過(guò)濾步驟進(jìn)一步包括從第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中過(guò)濾出相關(guān)數(shù)據(jù)。
9.根據(jù)權(quán)利要求6的方法,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包括嵌入的空白,動(dòng)態(tài)數(shù)據(jù)庫(kù)信息,SQL序列號(hào),用戶定義的表引用,以及用戶定義的索引引用。
10.根據(jù)權(quán)利要求6的方法,其中通過(guò)識(shí)別第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中的相關(guān)數(shù)據(jù)部分并且從第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中消除剩余的不相關(guān)數(shù)據(jù),從而消除結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)。
11.根據(jù)權(quán)利要求6的方法,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包含SQL語(yǔ)句,其包括函數(shù)、索引、表、觸發(fā)器、唯一索引,以及視圖元素。
12.根據(jù)權(quán)利要求6的方法,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包含Java方法、類構(gòu)造函數(shù)、參數(shù)、參數(shù)的順序、參數(shù)類型、利用Java方法處理的異常、返回值,以及Java方法的可訪問(wèn)性限定符。
13.根據(jù)權(quán)利要求6的方法,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)的定義是可定制的,以便用戶可指定正則表達(dá)式以在過(guò)濾步驟中使用。
14.根據(jù)權(quán)利要求1的方法,其中第一和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含至少一個(gè)相關(guān)數(shù)據(jù)部分。
15.根據(jù)權(quán)利要求14的方法,其中不對(duì)稱比較包含比較第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)的相關(guān)數(shù)據(jù)部分。
16.根據(jù)權(quán)利要求15的方法,其中在第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的相關(guān)數(shù)據(jù)部分的位置不導(dǎo)致不對(duì)稱比較中相關(guān)差異的識(shí)別。
17.根據(jù)權(quán)利要求15的方法,進(jìn)一步包括基于比較的相關(guān)數(shù)據(jù)部分確定第一信息庫(kù)和第二信息庫(kù)的向前和向后相容性。
18.一種用于比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的方法,該方法包括從第一關(guān)系數(shù)據(jù)庫(kù)中提取第一模式,第一模式包括第一多個(gè)相關(guān)部分;從第二關(guān)系數(shù)據(jù)庫(kù)中提取第二模式,第二模式包括第二多個(gè)相關(guān)部分;通過(guò)識(shí)別第一模式和第二模式中的相關(guān)部分并且拋棄任何不相關(guān)部分,從第一模式和從第二模式中過(guò)濾相關(guān)數(shù)據(jù);不對(duì)稱地比較第一模式和第二模式的所識(shí)別的相關(guān)部分,以識(shí)別包含在第一模式和第二模式的一個(gè)中但不在另一個(gè)中的相關(guān)差異,其中,在第一模式和在第二模式中相關(guān)部分的位置不影響不對(duì)稱比較的結(jié)果;基于不對(duì)稱比較,識(shí)別第一關(guān)系數(shù)據(jù)庫(kù)和第二關(guān)系數(shù)據(jù)庫(kù)之間的任何不相容性;以及基于任何所識(shí)別的不相容性,確定第一關(guān)系數(shù)據(jù)庫(kù)和第二關(guān)系數(shù)據(jù)庫(kù)的向前和向后相容性。
19.根據(jù)權(quán)利要求18的方法,其中相關(guān)部分包含與存儲(chǔ)過(guò)程、索引、表、觸發(fā)器、唯一索引和視圖相對(duì)應(yīng)的SQL語(yǔ)句。
20.根據(jù)權(quán)利要求18的方法,其中不相關(guān)部分包括嵌入的空白,動(dòng)態(tài)數(shù)據(jù)庫(kù)信息,SQL序列號(hào),用戶定義的表引用,以及用戶定義的索引引用。
21.根據(jù)權(quán)利要求18的方法,其中可利用至少一個(gè)正則表達(dá)式來(lái)定制相關(guān)部分的描述。
22.根據(jù)權(quán)利要求18的方法,進(jìn)一步包括以計(jì)算機(jī)可讀格式存儲(chǔ)所識(shí)別的不相容性。
23.根據(jù)權(quán)利要求18的方法,進(jìn)一步包括以計(jì)算機(jī)可讀格式呈現(xiàn)第一和第二關(guān)系數(shù)據(jù)庫(kù)的所確定的向前和向后相容性。
24.一種用于比較字節(jié)碼庫(kù)的方法,該方法包括基于要提取對(duì)象的描述,從第一字節(jié)碼庫(kù)中反編譯并過(guò)濾第一對(duì)象集;基于要提取對(duì)象的描述,從第二字節(jié)碼庫(kù)中反編譯并過(guò)濾第二對(duì)象集;基于第一對(duì)象集,形成第一對(duì)象表征符集;基于第二對(duì)象集,形成第二對(duì)象表征符集;不對(duì)稱地比較第一對(duì)象表征符集和第二對(duì)象表征符集,以識(shí)別第一對(duì)象集和第二對(duì)象集之間的相關(guān)差異;以及基于不對(duì)稱比較,識(shí)別第一字節(jié)碼庫(kù)和第二字節(jié)碼庫(kù)之間的任何不相容性。
25.根據(jù)權(quán)利要求24的方法,其中要提取對(duì)象的描述包含正則表達(dá)式。
26.根據(jù)權(quán)利要求24的方法,進(jìn)一步包括基于任何所識(shí)別的不相容性,確定第一字節(jié)碼庫(kù)和第二字節(jié)碼庫(kù)的向前和向后相容性。
27.根據(jù)權(quán)利要求24的方法,其中第一對(duì)象表征符集和第二對(duì)象表征符集分別反映關(guān)于第一對(duì)象集和第二對(duì)象集的表征信息,表征信息包括方法名、類構(gòu)造函數(shù)名、參數(shù)編號(hào)、參數(shù)的順序、參數(shù)類型、用具體方法處理的異常、返回值,以及方法的可訪問(wèn)性限定符。
28.根據(jù)權(quán)利要求24的方法,進(jìn)一步包含按計(jì)算機(jī)可讀格式存儲(chǔ)所識(shí)別的不相容性。
29.根據(jù)權(quán)利要求24的方法,進(jìn)一步包括按計(jì)算機(jī)可讀格式提供所確定的向前和向后相容性。
30.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其包含用于具有用戶接口的通用計(jì)算機(jī)的指令集,該指令集包含在操作時(shí)與用戶接口相關(guān)聯(lián)的控制例程,該控制例程提供用于比較信息庫(kù)的控制操作;在操作時(shí)與控制例程相關(guān)聯(lián)的第一提取例程,該第一提取例程提供從第一信息庫(kù)中第一數(shù)據(jù)庫(kù)結(jié)構(gòu)的提??;在操作時(shí)與控制例程相關(guān)聯(lián)的第二提取例程,該第二提取例程提供從第二信息庫(kù)中第二數(shù)據(jù)庫(kù)結(jié)構(gòu)的提??;在操作時(shí)與用戶接口相關(guān)聯(lián)的過(guò)濾例程,第一提取例程和第二提取例程提供第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)的過(guò)濾;在操作時(shí)與過(guò)濾例程相關(guān)聯(lián)的不對(duì)稱比較例程,其提供第一數(shù)據(jù)庫(kù)結(jié)構(gòu)與第二數(shù)據(jù)庫(kù)結(jié)構(gòu)的不對(duì)稱比較;以及在操作時(shí)與不對(duì)稱比較例程相關(guān)聯(lián)的識(shí)別例程,其提供基于不對(duì)稱比較、在第一信息庫(kù)和第二信息庫(kù)之間的相關(guān)差異的識(shí)別。
31.根據(jù)權(quán)利要求30的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中過(guò)濾例程進(jìn)一步包括反編譯例程,其提供基于至少一個(gè)正則表達(dá)式、與第一信息庫(kù)和第二信息庫(kù)相關(guān)的字節(jié)碼的反編譯。
32.根據(jù)權(quán)利要求30的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中過(guò)濾例程進(jìn)一步包含提取和分析例程,其提供對(duì)應(yīng)于第一信息庫(kù)的第一數(shù)據(jù)庫(kù)模式的提取,及對(duì)應(yīng)于第二信息庫(kù)的第二數(shù)據(jù)庫(kù)模式的提取,并且基于至少一個(gè)正則表達(dá)式分析第一數(shù)據(jù)庫(kù)模式和第二數(shù)據(jù)庫(kù)模式。
33.根據(jù)權(quán)利要求30的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中第一信息庫(kù)和第二信息庫(kù)為關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),并且第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含對(duì)應(yīng)于關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)數(shù)據(jù)庫(kù)結(jié)構(gòu)的數(shù)據(jù)定義。
34.根據(jù)權(quán)利要求30的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中第一信息庫(kù)和第二信息庫(kù)為JAR,并且第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含API。
35.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其包含用于使通用計(jì)算機(jī)執(zhí)行數(shù)據(jù)庫(kù)比較的指令集,該通用計(jì)算機(jī)具有用戶接口,并且該指令集包括在操作中與用戶接口關(guān)聯(lián)的數(shù)據(jù)庫(kù)比較控制例程;在操作中與數(shù)據(jù)庫(kù)比較控制例程關(guān)聯(lián)的第一提取例程,其提供從第一關(guān)系數(shù)據(jù)庫(kù)中第一模式的提取,該第一模式包含第一多個(gè)相關(guān)部分;在操作中與數(shù)據(jù)庫(kù)比較控制例程關(guān)聯(lián)的第二提取例程,其提供從第二關(guān)系數(shù)據(jù)庫(kù)中第二模式的提取,該第二模式包含第二多個(gè)相關(guān)部分;在操作中與數(shù)據(jù)庫(kù)比較控制例程、第一提取例程及第二提取例程關(guān)聯(lián)的過(guò)濾例程,其通過(guò)識(shí)別第一模式和第二模式內(nèi)的相關(guān)部分并且忽略不相關(guān)部分來(lái)提供從第一模式和從第二模式中相關(guān)數(shù)據(jù)的過(guò)濾;在操作中與過(guò)濾例程關(guān)聯(lián)的不對(duì)稱比較例程,其提供第一模式和第二模式的所識(shí)別相關(guān)部分的不對(duì)稱比較,以識(shí)別僅包含在第一模式和第二模式中的一個(gè)內(nèi)的相關(guān)差異,其中,第一模式內(nèi)和第二模式內(nèi)相關(guān)部分的位置不影響不對(duì)稱比較的結(jié)果;以及在操作中與不對(duì)稱比較例程關(guān)聯(lián)的識(shí)別例程,其提供基于不對(duì)稱比較、在第一關(guān)系數(shù)據(jù)庫(kù)和第二關(guān)系數(shù)據(jù)庫(kù)之間的任何不相容性的識(shí)別。
36.根據(jù)權(quán)利要求35的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),進(jìn)一步包括在操作中與識(shí)別例程關(guān)聯(lián)的相容性確定例程,其提供基于來(lái)自識(shí)別例程的輸出、第一關(guān)系數(shù)據(jù)庫(kù)和第二關(guān)系數(shù)據(jù)庫(kù)的向前和向后相關(guān)性的確定。
37.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其包含用于使通用計(jì)算機(jī)執(zhí)行字節(jié)碼庫(kù)比較的指令集,該通用計(jì)算機(jī)具有用戶接口,并且該指令集包括在操作中與用戶接口關(guān)聯(lián)的字節(jié)碼庫(kù)比較控制例程,用于控制字節(jié)碼庫(kù)比較;在操作中與字節(jié)碼庫(kù)比較控制例程關(guān)聯(lián)的第一反編譯和過(guò)濾例程,其提供基于要提取自第一字節(jié)碼庫(kù)的對(duì)象的描述、對(duì)來(lái)自第一字節(jié)碼庫(kù)的第一對(duì)象集的反編譯和過(guò)濾;在操作中與字節(jié)碼庫(kù)比較控制例程關(guān)聯(lián)的第二反編譯和過(guò)濾例程,其提供基于要提取自第二字節(jié)碼庫(kù)的對(duì)象的描述,對(duì)來(lái)自第二字節(jié)碼庫(kù)的第二對(duì)象集的反編譯和過(guò)濾;表征例程,其提供基于第一對(duì)象集的第一對(duì)象表征符集的形成,并提供基于第二對(duì)象集的第二對(duì)象表征符集的形成;不對(duì)稱比較例程,其提供第一對(duì)象表征符集和第二對(duì)象表征符集的不對(duì)稱比較,以識(shí)別第一對(duì)象集和第二對(duì)象集之間的相關(guān)差異;以及識(shí)別例程,其提供基于不對(duì)稱比較、在第一字節(jié)碼庫(kù)和第二字節(jié)碼庫(kù)之間的任何不相容性的識(shí)別。
38.一種用于比較數(shù)據(jù)庫(kù)結(jié)構(gòu)的裝置,包括針對(duì)來(lái)自第一信息庫(kù)的第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和來(lái)自第二信息庫(kù)的第二數(shù)據(jù)庫(kù)結(jié)構(gòu)的提取裝置;用于過(guò)濾第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)的過(guò)濾器;和用于不對(duì)稱比較第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)以識(shí)別第一信息庫(kù)和第二信息庫(kù)之間相關(guān)差異的不對(duì)稱比較器。
39.根據(jù)權(quán)利要求38的裝置,其中過(guò)濾器進(jìn)一步包括用于基于至少一個(gè)正則表達(dá)式反編譯與第一信息庫(kù)和第二信息庫(kù)相關(guān)聯(lián)的字節(jié)碼的字節(jié)碼反編譯器。
40.根據(jù)權(quán)利要求38的裝置,其中過(guò)濾器進(jìn)一步包括用于提取與第一信息庫(kù)相對(duì)應(yīng)的第一數(shù)據(jù)庫(kù)模式和與第二信息庫(kù)相對(duì)應(yīng)的第二數(shù)據(jù)庫(kù)模式的模式提取器,以及用于基于至少一個(gè)正則表達(dá)式分析第一數(shù)據(jù)庫(kù)模式和第二數(shù)據(jù)庫(kù)模式的正則表達(dá)式分析器。
41.根據(jù)權(quán)利要求38的裝置,其中第一信息庫(kù)和第二信息庫(kù)為關(guān)系數(shù)據(jù)庫(kù)系統(tǒng),并且第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含對(duì)應(yīng)于關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)數(shù)據(jù)庫(kù)結(jié)構(gòu)的數(shù)據(jù)定義。
42.根據(jù)權(quán)利要求38的裝置,其中第一信息庫(kù)和第二信息庫(kù)為JAR,并且第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含API。
43.根據(jù)權(quán)利要求38的裝置,其中過(guò)濾器進(jìn)一步配置成從第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中消除結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)。
44.根據(jù)權(quán)利要求43的裝置,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包含不相關(guān)部分。
45.根據(jù)權(quán)利要求43的裝置,其中過(guò)濾步驟進(jìn)一步包含從第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中過(guò)濾出相關(guān)數(shù)據(jù)。
46.根據(jù)權(quán)利要求43的裝置,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包括嵌入的空白,動(dòng)態(tài)數(shù)據(jù)庫(kù)信息,SQL序列號(hào),用戶定義的表引用,以及用戶定義的索引引用。
47.根據(jù)權(quán)利要求38的裝置,其中過(guò)濾器進(jìn)一步被配置成通過(guò)識(shí)別第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的相關(guān)數(shù)據(jù)部分,并且從第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)中消除剩余的不相關(guān)數(shù)據(jù)部分,以消除結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)。
48.根據(jù)權(quán)利要求38的裝置,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包含SQL語(yǔ)句,其包括函數(shù)、索引、表、觸發(fā)器、唯一索引和視圖元素。
49.根據(jù)權(quán)利要求38的裝置,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)包括Java方法、類構(gòu)造函數(shù)、參數(shù)、參數(shù)順序、參數(shù)類型、由Java方法處理的異常、返回值,以及Java方法的可訪問(wèn)性限定符。
50.根據(jù)權(quán)利要求38的裝置,其中結(jié)構(gòu)無(wú)關(guān)數(shù)據(jù)的定義是可定制的,以便用戶可指定正則表達(dá)式以在過(guò)濾步驟中使用。
51.根據(jù)權(quán)利要求38的裝置,其中第一和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)包含至少一個(gè)相關(guān)數(shù)據(jù)部分。
52.根據(jù)權(quán)利要求51的裝置,其中不對(duì)稱比較器被進(jìn)一步配置成比較第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)的相關(guān)數(shù)據(jù)部分。
53.根據(jù)權(quán)利要求52的裝置,其中第一數(shù)據(jù)庫(kù)結(jié)構(gòu)和第二數(shù)據(jù)庫(kù)結(jié)構(gòu)內(nèi)的相關(guān)數(shù)據(jù)部分的位置不導(dǎo)致在不對(duì)稱比較中相關(guān)差異的識(shí)別。
54.根據(jù)權(quán)利要求52的裝置,其中基于所比較的相關(guān)數(shù)據(jù)部分,不對(duì)稱確定第一信息庫(kù)和第二信息庫(kù)的向前和向后相容性。
全文摘要
揭示了用于比較諸如數(shù)據(jù)庫(kù)模式的數(shù)據(jù)庫(kù)結(jié)構(gòu)的方法、裝置和計(jì)算機(jī)例程以及應(yīng)用程序接口的描述。該方法涉及通過(guò)從第一信息庫(kù)提取第一數(shù)據(jù)庫(kù)結(jié)構(gòu),從第二信息庫(kù)中提取第二數(shù)據(jù)庫(kù)結(jié)構(gòu),從每個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu)中過(guò)濾相關(guān)部分,不對(duì)稱地比較相關(guān)部分,以及識(shí)別數(shù)據(jù)庫(kù)模式或字節(jié)碼庫(kù)之間的任何不相關(guān)性,從而識(shí)別諸如關(guān)系數(shù)據(jù)庫(kù)和字節(jié)碼庫(kù)的信息庫(kù)之間的不相容性。
文檔編號(hào)G06F17/30GK1749996SQ200510099940
公開(kāi)日2006年3月22日 申請(qǐng)日期2005年9月13日 優(yōu)先權(quán)日2004年9月16日
發(fā)明者拉維·???申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司