首页> 中国专利> 用于数据库结构比较的方法、装置和计算机程序

用于数据库结构比较的方法、装置和计算机程序

摘要

揭示了用于比较诸如数据库模式的数据库结构的方法、装置和计算机例程以及应用程序接口的描述。该方法涉及通过从第一信息库提取第一数据库结构,从第二信息库中提取第二数据库结构,从每个数据库结构中过滤相关部分,不对称地比较相关部分,以及识别数据库模式或字节码库之间的任何不相关性,从而识别诸如关系数据库和字节码库的信息库之间的不相容性。

著录项

  • 公开/公告号CN1749996A

    专利类型发明专利

  • 公开/公告日2006-03-22

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN200510099940.1

  • 发明设计人 拉维·希卡尔;

    申请日2005-09-13

  • 分类号

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人李德山

  • 地址 美国纽约

  • 入库时间 2023-12-17 17:03:48

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-11-09

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20090930 终止日期:20150913 申请日:20050913

    专利权的终止

  • 2009-09-30

    授权

    授权

  • 2006-05-17

    实质审查的生效

    实质审查的生效

  • 2006-03-22

    公开

    公开

说明书

技术领域

本发明涉及用于比较数据库模式以及/或比较字节码库或仓库的方法和装置。

背景技术

目前,计算机实现的数据库及应用程序接口(“API”)的使用是诸如关系数据库和程序代码库的各种类型信息的档案及使用的基础。为关系数据库和API提供数据定义的数据结构在这里通常被称为“数据库结构”,并且包括但不限于用于例如关系数据库和诸如Java档案数据库(“JAR”)的API的数据库模式的数据描述。由于它们的普遍存在,数据库结构包含广泛的软件包的基本元素,并且在编译、编目、分类和检索信息的许多方面均是有用的,并且用于控制程序执行的各方面。然而,升级的数据库结构的使用通常受限于升级或改变数据库结构或软件设计时遇到的问题。特别地,在原始的数据库结构下正确运行的功能完备的数据库系统或其他应用,由于数据库结构内的改变而通常不能在升级的数据库结构下运行。相似地,由于数据库结构的设计内的改变,依赖原始数据库结构的功能或操作支持的软件或应用通常不能在升级的数据库结构下正确运行。更进一步,当升级的数据包括例如JAR的字节码库时,升级的JAR中的不相容性可以引起已有应用中的操作问题。因此,每当原始数据库结构升级时,就存在原始数据库结构下工作的数据库或应用将不能在升级的数据库结构下正确运行的风险。

例如,如果一个DB2数据库在第一数据库定义集下正确地运行,那么如果该DB2数据库升级为使用与第一定义集在某些方面不同的升级定义集,则该DB2也许根本不能运行。

当升级包含多个API的JAR时,存在相似的问题。特别地,一个应用可在利用第一API集的第一JAR下正确运行,但是在利用与第一集某些方面不同(例如通过改变类构造函数,或包括诸如参数的数量和顺序的方法特征信息)的第二API集的第二JAR下根本不运行。

已知有用来比较数据库结构的现存方法,包括数据库模式、JAR、API和其他数据结构,但是这些常规方法缺少明确地识别两个数据库结构之间的重要差异的能力。例如,一种常规方法可识别出两个数据库模式是不同的,但是不能识别它们是如何不同,以使一个数据库可相应地被改变来运行。通过另一个例子,已知的方法涉及完全反编译两个JAR并比较两个反编译的输出。然而,这样的比较不能提供关于两个JAR之间的相关差异的有用信息。因此,已知的数据库结构比较方法不能识别在具体应用中两个数据库结构的向前和向后相容性。

另外,已知的方法缺少精确比较手段,并且基于不准确的比较,经常不准确地产生多个不存在的不相容性。例如,已知的数据库结构比较方法利用标准的对称比较,该方法逐字符或逐行地比较两个数据库结构的字符,以确定两个结构是否相同。因此,两个数据库结构可就其功能是完全一致的,但是如果一个数据库包含额外的嵌入空白,或不依赖于数据库结构并且与数据库结构无关的任何其它元素,则常规比较方法会认为两个数据库结构是不同的。类似地,通过包含相同部分,两个数据库结构可在功能上是相等的,但是如果各部分在每个数据库结构中被安置在不同位置,则常规比较方法会认为两个数据库结构是不同的。

发明内容

在各种实施例中,本发明提供了能够识别两个数据库之间的结构差异的方法和计算机结构。

在各种实施例中,本发明提供了通过仅比较数据库结构的相关部分从而能够准确地比较两个数据库结构的方法和计算机结构。

在各种实施例中,本发明提供了能够比较两个数据库结构,使得每个数据库结构内各段的位置不影响比较结果的方法和计算机结构。

应该理解,上面所列的优点不必全部由此处所要求保护的发明来实现。通过最优实施例的详细说明、权利要求书以及附图将能够明白本发明的更多的优点。

相应地,在各种实施例中,提供了用来比较数据库结构的方法。数据库比较方法包括从第一信息库中提取第一数据库结构,从第二信息库中提取第二数据库结构,从每个数据库结构中过滤结构无关数据,不对称地比较第一数据库结构和第二数据库结构,以及基于比较,识别第一信息库和第二信息库之间的不相容性。

在各种实施例中,提供了一种用于比较数据库结构的方法。该方法涉及从包含第一多个相关部分的第一关系数据库中提取第一模式。接着,从包含第二多个相关部分的第二关系数据库中提取第二模式。然后通过识别第一和第二模式中的相关部分并忽略不相关部分,来自第一和第二模式的相关数据被过滤。接着,不对称地比较第一和第二模式的所识别的相关部分以识别包括在一个模式内但不包括在另一个模式内的相关差异,其中,第一和第二模式中相关部分的位置不影响不对称比较的结果。更进一步地,基于该不对称比较,第一和第二关系数据库之间的任何不相容性被识别出,并且基于任何所识别的不相容性,确定第一和第二关系数据库的向前和向后相容性。

在各种实施例中,提供了一种用于比较字节码库的方法。该方法涉及基于要提取对象的描述,反编译及过滤来自第一字节码库的第一对象集,以及基于要提取对象的描述,反编译及过滤来自第二字节码库的第二对象集。然后基于第一对象集,形成第一对象表征符(objectcharacterizer)集。接着,基于第二对象集,形成第二对象表征符集。更进一步地,不对称地比较第一和第二对象表征符集来识别第一和第二对象集之间的相关差异,并且基于该不对称比较,识别第一和第二字节码库之间的任何不相容性。

可以理解,前面的概述以及后续的不同实施例的描述两者都仅是示范性和说明性的,并不限制该要求保护的发明。结合并组成该说明一部分的附图图示了一些实施例,并与描述一起用来解释此处所描述的实施例的原理。

附图说明

技术人员将理解下面所述的附图仅是为说明的目的。附图不旨在在任何方面限制本发明的范围。

图1是图示了用于比较第一数据库或字节码档案与第二数据库或字节码档案的示例性方法的流程图;

图2是图示了用于根据本发明比较数据库结构的计算机结构的方框图。

具体实施方式

现在具体参照附图中所图示的一些实施例和例子。只要可能,全部附图使用相同的附图标记来表示相同或同类部分。

首先参见图1,本发明涉及用来比较数据库结构的计算机实现的方法。图1中的步骤100-110概述了一个示范的计算机实现的比较模式。此处所描述的该方法可被编程并存储在由诸如个人计算机或计算机网络的标准计算设备可读的设备上。适合的程序存储设备包括,例如,CD、DVD、内部计算机硬盘驱动器、以及外部网络硬盘驱动器。类似地,此处所描述的方法可由标准计算设备执行或由计算网络上驻留的多个计算设备分别执行。

图2图解了用于本发明的一个示范的计算机结构。该计算机结构广泛地包括数据库比较模块10,为比较和识别每个数据库或字节码库12、14之间结构上的不同,其可操作以访问第一数据库或字节码库12以及第二数据库或字节码库14。数据库比较模块10通过常规手段,例如通过访问本地或远程存储的信息,可访问数据库或字节码库12、14。数据库比较模块10包括过滤器模块16,其利用过滤器参数集18过滤来自数据库或字节码库12、14的信息。在各种实施例中,过滤器参数18包含正则表达式。在各种实施例中,过滤器16包括可以将层次关系数据库模式提取成基本上扁平的格式的模式提取器和正则表达式分析器,例如提取成数据库模式的结构化查询语言定义的ASCII表示,包括可以从一般的或无关部分中分离出SQL定义的相关部分的正则表达式分析器。在各种实施例中,过滤器模块16包含字节码反编译器,最好是基于正则表达式的反编译器,其可以从字节码库中只提取那些匹配例如一个特定的正则表达式或正则表达式集的对象。

比较模块10包括不对称比较器20,用来比较过滤的数据库或字节码库12、14,以及识别数据库或字节码库之间结构上的不同。比较模块10将所识别的差异或不相容性存储在一个计算机可读的比较输出22中。在各种实施例中,比较模块10执行两个数据库模式的相关部分的不对称比较。在其他各种实施例中,比较模块执行涉及字节码库中不同对象的对象表征符的不对称比较。此处所使用的“对象表征符”通常是指一个对象的特征描述,用于诸如识别API相容性的目的。“对象表征符”包括但不限于对象方法的名称、方法的参数的数量、顺序及类型、异常转移、返回值类型、对象方法的方法可访问性的ASCII表示。

在各种实施例中,比较输出为一个比较文件。可以理解,比较输出22可用包括如ASCII格式文本文件的若干种方法来实现。下面更详细地描述比较模块10的更详细操作。可以理解,在不背离本发明的精神和范围的前提下,此处所描述的方法和结构可由计算机程序,而不是示范的数据库比较模块10来完成。

返回到图1,在步骤100和102中,数据库比较模块10通过任何方便的手段访问数据库或代码库12、14,并且从第一数据库或字节码库12中提取第一数据库结构,及从第二数据库或字节码库14中提取第二数据库结构。数据库结构可从现存的诸如数据库或代码库12、14的数据库中提取,或者,可以另外例如通过访问不是从数据库提取的已存储的数据库结构来提供数据库结构。每个数据库结构包括多个数据定义或代码部分,其以诸如SQL或Java表示的任何方便格式描述或定义了数据库结构的功能或操作。在一个实施例中,数据库或字节码库12、14为DB2数据库,并且数据库结构为以SQL表示的数据定义语言(DDL)。在第二实施例中,数据库或字节码库12、14为JAR,并且数据库结构为Java语言表示的API。

DB2是由IBM公司提供的数据库管理系统。DB2数据库通常根据DDL来构造,DDL可以使数据库的结构和实例按人和机器可读的形式来定义。本发明所利用的DB2数据库可包含单一DDL或多个DDL。DDL包括允许表和相关元素的定义的多个数据定义,还包含利于数据的存储、检索、比较及排序的SQL关键字。然而,本发明可用于任何类型数据库,包括非常规的DDL或SQL数据库结构,并且不限于此处所描述的数据库结构。

JAR是包括至少一个API的库,应用该API可开发出各种的应用程序。例如,一个程序员通过应用具体的API中或在具体JAR中所提供的多个API中所提供函数可开发出应用程序。与本发明结合使用的JAR可包括单一API或多个API。更进一步,每个API包括能实现期望的功能的多个对象。由给定的API或JAR所提供的特定Java或应用功能不限制本发明的范围。另外,本发明可与任何类型编程语言或API一起使用,并且不限于此处所描述的常规或标准化格式。

在各种实施例中,例如,就JAR而言,最好利用关系数据库模式提取器(就关系数据库数据库而言)及反编译器从数据库或字节码库12、14中提取数据库结构。可以理解,在不偏离本发明的范围的前提下,可使用其他的数据库提取器,例如,用于编译型C#的反编译器。可以理解,不同的计算机实现工具可以用来从DB2数据库提取DDL,例如,来自IBM公司的DB2LOOK。此外,反编译器可以用来从JAR中提取特定的API和相关的对象。在不同的实施例中,所提取的数据库结构按计算机可读格式存储,使得它们可以如下面所描述的被比较模块10访问。

步骤104中,所提取的数据库结构被过滤器模块16过滤。特别地,通过识别数据库结构内的相关数据定义或代码部分及从数据库结构中消除一般(generic)部分,结构无关数据被从每个数据库结构中过滤。此处所定义的“结构无关数据”为包含在数据库结构内的数据,其与数据库的结构无关,或与该数据库结构相应的数据库的向前和向后兼容性无关。可以理解,数据库结构通常包含结构无关数据来执行不涉及数据库结构的不同功能,例如,包括描述数据库结构的功能的注释的API非特定部分、仅与特定并唯一的数据库实现有关的用户特定信息、仅涉及特定数据库当前状态的动态信息等。

可以期望从所提取的数据库结构中过滤或消除结构无关数据来提供数据库或字节码库12、14的更准确的比较,因为即使数据库结构在功能上是相等的,结构无关数据通常在数据库之间变化。例如,包含用户特定信息和动态信息的代码部分对于特定数据库结构通常是特定的,并且如果应用于另一个功能相等的数据库结构,会产生不同。因此,从所提取的数据库结构中过滤结构无关数据允许准确确定所提取的数据库结构的功能等效性。

根据过滤器参数18过滤数据库结构。在各种实施例中,过滤器参数18为正则表达式,利用其来分析数据库模式的重要部分,或在API比较的情况下,用于利用反编译器从字节码档案中仅提取相关对象。过滤器参数18被用来识别出现在每个数据库结构中的相关部分。相关部分的识别利于进行比较,例如,正则表达式使得发明的比较工具更加灵活。因此,本发明可用于多个信息库和数据库结构,而不用花费必需的时间和精力来为每个特定数据库结构生成定制的过滤器。

过滤器参数18可由比较模块10自动提供,或可由模块10的用户提供及定制。优选地,过滤器参数18基于包含在数据库12、14内的数据的性质,并且在完成比较以使过滤器参数18最优化之后,可由比较模块10或用户动态地定制,使得最大量的结构无关数据被从每个数据库结构中消除。例如,如果比较的结果不是期望的,例如,如果比较表明不相容性的量超出合理的程度,那么过滤器参数可被动态地定制以过滤每个数据库结构中的附加信息,从而将不相容性的量减少到一个合理量。

在涉及与关系数据库相关的数据库结构的各种实施例中,优选地,过滤器参数18指示过滤器16识别具有每个DDL的相关的数据定义部分,从而忽略例如无关数据定义部分。相关数据定义部分可包含DDL模式,其特定于具体的应用,而不是特定于例如用户定制。因此,相关数据定义部分可包含所利用的包括函数、索引、表、触发器、唯一索引、以及视图元素的DDL模式。基于在DDL中所利用的具体代码部分,相关部分可包含其他的或附加的数据定义部分。

在涉及与字节码库相关的数据库结构的各种实施例中,优选地,过滤器参数18指示可被实现为选择性的、基于正则表达式的字节码反编译器的过滤器16识别并提取每个API内的相关部分。在各种实施例中,基于正则表达式的字节码反编译器接收至少一个正则表达式,其中基于该表达式从字节码库反编译出匹配对象。在各种实施例中,使用正则表达式以避免字节码库的不相关部分的不必要的反编译。在各种实施例中,不相关部分包括:例如,(i)反编译的方法及/或函数中的实际语义;(ii)私有方法的API特征(例如,参数的数量、顺序、以及类型);(iii)嵌入的实用类;(iv)以及私有数据成员。

在各种实施例中,相关部分通常包括涉及API公共方面的功能的Java元素。在各种实施例中,相关代码部分一般包括Java方法、构造函数、参数、参数顺序、参数类型、由方法处理的异常、返回值,以及方法的可访问性限定符。基于每个API内所利用的具体代码部分,相关部分可另外包括其他的或附加的Java特征。在各种实施例中,之后相关部分被提取成对象表征符。在各种实施例中,对象表征符对应于与方法相应的单行ASCII表示,包括参数数量、参数顺序、参数类型、异常转移、返回值类型,以及方法的可访问性的方法特征。

过滤器模块16识别并过滤出已被识别为相关的数据库结构的部分。未识别的部分与数据库12、14的向前和向后相容性不相关。

在涉及数据库模式的各种实施例中,不相关的部分可包含嵌入的空白、动态数据库信息、SQL序列号、用户定义的表引用,以及用户定义的索引引用。在涉及字节码库的比较的其他各种实施例中,不相关部分可包含私有函数,或被用来当做私有函数操作的公共函数,其在API中通常不被一般公共函数利用或访问。然而,可以理解,不相关部分可包含决定于过滤器参数18和相关代码部分的任何特征或特征的组合。

所识别的结构无关数据可或者从提取的数据库结构中消除或者被屏蔽,使得如下面所述所识别的结构无关数据在比较中不被利用。因此,过滤器模块16从每个数据结构中可过滤结构无关数据以满足具体用户或数据库的需要,例如,屏蔽结构无关数据以保存数据库或结构的原始结构,或者当数据库原始结构不重要时删除结构无关数据。

在步骤106中,利用不对称比较器20比较过滤出的数据来识别数据库结构之间的功能差异。特别地,比较过滤数据的每个部分来识别出现在一个所过滤的数据库结构中但不在另一个中的代码部分。不包含相同部分的所过滤的数据库结构是不相容的。另外,如果数据库12、14包含多于两个的数据库结构,附加的数据库结构可用如下所描述的相同的方式来比较。因此,本发明可比较涉及两个或更多的数据库的两个或更多的数据库结构,并确定每个数据库结构的不相容性以及每个数据库的向前和向后相容性。

不对称比较器20不同于常规的计算机辅助比较方法,例如,Unix工具diff和comp,以及Windows工具fc和WINDIFF的地方在于,每个数据库结构内的代码部分的特定位置不影响不对称比较,但是会影响常规的比较。例如,利用常规的比较方法,如果第一数据库结构在行1包含代码部分A,而第二数据库结构在行2包含代码部分A,代码部分A将被常规的比较方法识别为第一和第二数据库结构之间的结构差异,即使代码部分A为两个结构所共用并且两个结构在功能上是相等的。与此相反,不对称比较,例如比较器20所利用的比较,不会将代码部分A识别为数据库结构之间的差异,并且会将两个数据库识别为功能上相等。

不对称比较利用元素,例如一个数据库结构内的元素之间的关系,来确定两个元素是否相等。与此相反,常规比较方法仅仅逐行或逐字节地比较两个数据库结构来确定结构的不同之处。例如,在不对称比较中,如果第一数据库结构包含部分X,而第二数据库结构包含代码部分Y,不考虑X和Y在数据库结构中的位置,如果X(R)Y并且Y(R)X,其中(R)是一种诸如大于、小于等的关系,则X等于Y。因此,诸如数据库结构中代码部分X和Y的行号或字符位置的特定位置不影响比较。可以了解,示例性代码部分X和Y可为单一元素,或诸如多个数据定义部分、函数块,或类结构的多个元素。在各种实施例中,利用与Java编程语言结合提供的集合操作方法来执行不对称比较。但是可以理解,在不背离本发明的原则或范围的前提下,可使用任何不对称比较操作。

优选地,比较器20将第一数据库结构中的每个代码部分与第二数据库结构中的每个代码部分比较以确定各元素是否相同。因此,数据库结构内每个元素的特定顺序或位置不影响比较的结果,因为元素的顺序在数据库结构的不对称比较中没有被用到。

在步骤108中,基于出现在一个数据库结构中但不在另一个中的代码部分识别出数据库12、14之间的不相容性。出现在一个数据库结构但不在另一个中的部分作为不相容性被存储在比较文件22中。除了存储所识别的不相容性之外,通过指明每个数据库结构所缺少的各个元素或代码部分,比较文件22还提供每个数据库结构的特定不相容性。例如,如果第一数据库包含代码部分A而第二数据库缺少代码部分A,则比较文件22会指明代码部分A为第二数据库的不相容性。类似地,如果比较多于两个的数据库结构或多于两个的数据库,每个数据库结构的特定的不相容性也被提供。

步骤110中,基于所识别的不相容性确定每个数据库12、14的相容性。当数据库12包含具有代码部分的数据库结构并且该代码部分同样包含在数据库14中时,数据库12与数据库14相容,反之亦然。每个数据库12、14的向前和向后相容性取决于数据库12、14的序列。例如,如果数据库12包含出现在数据库14中的每个代码部分,则数据库12向后相容数据库14,而数据库14向前相容数据库12。在多个数据库比较的情况下,可基于每个数据库的各种不相容性建立向前和向后相容性的类似层次结构。

存储在比较文件22内的所识别的不相容性可被排序或分类,使得用户或其它计算机程序可容易地确定所比较的数据库结构的向前和向后相容性。例如,通过指明每个数据库结构的公共和独特的数据库结构或代码部分,表或网格可按计算机可读格式被安装并存储以说明每个比较的数据库的向前和向后相容性。

比较文件22也可被用来修改不相容数据库结构,使得不相容的数据库结构与期望的数据库正常运行。例如,如果升级的数据库版本要取代先前的数据库版本,但是升级的数据库版本在其结构内缺少代码部分A,则比较文件22会这样指明并且代码部分A可被容易地添加到升级的数据库版本中,使得在先前的数据库版本下运行的数据库或应用可以在升级的数据库版本下运行。

虽然本发明是结合各种实施例描述的,但是不意味本发明局限于这样的实施例。相反,本发明包含可被本领域技术人员理解的各种可选方式、修改和等同。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号