一种差异脚本的生成方法、装置和存储介质

文档序号:1953420 发布日期:2021-12-10 浏览:6次 >En<

阅读说明:本技术 一种差异脚本的生成方法、装置和存储介质 (Generation method and device of difference script and storage medium ) 是由 唐罡锋 穆小亮 杨蕾 于 2021-09-15 设计创作,主要内容包括:本申请公开了一种差异脚本的生成方法、装置和存储介质,获取源数据库和目标数据库各自包含的数据库对象的信息。将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本。将源数据库的表和目标数据库的表进行比对,得到表比对结果,并生成与表比对结果对应的表差异脚本。将源数据库的视图和目标数据库的视图进行比对,得到视图比对结果,并生成与视图比对结果对应的视图差异脚本。利用申请所示方案,通过比对源数据库和目标数据库各自所包含的聚簇、表以及视图,得到聚簇差异脚本、表差异脚本以及视图差异脚本,能够显著减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。(The application discloses a method, a device and a storage medium for generating a difference script, which are used for acquiring information of database objects contained in a source database and a target database respectively. And comparing the cluster of the source database with the cluster of the target database to obtain a cluster comparison result, and generating a cluster difference script corresponding to the cluster comparison result. And comparing the table of the source database with the table of the target database to obtain a table comparison result, and generating a table difference script corresponding to the table comparison result. And comparing the view of the source database with the view of the target database to obtain a view comparison result, and generating a view difference script corresponding to the view comparison result. By using the scheme shown in the application, the cluster difference script, the table difference script and the view difference script are obtained by comparing the clusters, the tables and the views contained in the source database and the target database, so that the workload of difference script generation can be remarkably reduced, and the difference script can be generated manually, quickly and accurately.)

一种差异脚本的生成方法、装置和存储介质

技术领域

本申请涉及数据库领域,尤其涉及一种差异脚本的生成方法、装置和存储介质。

背景技术

对一个使用数据库的已投产系统进行的升级投产,需要准备一份可用于实施数据库对象变更的差异DDL SQL脚本(下述简称为差异脚本),差异脚本应包含如下信息:新增的聚簇;删除的聚簇;新增的表及其索引信息;已投产表的结构的更改信息;已投产表的索引的更改信息(含新增索引、修改索引和删除索引);删除的表及其索引信息。要想得到差异脚本,就需要对两个数据库(即升级前的数据库和升级后的数据库)的元数据进行比对,得到两个数据库之间的元数据差异,并根据元数据差异,生成差异脚本。

目前,生成差异脚本的现有方式为人工操作,然而,对于数据库对象变动较少的场景,由人工手工编辑一个差异脚本的工作量尚可接受,但对于一个开发周期长、数据库对象变动较多的数据系统来说,通过人工比对两个数据库之间的元数据差异,而得到的差异脚本,其工作量较大,速度较慢,并且人工处理的方式存在较多误差(例如手工输入错误,实际上有差异的信息人工没有比对出来等等)。

为此,如何减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本,成为本领域亟需解决的问题。

发明内容

本申请提供了一种差异脚本的生成方法、装置和存储介质,目的在于减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。

为了实现上述目的,本申请提供了以下技术方案:

一种差异脚本的生成方法,包括:

获取源数据库和目标数据库各自包含的数据库对象的信息;其中,所述数据库对象包括聚簇、表以及视图;

将所述源数据库的聚簇和所述目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与所述聚簇比对结果对应的聚簇差异脚本;

将所述源数据库的表和所述目标数据库的表进行比对,得到表比对结果,并生成与所述表比对结果对应的表差异脚本;

将所述源数据库的视图和所述目标数据库的视图进行比对,得到视图比对结果,并生成与所述视图比对结果对应的视图差异脚本。

一种差异脚本的生成装置,包括:

获取单元,用于获取源数据库和目标数据库各自包含的数据库对象的信息;其中,所述数据库对象包括聚簇、表以及视图;

第一生成单元,用于将所述源数据库的聚簇和所述目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与所述聚簇比对结果对应的聚簇差异脚本;

第二生成单元,用于将所述源数据库的表和所述目标数据库的表进行比对,得到表比对结果,并生成与所述表比对结果对应的表差异脚本;

第三生成单元,用于将所述源数据库的视图和所述目标数据库的视图进行比对,得到视图比对结果,并生成与所述视图比对结果对应的视图差异脚本。

一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,所述程序执行所述的差异脚本的生成方法。

本申请提供的技术方案,获取源数据库和目标数据库各自包含的数据库对象的信息,其中,数据库对象包括聚簇、表以及视图。将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本。将源数据库的表和目标数据库的表进行比对,得到表比对结果,并生成与表比对结果对应的表差异脚本。将源数据库的视图和目标数据库的视图进行比对,得到视图比对结果,并生成与视图比对结果对应的视图差异脚本。利用申请所示方案,通过比对源数据库和目标数据库各自所包含的聚簇、表以及视图,得到聚簇差异脚本、表差异脚本以及视图差异脚本,相较于现有技术,能够显著减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种差异脚本的生成方法的示意图;

图2为本申请实施例提供的另一种差异脚本的生成方法的示意图;

图3为本申请实施例提供的另一种差异脚本的生成方法的示意图;

图4为本申请实施例提供的另一种差异脚本的生成方法的示意图;

图5为本申请实施例提供的另一种差异脚本的生成方法的示意图;

图6为本申请实施例提供的另一种差异脚本的生成方法的示意图;

图7为本申请实施例提供的另一种差异脚本的生成方法的示意图;

图8为本申请实施例提供的另一种差异脚本的生成方法的示意图;

图9为本申请实施例提供的一种差异脚本的生成装置的架构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

需要说明的是,本申请所涉及的术语如下所示:

Oracle数据库:甲骨文公司的数据库产品,本申请所述数据库可以为Oracle数据库。

元数据:元数据是描述信息资源及其结构的数据。

数据库对象:本申请实施例所示的数据库对象,至少包括:聚簇(CLUSTER)、表(TABLE)、索引(INDEX)、视图(VIEW)。

聚簇:即CLUSTER的中文译文,其作用是依据一定的规则,可以将多个数据表数据保存在同一个段中,并且依据一定场景实现快速检索。

数据库对象集合:即SCHEMA的中文译文,一个数据库一般对应一个SCHEMA,SCHEMA中包含了数据库的全部数据库对象。

SQL:结构化查询语言,为Structured Query Language的缩写,用于存取数据以及查询、更新和管理关系数据库系统。

DDL:数据定义语言,是Data Definition Language的缩写,DDL主要的命令有新建(CREATE)、变更(ALTER)、删除(DROP)等,DDL主要是用于定义或改变数据库对象结构。

差异DDL SQL脚本:在源数据库上运行若干DDL SQL语句(现有术语),使得源数据库(即升级前的数据库)与目标数据库(即升级后的数据库)各自对应的SCHEMA所包含的数据库对象的结构相同,则将这些DDL SQL语句的集合,作为目标数据库相对源数据库的差异DDL SQL脚本。

源数据库:被选为作基准的数据库,本申请用于指代升级前的数据库。

目标数据库:与源数据库进行比对的数据库,本申请用于指代升级后的数据库。

表字段信息:包含表字段的名称、数据类型、长度、精度、是否可以为空、缺省值等信息。

索引字段信息:包含索引字段名称、索引字段组成顺序、索引字段升降序信息。

表分区信息:包含表分区的分区字段、分区键值信息。

索引分区信息:包含索引的分区字段、分区键值信息。

主键信息:即表的主键信息,包含主键组成字段名称、主键字段组成顺序号信息。

表空间:是一个或多个数据文件的集合,这些文件的集合用于存放数据库中所有的数据对象的数据,但主要存放的是表的数据,所以称作表空间。

分区:把表中的数据根据某种规则分成若干部分,分别存储在一个表空间上,就称之分区。分区是当表中数据不断增大情况下,提升表的性能的一种方式。

分区类型:表的分区包括范围分区、列表分区和哈希分区。

范围分区:根据表中若干字段的值的范围来进行分区。例如把取值小于100的数据存放到分区1,把大于等于100小于200的数据存放到分区2,类推。

列表分区:明确指定了根据某字段的某个具体值进行分区,例如,把水果中是桃子、桔子的数据存放到分区1,把水果中是西瓜的数据存放到分区2,依此类推,得到各个列表分区。

哈希分区:根据指定字段的哈希值来进行分区的方法。

子分区:当表的数据很大,表进行分区后每一个分区的数据仍然很多,可将每个分区内的数据再根据某种规则再进行分区,将数据分布到几个表空间中,这些分区下的分区称之为子分区。

组合分区:分区下有子分区的分区类型称之为组合分区。

表元数据:表的元数据信息包含表字段信息(ALL_TAB_COLUMNS,括号中为存储相应信息的元数据表名,下同)、表的主键信息(ALL_CONS_COLUMNS)、主键字段信息(ALL_CONS_COLUMNS)、表分区类型(ALL_PART_TABLES)、表分区字段(ALL_PART_KEY_COLUMNS)、表分区键值(ALL_TAB_PARTITIONS)等信息。

索引元数据:索引的元数据信息包括索引基本信息(ALL_INDEXES)、索引字段信息(ALL_IND_COLUMNS)、索引分区信息(ALL_PART_INDEXES)、索引分区字段(ALL_PART_KEY_COLUMNS)、索引分区键值(ALL_IND_PARTITIONS)等信息。

是否使用字符(CHAR):这是表字段的一个属性。对于表的保存字符型数据的字段,如果明确指明是否使用CHAR,则按CHAR来保存数据,否则按字节(BYTE)长度来保存数据。例如,一个字段数据类型定义为CHAR(10BYTE),则表明该字段能保存10字节的数据,如果存储英文字符的话,能存储10个字符,如果存储汉字的话,可能只能存储3个。如定义为CHAR(10CHAR),则表明该字段能保存10个字符的数据,这个数据可以是英文字母和汉字的组合,最多存储10个汉字。一个汉字的长度按CHAR来计算长度,则长度为1,若按BYTE来计算长度,则长度在2-4字节之间,具体长度由字符集决定。

ALL_TABLES表:保存所有的表基本信息的元数据表,主要包含表的表名,所使用的聚簇名,表是否分区,表是否有自增列等信息。

ALL_TAB_COLUMNS表:存储表的组成列信息的元数据表,主要包含表名,字段名,字段数据类型、字段数据长度、字段数据精度、字段是否可空、字段缺省值、字段是否自增字段、是否使用CHAR等信息。本表也存储聚聚对象的列组成信息,包括聚簇对象名、字段名、字段数据类型、字段数据长度、字段数据精度、字段序号等信息。

ALL_CONSTRAINTS表:保存表的约束信息的元数据表,主要包含表的表名、约束名、索引名、约束类型(约束类型为P则表示该约束为主键约束)。

ALL_PART_TABLES表:保存表分区基本信息的元数据表,主要包含表名、分区类型、子分区类型。

ALL_PART_KEY_COLUMNS表:保存表和索引分区字段信息的元数据表,主要包含对象类型(用于区分是表还是索引)、对象名称、字段名、字段顺序号等信息。

ALL_TAB_PARTITIONS表:保存表分区键值信息的元数据表,主要包含表名、分区名、分区键值、分区顺序号。

ALL_SUBPART_KEY_COLUMNS表:保存子分区字段信息的元数据表,主要包含表名、字段名、字段顺序号等信息。

ALL_TAB_SUBPARTITIONS表:保存子分区键值信息的元数据表,主要包含表名、分区名、分区键值、分区顺序号。

ALL_INDEXES表:保存索引基本信息的元数据表,主要包含表名、索引名、是否唯一索引、是否分区等信息。

ALL_IND_COLUMNS表:保存索引字段信息的元数据表,主要包含表名、索引名、字段顺序号、字段名、字段升降序等信息;也保存主键约束组成字段的信息,主键约束组成字段的升降序信息均为升序。

ALL_PART_INDEXES表:保存分区索引的基本信息的元数据表,主要包含索引名、表名、分区类型、子分区类型、分区个数、全局分区标识等信息。

ALL_IND_PARTITIONS表:保存索引分区键值信息的元数据表,主要包括索引名、分许序号、分区名、分区键值等信息。

ALL_CLUSTERS表:保存所有聚簇对象的元数据表,主要包括聚簇对象名,聚簇类型等信息。

ALL_VIEWS表:保存视图对象定义的元数据表,主要包括视图名、视图定义文本等信息。

如图1所示,为本申请实施例提供的一种差异脚本的生成方法的示意图,包括如下步骤:

S101:获取源数据库和目标数据库各自包含的数据库对象的信息,以及元数据表。

其中,数据库对象包括聚簇、表以及视图。元数据表至少包括:ALL_TABLES表、ALL_TAB_COLUMNS表、ALL_CONSTRAINTS表、ALL_PART_TABLES表、ALL_PART_KEY_COLUMNS表、ALL_TAB_PARTITIONS表、ALL_SUBPART_KEY_COLUMNS表、ALL_TAB_SUBPARTITIONS表、ALL_INDEXES表、ALL_IND_COLUMNS表。

需要强调的是,源数据库和目标数据库均为Oracle数据库。

对于源数据库和目标数据库中的任意一方,可以通过查询任意一方的ALL_CLUSTERS表,得到与任意一方对应的数据库对象集合下所包含的各个聚簇的信息(例如聚簇名称),并且还可以按照聚簇名称对各个聚簇进行排序,具体的,获取数据库所包含的各个聚簇的信息,其实现逻辑(即SQL语句)可以为:SELECT CLUSTER_NAME FROM ALL_CLUSTERS WHERE OWNER=:schema_name ORDER BY CLUSTER_NAME。

对于源数据库和目标数据库中的任意一方,可以通过查询任意一方的ALL_TABLES表,得到与任意一方对应的数据库对象集合下所包含的各个表的信息(例如表名、是否分区表、所属聚簇的聚簇名称、是否有自增列等),具体的,获取任意一方所包含的各个表的信息,其实现逻辑(即SQL语句)可以为:SELECT TABLE_NAME,CLUSTER_NAME,PARTITIONED,HAS_IDENTITY FROM ALL_TABLES WHERE OWNER=:schema_name。

对于源数据库和目标数据库中的任意一方,可以通过查询任意一方的ALL_VIEW表,得到与任意一方对应的数据库对象集合下所包含的各个视图的信息(例如视图名、视图定义信息等),具体的,获取任意一方所包含的各个视图的信息,其实现逻辑(即SQL语句)可以为:SELECT VIEW_NAME,TEXT FROM;ALL_VIEWS WHERE OWNER=:schema_name。

S102:将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本。

其中,将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本的具体实现过程,可参见图2所示的步骤,以及步骤的解释说明。

S103:将源数据库的表和目标数据库的表进行比对,得到表比对结果,并生成与表比对结果对应的表差异脚本。

其中,将源数据库的表和目标数据库的表进行比对,得到表比对结果,并生成与表比对结果对应的表差异脚本的具体实现过程,可参见图3所示的步骤,以及步骤的解释说明。

S104:将源数据库的视图和目标数据库的视图进行比对,得到视图比对结果,并生成与视图比对结果对应的视图差异脚本。

可选的,在源数据库上执行聚簇差异脚本、表差异脚本以及视图差异脚本,使得源数据库所包含的聚簇的结构信息与目标数据库所包含的聚簇的结构信息相同,源数据库所包含的表的结构信息与目标数据库所包含的表的结构信息相同,源数据库所包含的视图的结构信息与目标数据库所包含的视图的结构信息相同。

其中,将源数据库的视图和目标数据库的视图进行比对,得到视图比对结果,并生成与视图比对结果对应的视图差异脚本的具体实现过程,可参见图8所示的步骤,以及步骤的解释说明。

基于上述S101-S104所示的流程,本实施例能够实现以下有益效果:

1、降低程序员工作强度,提升工作效率。

具体的,传统的生成两个数据库指定SCHEMA下的表和索引的差异DDL SQL脚本是通过人工比对两个数据库中的表和索引的元数据信息,并根据发现的差异信息书写两个数据库的差异DDL SQL脚本。由于表和索引的元数据信息较多,且保存在数据库的多个元数据表中,而且部分表和索引的差异信息本身就比对小,不易识别,因此人工比对的方式,工作强度大且可能出错。对于一个大型系统的升级,增加的表和索引较多,对原有表和索引的优化也不少,差异比对的工作量较大。DDL SQL脚本生成工具能自动根据差异信息生成相应的语句,不会遗漏任何差异信息,速度快并且正确,提升了程序员的工作效率。

2、降低程序员对SQL语法掌握程度要求。

具体的,SQL语句中,CREATE TABLE语句的语法相对简单和常用,但ALTER TABLE语句的语法相对复杂,而元数据信息差异类型较多,因此需要程序员根据差异信息写出复杂且正确的ALTER TABLE语句,对程序员的要求较高。DDL SQL脚本生成工具能自动生成复杂且正确的ALTER TABLE语句,可以降低程序员对SQL语法的掌握程度要求。

3、提升脚本的正确性和脚本验证测试的效率。

具体的,由于手工生成的DDL SQL脚本可能存在手工输入错误、遗漏差异信息等情况导致DDL SQL与正确的脚本存在差异,因此需要通过测试来验证其正确性。每次验证测试都需要耗费一些时间。并且手工生成的脚本即便通过了验证测试,也不一定是符合预期的正确脚本。例如由于性能优化新增或调整的索引,如果DDL SQL脚本中不包含这些信息,功能验证测试也发现不了,这个脚本投产后会有性能隐患。DDL SQL脚本生成工具生成的脚本包含了所有的差异信息,不会有遗漏,并且生成的SQL脚本都是正确的,在验证测试时,能一次通过,提升了脚本的正确性和验证测试的效率。

综上所述,利用本实施例所示方案,通过比对源数据库和目标数据库各自所包含的聚簇、表以及视图,得到聚簇差异脚本、表差异脚本以及视图差异脚本,相较于现有技术,能够显著减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。

如图2所示,为本申请实施例提供的另一种差异脚本的生成方法的示意图,包括如下步骤:

S201:基于源数据库所包含的各个聚簇,构建第一聚簇集合,以及基于目标数据库所包含的各个聚簇,构建第二聚簇集合。

S202:将第一聚簇集合和第二聚簇集合进行比对,得到聚簇比对结果。

其中,聚簇比对结果包括第一聚簇、第二聚簇、第三聚簇和第四聚簇;第一聚簇为源数据库包含、且目标数据库不包含的聚簇;第二聚簇为源数据库不包含、且目标数据库包含的聚簇;第三聚簇归属于源数据库,第四聚簇归属于目标数据库,第三聚簇的聚簇名称与第四聚簇的聚簇名称相同。

S203:基于第一聚簇,生成第一聚簇差异脚本。

其中,第一聚簇差异脚本包含DROP CLUSTER命令,用于删除第一聚簇。具体的,第一聚簇脚本可以为:DROP CLUSTER:cluster_name。

S204:从目标数据库的ALL_TAB_COLUMNS表中,读取第二聚簇的组成字段信息,并基于第二聚簇的组成字段信息,生成第二聚簇差异脚本。

其中,第二聚簇差异脚本包含CREATE CLUSTER命令,用于新建第二聚簇。具体的,查询第二聚簇的组成字段信息的SQL语句可以为:

SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION FROM ALL_TAB_COLUMNS WHERE OWNER=:schema_name AND TABLE_NAME=:cluster_name ORDER BYCOLUMN_ID。

第二聚簇差异脚本可以为:

CREATE CLUSTER:cluster_name(:column_name:data_type(:data_length))。

S205:从源数据库的ALL_TAB_COLUMNS表中,读取第三聚簇的组成字段信息。

查询第三聚簇的组成字段信息的SQL语句可以为:

SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION FROM ALL_TAB_COLUMNS WHERE OWNER=:schema_name AND TABLE_NAME=:cluster_name ORDER BYCOLUMN_ID。

在执行S205之后,继续执行S206。

S206:从目标数据库的ALL_TAB_COLUMNS表中,读取第四聚簇的组成字段信息。

其中,对于第三聚簇和第四聚簇中的任意一方,任意一方的组成字段信息至少包括:组成字段的字段名、数据类型、数据长度和精度信息。

S207:将第三聚簇的组成字段信息与第四聚簇的组成字段信息进行比对。

S208:在第三聚簇的组成字段信息与第四聚簇的组成字段信息不相同的情况下,生成第三聚簇差异脚本,以及第四聚簇差异脚本。

其中,第三聚簇差异脚本包含DROP CLUSTER命令,用于删除第三聚簇。第四聚簇差异脚本包含CREATE CLUSTER命令,用于新建第四聚簇。

可选的,若第三聚簇的组成字段信息与第四聚簇的组成字段信息相同,则无需生成差异脚本。

综上所述,利用本实施例所示方案,能够有效将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本。

如图3所示,为本申请实施例提供的另一种差异脚本的生成方法的示意图,包括如下步骤:

S301:基于源数据库所包含的各个表,构建第一表集合,以及基于目标数据库所包含的各个表,构建第二表集合。

S302:将第一表集合和第二表集合进行比对,得到表比对结果。

其中,表比对结果包括第一表、第二表、第三表和第四表;第一表为源数据库包含、且目标数据库不包含的表;第二表为源数据库不包含、且目标数据库包含的表;第三表归属于源数据库,第四表归属于目标数据库,第三表的表名和第四表的表名相同。

S303:基于第一表,生成第一表差异脚本。

其中,第一表差异脚本包含DROP TABLE命令,用于删除第一表。具体的,第一表差异脚本可以为:DROP TABLE:table_name。

S304:基于第二表,生成第二表差异脚本。

其中,第二表差异脚本包含CREATE TABLE命令,用于新建第二表。

需要说明的是,生成第二表差异脚本的具体实现过程,可参见图4所示的步骤,以及步骤的解释说明。

S305:从目标数据库的ALL_INDEXS表中,读取第二表的所有索引的信息。

其中,索引的信息至少包括索引名、索引类型、是否唯一、是否分区等。具体的,读取第二表的所有索引的信息,其实现逻辑(即SQL语句)可以为:

SELECT INDEX_NAME,INDEX_TYPE,UNIQUENESS,PARTITIONED FROM ALL_INDEXESWHERE OWNER=:schema_name AND TABLE_NAME=:table_name。

S306:生成与第二表的每个索引对应的第三表差异脚本。

其中,第三表差异脚本包含CREATE INDEX命令,用于新建第二表的索引。

一般来讲,若目标数据库的ALL_INDEXS表中,未记录有第二表的索引,则无需创建第三表差异脚本。

需要说明的是,生成与第二表的每个索引对应的第三表差异脚本的具体实现过程,可参见图5所示的步骤,以及步骤的解释说明。

S307:从源数据库的元数据表中,读取第三表的分区信息,以及从目标数据库的元数据表中,读取第四表的分区信息。

其中,对于第三表和第四表中的任意一方,任意一方的分区信息至少包括:是否分区属性信息(包括分区表和非分区表中的任意一个)、分区基本信息、分区字段基本信息、分区键值信息。

一般来讲,是否分区属性信息可从ALL_TABLES表中读取得到,分区基本信息可从ALL_PART_TABLES表中读取得到,分区字段基本信息可从ALL_PART_KEY_COLUMNS表中读取得到,分区键值信息可从ALL_TAB_PARTITIONS表中读取得到。

S308:将第三表的分区信息与第四表的分区信息进行比对。

S309:在第三表的分区信息与第四表的分区信息不相同的情况下,生成第四表差异脚本,以及第五表差异脚本。

其中,第四表差异脚本用于删除第三表,第五表差异脚本用于新建第四表。

S310:在第三表的分区信息与第四表的分区信息相同的情况下,将第三表的字段和第四表的字段进行比对,得到字段比对结果,并生成与字段比对结果对应的表差异脚本。

在执行S310之后,继续执行S311。

其中,将第三表的字段和第四标的字段进行比对,得到字段比对结果,并生成与字段比对结果对应的表差异脚本的具体实现过程,可以参见图6所示的步骤,以及步骤的解释说明。

S311:将第三表的索引和第四表的索引进行比对,得到索引比对结果,并生成与索引比对结果对应的表差异脚本。

其中,将第三表的索引和第四表的索引进行比对,得到索引比对结果,并生成与索引比对结果对应的表差异脚本的具体实现过程,可以参见图7所示的步骤,以及步骤的解释说明。

综上所述,利用本实施例所示方案,能够有效生成与表比对结果对应的表差异脚本。

如图4所示,为本申请实施例提供的另一种差异脚本的生成方法的示意图,包括如下步骤:

S401:从目标数据库的ALL_TABLES表中,读取第二表的表基本信息,并依据第二表的表基本信息,判断第二表是否为分区表。

若第二表为分区表,则执行S402,否则执行S408。

S402:从目标数据库的ALL_TABLES表中,读取第二表的分区基本信息。

其中,第二表的分区基本信息至少包括:表名、分区类型、子分区类型、分区个数、子分区个数。具体的,读取第二表的分区基本信息,其实现逻辑(即SQL语句)可以为:

SELECT TABLE_NAME,PARTITIONING_TYPE,SUBPARTITIONING_TYPE,PARTITION_COUNT,DEF_SUBPARTITION_COUNT FROM ALL_PART_TABLES WHERE OWNER=:schema_nameAND TABLE_NAME=:table_name。

S403:从目标数据库的ALL_PART_KEY_COLUMNS表中,读取第二表的分区字段信息。

其中,第二表的分区字段信息至少包括:表名、分区字段名、分区字段序号等信息。具体的,读取第二表的分区字段信息,其实现逻辑(即SQL语句)可以为:

SELECT NAME,COLUMN_NAME,COLUMN_POSITION FROM ALL_PART_KEY_COLUMNSWHERE OBJECT_TYPE='TABLE'AND OWNER=:schema_name AND NAME=:table_name;ORDERBY COLUMN_POSITION。

S404:从目标数据库的ALL_TAB_PARTITIONS表中,读取第二表的分区键值信息。

其中,第二表的分区键值信息至少包括:表名、分区名、分区键值、分区顺序号。具体的,读取第二表的分区键值信息,其实现逻辑(即SQL语句)可以为:

SELECT TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION FROMALL_TAB_PARTITIONS;WHERE OWNER=:schema_name AND TABLE_NAME=:table_name。

S405:依据第二表的分区基本信息,判断第二表是否为组合分区。

若第二表为组合分区,则执行S406,否则执行S408。

其中,若分区基本信息所示的子分区类型不为NONE,则确定第二表为组合分区,否则确定第二表不为组合分区。

S406:从目标数据库的ALL_SUBPART_KEY_COLUMNS表中,读取第二表的子分区字段信息。

其中,第二表的子分区字段信息至少包括:表名、子分区字段名、子分区字段顺序号。具体的,读取第二表的子分区字段信息,其实现逻辑(即SQL语句)可以为:

SELECT NAME,COLUMN_NAME,COLUMN_POSITION FROM ALL_SUBPART_KEY_COLUMNSWHERE OBJECT_TYPE='TABLE'AND OWNER=:schema_name AND NAME=:table_name;ORDERBY COLUMN_POSITION。

S407:从目标数据库的ALL_TAB_SUBPARTITIONS表中,读取第二表的子分区键值信息。

在执行S407之后,继续执行S408。

其中,第二表的子分区键值信息至少包括:表名、子分区名、子分区键值、子分区顺序号。具体的,读取第二表的子分区键值信息,其实现逻辑(即SQL语句)可以为:

SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME,HIGH_VALUE,SUBPARTITION_POSITION;FROM ALL_TAB_SUBPARTITIONS WHERE;OWNER=:schema_nameAND TABLE_NAME=:table_name;ORDER BY PARTITION_NAME,SUBPARTITION_POSITION。

S408:从目标数据库的ALL_TAB_COLUMNS表中,读取第二表的字段信息。

其中,第二表的字段信息至少包括:表名、字段名、字段数据类型、字段数据长度、字段数据精度、字段是否可空、字段缺省值、字段是否自增字段、是否使用CHAR。具体的,读取第二表的字段信息,其实现逻辑(即SQL语句)可以为:

SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH,DATA_PRECISION,NULLABLE,DATA_DEFAULT,CHAR_USED,IDENTITY_COLUMN,COLUMN_ID FROM ALL_TAB_COLUMNS;WHEREOWNER=:schema_name AND TABLE_NAME=:table_name;ORDER BY COLUMN_ID。

S409:从目标数据库的ALL_CONSTRAINTS表中,读取第二表的主键约束信息。

其中,第二表的主键约束信息至少包括:表名、主键约束名、主键索引名。具体的,读取第二表的主键约束信息,其实现逻辑(即SQL语句)可以为:

SELECT CONSTRAINT_NAME,INDEX_NAME FROM ALL_CONSTRAINTS;WHERE OWNER=:schema_name AND TABLE_NAME=:table_name AND CONSTRAINT_TYPE='P'。

S410:从目标数据库的ALL_IND_COLUMNS表中,读取第二表的主键组成字段信息。

其中,第二表的主键组成字段信息至少包括:主键组成字段、主键组成字段的排列顺序、表名、主键索引名、字段名、字段顺序号、字段升降序。具体的,读取第二表的主键组成字段信息,其实现逻辑(即SQL语句)可以为:

SELECT COLUMN_NAME,DESCEND,COLUMN_POSITION;FROM ALL_IND_COLUMNS;WHEREOWNER=:schema_name AND TABLE_NAME=:table_name AND INDEX_NAME=:index_name;ORDER BY COLUMN_POSITION。

S411:基于第二表的表基本信息、分区基本信息、分区字段信息、分区键值信息、子分区字段信息、子分区键值信息、字段信息、主键约束信息以及主键组成字段信息,生成第二表差异脚本。

综上所述,利用本实施例所示方案,能够有效生成第二表差异脚本。

如图5所示,为本申请实施例提供的另一种差异脚本的生成方法的示意图,包括如下步骤:

S501:对于每个索引,从目标数据库的ALL_IND_COLUMNS表中,读取索引的组成字段信息。

其中,索引的组成字段信息至少包括:表名、索引名、字段名、字段顺序号、字段升降序。具体的,读取索引的组成字段信息,其实现逻辑(即SQL语句)可以为:

SELECT COLUMN_NAME,DESCEND,COLUMN_POSITION;FROM ALL_IND_COLUMNS;WHEREOWNER=:schema_name AND TABLE_NAME=:table_name AND INDEX_NAME=:index_name;ORDERBY COLUMN_POSITION。

S502:依据索引的组成字段信息,判断索引是否为全局分区索引。

若索引为全局分区索引,则执行S503,否则执行S507。

S503:从目标数据库的ALL_PART_INDEXES表中,读取索引的分区基本信息。

其中,索引的分区基本信息至少包括:索引名、表名、分区类型、分区个数、全局分区标识。具体的,读取索引的分区基本信息,其实现逻辑(即SQL语句)可以为:

SELECT INDEX_NAME,PARTITIONING_TYPE,PARTITION_COUNT,LOCALITY FROMALL_PART_INDEXES;WHERE OWNER=:schema_name AND TABLE_NAME=:table_name;ANDINDEX_NAME=:index_name。

S504:从目标数据库的ALL_PART_KEY_COLUMNS表中,读取索引的分区字段信息。

其中,索引的分区字段信息至少包括:表名、索引名、分区字段名、分区字段顺序号。具体的,读取索引的分区字段信息,其实现逻辑(即SQL语句)可以为:

SELECT NAME,COLUMN_NAME,COLUMN_POSITION FROM ALL_PART_KEY_COLUMNSWHERE OBJECT_TYPE='INDEX'AND OWNER=:schema_name AND NAME=:index_name;ORDERBY COLUMN_POSITION。

S505:从目标数据库的ALL_IND_PARTITIONS表中,读取索引的分区键值信息。

其中,索引的分区键值信息至少包括:索引名、分区序号、分区名、分区键值。具体的,读取索引的分区键值信息,其实现逻辑(即SQL语句)可以为:

SELECT INDEX_NAME,PARTITION_NAME,HIGH_VALUE,PARTITION_POSITION;FROMALL_IND_PARTITIONS;WHERE OWNER=:schema_name AND INDEX_NAME=:index_name;ORDER BY PARTITION_POSITION。

S506:基于索引的组成字段信息、分区基本信息、分区字段信息以及分区键值信息,生成与索引对应的第三表差异脚本。

S507:基于索引的组成字段信息,生成与索引对应的第三表差异脚本。

综上所述,利用本实施例所示方案,能够有效生成与每个索引对应的第三表差异脚本。

如图6所示,为本申请实施例提供的另一种差异脚本的生成方法的示意图,包括如下步骤:

S601:从源数据库的ALL_TAB_COLUMNS表中,读取第三表的所有字段的信息,以及从目标数据库的ALL_TAB_COLUMNS表中,读取第四表的所有字段的信息。

对于第三表和第四表中的任意一方,任意一方所包含的字段的信息至少包括:字段名、数据类型、长度、精度、是否可空、缺省值。

S602:基于第三表所包含的各个字段,构建第一字段集合,以及基于第四表所包含的各个字段,构建第二字段集合。

S603:将第一字段集合和第二字段集合进行比对,得到字段比对结果。

其中,字段比对结果包括第一字段、第二字段、第三字段和第四字段;第一字段为第三表包含、且第四表不包含的字段;第二字段为第三表不包含、且第四表包含的字段;第三字段归属于第三表,第四字段归属于第四表,第三字段的字段名和第四字段的字段名相同。

S604:基于第一字段,生成第六表差异脚本。

其中,第六差异脚本包含ALTER TABLE命令,用于删除第一字段。

S605:基于第二字段,生成第七表差异脚本。

其中,第七表差异脚本包含ALTER TABLE命令,用于新建第二字段。

S606:从第三表中获取第三字段的信息,以及从第四表中获取第四字段的信息。

S607:在第三字段的信息与第四字段的信息不相同的情况下,生成第八表差异脚本。

在执行S607之后,继续执行S608。

其中,第八表差异脚本包含ALTER TABLE命令,用于将使用第四字段的信息更改第三字段的信息。

可选的,若第三字段的信息与第四字段的信息相同,则无需生成差异脚本。

S608:从源数据库的ALL_CONSTRAINTS表中,读取第三表的主键约束,以及从目标数据库的ALL_CONSTRAINTS表中,读取第四表的主键约束。

S609:将第三表的主键约束和第四标的主键约束进行比对,得到主键约束比对结果。

其中,主键约束比对结果包括第一主键约束、第二主键约束、第三主键约束和第四主键约束;第一主键约束为第三表包含、且第四表不包含的主键约束;第二主键约束为第三表不包含、且第四表包含的主键约束;第三主键约束归属于第三表,第四主键约束归属于第四表,第三主键约束的约束名和第四主键约束的约束名相同。

S610:基于第一主键约束,生成第九表差异脚本。

其中,第九表差异脚本包含ALTER TABLE命令,用于删除第一主键约束。

S611:基于第二主键约束,生成第十表差异脚本。

其中,第十表差异脚本包含ALTER TABLE命令,用于新建第二主键约束。

S612:从第三表中获取第三主键约束所属字段的信息,以及从第四表中获取第四主键约束所属字段的信息。

S613:在第三主键约束所属字段的信息与第四主键约束所属字段的信息不相同的情况下,生成第十一表差异脚本,以及第十二表差异脚本。

其中,第十一表差异脚本包含ALTER TABLE命令,用于删除第三主键约束。第十二表差异脚本包含ALTER TABLE命令,用于新建第四主键约束。

可选的,若第三主键约束所属字段的信息与第四主键约束所属字段的信息相同,则无需生成差异脚本。

综上所述,利用本实施例所示方案,能够有效生成与字段比对结果对应的表差异脚本。

如图7所示,为本申请实施例提供的另一种差异脚本的生成方法的示意图,包括如下步骤:

S701:从源数据库的ALL_INDEXES表中,读取第三表的所有索引的信息,以及从目标数据库的ALL_INDEXES表中,读取第四表的所有索引的信息。

S702:基于第三表所包含的各个索引,构建第一索引集合,以及基于第四表所包含的各个索引,构建第二索引集合。

S703:将第一索引集合和第二索引集合进行比对,得到索引比对结果。

其中,索引比对结果包括第一索引、第二索引、第三索引和第四索引;第一索引为第三表包含、且第四表不包含的索引;第二索引为第三表不包含、且第四表包含的索引;第三索引归属于第三表,第四索引归属于第四表,第三索引的索引名和第四索引的索引名相同。

S704:基于第一索引,生成第十三表差异脚本。

其中,第十三表差异脚本包含DROP INDEX命令,用于删除第一索引。

S705:基于第二索引,生成第十四表差异脚本。

其中,第十四表差异脚本包含CREATE INDEX命令,用于新建第二索引。

需要说明的是,生成第十六表差异脚本的具体实现过程,可参见图5所示的步骤,以及步骤的解释说明。

S706:从第三表中获取第三索引的组成字段信息,以及从第四表中获取第四索引的组成字段信息。

S707:在第三索引的组成字段信息与第四索引的组成字段信息不相同的情况下,生成第十五表差异脚本,以及第十六表差异脚本。

其中,第十五表差异脚本包含DROP INDEX命令,用于删除第三索引。第十六表差异脚本包含CREATE INDEX命令,用于新建第四索引。

需要说明的是,生成第十八表差异脚本的具体实现过程,可参见图5所示的步骤,以及步骤的解释说明。

可选的,若第三索引的组成字段信息与第四索引的组成字段信息相同,则无需生成差异脚本。

综上所述,利用本实施例所示方案,能够有效生成与索引比对结果对应的表差异脚本。

如图8所示,为本申请实施例提供的另一种差异脚本的生成方法的示意图,包括如下步骤:

S801:基于源数据库所包含的各个视图,构建第一视图集合,以及基于目标数据库所包含的各个视图,构建第二视图集合。

S802:将第一视图集合和第二视图集合进行比对,得到视图比对结果。

其中,视图比对结果包括第一视图、第二视图、第三视图和第四视图;第一视图为源数据库包含、且目标数据库不包含的视图;第二视图为源数据库不包含、且目标数据库包含的视图;第三视图归属于源数据库,第四视图归属于目标数据库,第三视图的视图名和第四视图的视图名相同。

S803:基于第一视图,生成第一视图差异脚本。

其中,第一视图差异脚本包含DROP VIEW命令,用于删除第一视图。

S804:基于第二视图,生成第二视图差异脚本。

其中,第二视图差异脚本包含CREATE VIEW命令,用于新建第二视图。

S805:从源数据库中获取第三视图的视图定义信息,以及从目标数据库中获取第四视图的视图定义信息。

S806:在第三视图的视图定义信息与第四视图的视图定义信息不相同的情况下,生成第三视图差异脚本,以及第四视图差异脚本。

其中,第三视图差异脚本包含DROP VIEW命令,用于删除第三视图。第四视图差异脚本包含CREATE VIEW命令,用于新建第四视图。

可选的,若第三视图的视图定义信息与第四视图的视图定义信息相同,则无需生成差异脚本。

综上所述,利用本实施例所示方案,能够有效生成与视图比对结果对应的视图差异脚本。

与上述本申请实施例提供的差异脚本的生成方法相对应,本申请还提供了一种差异脚本的生成装置。

如图9所示,为本申请实施例提供的一种差异脚本的生成装置的架构示意图,包括:

获取单元100,用于获取源数据库和目标数据库各自包含的数据库对象的信息;其中,数据库对象包括聚簇、表以及视图。

第一生成单元200,用于将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本。

其中,第一生成单元200具体用于:基于源数据库所包含的各个聚簇,构建第一聚簇集合,以及基于目标数据库所包含的各个聚簇,构建第二聚簇集合;将第一聚簇集合和第二聚簇集合进行比对,得到聚簇比对结果;聚簇比对结果包括第一聚簇、第二聚簇、第三聚簇和第四聚簇;第一聚簇为源数据库包含、且目标数据库不包含的聚簇;第二聚簇为源数据库不包含、且目标数据库包含的聚簇;第三聚簇归属于源数据库,第四聚簇归属于目标数据库,第三聚簇的聚簇名称与第四聚簇的聚簇名称相同;基于第一聚簇,生成第一聚簇差异脚本;第一聚簇差异脚本用于删除第一聚簇;从目标数据库的元数据表中,读取第二聚簇的组成字段信息,并基于第二聚簇的组成字段信息,生成第二聚簇差异脚本;第二聚簇差异脚本用于新建第二聚簇;从源数据库的元数据表中,读取第三聚簇的组成字段信息,以及从目标数据库的元数据表中,读取第四聚簇的组成字段信息;将第三聚簇的组成字段信息与第四聚簇的组成字段信息进行比对;在第三聚簇的组成字段信息与第四聚簇的组成字段信息不相同的情况下,生成第三聚簇差异脚本,以及第四聚簇差异脚本;第三聚簇差异脚本用于删除第三聚簇;第四聚簇差异脚本用于新建第四聚簇。

第二生成单元300,用于将源数据库的表和目标数据库的表进行比对,得到表比对结果,并生成与表比对结果对应的表差异脚本。

其中,第二生成单元300具体用于:基于源数据库所包含的各个表,构建第一表集合,以及基于目标数据库所包含的各个表,构建第二表集合;将第一表集合和第二表集合进行比对,得到表比对结果;表比对结果包括第一表、第二表、第三表和第四表;第一表为源数据库包含、且目标数据库不包含的表;第二表为源数据库不包含、且目标数据库包含的表;第三表归属于源数据库,第四表归属于目标数据库,第三表的表名和第四表的表名相同;基于第一表,生成第一表差异脚本;第一表差异脚本用于删除第一表;基于第二表,生成第二表差异脚本;第二表差异脚本用于新建第二表;从目标数据库的元数据表中,读取第二表的所有索引的信息;生成与第二表的每个索引对应的第三表差异脚本;第三表差异脚本用于新建第二表的索引;从源数据库的元数据表中,读取第三表的分区信息,以及从目标数据库的元数据表中,读取第四表的分区信息;将第三表的分区信息与第四表的分区信息进行比对;在第三表的分区信息与第四表的分区信息不相同的情况下,生成第四表差异脚本,以及第五表差异脚本;第四表差异脚本用于删除第三表;第五表差异脚本用于新建第四表;在第三表的分区信息与第四表的分区信息相同的情况下,将第三表的字段和第四表的字段进行比对,得到字段比对结果,并生成与字段比对结果对应的表差异脚本;将第三表的索引和第四表的索引进行比对,得到索引比对结果,并生成与索引比对结果对应的表差异脚本。

第二生成单元300具体用于:从目标数据库的元数据表中,读取第二表的表基本信息,并依据第二表的表基本信息,判断第二表是否为分区表;在第二表为分区表的情况下,从目标数据库的元数据表中,读取第二表的分区基本信息;从目标数据库的元数据表中,读取第二表的分区字段信息;从目标数据库的元数据表中,读取第二表的分区键值信息;依据第二表的分区基本信息,判断第二表是否为组合分区;在第二表为组合分区的情况下,从目标数据库的元数据表中,读取第二表的子分区字段信息;从目标数据库的元数据表中,读取第二表的子分区键值信息;在第二表不为分区表,以及第二表不为组合分区的情况下,从目标数据库的元数据表中,读取第二表的字段信息;从目标数据库的元数据表中,读取第二表的主键约束信息;从目标数据库的元数据表中,读取第二表的主键组成字段信息;基于第二表的表基本信息、分区基本信息、分区字段信息、分区键值信息、子分区字段信息、子分区键值信息、字段信息、主键约束信息以及主键组成字段信息,生成第二表差异脚本。

第二生成单元300具体用于:对于每个索引,从目标数据库的元数据表中,读取索引的组成字段信息;依据索引的组成字段信息,判断索引是否为全局分区索引;在索引为全局分区索引的情况下,从目标数据库的元数据表中,读取索引的分区基本信息;从目标数据库的元数据表中,读取索引的分区字段信息;从目标数据库的元数据表中,读取索引的分区键值信息;基于索引的组成字段信息、分区基本信息、分区字段信息以及分区键值信息,生成与索引对应的第三表差异脚本;在索引不为全局分区索引的情况下,基于索引的组成字段信息,生成与索引对应的第三表差异脚本。

第二生成单元300具体用于:从源数据库的元数据表中,读取第三表的所有字段的信息,以及从目标数据库的元数据表中,读取第四表的所有字段的信息;基于第三表所包含的各个字段,构建第一字段集合,以及基于第四表所包含的各个字段,构建第二字段集合;将第一字段集合和第二字段集合进行比对,得到字段比对结果;字段比对结果包括第一字段、第二字段、第三字段和第四字段;第一字段为第三表包含、且第四表不包含的字段;第二字段为第三表不包含、且第四表包含的字段;第三字段归属于第三表,第四字段归属于第四表,第三字段的字段名和第四字段的字段名相同;基于第一字段,生成第六表差异脚本;第六差异脚本用于删除第一字段;基于第二字段,生成第七表差异脚本;第七表差异脚本用于新建第二字段;从第三表中获取第三字段的信息,以及从第四表中获取第四字段的信息;在第三字段的信息与第四字段的信息不相同的情况下,生成第八表差异脚本;第八表差异脚本用于使用第四字段的信息更改第三字段的信息;从源数据库的元数据表中,读取第三表的主键约束,以及从目标数据库的元数据表中,读取第四表的主键约束;将第三表的主键约束和第四表的主键约束进行比对,得到主键约束比对结果;主键约束比对结果包括第一主键约束、第二主键约束、第三主键约束和第四主键约束;第一主键约束为第三表包含、且第四表不包含的主键约束;第二主键约束为第三表不包含、且第四表包含的主键约束;第三主键约束归属于第三表,第四主键约束归属于第四表,第三主键约束的约束名和第四主键约束的约束名相同;基于第一主键约束,生成第九表差异脚本;第九表差异脚本用于删除第一主键约束;基于第二主键约束,生成第十表差异脚本;第十表差异脚本用于新建第二主键约束;从第三表中获取第三主键约束所属字段的信息,以及从第四表中获取第四主键约束所属字段的信息;在第三主键约束所属字段的信息与第四主键约束所属字段的信息不相同的情况下,生成第十一表差异脚本,以及第十二表差异脚本;第十一表差异脚本用于删除第三主键约束;第十二表差异脚本用于新建第四主键约束。

第二生成单元300具体用于:从源数据库的元数据表中,读取第三表的所有索引的信息,以及从目标数据库的元数据表中,读取第四表的所有索引的信息;基于第三表所包含的各个索引,构建第一索引集合,以及基于第四表所包含的各个索引,构建第二索引集合;将第一索引集合和第二索引集合进行比对,得到索引比对结果;索引比对结果包括第一索引、第二索引、第三索引和第四索引;第一索引为第三表包含、且第四表不包含的索引;第二索引为第三表不包含、且第四表包含的索引;第三索引归属于第三表,第四索引归属于第四表,第三索引的索引名和第四索引的索引名相同;基于第一索引,生成第十三表差异脚本;第十三表差异脚本用于删除第一索引;基于第二索引,生成第十四表差异脚本;第十四表差异脚本用于新建第二索引;从第三表中获取第三索引的组成字段信息,以及从第四表中获取第四索引的组成字段信息;在第三索引的组成字段信息与第四索引的组成字段信息不相同的情况下,生成第十五表差异脚本,以及第十六表差异脚本;第十五表差异脚本用于删除第三索引;第十六表差异脚本用于新建第四索引。

第三生成单元400,用于将源数据库的视图和目标数据库的视图进行比对,得到视图比对结果,并生成与视图比对结果对应的视图差异脚本。

其中,第三生成单元400具体用于:基于源数据库所包含的各个视图,构建第一视图集合,以及基于目标数据库所包含的各个视图,构建第二视图集合;将第一视图集合和第二视图集合进行比对,得到视图比对结果;视图比对结果包括第一视图、第二视图、第三视图和第四视图;第一视图为源数据库包含、且目标数据库不包含的视图;第二视图为源数据库不包含、且目标数据库包含的视图;第三视图归属于源数据库,第四视图归属于目标数据库,第三视图的视图名和第四视图的视图名相同;基于第一视图,生成第一视图差异脚本;第一视图差异脚本用于删除第一视图;基于第二视图,生成第二视图差异脚本;第二视图差异脚本用于新建第二视图;从源数据库中获取第三视图的视图定义信息,以及从目标数据库中获取第四视图的视图定义信息;在第三视图的视图定义信息与第四视图的视图定义信息不相同的情况下,生成第三视图差异脚本,以及第四视图差异脚本;第三视图差异脚本用于删除第三视图;第四视图差异脚本用于新建第四视图。

综上所述,利用本实施例所示方案,通过比对源数据库和目标数据库各自所包含的聚簇、表以及视图,得到聚簇差异脚本、表差异脚本以及视图差异脚本,相较于现有技术,能够显著减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。

本申请还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,程序执行上述本申请提供的差异脚本的生成方法。

本申请实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本申请实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

31页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:欺诈网页识别方法、系统、设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!