维护检查实用程序所用例外表的方法技术

技术编号:2883331 阅读:219 留言:0更新日期:2012-04-11 18:40
一种用于检查实用程序维护例外表的方法,包括生成一个控制语句,该语句中包括关键词和用于预定例外表参数的相关值。该控制语句由检查实用程序来分析,该检查实用程序自动地建立和执行创建和删除例外表所需要的SQL语句。(*该技术在2019年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及数据库管理系统,尤其涉及一种用于在数据库管理系统中检查实用程序所用例外表的方法。定单项目表 虽然上述定单项目表显示了四行,该表格可以具有用于一个公司所有定单的几百万行,例如四百万行。定单项目表还具有例如三个索引关键字和两个外部关键字。一个索引关键字是用于表格特定行的一个标识符,而外部关键字也标识一行,但是也如上所述被用于参照整性(referential integrity)。例如,在定单项目表中,一个索引关键字可以基于定单编号,另一个索引关键字基于顾客姓名,第三关键字基于运送到的邮编。如在现有技术中公知的,用于一个特定表格的一个索引关键字表示行的标识(RID)和对该行的一个选定值(例如索引关键字数值)。索引关键字可以被用来生成用于该表格的一个索引,该索引便于随后搜索该表格中的特定数据。例如,定单项目表将具有三个索引(例如每个索引关键字使用一个索引),每个索引被存储在一个索引空间中。类似于表格空间,索引空间例如是DASD的一个指定部分。因而,如果一个用户在定单项目表中寻找包含一个特定购买者姓名的行,数据库管理系统将在表格中查找顾客索引,以识别出该顾客名称的所有出现,而不需要读取整个表格来找到该行的位置。DB2管理者分析访问一个数据库表格的应用程序的性能特性以发现用于快速访问数据库表格的最佳索引结构。将用作一个索引的数值必需比认真地选择,因为每个索引导致数据库系统的额外开销。例如,诸如增加或删除的数据库表格中的每次处理要求用于该表格的每个索引也被更新。因而,希望用于一个表格的索引数被最小化以增强应用程序的性能。例如根据通常是在线处理用户的表格用户最频繁访问的数据来选择用于数据库表格的索引。索引关键字通常不依据外部关键字,因为外部关键字主要用于验证目的(例如强制约束constraintenforcement)。如在现有技术中公知,数据库中的每个表格可以是一个父表或一个子表或者两者。一个子表通过外部关键字数值或者在子表的列中包含的数值与一个父表相联系。例如,一个外部关键字数值可以在一个子表中出现多次(例如子表中的多行可以具有相同的外部关键字,例如定单项目表中的“客户编号”和“产品编码”项目),但是每个外部关键字必需与子表的父表中的一个唯一关键字相联系。参照完整性确保每个外部关键字数值是有效的(例如具有父表中的一个相应主关键字)。因此,参照完整性(RI)是指,当表格中一行某列中的值还存在于另一个表格的一个索引中时,这个值是有效的。如果一行违反了一个约束就不应当在一个表格中。如上所示的定单项目表具有两个外部关键字,它具有在“客户编号”和“产品编码”上的RI约束。如在现有技术中公知的,当DB2数据库管理系统的一个用户创建一个表格时,用户还定义该表格的约束条件(例如用户还定义相关完整性标准)。下面图示的是一个示例性产品表和一个示例性客户表(例如用于定单项目表中外部关键字的父表)。产品表 产品表显示了五行,当然该表可以具有用于一个公司不同的所有产品的几千行。产品表例如具有基于“产品编码”列的一个索引,其值以升序表示。“产品编码”列中的每个数值都是唯一的,因为仅有一个产品编码被分配给每个产品,因此在这个表格中,一个产品编码不可能被包括多次。因此,用于该产品表的一个索引将包括关键字数字(例如在产品编码列中所存储的数值)和RID。产品表索引将驻留在一个DB2索引空间中。下面表示的客户表格显示了四行,当然这个表格也可以具有用于一个公司所有客户的几千行。客户表例如具有一个基于“客户编号”列的索引,其值以升序被排列。“客户编号”列中的值每个都是唯一的,因为仅有一个该列的客户编号被分配给每个客户名称,因此一个客户编号在该表中将不会被包括多次。因此,用于客户表的一个索引将包括关键字数值(例如“客户编号”列的数值)和一个RID。客户索引也将驻留在一个DB2索引空间中。客户表 如上面的表格所示,定单项目表中的所有行是有效的(例如没有违反参照完整性约束),因为定单项目表的产品编码列中的外部关键字的值也存在于产品表中,定单项目表的客户编号列中的值也存在于客户表中。诸如DB2的常规数据库管理系统向用户提供识别在一行可以被添加到一个表格之前它必需满足的具体条件的能力。这些条件被称作“约束”,因为它们限制一行可以包括的值。约束例如包括检查约束和参照完整性约束。检查约束包括例如用于一个特定值的限定标准,例如在00000到99999范围内的邮政编码值(例如在定单项目表中的“运送到的邮编”值)。如上所述,当表格内一行中的一个数值还存在于另一个表格的一个索引中时,参考整体约束确保该数值是正确的。在将数据被装载在数据库表格内之前或者在数据已经被装载到一个数据库表格内之后可以执行强制约束。当在将数据装入数据库表格内之后执行强制约束,例如作为一个硬件的软件故障之后的恢复操作的一部分,通常由一个检查实用程序来执行强制约束,例如IBM公司的CHECK DATA、BMC软件公司的CHECK PLUS和白金技术公司的FASTCHECK。常规检查实用程序确保表格中的数据不违反已经为该表格建立的任何约束。可以在生成表格时建立约束。例如,约束可以在表格在数据库系统中被初始创建时被定义并被存储在DB2目录中,它可以随后由检查实用程序来识别约束信息。如在现有技术中公知的,为了执行强制约束,一个常规检查实用程序例如可以被初始化并标识可以被应用于表格中通过读取DB2目录来检查的任何约束。然后,检查实用程序例如将读取数据库表格的每一行,并检查所谓的检查约束违反和/或参照完整性约束违反。如在现有技术中公知的,在检查实用程序每次对一个表格进行操作之前生成一个例外表(例如生成一个新的例外表或每次执行强制约束时替换一个先前的例外表)。例如,当一个用户创建一个工作流以执行检查实用程序时,工作流的步骤包括创建一个新的例外表。例外表例如是数据库的一个镜像,除了例外表仅包含包括一个违反约束的行。例如,检查实用程序将整个行拷贝到例外表中。将一个错误行拷贝到例外表中的一个示例性SQL语句如下<pre listing-type="program-listing"><!]></pre>如上述代码所示,在数据库表格PDLNR.TDOCDPP中包含一个违反约束的行将被复制到例外表PDLNR.EXTDOCDPP4中。然而,在检查实用程序使用一个例外表之前,必需创建例外表。而且,如果检查实用程序先前已经对一个表格进行操作,先前创建的例外表必需被删除并创建一个新的例外表。现有技术检查实用程序执行的关于例外表的创建和删除的一个例子如下。例如,假设包括三个父表和三十一个从属表的一个典型的用户应用系统(父表和从属表的其它组合也是可能的)。当客户为从属表执行一个常规检查实用程序时,每个从属表仅需要一个例外表。如上所述并且是在现有技术中公知的,每个例外表例如是一个用于包含检查实用程序标识为违反一个约束的行的工作表格。当为一个参考完整性约束违反检查一个从属表的表格空间时,常规检查实用程序的用户需要执行下述步骤。例如,对于每个从属表格,用户必需编码和执行下述示例性SQL语句。<pre listing-type="program-listing"><本文档来自技高网...

【技术保护点】
一种用于维护例外表的方法,包括步骤:生成包括预定例外表参数的控制语句;在一个检查实用程序中接收控制语句;为每个预定例外表参数生成SQL语句;和执行每个SQL语句,其中以执行至少一个SQL语句的功能来执行例外表的生成或删除。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:小阿曼多B伊西普
申请(专利权)人:联合想象计算机公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1