首页> 中国专利> 校验参照完整性中涉及的表空间的方法

校验参照完整性中涉及的表空间的方法

摘要

恢复实用程序或重新加载实用程序确定是否执行校验实用程序。如果执行校验实用程序,则恢复实用程序或重新加载实用程序将从属表名称记录到为作业步骤分配的永久虚拟存储器,而不是记录到为子任务分配的临时虚拟存储器。恢复实用程序或重新加载实用程序完成其工作之后,如果接下来是校验实用程序,当子任务结束时,那么数据库操作系统不会释放恢复实用程序或重新加载实用程序记录从属表空间名称的永久虚拟存储器(例如:数据区域)。终止恢复或重新加载实用程序后,永久数据区域可供校验实用程序使用。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2007-12-26

    专利权的终止未缴年费专利权终止

    专利权的终止未缴年费专利权终止

  • 2005-07-20

    授权

    授权

  • 2002-01-23

    实质审查的生效

    实质审查的生效

  • 2001-11-28

    公开

    公开

说明书

技术领域

本发明涉及数据库管理系统,更具体地说,本发明涉及对数据库管理系统中参照完整性涉及的表空间进行校验的校验方法。

背景技术

公知的数据库软件程序是由IBM公司推出的DATABASE 2(DB2)数据库软件。正如在本技术领域内众所周知的那样,DB2作为在IBM MVS操作系统软件下运行的计算机系统的子系统运行。在DB2环境下,用户数据常驻在表空间的DB2表内。例如,表空间为诸如磁盘驱动器等直接存取存储设备(DASD)内的存储空间的一部分。作为例子,以下示出可以存储在表空间内的订单项目(order_entry)表。该订单项目表含有列:客户编号(customer_number);产品编号(product_code;定单编号(order_number);顾客姓名(buyer_name);以及运送到的邮编(ship_to_zip)。

                        订单项目表

客户编号产品编号定单编号顾客姓名运送到的邮编 1111111111    0010 1234500001 John Doe    60606 1111111111    0040 1234500002 Jane Doe    70707 3333333333    0020 1234500003 Bill Smith    90909 2222222222    0030 1234500004 Fred Smith    80808

尽管在上述订单项目表内示出四行,但是此表可以具有百万行用于公司所有的订单,例如四百万行。例如,订单项目表还具有三个索引关键字和2个外部关键字。索引关键字为表内特定行的标识符,同时外部关键字也标识行但还用于如下所述的参照完整性。例如,订单项目表中,一个索引关键字基于定单编号,另一个索引关键字基于顾客姓名,第三索引关键字基于运送到的邮编。正如在本技术领域内众所周知的那样,特定表的索引关键字指示出行标识符和行的选定值(例如:索引关键字值)。

索引关键字可以用于产生表索引,利用索引可以更加方便地对表内特定数据进行检索。例如,订单项目表具有三个索引(例如:一个索引对应一个索引关键字),各索引被存储到索引空间。与表空间相同,例如,索引空间也是DASD的指定部分。因此,如果用户在订单项目表中查找含有特定买方名称的行,则数据库管理系统可以查询该表的买方索引以识别存在的所有买方名称,而无需为了定位该行读出整个表。

在为了快速访问数据库表而查找最佳索引结构时,DB2管理员分析访问数据库表的应用程序的性能特性。必须仔细选择被用作索引的数值,因为各索引会引起数据库系统的内务操作。例如,数据库表中的各事务(例如:添加或删除)要求表的各索引可以被更新。因此,为了提高应用程序的性能,就要求表的索引数最少。例如,根据表用户(主要为在线交易用户)访问最频繁的数据,选择被用作数据库表索引的数值。通常,索引关键字并不基于外部关键字,因为外部关键字主要用于确认目的(例如:约束强制)。

正如在本技术领域内众所周知的那样,数据库内的各表可以是父表、子表或者两者均可。子表通过外部关键字值或子表列内的数值与父表建立关系。例如,外部关键字值可以在子表中出现多次(例如:子表内的多个行可以具有相同的外部关键字,例如,订单项目表中的客户编号项和产品编号项),但是各外部关键字必须与子表的父表内的唯一关键字有关。

参照完整性可以确保各外部关键字值有效(例如:在父表内具有相应的主关键字)。因此,参照完整性(RI)是指当表内行的列中的数值也存在于另一个表的索引内时,此数值有效。如果行违背约束,它就不在表内。由于上述订单项目表具有两个外部关键字,所以它对客户编号和产品编号具有RI约束。正如在本技术领域内众所周知的那样,当DB2数据库管理系统的用户创建表时,该用户还对表的约束进行定义(例如:用户可以定义关系完整性标准)。以下示出的是典型产品表和典型客户表(例如:在订单项目表内的外部关键字的父表)。

                    产品表

    产品编号    产品说明    零售价格    00010膝上型个人计算机    1000.00    00020台式个人计算机    1100.00    00030商用个人计算机    1200.00    00040局域网个人计算机    3500.00    00050家用个人计算机    999.99

尽管此产品表只列出五行,但是该表可以具有上千行用于公司的不同产品。例如,该产品表具有基于产品编号列的索引,其值以升序排列。产品编号列内的值分别是唯一的,因为对每个产品只指定一个产品代码,所以产品代码在此表内只能出现一次。因此,产品表的索引可以包括关键字值(例如:在产品编号列内的存储值)和RID。产品表索引可以常驻在DB2索引空间内。

尽管以下示出的客户表仅列出四行,但是此表可以具有上升行用于公司的所有客户。例如,客户表具有基于客户编号列的索引,其值以升序排列。客户编号列内的值分别是唯一的,因为对每个客户名只指定一个客户编号,所以客户编号在此表内中只出现一次。因此,客户表索引可以包括关键字值(例如:客户编号列的值)和RID。客户索引也常驻在DB2索引空间内。

                     客户表

    客户编号    顾客姓名    客户地址    1111111111    Jone Doe    州A    2222222222    Fred Smith    州B    3333333333    Bill Smith    州C    4444444444    Steve Jones    州D

如上表所示,因为在订单项目表的产品编号列内的外部关键字值还存在于产品表内,并且订单项目表的客户编号列内的值还存在于客户表内,所以订单项目表内的所有行有效(例如:没有违背参照完整性约束)。

诸如DB2的传统数据库管理系统为用户提供识别特定条件的能力,行必须满足此特定条件才能被添加到表中。这些条件被称为“约束”,因为它们对行内可以包含的值进行约束。例如,约束包括校验约束和参照完整性约束。例如,校验约束包括对诸如邮政编码数值(例如:订单项目表内的运送到的邮编值)等特定数值的限度标准为00000至99999的范围。如上所述,参照完整性约束确保当表行内的数值也存在于另一个表索引内时此数值有效。

在将数据载入数据库表之前或在数据已被载入数据库表之后,进行约束强制(constraint enforcement)。在将数据载入数据库表后进行约束强制时,例如,作为软件故障时由硬件进行恢复运行的一部分,通常由校验实用程序(例如:IBM公司推出的校验实用程序DATA,BMC软件公司推出的校验实用程序PLUS以及Peatium技术公司推出的FAST校验实用程序。)进行约束强制。

传统的校验实用程序确保此表内的数据不违背对此表建立的任何约束。可以在创建表时建立约束。例如,最初在数据库系统中创建表时就可以对约束进行定义并将约束存储到DB2目录中,然后,校验实用程序可以查询DB2目录以识别约束信息。在转让给本专利受让人的标题为:“DYNAMIC DETERMINATION OF OPTIMAL PROCESS FORENFORCING CONSTRAINTS”的第09/151,750未决专利申请中说明了如何读取DB2目录,这里引用供参考。

为了实现约束强制,正如在本技术领域内众所周知的那样,例如,传统校验实用程序被初始化并可以通过读取DB2目录未识别将被校验的表的应用程序约束。例如,校验实用程序然后读取数据库表的各行并对校验约束违规和/或参照完整性约束违规进行校验。

有些DB2表具有参照完整性约束。例如,典型的应用系统具有3个父表和31个从属表。有些客户在一个应用系统中有21个父表之多。有多种情况可以改变数据库表。例如,此表可以由备份文件恢复或重新加载一组新数据。当父表被恢复或被重新加载时,从属表将与它们各自的父表保持异步状态。例如,恢复表可能使用几天前的旧备用文件,因此此恢复表会与恢复前的父表同步的从属表异步。

因此,对于恢复的各父表或重新加载的各父表,恢复实用程序或重新加载实用程序必须对其所有从属表进行识别,并且将这些从属表设置为“校验未决”状态。例如,通过读取上述DB2目录,可以实现对从属表的识别。正如在本技术领域内众所周知的那样,校验未决状态下的从属表不能被用户程序访问,直到校验实用程序被执行并对参照完整性违规进行校正。

当恢复或重新加载具有定义参照完整性约束的表空间时,客户必须运行Report Tablespace-Set实用程序,这样会产生需要校验的所有从属表空间的列表。

对于传统数据库系统中的重新加载操作,用户需要编码并运行传统加载实用程序,对应该重新加载的表进行命名。下例就是为传统加载实用程序设置的这种控制语句。

  LOAD RESUME NO REPLACEINTO TABLE CTINLAND.TBHAMEP1  LOAD RESUME NO REPLACEINTO TABLE CTINLAND.TBHAMEP2  LOAD RESUME NO REPLACEINTO TABLE CTINLAND.TBHAMEP3

由于重新加载操作使得重新加载表的从属表进入校验未决状态,所以加载实用程序的用户还需要编码并运行传统校验实用程序控制语句来命名所有从属表空间。以下是为传统校验实用程序设置的这种控制语句。

   CHECK DATA   ,TABLESPACE JTINLAND.SCHORDCT   ,TABLESPACE JTINLAND.SCHITMDI   ,TABLESPACE JTINLAND.SCHHDINF   ,TABLESPACE JTINLAND.SCHREFL2   ,TABLESPACE JTINLAND.SCHCMAIL   ,TABLESPACE JTINLAND.SCHBILDG   ,TABLESPACE JTINLAND.SCHFACFW   ,TABLESPACE JTINLAND.SCHEHRAC   ,TABLESPACE JTINLAND.SCHCOATI   ,TABLESPACE JTINLAND.SCHCTGCM    ,TABLESPACE JTINLAND.SCHSSTCK   ,TABLESPACE JTINLAND.SCHSRORD   ,TABLESPACE JTINLAND.SCPEPRCE   ,TABLESPACE JTINLAND.SQOMFGHD   ,TABLESPACE JTINLAND.SQOMFCHI   ,TABLESPACE JTINLAND.SQOMFCMT   ,TABLESPACE JTINLAND.SQOMFOVR								   ,TABLESPACE JTINLAND.SQOMFOVU   ,TABLESPACE JTINLAND.SQOMFMPL   ,TABLESPACE JTINLAND.SQOMFOVP   ,TABLESPACE JTINLAND.SQOMFCHE   ,TABLESPACE JTINLAND.SQOMFUNT   ,TABLESPACE JTINLAND.SQOMFTRQ   ,TABLESPACE JTINLAND.SCHEITMR   ,TABLESPACE JTINLAND.SCHORDFW   ,TABLESPACE JTINLAND.SCHORHLD   ,TABLESPACE JTINLAND.SCHREFRL   ,TABLESPACE JTINLAND.SCHRETYP   ,TABLESPACE JTINLAND.SCPEPICS   ,TABLESPACE JTINLAND.SCHERCYL   ,TABLESPACE JTINLAND.SCHCACKW

在传统数据库系统内的恢复操作过程中,用户需要编码并运行传统恢复实用程序来命名应该恢复的表空间。

如下是传统恢复实用程序控制语句的一个例子。

  RECOVER TABLESPACE JTINLAND.SCHAMEP1    TABLESPACE JTINLAND.SCHAMEP2    TABLESPACE JTINLAND.SCHAMEP3

此外,用户还需要编码并运行传统校验实用程序控制语句来命名来自例如Report Tablespace-Set实用程序的从属表空间。以下是为传统校验实用程序设置的控制语句的一个例子。

  CHECK DATA  ,TABLESPACE JTINLAND.SCHORDCT								  ,TABLESPACE JTINLAND.SCHITMDI  ,TABLESPACE JTINLAND.SCHHDINF  ,TABLESPACE JTINLAND.SCHREFL2  ,TABLESPACE JTINLAND.SCHCMAIL  ,TABLESPACE JTINLAND.SCHBILDG  ,TABLESPACE JTINLAND.SCHFACFW   ,TABLESPACE JTINLAND.SCHEHRAC   ,TABLESPACE JTINLAND.SCHCOATI   ,TABLESPACE JTINLAND.SCHCTGCM   ,TABLESPACE JTINLAND.SCHSSTCK   ,TABLESPACE JTINLAND.SCHSRORD   ,TABLESPACE JTINLAND.SCPEPRCE   ,TABLESPACE JTINLAND.SQOMFGHD   ,TABLESPACE JTINLAND.SQOMFCHI   ,TABLESPACE JTINLAND.SQOMFCMT   ,TABLESPACE JTINLAND.SQOMFOVR   ,TABLESPACE JTINLAND.SQOMFOVU   ,TABLESPACE JTINLAND.SQOMFMPL   ,TABLESPACE JTINLAND.SQOMFOVP   ,TABLESPACE JTINLAND.SQOMFCHE   ,TABLESPACE JTINLAND.SQOMFUNT   ,TABLESPACE JTINLAND.SQOMFTRQ   ,TABLESPACE JTINLAND.SCHEITMR   ,TABLESPACE JTINLAND.SCHORDFW   ,TABLESPACE JTINLAND.SCHORHLD   ,TABLESPACE JTINLAND.SCHREFRL   ,TABLESPACE JTINLAND.SCHRETYP   ,TABLESPACE JTINLAND.SCPEPICS   ,TABLESPACE JTINLAND.SCHERCYL   ,TABLESPACE JTINLAND.SCHCACKW

因此,父表空间的恢复过程或父表的重新加载过程,就是实用程序用户识别待校验的所有从属表空间的实质性工作。

不仅如此,在运行MVS或类似操作系统的大型机环境下,当执行程序时,可以将此程序看作MVS的作业。例如,当客户执行实用程序时,该实用程序属于必须被执行的作业步骤。当执行恢复操作时,恢复操作就是实用程序作业步骤的子任务。同样,当执行重新加载操作时,重新加载操作也属于实用程序作业步骤的子任务。当执行校验操作时,校验操作也属于实用程序作业步骤的子任务。MVS作业可以具有多项任务。执行子任务需要虚拟存储器(例如:内存)。

只要子任务需要虚拟存储器,MVS就提供。例如,当恢复实用程序或重新加载实用程序识别与被恢复或重新加载的父表有关的从属表时,实用程序将DB2目录和从属表名称读入为子任务分配的虚拟存储器,例如,这样就可以在恢复或重新加载之后将从属表置于校验未决状态。当子任务终止时,MVS将清除并释放任何分配的数据区域(例如:虚拟存储器),以至于其它子任务可以使用该数据区域。因此,当数据区域被释放时,删除释放存储区域内的数据(例如:从属表空间的名称),并且在后续应用中不能使用删除的信息。例如,需要校验各从属表的校验实用程序不能使用删除的信息。

本发明概述

根据本发明的实施例,恢复实用程序或重新加载实用程序确定是否执行校验实用程序。如果执行校验实用程序,则恢复实用程序或重新加载实用程序将从属表名称记录到为作业步骤分配的永久虚拟存储器,而不是记录到为子任务分配的临时虚拟存储器。恢复实用程序或重新加载实用程序完成其工作之后,如果接下来是校验实用程序,当子任务结束时,那么数据库操作系统不会释放恢复实用程序或重新加载实用程序记录从属表空间名称的永久虚拟存储器(例如:数据区域)。

因此,根据本发明实施例,当恢复实用程序或重新加载应用程序识别从属表空间名称时,它将名称记录到永久数据区域。终止恢复或重新加载实用程序后,永久数据区域可供校验实用程序使用。因此,校验实用程序不必确定待校验的从属表空间,例如:不要求校验实用程序额外地读取DB2目录。

附图的简要说明

图1示出根据加载实用程序的本发明实施例校验表空间方法的示意流程图。

图2示出根据恢复实用程序的本发明实施例校验表空间方法的示意流程图。

本发明的详细说明

图1示出根据加载实用程序的本发明实施例校验表空间方法的示意流程图。在步骤1010,剖析加载控制语句。例如,控制语句可以具有下例形式:

  LOAD RESUME NO REPLACEINTO TABLE CTINLAND.TBHAMEP1  LOAD RESUME NO REPLACEINTO TABLE CTINLAND.TBHAMEP2  LOAD RESUME NO REPLACEINTO TABLE CTINLAND.TBHAMEP3  CHECK DATA(JTINLAND.SCHAMEP1,JTINLAND.SCHAMEP2,JTINLAND.
SCHAMEP3)

正如在上述控制语句中说明的那样,加载控制语句包括校验实用程序控制语句(例如:“CHECK DATA JTINLAND.SCHAMEP1”)。相反,传统加载实用程序控制语句不包括校验实用程序控制语句。例如,对控制语句的剖析包括利用加载实用程序识别控制语句内的各项,这样加载实用程序就可以(例如以本技术领域内已知的方式)对命名表进行加载操作。上述加载控制语句的语法是典型语法。然而,如果加载实用程序可以处理选择的格式或语法,则可以使用任何所需的格式或语法。在步骤1020,例如,以本技术领域已知的方式对控制语句命名的表进行加载。

在步骤1030,确定在控制语句内是否识别校验数据实用程序。例如,根据本发明实施例,校验数据控制语句包含加载控制语句。因此,当加载实用程序剖析加载实用程序控制语句时,加载实用程序可以识别在加载实用程序之后运行校验实用程序。如果在控制语句中没有识别到校验数据实用程序,则将虚拟存储器(例如:内存)分配给子任务(例如:加载实用程序的执行)。例如,作为传统加载实用程序的一部分,MVS操作系统分配临时虚拟存储器(例如:获取任务子库内的数据结构)。正如在本技术领域内众所周知的那样,当子任务结束时,清除对任务子库分配的虚拟存储器(例如:释放)。如果在步骤1030识别校验实用程序,则在步骤1040,在作业步骤分配虚拟存储器。例如,MVS操作系统分配永久虚拟存储器(例如:获取作业步骤子库内的数据结构)。

在步骤1040或步骤1050后,例如以本技术领域内已知的方式将从属表设置为校验未决状态。在步骤1070,对例如包含在加载控制语句内的校验数据控制语句进行剖析以开始对数据的校验过程。在步骤1080,校验实用程序对在校验未决状态下命名表空间的数据结构进行定位。在步骤1090,例如以本技术领域已知的方式对数据进行校验。以下给出图1所示过程的典型实施例的伪码。

  Parseload control statements  Load named table  If check utilityis next   Getmain the data structures in jobstep subpool else   Getmain the data structures in task subpool endif  Set dependent tablespaces in check pending								  If check utmty is next  Parse check Data control statements  Check utility locates the data structures naming the  tablespaces in check pending  Perform Check Data process endif

因此,根据本发明实施例,在加载实用程序与校验实用程序之间设置接口,以利用加载实用程序已经完成的工作来对需要由校验实用程序校验的从属表进行命名。结果,由于加载实用程序完成此任务并将信息存储到永久虚拟存储器时,因此校验实用程序不需要读取DB2目录。所以,加载实用程序和校验实用程序的用户无需对校验实用程序识别所有从属表空间。

图2示出根据恢复实用程序的本发明实施例表空间校验方法的典型实施例。在步骤2010,剖析恢复控制语句。例如,控制语句可以具有下列形式:

  RECOVER TABLESPACE JTINLAND.SCHAMEP1   TABLESPACE JTINLAND.SCHAMEP2   TABLESPACE JTINLAND.SCHAMEP3   CHECK DATA JTINLAND.SCHAMEP1,  JTINLAND.SCHAMEP2,JTINLAND.SCHAMEP3

正如上述控制语句中所指出的那样,恢复控制语句包括校验实用程序控制语句(例如:“校验实用程序DATA JTINLAND.SCHAMEP1”)。相反,传统恢复实用程序控制语句不包括校验实用程序控制语句。例如,对控制语句的剖析过程包括由恢复实用程序对包含在控制语句内的项进行识别,例如,这样恢复实用程序就可以以本技术领域内已知的方式对命名表空间进行恢复操作。上述加载控制语句的语法是典型语法。然而,如果加载实用程序可以处理选择的格式或语法,则可以使用任何要求的格式或语法。在步骤2020,例如,以本技术领域已知的方式恢复控制语句命名的表空间。

在步骤2030,确定在控制语句内是否识别校验数据实用程序。例如,根据本发明实施例,校验数据控制语句包含恢复控制语句。因此,当恢复实用程序剖析恢复实用程序控制语句时,恢复实用程序可以识别在恢复实用程序之后运行校验实用程序。如果在控制语句中没有识别到校验数据实用程序,则将虚拟存储器(例如:内存)分配给子任务(例如:恢复实用程序的执行)。例如,作为传统恢复实用程序的一部分,MVS操作系统分配临时虚拟存储器(例如:获取任务子库内的数据结构)。正如在本技术领域内众所周知的那样,当子任务结束时,清除对任务子库分配的虚拟存储器(例如:释放)。如果在步骤2030识别校验实用程序,则在步骤2040,在作业步骤分配虚拟存储器。例如,MVS操作系统分配永久虚拟存储器(例如:获取作业步骤子库内的数据结构)。

在步骤2040或步骤2050之后,在步骤2060对未恢复的从属表空间进行识别。在步骤2070,例如以本技术领域已知的方式将从属表空间设置为校验未决状态。在步骤2080,对例如包含在恢复控制语句内的校验数据控制语句进行剖析以开始数据校验。在步骤2090,校验实用程序定位命名处于校验未决状态下的表空间的数据结构(例如:虚拟存储器)。在步骤2100,例如以本技术领域已知的形式进行数据校验。以下给出图2所示过程的典型实施例的伪码。

  Parse Recover control statements    Recover namedtablespaces  If Check Datais next   Getmain the data structures in jobstep subpool else   Getmain the data structures in task subpool endif  Identify dependent tablespaces that were not recovered  Set dependent tablespaces in check pending								  If Check Data is next  Parse Check Data control statements  Check Data locates the data structures naming the tablespaces  in check pending  Perform check Data process endif

因此,根据本发明实施例,在恢复实用程序与校验实用程序之间设置接口,以利用恢复实用程序已经完成的工作对需要由校验实用程序校验的从属表进行命名。结果,由于当恢复实用程序完成此任务并将信息存储到永久虚拟存储器时,因此校验实用程序不需要读取DB2目录。所以,校验实用程序用户无需对校验实用程序识别所有从属表空间。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号