一种基于协议的数据库功能改变的方法和装置的制作方法

文档序号:6412943阅读:169来源:国知局
专利名称:一种基于协议的数据库功能改变的方法和装置的制作方法
技术领域
本发明涉及处理字段的数据库,更具体地说,本发明涉及有选择地改变一个现有数据库的模式为一个新数据库的方法。
数据库或计算机档案是一种可以存储、读取、修改和删除数据的信息库。数据库由一个或多个由一个模式说明的记录组成。模式说明数据库的逻辑和物理方面,并由一些条目或者登录项组成。每一个这样的条目包括一个或者多个字段、头标,它们表达在各个记录的相应字段中存储的信息类型等。限制字段大小的规则以及基本键字和外部键字关系也存储在模式中。
在一个常规的数据库系统中,既可能改变模式自身也可能改变限制规则。这些数据库系统常常借助于标准数据库语言-结构化英语查询语言(SQL)-构建和管理。SQL不是完全的编程语言,而用作Pascal,C++等的补充。
因此SQL在处理一个数据库时可以定义例如前面所述的模式和限制规则等数据结构,同时也能定义存取方法。存取一词指读取、存储、改变、删除数据等操作的措施。这些措施或者动作是正常数据库操作步骤的一部分。标准SQL包括实现一组操作的可能性,例如取所有变量的一个字段的和或者一个字段的最小值、最大值。在一些情况下,有必要在由SQL提供的限制之外实现一种改变,要求数据库临时关闭,或者换句话说,置于一种被动方式下。改变进行中不允许存取,因为数据库必须处于一个稳定状态。


图1以例子表示通常所知的数据库系统100是如何实现功能改变的。虽然在图中未示出,但是其中包括一个计算机系统,例如个人计算机PC、主计算机或者电话站。图1a中原理示出的已知数据库系统100以下述方式实现一种功能改变一个现有的(老的)数据库102暂时与一个应用系统106配合。应用系统106包括一个应用程序,借助于该应用程序从老数据库102中读入数据。然后由一个变换程序修改数据,其中数据可以被增加、或删除,并写到一个新的数据库104。这是根据在图1b中说明的一个已知的协议110进行的,它分为一个初始化阶段112和一个工作阶段114。
初始化阶段112包括新数据库104的规范说明和对新数据库104的数据的说明。数据库的规范说明确定新数据库104看起来应该是什么样子,亦即新数据库104的结构、数据类型及用途。在声明中确定变换的指令,亦即怎样从老数据库102变换数据到新数据库104的规则。应用程序也在这一阶段书写。该程序例如以SQL和一种有值的语言书写。应用程序把实际变换付诸实现,这在一定情况下可能十分复杂,特别当在一个包含许多记录的大数据库中实现这种功能改变时。
当数据库100处于被动方式时执行工作阶段114,它包括下述部分或者说子阶段从老数据库102中读取数据,变换、验证和插入。这些部分也在图1a中用罗马数字Ⅰ-Ⅲ表示。Ⅰ表示读出数据,从现有数据库102中把一个变量读到应用系统106中的应用程序中。这用命令SQL OPEN和SQL FETCH实现。Ⅱ表示变换,它借助于应用程序把读出的变量变换成新数据库的格式。Ⅲ表示验证和插入,其中对新数据库104就变量进行检验、插入并激活。激活指得是SQL COMMIT。激活能否实现例如取决于是否正确地将外部键字关系进行了变换。以后叙述这一点的一个例子。激活可以发生在这里,或者在检验整个数据库之后。查明变量正确与否的检验在验证阶段进行,例如基本键字是否唯一。然后执行变量是否一致的检验,最后接受该变量。为避免不一致,必须对每一记录逐个变量检验,直到数据库中的所有记录都被检验。有时必须进行综合事务处理以便在大数据库中进行充分的检验。数据库的事务处理包括从一个一致状态转变到另一个一致状态。这之间可能有不一致状态。事务处理也可能包括几个变量,它们可能被包括在同一个对新数据库104的传输包中。这意味着这几个变量在验证和插入发生之前被读入和变换。这在某些情况下会引起问题。例如在大的事务处理的情况下需要大的资源。插入指将变量加在新数据库104中。激活使变量在事务处理之外可以被接受。
下面用例子给出在功能改变时可能出现的问题的类型。假定用下述记录表示的一个现有数据库包括涉及公司中雇员及其最接近的上司的信息。
雇员号部门最接近的上司3 4 5 A1 2 34 5 6 A1 2 35 6 7 A1 2 31 2 3 A2 3 42 3 4 A -这一记录表示一个带有许多记录的“雇员”数据库。每一记录有几个变量EmpNo(雇员号)、Dept(部门)和NearstManager(最接近的上司)。对于每一变量,该数据库模式除别的事项外包括一个规定的变量允许值的域,分别是emp_no_dom,dept_dom和emp_no_dom。每一雇员可以无上司或有一个上司,反过来说,每一雇员可以无下属或者有几个下属。在这种情况下,EmpNo是基本键字,而外部键字关系是NearstManager(最接近的上司),不过它属于“雇员”数据库。这用SQL可以书写如下CREATE EMPLOYEES RECORDEmpNo emp_no_dom NOT NULL,Dept dept_dom NOT NULL,NearstManager emp no_dom NULL,PRIMARY KEY(EmpNo),FOREIGN KEY(NerastManager)REFERENCES(EMPLOYEES)ON DELETE NULLIFY;假定公司重新组织,要给所有雇员一个新的雇用号码。而且希望新数据库在变换后具有下述形式或者结构雇员号部门最接近的上司1 3 4 5 A1 1 2 31 4 5 6 A1 1 2 31 5 6 7 A1 1 2 3
1 1 2 3A1 2 3 41 2 3 4A-在已知数据库100中一种逐个变量变换的意图将具有下述形式雇员号部门 最接近的上司1 3 4 5 A1 1 2 34 5 6 A1 2 35 6 7 A1 2 31 2 3 A2 3 42 3 4 A -第一变量包含有一个其值未定义的外部键字关系(下划线),事务处理将复原。外部键字关系非常简单地指向一个不存在的变量。
在这种一般情况下,通过把整个记录包括在同一个事务处理中而使问题得到解决。这意味着数据库100占用大量资源。上述推理可以推广到几个记录的情况在实现一个事务处理时,通过取由键字关系所指变量来检验数据库的一致性。如果因为所参考的变量不存在而不能实现这一点时,则分析自己的事务处理。结果在分析大的事务处理时很费时间,因此整个功能改变也很费时间。
为克服这些缺点,可以对变换作出规定,使得将来的参考变量首先变换。所涉及的分析以及相关的变换程序十分复杂。
指定给Hooper等人的美国专利5,150,308说明了一种与人工智能(A I)系统有关的数据库结构。
指定给Finely的美国专利4,697,266说明了一种避免数据库由于系统停机这种意外中断而遭破坏的方法。
本发明所涉及的问题是数据库系统实现功能变换时能占用大量资源。
本发明的一个目的是借助于一个新的数据库管理协议减少资源使用,缩短变换时间,同时简化从现有数据库到新数据库的数据传输。
本发明的另一个目的是简化管理数据库的方法,使用户不需书写从现有数据库传输数据到新数据库的应用程序。所需要的只是说明变换指令。
本发明涉及一个从老数据库改变数据到新数据库的新数据库管理协议。新数据库系统中的该新协议被划分为不同的部分,亦即初始化部分、工作部分和验证部分。
初始化部分包括规范说明阶段和声明阶段。规范说明阶段由与在现有数据库100(图1a)中存在的同样的工作组成。另一方面,声明阶段与以前的协议不同。新的方面包括建立和书写变换指令,这些变换指令然后被编译而形成变换记录。书写变换指令时只要说明新数据库中的数据是怎样根据老数据库202中的数据产生的。这例如借助于FUSQL来实现。
工作部分包括读入阶段,读出阶段,变换阶段和插入阶段。使用操作系统处理工作部分中的各个阶段。读入阶段包括从变换记录中读变换指令到操作系统。随后是读出阶段,它包括从现有数据库读数据到操作系统。随后是变换阶段,它包括根据在初始化部分设定的规范说明和变换指令变换数据。然后在插入阶段把变换后的数据插入到新数据库中。重复这些步骤(读出,变换,插入),直到整个数据库处理完毕。然而,新数据库的结构在变换完成后还不知道。这意味着,例如有可能增加了新的未初始化的第二选择索引,并且尚未执行包括变换后数据的控制条件。这又意味着新数据库可能不一致。亦即不能保证数据库存在未受干扰的状态,因为例如基本键字可能变换有误。类似地,也不能保证外部键字关系,因为可能包括错误变换的属性。新数据库就这样用未加检验的(生成的)数据加载。这种检验在验证阶段执行。
在验证部分,验证阶段验证新数据库是否一致。例如,对基本键字、索引值范围、外部键字关系进行检验。错误也登记起来。当检测到错误时,给出这一结果的信息,较简单的错误自动改正。验证阶段与数据库管理系统(DBMS)和新数据库协同操作。
上述发明的一个优点是数据库系统更是用户友好的,因为它只需产生变换指令。用户需要知道的只是新数据库在功能改变后的外形或结构。
本发明的另一个优点是新数据库在插入数据后进行检验,意味着在功能改变后对新数据库的正确性进行检验更有效。
本发明提供的另一个优点是可以比先前场合更快地进行功能变换,因为数据库系统只需占用最少的资源,这是由于新数据库已经建立,可以使用通常的存取路径。可以以数据库系统提供的最优方式检验每一变量。
本发明提供的另一优点是不需进行依赖性分析,因为已实现的改变的功能需求已充分说明。
本发明提供的再一个优点是可以改变数据库而对数据库系统只有可能最小的影响。
本发明提供的其它优点包括可以说明和检验的任意改变,它们使功能改变更快进行,因为数据库系统只需占用最少资源。这是因为新数据库已经建立,可以使用通常的存取路径。可以以数据库系统提供的最优方式检验每一变量。
下面参考本发明的优选实施例和附图详细叙述本发明。
图1a表示实现从一个数据库到另一个数据库的功能改变的现有方法。
图1b表示现有的协议变换过程步骤。
图2是表示一个新数据库的方框3表示用于新功能变换的一个新传输协议。
图4是表示验证阶段部分1的流程图。
图5a是表示验证阶段部分2的流程图。
图5b是验证阶段部分2的流程图的接续。
图5c是验证阶段部分2的流程图的又一接续。
图6是表示验证阶段部分3的流程图。
在需要收集和/或存储数据的许多不同场合都要有数据库管理。图示实施例涉及一个电话站,更具体地说,涉及处理一个电话数据库的数据。自然,本发明不限于这一领域的数据库管理,相反可应用于任何类型的任何数据库,实现从一个数据库到另一个数据库的数据功能变换。
首先参考图2-6。
图2是表示一个新数据库系统200的方框图,概括、结构化地描述了该新数据库系统200的操作。该图表示实现从现有数据库202到新数据库系统200中的新数据库204的新功能变换的一个新方法。新数据库系统200包括现有数据库202、新数据库204、变换记录208、操作系统210和数据库管理系统(DBMS)212。现有数据库202可以具有和图1a所示的现有数据库102完全同样的数据内容。新数据库204中的最终结果是人们希望在老协议中得到、但或许由于老协议的结构未能实现的内容。
图3详细说明用于新数据库系统200中的新功能改变的一个新协议300;也可参见图2中的指示符号A-F。新协议300分成三部分第一部分,例如初始化部分302;第二部分,例如工作部分304;第三部分,例如验证部分306。初始化部分包括规范说明阶段和声明阶段A。对新数据库204希望的外形或结构在规范说明阶段确定。声明阶段A包括发现和写入变换指令,并将该指令变换为变换记录208。工作阶段304由操作系统210管理,它包括下述阶段读入阶段B,它从变换记录208读变换指令到操作系统210。该阶段后继读出阶段C,其中数据从现有数据库202读出到操作系统210。下一阶段是变换阶段D,在该阶段,数据根据规范说明和在初始化阶段302中建立的变换指令变换。变换后的数据在插入阶段E插入到新数据库204中。重复这一过程(读出,变换,插入),直到整个老数据库202处理完毕。验证部分306,即由数据库管理系统(DBMS)212管理的验证阶段F分成三个阶段,参见图4-6及其相关文字。这些阶段检验基本键字,外部键字关系和值范围等。
图4-6说明验证阶段F,它分为三个阶段。凡在可能的地方都使用SQL命令来说明对新数据库204的验证阶段步骤。
图4是表示验证阶段的阶段1的功能步骤的第一流程图。该流程图以框400“开始阶段I”开始,其后接着是方框402“改变后的记录”,亦即已经进行过变换的记录。然后接着是方框404“SQL OPEN”、框406“记录循环L10”和方框408“SQL FETCH”。再接下去是又一“SQL OPEN”方框410。这些框之后是框412“变量循环L12”和方框414“SQL FETCH”。下面的框是方框416“SQL INSERT”和框418“出错?”。如果在本示例中无错误出现,则执行方框420“SQL COMMIT”。如果发生错误,执行“出错操作”方框422。方框420或者422后继框424“下一变量返回L12”和方框426“SQL CLOSE”。在方框428“错误登记”记载在记录中发生的事情,亦即当前记录的状态,后随框430“下一记录返回L10”。这些框后面是方框432“SQLCLOSE”以及第一流程图中的最后的框434“阶段1结束”。
图5说明表示验证阶段的第二阶段怎样进行的第二流程图。该流程图以框500“开始阶段2”开始(见图5a),其后随有方框502“被改变的记录”和方框504“SQL OPEN”。接着相继的是框506“记录循环L20”和又一“SQL FETCH”方框508。这些框后面相继有方框510“SQL OPEN”、框512“变量循环L22”和方框514“SQL FETCH”相随。下一框是方框516“SQL PREPARE”,其后接着是框518“出错?”,出现错误时执行方框520“出错操作”,无错误发生时则执行框522“下一变量返回L22”。然后执行方框524“SQL CLOSE”。接着跟随的是圆框526“X2”(见图5b),其后是方框527“SQL OPEN”和框528“FK循环L24”,然后是方框530“SQL FETCH”。下一方框532“SQL OPEN”后随有框534“变量循环L26”和方框536“SQL FETCH*”,再后是方框538“SQL OPEN”相随。接着是方框540“SQL FETCH*”、方框542“SQL CLOSE”和框544“变量存在?”。当变量存在时,响应“是”,执行框548“下一变量返回L26”,其后是方框550“SQL CLOSE”。如果不存在变量,则响应“否”,执行方框546“出错操作”和框548“下一变量返回L26”。在方框550后执行框552“下一FK返回L24”。然后接着是方框554“SQL CLOSE”和方框556“登记记录状态”。接着跟随的是框558“X3”(见图5c),其后接着是方框560“SQL OPEN”和框562“变量循环L28”,下一跟随的框是方框564“SQL FETCH”和方框566“SQL OPEN”,之后是方框568“SQL FETCH”和询问框570“找到FK?”当对在询问框570中提出的询问的响应是“是”时,接着跟随的是方框572“SQL SELECT”。现在跟随的是框574,它进一步询问“参考记录被分析?”。如果响应是“否”的话,则执行方框576“框532-550”,接着执行方框578“登记记录状态”,之后是框582“下一变量返回L28”。当对框570“找到FK?”的响应是“否”的话,则执行方框580“SQL CLOSE”,下一步执行框582“下一变量返回L28”。当对在框574中的询问“参考记录被分析?”的回答是“是”的话,则执行框582“下一变量返回L28”。下一个跟随的步骤是方框584“SQL CLOSE”,后随有方框586“登记记录状态”。下一步是框588“下一记录返回L20”。阶段2由SQL CLOSE终止,并由框592结束阶段2。
图6在第三流程图中说明验证阶段3是怎样实现的。图6的流程图以第一框600“开始阶段3”开始,接着是方框602“被改变的记录”和方框604“SQL OPEN”。这些框后继有框606“记录循环L30”、方框608“SQL FETCH”和框610“前面有出错登记吗?”。如果响应是“否”,则执行方框612“SQL OPEN”、框614“变量循环L32”、方框616“SQL FETCH*”和方框618“释放变量锁定,SQL INSERT*”。然后执行框620“下一变量返回L32”和方框622“SQL CLOSE”。在下一方框644实现“更新标记”。接着是框626“下一记录返回L30”,它也是在对框610的询问“前面有出错登记吗?”的回答是“是”时的后继框。该流程图以方框628“SQL CLOSE”和框630“结束阶段3”结束。
现在更详细地叙述实现从现有数据库202到新数据库204(见图2)的功能改变、信息改变以期达到给定结果的方式。新协议包括下述阶段(见图3)规范说明阶段,声明阶段A,读入阶段B,读出阶段C,变换阶段D,插入阶段E和验证阶段F。应该理解这些阶段的顺序可以改变,因为所述阶段并非固定于前面建议的顺序。所述阶段顺序对于本实施例来说是最好的顺序。在本例中,验证是用SQL命令描述的,不过这并非必需,因为也可以使用其它数据库管理语言。
在规范说明阶段已建立一个模式,说明新数据库204的结构如何。在这一方面确定了这样一些规则,用于例如插入和删除数据。这一阶段和老协议的相同,用SQL-DDL(SQL数据定义语言)说明。
对新数据库的预想结构在声明阶段说明。变换指令也被编译并被写入,意味着控制数据变换的规则的产生。控制数据怎样从老数据库202产生到新数据库204的规则在变换指令中说明。新变换指令变换记录208的格式被编译。
读入阶段包括读变换记录到操作系统206,见图2。操作系统206管理读入阶段,读出阶段,变换阶段和插入阶段。
在读出阶段,从现有数据库102中提取老数据并插入操作系统210。
在变换阶段,借助于变换指令或者变换条件变换老数据,产生新数据库204的数据。
在插入阶段插入新数据值以便生成数据库,这样所有数据值将处于新数据库204中。另一方面,尚未对新数据库204进行验证。这一验证在验证阶段执行。数据库在插入阶段后可能很不一致。
在验证阶段执行有关数据库一致或不一致的检验,这由数据库管理系统212管理。验证阶段依次又分为几个不同的阶段。数据库的改变功能在一种功能改变完成后进行新数据库204的验证,此时数据已经经过变换,或者已定义新的检索索引。
建立与有待检验的记录和将要执行的检验的类型有关的信息。验证阶段执行整体性检验,基本键字检验,值范围检验,外部键字关系检验和其它检验。
现在借助SQL命令和其它事项逐步叙述验证阶段作用的方式。验证阶段分为三个具有不同子阶段的阶段,分成这些子阶段的目的是为了能以和这里叙述的不同顺序放置这些子阶段。
验证阶段1(图4)以开始阶段1开始。首先读入一个包含有关系统记录的元数据的系统文件。该数据块包括有关已经完成的改变的信息和别的信息。系统文件和定义新数据库的一起建立。SQL OPEN用于打开具有元数据(关于数据的数据)的系统文件。SQLOPEN建立读涉及所有在新数据库204中经过改变的记录的元数据的检索条件。SQL OPEN是一个标准操作,它指定检索条件并放置条目指针。现在开始记录循环L10,这里阶段1从系统记录中取第一记录,之后取后继的记录,直到系统中所有被改变的记录都被检验。SQL FETCH命令执行由SQL OPEN建立的检索条件。在这一情况下,满足条件的第一记录被取出。再次执行SQL FETCH时,满足SQL OPEN的条件的第二记录被取出。在这种情况下,SQL OPEN导致建立利用线性搜索读取被改变的记录中的所有变量的检索条件。现在开始记录中的变量循环L12,此时阶段1取第一变量,之后取下一变量,直到该记录中的所有变量被检验。SQL FETCH执行由SQL OPEN建立的检索变更后记录的检索条件,执行的结果是读取一个变量。下次执行SQL FETCH时,取下一变量。本发明使用了一个特殊的SQL命令,SQL INSERT*,它是特别为这种情况建立的。因此,SQL INSERT*不在变量中插入任何数据,因为数据已经被插入,但执行验证,亦即确定在记录中没有和基本键字同样值的变量的检验。然后锁定该变量并执行错误检测。当没有发生错误时执行SQL COMMIT,以此证实对于该新的变量发生过什么,即执行该新变量。SQL COMMIT包括更新检索条件,存取功能。当在使用SQL INSERT*时发生错误,则执行综合出错登记。当错误发生时,意味着变换指令有错误。在SQL COMMIT之后或者当在循环L12中的错误登记终止时除去一个错误变量。循环L12中的错误登记终止意味着在检验记录中的所有变量后已返回到循环L12的开始。使用SQL CLOSE关闭改变了的记录。接着登记该记录出现,它包括在系统文件中插入一个标记。然后把后继的记录返回到循环L10,直到在系统记录建立中的最后一个记录被处理。系统文件在阶段1通过执行SQL CLOSE而关闭。于是阶段1终止,所有检索功能被更新。
图5中的验证阶段2的流程图以开始阶段2开始。首先,读系统记录,它和阶段1的系统记录一样,包括关于系统块以及指出所发生的改变和其它事项的元数据。然后使用SQL OPEN打开具有元数据的系统记录,参见阶段1,框404。
第一相随的子阶段执行值范围检验及其它事情。下一步骤以记录循环L20开始,在该循环中将根据系统记录中的数据检验先前发生改变的每一记录。下一步骤使用一个SQL FETCH命令从系统文件中读与发生改变后的记录有关的数据。下面的步骤使用SQLOPEN打开发生改变的记录。将此与阶段1的框408比较。下一步骤以变量循环L22开始,在该循环中记录中的第一变量向前取出。于是,在阶段2,先取出第一变量,之后下一变量...,直到记录中的所有变量都被检验。这通过SQL FETCH*实现。变量是可存取的,因为虽然SQL FETCH*观察到变量被锁定,但还是读该变量。被锁定的变量不能用通常的SQL FETCH读入,请比较阶段1的方框408。接下来是SQL PREPARE,其中进行有关索引可用性和值范围是否与已经建立的规则一致的检验。在下一步骤,提出“在SQL PREPARE中有错误发生?”的询问。如果在SQL PREPARE中有错误发生,则进行错误登记,见方框422。如果在执行SQL PREPARE之后无错误发生,则执行循环L22中的最后一步,其中阶段2前进到记录中的下一变量并继续,直到记录中的最后一个变量被处理完毕。接着的一步是使用SQL CLOSE关闭被改变的记录。框X2的唯一用途是使该流程图在下一页继续。
下一子部分检验输出参考、外部键字关系及其有效性。建立检索条件以便发现由外部键字关系指定的一个参考记录。下一步骤通过打开由检索条件建立的参考记录开始,SQL OPEN。然后执行外部键字关系(FK)循环L24,以此取出第一参考记录。这意味着阶段2取发生改变的第一记录,接着取后面的改变的记录,等等,直到所有改变的记录都被取出。这一过程另外包括步骤SQL FETCH,其中读与参考记录有关的数据,以此使外部键字关系能被读取。在发现要读取外部键字关系的场合,它用SQL OPEN实现,意味着参考记录被打开。建立检索条件,以便使外部键字关系指定的记录打开变量以备读取。下一步骤是在参考记录中的变量循环L26,意味着阶段2读参考记录中的第一变量,之后是下一改变了的参考变量,等等,直到参考记录中的所有所述变量被检验。循环L26包括下述步骤使用SQL FETCH*取参考记录中的参考变量。被读取的数据包括外部键字关系的值,该值形成在参考记录中的检索条件。这一条件由SQL OPEN传递。满足检索条件的变量由SQL FETCH*取出,之后用SQL CLOSE关闭该参考记录。下一步提问“该变量存在?”。当所指变量不存在时,外部键字关系指向一个不存在的变量,并进行出错登记。当所指变量存在或者在改正错误以后,执行终止循环L26的下一步骤。在循环L26步骤中,处理参考记录中的下一有关变量,直到在改变的参考记录中的最后一个有关变量处理完毕。然后接着是SQL CLOSE,用它关闭改变的参考记录。在SQL CLOSE之后,或当未发现外部键字关系时,接着是终止循环L24的步骤。意味着从系统记录中读下一外部键字关系。在处理完被改变的记录中的所有变量后,接着是SQL CLOSE,它关闭被改变的记录。该记录的出现也被登记。框X3仅用于使该流程图能在下一页继续。
下一子部分将检验输入参考、外部键字关系及其有效性。用SQL OPEN打开包含涉及系统块的元数据的系统文件。分析所有改变的文件。下一步骤以记录循环L28开始,在该循环中根据系统文件的数据检验包含输入参考的每一记录。用SQL FETCH取改变的记录。所读取的数据是对包括外部键字关系的另一系统文件的一个新问题的输入数据。该数据块用SQL OPEN打开以取出外部键字关系,其中还包含被分析的记录,它作为一个由SQL FETCH取出的一个参考记录。然后问“找到FK?”。如果回答是“是”,则发现一个外部键字关系,数据由SQL FETCH取出,表示从具有记录数据的系统文件中收集有关该参考记录的数据。然后问另一个问题“参考记录被分析?”。如果该外部键字关系尚未被分析,则回答是“否”并以和在框532-550中同样的方式对输出参考进行检验,然后登记该记录的出现,之后是下一记录循环L28。当对问题“找到FK?”的回答是“否”时,则执行SQL CLOSE,以便关闭带有外部键字关系的记录,将下一记录返回到循环L28进行分析。如果对所述问题的回答是“是”的话,则参考记录已分析,执行下一步骤,该步骤是下一记录循环L28,因为外部键字关系已在较早的步骤中分析过了。下一步骤是SQL CLOSE,用它关闭具有一个外部键字关系的系统文件。然后登记该记录的状态。下一步骤为前进到系统记录中的下一记录,到达循环L20的末端。执行循环L20,直到在建立起来的记录中的最后一个记录被处理完毕,最后用SQL CLOSE关闭系统文件。就此结束阶段2。
验证阶段部分3(图6)由开始阶段3引入。首先锁定系统文件,该系统文件和阶段1的系统文件一样,包括关于系统中的记录的元数据以及关于已经发生的改变的信息和其它事项,以便能够执行验证阶段3,比较方框402。然后使用SQL OPEN打开包括元数据的记录,比较方框404。下一步骤开始记录循环L30,表示检验发生改变的每一记录,直到处理完最后一个记录为止。循环L30包括下述步骤使用SQL FETCH顺序读取有关发生改变的记录的数据,比较方框408。下一步骤提问“先前曾进行出错登记吗?”,也就是说,是否先前在阶段1和阶段2进行过出错登记。如果对该问题的回答是“否”,则执行SQL OPEN,比较Alan框414。这使得记录被打开。下一步骤开始变量循环L32,其中阶段3取该记录中的第一变量,然后取下一变量等等,直到该记录中的所有变量都被取过。SQL FETCH*包括从记录中的变量读取数据,比较方框514。循环L32中的最后步骤是释放先前用SQLINSERT*设定的变量锁;见阶段1。循环L32在这里终止,表示阶段3返回到记录中的下一变量,如此循环,直到处理完最后的变量。然后接着是步骤SQL CLOSE,它关闭改变了的记录并更新标记,指示对系统文件中与所发生的改变有关的信息作了增加、删除或更新。如果对问题“先前曾进行出错登记吗?”的回答是“是”,则意味着先前在阶段1或者阶段2进行过出错登记而不更新标记。接下来是先前在阶段3的方框602中取来的下一记录。遍历该循环,直到处理完最后一个记录,最后用SQL CLOSE关闭系统文件。阶段3就此结束。
出错处理在完成数据的变换和插入后,进行一种检验以验证数据库是否一致。验证阶段执行第一检验,例如验证数据库系统使用的所有索引是否按照基本键字建立。登记所有的错误,例如双重的基本键字。在编译所有检索索引后,检验外部键字关系和剩余有限规则(remaininglimited rules)(限制)是否满足。剩余有限规则的一个例子是一个属性可以有一个最大值。在检验整个数据库后发布一条消息,公开结果和任何错误信息。在步骤E之后数据库可能具有下述结构
雇员号部门最接近的上司1 3 4 5A1 1 2 31 4 5 6A1 1 2 31 5 6 7A1 1 2 31 1 2 3A1 2 3 41 2 3 4A-1 3 4 5C1 1 2 3 !1号错误,基本键字重复!1 7 8 9C1 9 9 9 !2号错误,外部键字关系未定义!0 0 0 0C1 1 2 3 !3号错误,无效基本键字!在建立存取支持时将发现1号错误。在检验外部键字关系时将发现2号错误。在检验限制时将发现3号错误。
其它实施例叙述如下从至少两个老数据库到一个新数据库的功能改变。
从一个老数据库到至少两个新数据库的功能改变。
分布式数据库的功能改变,例如至少两个老数据库到至少两个新数据库的功能改变。
应该理解,本发明并不限于前述图示实施例,在后面的权利要求的范围内可以进行各种修改。可以修改SQL INSERT*使其不设定锁定位。在这种情况下,不需修改SQL FETCH。前面已经提到,可以同样使用其它数据库语言,而不一定使用数据库语言SQL。
图1b的翻译112=规范说明声明114=数据读出变换插入+检验图3的翻译302=规范说明阶段声明阶段304=读入阶段读出阶段变换阶段插入阶段306=验证阶段图4的翻译400=开始阶段1402=被改变的记录406=记录循环L10412=变量循环L12418=出错?422=出错处理424=下一变量返回L12428=出错登记430=下一记录返回L10434=阶段1结束图5a的翻译500=开始阶段2502=被改变的记录506=记录循环L20512=变量循环L22518=出错?“是”“否”520=出错操作522=下一变量返回L22图5b的翻译534=变量循环L26
544=该变量存在?“否”546=出错操作548=下一变量返回L26552=下一FK返回L24556=登记该记录外观图5c的翻译562=变量循环L28570=FK找到?“否”“是”574=参考记录被分析?“是”“否”578=登记记录状态582=下一变量返回L28586=登记记录外观588=下一记录返回L20592=阶段2结束图6的翻译600=开始阶段3602=被改变的记录606=记录循环L30610=先前进行过错误登记吗?“是”“否”614=变量循环L32618=释放变量锁SQL INSERT*620=下一变量返回L32624=更新标记626=下一记录返回L30630=阶段3结束
权利要求
1.一种用于数据库系统中改变功能的方法,其开始于建立某些规范说明,这些规范说明详细说明新数据库与现有数据库比较其结构如何,该方法的特征在于,根据已经建立的规范说明从现有数据库(202)变换数据并将这些数据安装在新数据库(204)中,之后验证新数据库,即检验新数据库是否一致。
2.根据权利要求1的方法,其特征在于,在验证新数据库时检验基本键字、外部键字关系和取值范围。
3.根据权利要求1的方法,其特征在于,使用一个特殊的SQL命令SQL INSERT*,在验证新数据库时,该命令启动一项测试,检测每一记录中是否只存在一个基本键字,测试后锁定该变量;其中所述命令还使该变量尽管已被锁定也能在以后被读出,但不在新数据库中插入数据。
4.根据权利要求3的方法,其特征在于,当验证新数据库时使用一个特殊的SQL命令SQL FETCH*,从被锁变量中读取数据。
5.根据权利要求1的方法,该方法包括一个包括规范说明的第一部分,其特征在于,该第一部分还包括建立和书写变换指令的步骤,这些指令其后被置于变换记录(208)内;该方法还包括一个第二部分(304)和一个第三部分(306),其中第二部分(304)包括从变换记录(208)中读变换指令到操作系统(210)、从现有数据库(202)读数据并把所述数据安装到系统(210)、根据先前建立的规范说明和变换指令变换数据、并把变换后的数据插入新数据库(204)中的步骤;第三部分(306)包括由数据库管理系统(212)管理对新数据库进行验证,检验新数据库的一致性。
6.根据权利要求5的方法,其特征在于,在第三部分(306)检验基本键字、外部键字关系和取值范围。
7.根据权利要求5的方法,其特征在于,在所述第三部分(306)使用一个特殊的SQL命令SQL INSERT*执行一项检测,验证在每一记录中是否只存在一个基本键字,之后锁定该变量;其中所述命令还使该变量尽管已被锁定也能在以后被读出,但不在新数据库中插入数据。
8.根据权利要求7的方法,其特征在于,在第三部分(306)使用一个特殊的SQL命令SQL FETCH*,从锁定的变量读数据。
9.根据权利要求1的方法,该方法的开始步骤是一个包括规范说明的规范说明阶段,其特征在于有下述步骤声明阶段(A),读入阶段(B),读出阶段(C),变换阶段(D),插入阶段(E)和验证阶段(F),其中声明阶段(A)包括建立和书写变换指令并将所述指令置于变换记录(208)中;读入阶段(B)包括从变换记录(208)中读变换指令到操作系统(210);读出阶段(C)包括从现有数据库(202)读数据到操作系统(210);变换阶段(D)包括根据先前建立的规范说明和变换指令变换数据;插入阶段(E)包括把变换后的数据插入到新数据库(204)中;验证阶段(F)由数据库管理系统(212)管理,检验新数据库的一致性。
10.根据权利要求9的方法,其特征在于,验证阶段(F)检验基本键字、外部键字关系和值范围。
11.根据权利要求9的方法,其特征在于,在验证阶段(F)使用一个特殊的SQL命令SQL INSERT*,检验每一记录中是否只存在一个基本键字,之后锁定该变量,其中所述命令还使该变量尽管已被锁定也能在以后被读出,但不在新数据库中插入数据。
12.根据权利要求11的方法,其特征在于,在验证阶段(F)使用一个特殊的SQL命令SQL FETCH*,从被锁定的变量中读数据。
13.一种改变数据库系统中的功能的方法,其开始于建立某些规范说明,这些规范说明详细说明新数据库与现有数据库比较其结构如何,其特征在于,根据已经建立的规范说明建立变换指令并把所述指令放置在一个变换记录(208)中,其中数据库系统(200)变换现有数据库(202)中的数据到新数据库(204)。
14.根据权利要求13的变换功能的方法,其特征在于,改正检验新数据库时发现的任何错误并继续功能改变。
15.一个数据库系统,包括至少一个现有数据库,至少一个新数据库,和一个操作系统,其中数据库系统由物理链接连接到该数据库系统的各部分,其特征在于一个存储变换记录(208)的存储块和一个数据库管理系统(212),其中现有数据库连接到操作系统(210),后者又连接到新数据库(204);操作系统连接到变换记录存储块,后者又适于能从数据库系统外部接收变换指令;该数据库管理系统(212)连接到新数据库。
全文摘要
本发明涉及一个新的数据库处理协议,用于从一个老数据库(202)到新数据库(204)的数据的功能改变。该协议解决将大量数据从一个数据库变换到另一个数据库时所出现的问题。该新协议分为若干不同阶段。规范说明阶段包括产生详细说明新数据库(204)结构的数据。声明阶段(A)包括建立变换指令,书写这些指令并把这些指令插入一个变换记录存储块(208)。读入阶段(B)包括读变换指令到操作系统(210)。读出阶段(C)包括从现有数据库读数据到操作系统。变换阶段(D)包括根据变换指令变换数据。插入阶段(E)包括把变换后的数据插入到新数据库。读出、变换和插入阶段反复执行,直到整个数据库处理完毕。后4个阶段由操作系统(210)管理。在验证阶段(F)检验新数据库以验证该数据库的一致性。
文档编号G06F17/30GK1215485SQ9719361
公开日1999年4月28日 申请日期1997年2月7日 优先权日1996年2月8日
发明者I·尼尔森 申请人:艾利森电话股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1