CN102693174B - 一种面向对象代理数据库约束的备份方法 - Google Patents
一种面向对象代理数据库约束的备份方法 Download PDFInfo
- Publication number
- CN102693174B CN102693174B CN201210183862.3A CN201210183862A CN102693174B CN 102693174 B CN102693174 B CN 102693174B CN 201210183862 A CN201210183862 A CN 201210183862A CN 102693174 B CN102693174 B CN 102693174B
- Authority
- CN
- China
- Prior art keywords
- backup
- class
- information
- dependence
- attribute
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种面向对象代理数据库约束的备份方法,包括步骤:步骤1,对于一个需要进行备份的对象代理数据库,确定相关数据库系统表中保存的约束信息;步骤2,根据步骤1所确定的约束信息进行可备份对象链构建,包括为每个可备份对象创建对象模式信息,获取类对象的对象数据和局部依赖信息,以及加入全局依赖信息,得到一个可备份对象链;步骤3,进行可备份对象安全排序,包括对步骤2所得可备份对象链中所有可备份对象进行重新排序,然后按可备份对象之间的依赖关系进行拓扑排序,得到一个可备份对象的安全序列。
Description
技术领域
本发明属于数据库备份领域,特别是一种针对对象代理数据库管理系统中约束的备份方法。
背景技术
随着数据库的应用领域不断扩大,传统的关系型数据库和面向对象数据库已不能应对逐渐出现的数据海量化、数据对象复杂化、数据操作灵活性、数据存储高效性等挑战。为了解决复杂数据管理的需求,提出了基于对象代理的数据管理模型,并在此模型基础上开发了对象代理数据库TOTEM。由于对象代理数据库能很好地解决传统数据库面临的主要问题,它已被广泛应用于微生物信息服务系统、音乐服务系统、专利管理与服务系统、社区管理系统、地理信息系统等多个领域。随着对象代理数据库里信息量的急剧增加,如何保证数据的安全性和数据恢复能力越来越受到人们的关注,数据库备份作为保证数据库在故障发生时保障数据库可恢复性的技术显得尤为重要。
备份数据库的方法通常可以使用文件系统备份和结构化查询语言备份两种方式。其中文件系统备份的策略是直接拷贝用于存放数据库数据的文件,但这种方法存在过于依赖特定操作系统的不足。不同的操作系统环境下文件系统的具体实现不同,因此文件系统备份策略无法实现跨文件系统平台的兼容性。结构化查询语言转储的方法是创建一个文本文件,里面包含了模式和数据相关的结构化查询语言命令,当把这个文件反馈给目标服务器时,将重建与转储时状态一样的数据库。相对于文件系统备份策略,结构化查询语言转储策略显然有更好的文件系统平台无关性。因此,本发明中的对象代理数据库备份机制是基于结构化查询语言转储策略的。
目前常用的数据库中,关系数据库中不支持类和对象,而面向对象数据库及对象关系数据库中类的对象间不存在任何的依赖关系,对象代理数据库不仅保留了类、对象和方法的概念,还在类间、对象间、类与对象间存在依赖关系。正是由于传统数据库与对象代理数据库的这些区别,所以传统的数据库备份方法不能适用于对象代理数据库。
在对象代理数据库中,可备份对象包括命名空间、类型、方法、聚集函数、操作符、操作符类、编码转换、类、属性的默认值声明、索引、重写规则、触发器、约束、过程语言、类型转换、对象数据、大对象、大对象评论等。其中,触发器、规则等备份对象类似于传统数据库,可从系统表中直接读取;类对象数据可从对象文件中读取。而类之间的依赖、类和对象之间的依赖、对象之间的依赖等属于对象代理数据库中特有的约束,因此本发明主要涉及对象代理数据库约束的备份。
对象代理数据库系统的数据由一系列的对象和代理对象表示。数据库的模式被组织成代理层次,由一组类和代理类构成。对象代理数据库系统提供丰富的查询功能,既支持对类和代理类进行查询,也可以进行导航式的跨类查询。对象代理数据库中代理对象依赖于其源对象而存在,是通过代理关系定义的对象。实际上,代理关系是通过切换操作所表示的继承关系,而代理对象可以理解为可扩展的半物化对象视图。由于代理对象可以选择性继承源对象的部分(或全部)属性、方法,因此利用代理对象可以实现对象视图;可扩展是指在传统的继承机制外,允许代理对象扩展定义新的属性;半物化是指代理对象既有虚属性又有扩展定义的实属性。虚属性定义中包含两类操作:读切换操作、写切换操作。读切换操作可以看成一个从源属性到虚属性的函数变换,而写切换操作可以看成一个从虚属性到源属性的逆变换。当需要读取虚属性值时,需要调用其读切换操作计算其值。而对虚属性执行写操作时,需根据虚属性的更新值,调用其写切换操作计算出源属性的更新值,再对源属性执行写操作。代理对象的属性和源对象的属性之间的函数变换关系称之为切换操作;相对应的代理类和源类之间的切换操作函数依赖关系称之为切换依赖。
在对象代理数据库中,类定义了具有相同属性和方法的对象,类的模式即为对象的数据模式;类对象即为类的实例。依赖约束反映了类结构内部属性间的依赖以及类间、对象间、类与对象间的约束关系。根据对象代理数据库的机制,其类模式及各种依赖约束关系均存储在系统表中,类对象数据存储在类数据文件中。在进行数据库的备份时,需要从各相关系统表中抽取模式及依赖的信息及从数据文件中抽取对象的信息来构建用于数据库恢复的结构化查询语言语句。这样在恢复目标数据库时,对象代理数据库类模式和类对象的备份与传统数据库的备份相似,通过抽取系统表中的相关信息构建结构化查询语言语句,在恢复时执行这些结构化查询语言语句即可恢复与备份目标数据库一致的恢复目标数据库。
发明内容
本发明针对现有技术不足,提供了一种面向对象代理数据库约束的备份方法,该方法不仅能备份类模式和类对象数据,还能备份类间、对象间、类与对象间的约束关系。
本发明提供的一种面向对象代理数据库约束的备份方法,包括以下步骤:
步骤1,对于一个需要进行备份的对象代理数据库,提取相关数据库系统表中保存的约束信息;
步骤2,根据步骤1所得约束信息进行可备份对象链构建,包括为每个可备份对象创建对象模式信息,获取类对象的对象数据和局部依赖信息,以及加入全局依赖信息,得到一个可备份对象链;
步骤3,进行可备份对象安全排序,包括对步骤2所得可备份对象链中所有可备份对象进行重新排序,然后按可备份对象之间的依赖关系进行拓扑排序,得到一个可备份对象的安全序列。
而且,根据步骤1所确定的约束信息进行可备份对象链构建时,其具体步骤为:
为每个可备份对象创建对象模式信息的实现方式为,获取出所有需要导出的可备份对象的对象模式信息,将可备份对象的对象模式信息保存在导出结构体中;
获取类对象的对象数据的实现方式为,循环扫描每一个模式表,判断是否是需要备份的类对象,如果是,则为类对象的对象数据分配存储表数据信息的空间以及备份标识符,备份标识符从1开始递增;并将类对象的导出结构体存入备份标识符数组中,且备份标识符数组下标为其备份标识符;
加入全局依赖信息的实现方式为,检索到具有依赖关系的可备份对象对后,通过对具有依赖关系的两个对象分别对应的对象标识符搜索得到对应的导出结构体,然后给两个对应的导出结构体加入依赖上的联系,依赖对象的对象标识符存放在被依赖对象结构体的依赖对象标识符信息中。
而且,对步骤2所得可备份对象链中所有可备份对象进行重新排序时,不同类型的可备份对象的导出优先级取决于可备份对象类型优先级数组,可备份对象类型优先级数组记录了可备份对象的类型排序和对象标识符排序结果,相同类型的可备份对象按照名称排序;按可备份对象之间的依赖关系进行拓扑排序的实现方式为,依赖于其他对象的对象,其备份总是在其依赖的对象备份后进行。
而且,相关的数据库系统表包括tt_class、tt_attribute、tt_constraint、tt_proc、tt_depend、tt_deputytype、tt_deputy、tt_bipointer和tt_mapping,
系统表tt_class记录所有类的定义信息,系统表tt_attribute记录所有类的属性描述信息,系统表tt_constraint记录类上的局部依赖信息,系统表tt_proc记录类的方法描述信息,系统表tt_depend记录对象之间的切换依赖关系,系统表tt_deputytype记录代理类的相关代理信息,系统表tt_deputy记录源类和代理类间的关系,系统表tt_bipointer记录对象和代理类间的关系,系统表tt_mapping记录类和对象与其物理地址的映射关系。
本发明技术方案的效果在于,由于传统的数据库模型中不存在对象与对象间的依赖约束关系,所以传统的数据库备份方式不适用于对象代理数据库,针对对象代理数据库提出了一种保存依赖约束关系的备份技术。本发明针对对象代理模型中类间、对象间、类与对象间存在约束关系分别设计了高效的备份方法;提供了对象代理数据库约束信息存储方案;并针对各种依赖约束关系提出了构建可备份对象链和可备份对象的安全排序。本发明提出的一种适用于对象代理数据库的约束备份方法,其特点在于能够备份类间、对象间、类和对象间的依赖约束关系,克服了传统备份方法不能应用在对象代理模型上的缺陷,同时备份过程简单高效。
附图说明
图1是本发明实施例中备份系统的框架图。
图2是本发明实施例中相关系统表的关系图。
图3是本发明实施例中类模式的获取流程图.
图4是本发明实施例中类的属性模式的执行流程图。
图5是本发明实施例中模式对象间的依赖关系图。
图6是本发明实施例中数据对象间的依赖关系图。
具体实施方式
本发明提供一种面向对象代理数据库约束的备份技术方案。本发明分析了对象代理模型中类间、对象间、类与对象间存在约束关系的特殊性,将约束信息保存在数据库系统表中;通过收集依赖信息,为每个可备份对象创建可备份对象数据结构链;对可备份对象按照对象间的依赖约束关系进行排序,保证了可备份对象间备份顺序的正确性。这种技术方案具有良好的约束备份完整性和安全性,并且实施过程简单高效。
以下说明理论基础以便理解本发明技术方案:
对象代理模型是对面向对象模型的扩充。对象代理模型在面向对象模型的类和对象等概念的基础上,通过建立代理类和代理对象来满足复杂数据的管理需求。关系数据模型的灵活性在于关系表可以通过关系代数进行分割和重组,变换其表现形式以满足不同数据库应用的需要。面向对象数据模型将数据和操作封装成对象,对象本身难以分割和重组,因此其柔软性较差。将代理对象引入到面向对象数据模型,使得代理对象间接地分割和重组对象,从而增强对象表示数据的柔软性。在传统面向对象模型中,继承通常表现为子类继承其父类的所有属性和方法,这种继承造成了传统面向对象数据库的模式很僵硬。而在对象代理模型中,代理对象可以继承源对象的部分或者全部属性和方法,同时可以根据应用需要增加源对象没有的属性和方法,这样就增强了数据库模式的灵活性。代理对象既可以作为对象的视图,又可以作为对象的角色。对象的角色随时间的变化可以看成对象的移动。因此,代理对象可将这三个概念统一起来处理。
现有技术中,基于对象代理模型和复杂数据管理的实际需求,开发了一个对象代理数据库TOTEM。对象代理数据库系统在体系结构上沿用了传统数据库系统的体系结构,系统由存储管理、查询处理与并发控制等系统模块组成,其模块结构如图1所示:在数据库的备份过程中,首先通过连接管理系统(提供终端连接、应用程序、转储和恢复)链接备份目标数据库,然后编译查询系统对备份命令进行编译执行(包括分析编译、查询优化、查询执行、更新迁移),与此同时需要对事务处理系统的相关支持(包括并发控制、事务管理、日志管理),最后需要通过存储管理系统进行数据的读取(包括索引、缓冲区、存储器)。对象代理数据库系统既有关系数据库系统灵活管理数据的优点,又继承了面向对象数据库系统在复杂数据管理方面的优势,同时避免类似对象关系数据库系统一样在一个系统中实现两个数据模型的缺点。对象代理数据库系统的数据由一系列的对象和代理对象表示。数据库的模式被组织成代理层次,由一组类和代理类构成。对象代理数据库系统提供丰富的查询功能,既支持对类和代理类进行查询,也可以进行导航式的跨类查询。相对以往的面向对象数据库系统而言,对象代理数据库系统支持灵活对象视图、对象动态分类和跨类查询等高级数据库功能,可以满足更多复杂数据管理应用的需求。
代理对象依赖于其源对象而存在,是通过代理关系定义的对象。实际上,代理关系是通过切换操作所表示的继承关系,而代理对象可以理解为可扩展的半物化对象视图。由于代理对象可以选择性继承源对象的部分(或全部)属性、方法,因此利用代理对象可以实现对象视图;可扩展是指在传统的继承机制外,允许代理对象扩展定义新的属性;半物化是指代理对象既有虚属性又有扩展定义的实属性。
对象代理模型的灵活性和柔软性使之能表达的语义比传统的面向对象模式更加丰富。但应该注意到,现实世界中往往有些约束条件将限定数据库模式的定义,这些约束条件一旦被打破,不但不能准确表达设计者的意图,而且还将引起数据库模式的异常。所以,如何正确完整地表述和备份约束条件,是对象代理数据库的基本功能。
全局依赖用于描述对象代理数据库模式中类(或者代理类)之间的依赖关系。由于对象代理数据库模式不存在传统面向对象模式中特殊化—一般化的继承关系,所以类之间的联系主要是类(或者代理类)之间的“代理”关系。源类与代理类之间通过切换操作实现属性和方法的更新迁移,从语义角度分析此机制就是将源类中满足一定条件的对象按照一定语义关联重新组合构成代理类。因此全局依赖是与对象的生成方式相联系的。
对象代理模型通过切换操作实现源类属性到代理类属性的选择性虚拟继承,因此,具有切换操作关联的源类与代理类之间存在着依赖关系。
对象代理模型中的代理类按其产生方式被分为4种:选择代理类,连接代理类,分组代理类和联合代理类,它们分别对应代理类的4种语义。其中,选择代理类只从一个源类中选择对象来派生代理对象,连接代理类通过组合若干个类的对象来派生代理对象,分组代理类对其源类的对象进行分组之后按组来派生代理对象,联合代理类则派生若干个类的对象全体进行合并构成代理类。源类中所有满足“条件”的对象都将在代理类中生成相应的代理对象,所以,源类与由条件控制生成的代理类具有对应的依赖关系,根据条件所表达的语义不同,依赖关系对应地分为4种:选择依赖、连接依赖、分组依赖和联合依赖。
以下结合实施例详细说明本发明技术方案,包括详述全局依赖和局部依赖在备份过程中的备份方法,即可备份对象链的构建和可备份对象的安全排序,并简单介绍了对应的数据库恢复方案。下面结合在对象代理数据库TOTEM上的具体实施步骤进一步说明,具体实施时可采用计算机软件技术实现自动运行流程。
步骤1,对于一个需要进行备份的对象代理数据库,提取相关数据库系统表中保存的约束信息。
在对象代理数据库中,类、代理类与其虚属性的切换表达式均保存在系统表中,类和代理类的实例则保存在数据文件中。对象代理模式由类(或者代理类)与类之间所必须满足的约束条件共同构成,约束条件也称为依赖约束。提取实现根据具体的对象代理数据库进行。
实施例中,保存约束信息的相关数据库系统表主要包括tt_class、tt_attribute、tt_constraint、tt_proc、tt_depend、tt_deputytype、tt_deputy、tt_bipointer、tt_mapping。
各表意义如下表所示:
系统表 | 相关描述 |
tt_class | 所有类的定义信息 |
tt_attribute | 所有类的属性描述信息 |
tt_constraint | 类上的局部依赖信息 |
tt_proc | 类的方法描述信息 |
tt_depend | 对象之间的切换依赖关系 |
tt_deputytype | 代理类的相关代理信息 |
tt_deputy | 记录源类和代理类间的关系 |
tt_bipointer | 记录对象和代理类间的关系 |
tt_mapping | 类和对象与其物理地址的映射关系 |
类模式的定义主要存储在tt_class、tt_attribute、tt_proc等系统表中,其中系统表tt_class存储类的各种信息;系统表tt_attribute存储类属性模式;系统表tt_proc存储类方法;系统表tt_deputy存储类和类之间的代理关系;系统表tt_deputytype存储代理类型和代理细节。类对象存储在数据文件中,通过系统表tt_mapping映射具体的类对象与实际物理地址之间的关系。依赖约束关系在系统表中的存储情况为:检查约束、主键、唯一约束的外键约束等信息存储在系统表tt_constraint中;对象之间的依赖关系存储在系统表tt_depend中;源类与代理类间的依赖约束关系存储在系统表tt_deputy中;类与对象间的依赖存储在系统表tt_bipointer中。
各系统表间的关系如图2所示:基本类及代理类的各种信息、类属性模式、类方法及检查约束、主键、唯一约束的外键约束等信息存储在系统表tt_class、tt_attribute、tt_proc、tt_constraint中;代理类型和代理细节存储在系统表tt_deputytype中;源类与代理类间、类与对象间的依赖约束关系存储在系统表tt_deputy、tt_bipointer中;对象标识符与对象实际物理地址间的映射关系存储在系统表tt_mapping中;基本类的实例为基本类对象,而代理类的对象根据其所属代理类的代理信息可以确定该代理对象为宽松代理类对象或严格代理类对象。
下面详述各表tt_class、tt_attribute、tt_constraint、tt_proc、tt_depend、tt_deputytype、tt_deputy、tt_bipointer、tt_mapping中记录的信息:
tt_class中记录着类、索引或者序列等信息。其保存的信息包括类、索引、视图等的名字,标识符,所有者,类型(普通表r,索引i,序列S,视图v,复合类型c, 大对象数据t,基本类C,代理类D)等相关信息。
tt_attribute中记录着所有类的属性描述信息。其保存的信息包括属性所属类的名称,属性名称,数据类型,代理标志等相关信息。
tt_constraint中记录着类中的检查约束、唯一约束等信息。其保存的信息包括约束名称,标识符,约束类型,约束所在的表或者类等相关信息。
tt_proc中记录着对象代理数据库中的函数、存储过程和类/代理类的方法。其保存的信息包括方法名称,方法的参数相关信息,所属类的标识符,继承自源类的标识符。
tt_depend中记录着对象之间的依赖关系。其保存的信息包括有依赖对象所在的系统表的标识符,指定的有依赖对象的标识符,被引用对象所在系统表的标识符,指定的被引用对象的标识符,该依赖关系的定义语句等信息。其记录表示被引用的对象不能在有依赖的对象被删除前删除。但是,还有几种由代理类型定义的情况:
(1)独立创建的对象之间的一般关系。有依赖的对象可以在不影响被引用对象的情况下删除。被引用对象只有在声明了级联模式的情况下删除,这时有依赖的对象也被删除。
(2)有依赖对象可以和被引用对象分别删除,并且如果删除了被引用对象则应该被自动删除(不管是约束模式或级联模式)。
(3)有依赖的对象是作为被引用对象的一部分创建的,实际上只是它的内部实现的一部分。删除有依赖对象是不能直接允许的(将告诉用户发出一条删除被引用对象的命令)。一个对被引用对象的删除将传播到有依赖对象,不管是否声明了级联模式。
(4)没有依赖对象,这种类型的记录标志着系统本身依赖于被引用对象,因此这个对象决不能被删除。这种类型的记录只有在数据库初始化的时候创建。有依赖对象的字段里是零。
tt_deputytype中记录着理类的类型及其对象的代理规则。其保存的信息包括代理类名称,代理类标识符,代理类类型,代理层次及代理规则描述信息。
tt_deputy中记录着源类和代理类间的关系,如果一个代理类有数个源类,则分别记录这些代理关系。其保存的信息包括源类标识符、代理类标识符,代理序列号等信息。
tt_bipointer中记录着源类,代理类,源对象,代理对象之间的映射关系,每个对象都在该表中对应着一行记录,该对象的所有代理对象集和源对象集都被记录着。其保存的信息包括源类标识符,源对象标识符,代理类标识符,代理对象标识符等信息。
tt_mapping中记录着对象标识符与对象实际物理地址间的映射关系。其保存的信息包括类标识符,对象标识符,物理地址指针等信息。
步骤2,根据步骤1所得约束信息进行可备份对象链构建,包括为每个可备份对象创建对象模式信息,获取类对象的对象数据和局部依赖信息,以及加入局部依赖信息,得到一个可备份对象链。
收集模式对象信息要扫描所有的模式对象,根据对象类型调用不同的处理函数进行信息收集,并为每一个对象创建可备份对象数据结构,最后返回一个可备份对象数据结构链。
收集数据对象信息时,循环扫描每一个模式表,判断其是否是需要备份的类,如果是,则为数据对象分配存储表数据信息的空间以及备份标识符,并填入依赖关系。
每获得一个可备份对象,系统都会为其分配一个备份标识符(从1开始递增),并将该对象的信息结构体存入备份标识符数组中,且数组下标为其备份标识符。最后根据备份标识符来扫描备份标识符数组,就可以获得一个可备份对象链。
步骤2.1,创建对象模式信息:
对于数据库中的每个可备份对象,收集的可备份对象模式信息包括:控制信息、类的类型、关系表空间、索引信息、规则、对象标识符信息、检查表达式的个数、触发器的个数、具有的数字序列的对象标识符、数字序列的个数、属性个数、属性名称、属性的类型名称、特定属性类型的修饰符、属性类型的存储模式、序列属性的信息、属性是否为空、属性的定义信息、属性被继承信息、属性默认继承信息、非空属性继承信息、约束表达式信息、父类数量、父类信息、代理类实属性数量、非严格代理类信息、非严格代理类父类名等。
类模式获取返回所有的现存的类和代理类的模式信息,它的主要处理流程如图3所示:构建普通类和表的检索语句、检索普通类和表的模式信息、构建代理类检索语句、检索代理类的模式信息、提取并保存各类的模式信息,分为普通类、代理类,代理类又分为严格代理类和非严格代理类。构建的检索语句是为了从系统表中获取类模式的信息,如代理类的模式信息主要来自于系统表tt_class,tt_depend,tt_deputy,tt_deputytype。
类的属性模式的执行流程如图4所示:
步骤a,对所有的类进行循环遍历;
步骤b,判断此类是否是一个视图,是则返回步骤a,否则进入步骤c;
步骤c,判断是否需要搜集属性信息,否则返回步骤a,是则进入步骤d;
步骤d,检索系统表中的属性信息,提取属性信息写入类模式中。
默认如果是视图的话则不需要检索其列模式,因为已经在其源类中进行了处理;同时,如果该类不需要搜集属性信息也不去检索。值得注意的是,在提取类的属性信息时,需要从tt_attribute系统表中检索实属性的信息,通过上条方法我们可以得到具有对应对象标识符的代理类的实属性的数量。
获取可备份对象模式信息后,为每个可备份对象分配一个导出结构体,导出结构体中记录了可备份对象的数据类型、系统表中对象标识符信息、备份标识符信息、可备份对象的名称、命名空间、依赖对象的对象标识符信息、有效的依赖个数、已经分配的依赖个数等。
步骤2.2,获取类对象的对象数据和局部依赖信息:通过遍历每一个数据对象,找到其模式对象的所有依赖对象,判断这些依赖对象是否存在对应的数据对象,如有,则建立数据对象间的依赖关系。
实际上这里并不是真正获得类对应对象的数据,而是为某类的所有对象建立一个可导出的数据对象。收集数据对象信息时,循环扫描每一个模式表,判断其是否是需要备份的类,如果是,则为数据对象分配存储表数据信息的空间以及备份标识符,备份标识符从1开始递增。将该对象的信息结构体存入备份标识符数组中,且数组下标为其备份标识符。在导出结构体中填入依赖关系。
收集对象之间的依赖关系,通过扫描系统表tt_depend的内容,将对象的依赖关系记录到对象的依赖属性中。如上tt_depend系统表所述,在所有情况下,一个tt_depend记录表示被引用的对象不能在有依赖的对象被删除前删除。
在对象关系数据库中,数据对象只依赖于其对应的模式对象,因为数据对象之间没有任何依赖关系。在对象代理模型中,提出了源对象和代理对象的概念,数据对象之间也存在着依赖。
模式对象C、C 1 、C 2 、C 1.1 、C 1.2 等的依赖关系如图5所示,其对应的数据对象分别为C’、C 1 ’、C 2 ’、C 1.1 ’、C 1.2 ’。第0层基本类包括C,第1层代理类包括C 1 、C 2 ,第2层代理类包括C 1.1 、C 1.2 、C m1 、C m.2 …第m层代理类包括C m 。在对象关系数据库中,数据对象并不存在如上图所示的依赖关系,而仅仅是数据对象C’依赖于模式对象C,数据对象C 1 ’依赖于模式对象C 1 ……。于是,本发明依照模式对象的依赖关系,构建数据对象的局部依赖关系。如图6所示,由上层实线和中层虚线来构建下层实线所代表的依赖关系。获得类对应的对象之间的依赖关系并且将此依赖加入导出结构体的步骤如下:
步骤a,忽略所有的视图和序列;
步骤b,获取类的对象个数;
步骤c,为每个类的对象分配一个导出结构体;
步骤e,为每个类的对象的导出结构体设置相应的对象标识符信息、备份标识符信息、可备份对象的名称、命名空间信息;
步骤f,为每个类的对象的导出结构体设置依赖对象的对象标识符信息、有效的依赖个数、已经分配的依赖个数等依赖信息。
步骤2.3,加入全局依赖信息:
依赖信息通过对系统表tt_depend进行检索而得到。加入全局依赖信息的实现方式为,检索到具有依赖关系的可备份对象对后,通过对具有依赖关系的两个对象分别对应的对象标识符搜索得到对应的导出结构体,然后给两个对应的导出结构体加入依赖上的联系,依赖对象的对象标识符存放在被依赖对象结构体的依赖对象标识符信息中。
基于以上收集的对象的依赖关系,根据备份标识符来扫描备份标识符数组,即可获得一个可备份对象链。
因此,在可备份对象的构建过程中,通过扫描所有可备份对象,进行依赖信息收集,为每个对象创建数据结构,返回可备份对象数据结构链这一系列动作,将对象代理数据库中的局部依赖进行很好的备份,同时保证了备份过程中类的内部属性间依赖约束的完整性。
步骤3,进行可备份对象安全排序,包括对步骤2所得可备份对象链中所有可备份对象进行重新排序,然后按可备份对象之间的依赖关系进行拓扑排序,得到一个可备份对象的安全序列。
由于对象代理数据库中数据对象间的依赖约束关系(即前文所述的全局依赖),在进行数据库的备份时,需要对可备份对象按照对象间的依赖约束关系进行排序,这样方能保证对象间排序的正确性(即此处提到的安全性)。对可备份对象的安全排序分为两步,第一步把所有对象重新排序,不同类型的对象的导出优先级取决于对象类型优先级数组,相同类型的对象按照名称排序;第二步按照对象之间的依赖关系进行拓扑排序,由此得到一个安全序列。
步骤3.1,对所有可备份对象进行重新排序:
与基本类不同的是,代理类需要增加对tt_deputytype中的代理层次检索,用来对可备份对象链中的排序结果进行初次排序,保证层次越高的类能越优先被导出。需要注意的是,这里也提取了代理类的结构化查询创建语句,检索代理类创建语句是为了区分严格代理类与非严格代理类,具体的区分方法为:将创建语句中的字母字符统一转化为大写;匹配创建语句中是否含有“CREATE IMPRECISE”子字符串;如果有“CREATE IMPRECISE”子字符串则说明该代理类为非严格代理类。通过从tt_class系统表中检索出对应的源类名,从而构建对应的非严格代理类结构化查询导出语句。
对经过上一个排序后的有序导出序列按照对象的类型进行快速排序。快速排序的比较基准为导出结构体中的数据类型和对象标识符,先比较数据类型,如果数据类型相同再比较对象标识符。
步骤3.2,按可备份对象之间的依赖关系进行拓扑排序:
在对象代理数据库中每个对象都有标识其唯一性的标识符,且按照从小到大的顺序进行分配。在可备份对象的安全排序第二步中,根据对象间的依赖约束关系对可备份对象进行拓扑排序,其检测循环依赖关系的过程为:
步骤a,扫描约束,对于每个对象,生成一个约束值,该约束值表明了其制约的对象个数;
步骤b,初始化堆;
步骤c,找约束值为0的对象,将其入堆;
步骤d,选择最大地址堆成员,将其从堆中删除,并存入下标递减的数组中,同时将约束该对象的所有对象的约束值减1;若减1以后的对象约束值为0的话,同样将其入堆;
步骤e,循环步骤d;
步骤f,若堆为空时,数组下标不为0,则表明存在循环依赖关系,找出依赖环并进行修复。
因此,在可备份的安全排序过程中,按照对象间的依赖关系对对象进行拓扑排序其实就实现了对象间的依赖约束的备份,这样在数据库恢复的过程中,按照这个安全排序进行恢复即可保证数据库全局依赖的完整性。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
Claims (4)
1.一种面向对象代理数据库约束的备份方法,其特征在于,包括以下步骤:
步骤1,对于一个需要进行备份的对象代理数据库,提取相关的数据库系统表中保存的约束信息;
步骤2,根据步骤1所得约束信息进行可备份对象链构建,包括为每个可备份对象创建对象模式信息,获取类对象的对象数据和局部依赖信息,以及加入全局依赖信息,得到一个可备份对象链;所述获取类对象的对象数据和局部依赖信息包括通过遍历每一个数据对象,找到其模式对象的所有依赖对象,判断这些依赖对象是否存在对应的数据对象,如有,则建立数据对象间的依赖关系;
对于数据库中的每个可备份对象,收集的可备份对象模式信息包括控制信息、类的类型、关系表空间、索引信息、规则、对象标识符信息、检查表达式的个数、触发器的个数、具有的数字序列的对象标识符、数字序列的个数、属性个数、属性名称、属性的类型名称、特定属性类型的修饰符、属性类型的存储模式、序列属性的信息、属性是否为空、属性的定义信息、属性被继承信息、属性默认继承信息、非空属性继承信息、约束表达式信息、父类数量、父类信息、代理类实属性数量、非严格代理类信息、非严格代理类父类名;
步骤3,进行可备份对象安全排序,包括对步骤2所得可备份对象链中所有可备份对象进行重新排序,然后按可备份对象之间的依赖关系进行拓扑排序,得到一个可备份对象的安全序列;对步骤2所得可备份对象链中所有可备份对象进行重新排序的实现方式为,不同类型的可备份对象的导出优先级取决于可备份对象类型优先级数组,可备份对象类型优先级数组记录了可备份对象的类型排序和对象标识符排序结果,相同类型的可备份对象按照名称排序。
2.如权利要求1所述面向对象代理数据库约束的备份方法,其特征在于:步骤2中,
为每个可备份对象创建对象模式信息的实现方式为,获取出所有需要导出的可备份对象的对象模式信息,将可备份对象的对象模式信息保存在导出结构体中;
获取类对象的对象数据的实现方式为,循环扫描每一个模式表,判断是否是需要备份的类,如果是,则为数据对象的对象数据分配存储表数据信息的空间以及备份标识符,备份标识符从1开始递增;并将数据对象的导出结构体存入备份标识符数组中,且备份标识符数组下标为其备份标识符;
加入全局依赖信息的实现方式为,检索到具有依赖关系的可备份对象对后,通过对具有依赖关系的两个对象分别对应的对象标识符搜索得到对应的导出结构体,然后给两个对应的导出结构体加入依赖上的联系,依赖对象的对象标识符存放在被依赖对象结构体的依赖对象标识符信息中。
3.如权利要求1所述面向对象代理数据库约束的备份方法,其特征在于:步骤3中,
按可备份对象之间的依赖关系进行拓扑排序的实现方式为,依赖于其他对象的对象,其备份总是在其依赖的对象备份后进行。
4.如权利要求1或2或3所述面向对象代理数据库约束的备份方法,其特征在于:相关的数据库系统表包括tt_class、tt_attribute、tt_constraint、tt_proc、tt_depend、tt_deputytype、tt_deputy、tt_bipointer和tt_mapping,
系统表tt_class记录所有类的定义信息,系统表tt_attribute记录所有类的属性描述信息,系统表tt_constraint记录类上的局部依赖信息,系统表tt_proc记录类的方法描述信息,系统表tt_depend记录对象之间的切换依赖关系,系统表tt_deputytype记录代理类的相关代理信息,系统表tt_deputy记录源类和代理类间的关系,系统表tt_bipointer记录对象和代理类间的关系,系统表tt_mapping记录类与其物理地址和对象与其物理地址的映射关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210183862.3A CN102693174B (zh) | 2012-06-06 | 2012-06-06 | 一种面向对象代理数据库约束的备份方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210183862.3A CN102693174B (zh) | 2012-06-06 | 2012-06-06 | 一种面向对象代理数据库约束的备份方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102693174A CN102693174A (zh) | 2012-09-26 |
CN102693174B true CN102693174B (zh) | 2015-02-18 |
Family
ID=46858648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210183862.3A Expired - Fee Related CN102693174B (zh) | 2012-06-06 | 2012-06-06 | 一种面向对象代理数据库约束的备份方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102693174B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111797090B (zh) * | 2019-09-16 | 2022-07-22 | 厦门雅基软件有限公司 | 描述信息的存储方法、描述信息的访问方法和装置 |
CN110928899B (zh) * | 2019-11-29 | 2023-06-20 | 中孚安全技术有限公司 | 一种通用数据库备份方法及系统 |
CN113032408B (zh) * | 2019-12-24 | 2024-05-07 | 阿里巴巴集团控股有限公司 | 数据处理方法、系统及设备 |
CN112163024B (zh) * | 2020-09-11 | 2024-03-19 | 重庆誉存大数据科技有限公司 | 一种基于层级关联结构的配置信息导出和导入方法 |
CN116663042B (zh) * | 2023-08-01 | 2023-10-13 | 北京长扬软件有限公司 | 多用户级目录的访问控制方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0614150B1 (en) * | 1993-03-04 | 2001-06-06 | Mitsubishi Denki Kabushiki Kaisha | Database system backup apparatus and method |
US7290007B2 (en) * | 2002-05-10 | 2007-10-30 | International Business Machines Corporation | Method and apparatus for recording and managing data object relationship data |
CN100373385C (zh) * | 2003-01-17 | 2008-03-05 | 中兴通讯股分有限公司 | 一种备份和恢复重要数据的方法 |
CN101241503B (zh) * | 2008-01-03 | 2011-09-07 | 彭智勇 | 数据库个性化方法 |
-
2012
- 2012-06-06 CN CN201210183862.3A patent/CN102693174B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0614150B1 (en) * | 1993-03-04 | 2001-06-06 | Mitsubishi Denki Kabushiki Kaisha | Database system backup apparatus and method |
US7290007B2 (en) * | 2002-05-10 | 2007-10-30 | International Business Machines Corporation | Method and apparatus for recording and managing data object relationship data |
CN100373385C (zh) * | 2003-01-17 | 2008-03-05 | 中兴通讯股分有限公司 | 一种备份和恢复重要数据的方法 |
CN101241503B (zh) * | 2008-01-03 | 2011-09-07 | 彭智勇 | 数据库个性化方法 |
Non-Patent Citations (2)
Title |
---|
Deputy Mechanisms for Object-Oriented Databases;Zhiyong Peng等;《Data Engineering,1995.Proceedings of the Eleventh International Conference on》;19950310;第333-340页 * |
彭智勇等.基于对象代理模型的异构多数据库集成.《第十九届全国数据库学术会议论文集(研究报告篇)》.2002,第29卷(第8期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN102693174A (zh) | 2012-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391653B (zh) | 一种分布式NewSQL数据库系统及图片数据储存方法 | |
CA2434081C (en) | Data structures utilizing objects and pointers in the form of a tree structure | |
CN100541441C (zh) | 一种计算机文件系统的快照创建、删除及修改方法 | |
CN102567140B (zh) | 使用变化日志的文件系统备份 | |
US9646030B2 (en) | Computer-readable medium storing program and version control method | |
CN102693174B (zh) | 一种面向对象代理数据库约束的备份方法 | |
CN109657110B (zh) | 一种数据溯源方法以及相应的数据溯源装置 | |
CN110300963A (zh) | 大规模数据储存库中的数据管理系统 | |
Rönnbäck et al. | Anchor modeling—Agile information modeling in evolving data environments | |
CN101727322B (zh) | 优化物料清单管理界面的方法及装置 | |
CN102663076B (zh) | 文件数据处理方法 | |
AU2002249161A1 (en) | Data structure for information systems | |
CN102308297A (zh) | 一种数据迁移方法、数据迁移装置及数据迁移系统 | |
CN101727320A (zh) | 用于识别数据库更改对应用的影响的方法和系统 | |
CN104239377A (zh) | 跨平台的数据检索方法及装置 | |
CN103562910A (zh) | 管理数据查询 | |
CN101826029A (zh) | 用于合并虚拟化子层的方法与系统 | |
CN110389942A (zh) | 一种无垃圾回收的键值分离存储方法和系统 | |
CN102314506A (zh) | 基于动态索引的分布式缓冲区管理方法 | |
CN100449545C (zh) | 访问扇区数据的方法和系统 | |
CN104239511A (zh) | 一种面向MongoDB的用户空间文件系统实现方法 | |
CN106802928B (zh) | 电网历史数据管理方法及其系统 | |
CN101968747B (zh) | 一种机群应用管理系统及其应用管理方法 | |
CN101430707A (zh) | 一种记录删除操作的验证方法、系统及设备 | |
CN104537047B (zh) | 一种基于Lucene的服装基样板检索系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150218 Termination date: 20150606 |
|
EXPY | Termination of patent right or utility model |