一种差异脚本的生成方法、装置和存储介质制造方法及图纸

技术编号:31317095 阅读:25 留言:0更新日期:2021-12-12 23:56
本申请公开了一种差异脚本的生成方法、装置和存储介质,获取源数据库和目标数据库各自包含的数据库对象的信息。将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本。将源数据库的表和目标数据库的表进行比对,得到表比对结果,并生成与表比对结果对应的表差异脚本。将源数据库的视图和目标数据库的视图进行比对,得到视图比对结果,并生成与视图比对结果对应的视图差异脚本。利用申请所示方案,通过比对源数据库和目标数据库各自所包含的聚簇、表以及视图,得到聚簇差异脚本、表差异脚本以及视图差异脚本,能够显著减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。成差异脚本。成差异脚本。

【技术实现步骤摘要】
一种差异脚本的生成方法、装置和存储介质


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

技术介绍

[0002]对一个使用数据库的已投产系统进行的升级投产,需要准备一份可用于实施数据库对象变更的差异DDL SQL脚本(下述简称为差异脚本),差异脚本应包含如下信息:新增的聚簇;删除的聚簇;新增的表及其索引信息;已投产表的结构的更改信息;已投产表的索引的更改信息(含新增索引、修改索引和删除索引);删除的表及其索引信息。要想得到差异脚本,就需要对两个数据库(即升级前的数据库和升级后的数据库)的元数据进行比对,得到两个数据库之间的元数据差异,并根据元数据差异,生成差异脚本。
[0003]目前,生成差异脚本的现有方式为人工操作,然而,对于数据库对象变动较少的场景,由人工手工编辑一个差异脚本的工作量尚可接受,但对于一个开发周期长、数据库对象变动较多的数据系统来说,通过人工比对两个数据库之间的元数据差异,而得到的差异脚本,其工作量较大,速度较慢,并且人工处理的方式存在较多误差(例如手工输入错误,实际上有差异的信息人工没有比对出来等等)。
[0004]为此,如何减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本,成为本领域亟需解决的问题。

技术实现思路

[0005]本申请提供了一种差异脚本的生成方法、装置和存储介质,目的在于减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。
[0006]为了实现上述目的,本申请提供了以下技术方案:
>[0007]一种差异脚本的生成方法,包括:
[0008]获取源数据库和目标数据库各自包含的数据库对象的信息;其中,所述数据库对象包括聚簇、表以及视图;
[0009]将所述源数据库的聚簇和所述目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与所述聚簇比对结果对应的聚簇差异脚本;
[0010]将所述源数据库的表和所述目标数据库的表进行比对,得到表比对结果,并生成与所述表比对结果对应的表差异脚本;
[0011]将所述源数据库的视图和所述目标数据库的视图进行比对,得到视图比对结果,并生成与所述视图比对结果对应的视图差异脚本。
[0012]一种差异脚本的生成装置,包括:
[0013]获取单元,用于获取源数据库和目标数据库各自包含的数据库对象的信息;其中,所述数据库对象包括聚簇、表以及视图;
[0014]第一生成单元,用于将所述源数据库的聚簇和所述目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与所述聚簇比对结果对应的聚簇差异脚本;
[0015]第二生成单元,用于将所述源数据库的表和所述目标数据库的表进行比对,得到表比对结果,并生成与所述表比对结果对应的表差异脚本;
[0016]第三生成单元,用于将所述源数据库的视图和所述目标数据库的视图进行比对,得到视图比对结果,并生成与所述视图比对结果对应的视图差异脚本。
[0017]一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,所述程序执行所述的差异脚本的生成方法。
[0018]本申请提供的技术方案,获取源数据库和目标数据库各自包含的数据库对象的信息,其中,数据库对象包括聚簇、表以及视图。将源数据库的聚簇和目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与聚簇比对结果对应的聚簇差异脚本。将源数据库的表和目标数据库的表进行比对,得到表比对结果,并生成与表比对结果对应的表差异脚本。将源数据库的视图和目标数据库的视图进行比对,得到视图比对结果,并生成与视图比对结果对应的视图差异脚本。利用申请所示方案,通过比对源数据库和目标数据库各自所包含的聚簇、表以及视图,得到聚簇差异脚本、表差异脚本以及视图差异脚本,相较于现有技术,能够显著减少差异脚本生成工作的工作量,辅助人工快速准确地生成差异脚本。
附图说明
[0019]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020]图1为本申请实施例提供的一种差异脚本的生成方法的示意图;
[0021]图2为本申请实施例提供的另一种差异脚本的生成方法的示意图;
[0022]图3为本申请实施例提供的另一种差异脚本的生成方法的示意图;
[0023]图4为本申请实施例提供的另一种差异脚本的生成方法的示意图;
[0024]图5为本申请实施例提供的另一种差异脚本的生成方法的示意图;
[0025]图6为本申请实施例提供的另一种差异脚本的生成方法的示意图;
[0026]图7为本申请实施例提供的另一种差异脚本的生成方法的示意图;
[0027]图8为本申请实施例提供的另一种差异脚本的生成方法的示意图;
[0028]图9为本申请实施例提供的一种差异脚本的生成装置的架构示意图。
具体实施方式
[0029]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0030]需要说明的是,本申请所涉及的术语如下所示:
[0031]Oracle数据库:甲骨文公司的数据库产品,本申请所述数据库可以为Oracle数据库。
[0032]元数据:元数据是描述信息资源及其结构的数据。
[0033]数据库对象:本申请实施例所示的数据库对象,至少包括:聚簇(CLUSTER)、表(TABLE)、索引(INDEX)、视图(VIEW)。
[0034]聚簇:即CLUSTER的中文译文,其作用是依据一定的规则,可以将多个数据表数据保存在同一个段中,并且依据一定场景实现快速检索。
[0035]数据库对象集合:即SCHEMA的中文译文,一个数据库一般对应一个SCHEMA,SCHEMA中包含了数据库的全部数据库对象。
[0036]SQL:结构化查询语言,为Structured Query Language的缩写,用于存取数据以及查询、更新和管理关系数据库系统。
[0037]DDL:数据定义语言,是Data Definition Language的缩写,DDL主要的命令有新建(CREATE)、变更(ALTER)、删除(DROP)等,DDL主要是用于定义或改变数据库对象结构。
[0038]差异DDL SQL脚本:在源数据库上运行若干DDL SQL语句(现有术语),使得源数据库(即升级前的数据库)与目标数据库(即升级后的数据库)各自对应的SCHEMA所包含的数据库对象的结构相同,则将这些DDL SQL语句的集合,作为目标数据库相对源数据库的差异D本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种差异脚本的生成方法,其特征在于,包括:获取源数据库和目标数据库各自包含的数据库对象的信息;其中,所述数据库对象包括聚簇、表以及视图;将所述源数据库的聚簇和所述目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与所述聚簇比对结果对应的聚簇差异脚本;将所述源数据库的表和所述目标数据库的表进行比对,得到表比对结果,并生成与所述表比对结果对应的表差异脚本;将所述源数据库的视图和所述目标数据库的视图进行比对,得到视图比对结果,并生成与所述视图比对结果对应的视图差异脚本。2.根据权利要求1所述的方法,其特征在于,所述将所述源数据库的聚簇和所述目标数据库的聚簇进行比对,得到聚簇比对结果,并生成与所述聚簇比对结果对应的聚簇差异脚本,包括:基于所述源数据库所包含的各个聚簇,构建第一聚簇集合,以及基于所述目标数据库所包含的各个聚簇,构建第二聚簇集合;将所述第一聚簇集合和所述第二聚簇集合进行比对,得到聚簇比对结果;所述聚簇比对结果包括第一聚簇、第二聚簇、第三聚簇和第四聚簇;所述第一聚簇为所述源数据库包含、且所述目标数据库不包含的聚簇;所述第二聚簇为所述源数据库不包含、且所述目标数据库包含的聚簇;所述第三聚簇归属于所述源数据库,所述第四聚簇归属于所述目标数据库,所述第三聚簇的聚簇名称与所述第四聚簇的聚簇名称相同;基于所述第一聚簇,生成第一聚簇差异脚本;所述第一聚簇差异脚本用于删除所述第一聚簇;从所述目标数据库的元数据表中,读取所述第二聚簇的组成字段信息,并基于所述第二聚簇的组成字段信息,生成第二聚簇差异脚本;所述第二聚簇差异脚本用于新建所述第二聚簇;从所述源数据库的元数据表中,读取所述第三聚簇的组成字段信息,以及从所述目标数据库的元数据表中,读取所述第四聚簇的组成字段信息;将所述第三聚簇的组成字段信息与所述第四聚簇的组成字段信息进行比对;在所述第三聚簇的组成字段信息与所述第四聚簇的组成字段信息不相同的情况下,生成第三聚簇差异脚本,以及第四聚簇差异脚本;所述第三聚簇差异脚本用于删除所述第三聚簇;所述第四聚簇差异脚本用于新建所述第四聚簇。3.根据权利要求1所述的方法,其特征在于,所述将所述源数据库的表和所述目标数据库的表进行比对,得到表比对结果,并生成与所述表比对结果对应的表差异脚本,包括:基于所述源数据库所包含的各个表,构建第一表集合,以及基于所述目标数据库所包含的各个表,构建第二表集合;将所述第一表集合和所述第二表集合进行比对,得到表比对结果;所述表比对结果包括第一表、第二表、第三表和第四表;所述第一表为所述源数据库包含、且所述目标数据库不包含的表;所述第二表为所述源数据库不包含、且所述目标数据库包含的表;所述第三表归属于所述源数据库,所述第四表归属于所述目标数据库,所述第三表的表名和所述第四表的表名相同;
基于所述第一表,生成第一表差异脚本;所述第一表差异脚本用于删除所述第一表;基于所述第二表,生成第二表差异脚本;所述第二表差异脚本用于新建所述第二表;从所述目标数据库的元数据表中,读取所述第二表的所有索引的信息;生成与所述第二表的每个索引对应的第三表差异脚本;所述第三表差异脚本用于新建所述第二表的索引;从所述源数据库的元数据表中,读取所述第三表的分区信息,以及从所述目标数据库的元数据表中,读取所述第四表的分区信息;将所述第三表的分区信息与所述第四表的分区信息进行比对;在所述第三表的分区信息与所述第四表的分区信息不相同的情况下,生成第四表差异脚本,以及第五表差异脚本;所述第四表差异脚本用于删除所述第三表;所述第五表差异脚本用于新建所述第四表;在所述第三表的分区信息与所述第四表的分区信息相同的情况下,将所述第三表的字段和所述第四表的字段进行比对,得到字段比对结果,并生成与所述字段比对结果对应的表差异脚本;将所述第三表的索引和所述第四表的索引进行比对,得到索引比对结果,并生成与所述索引比对结果对应的表差异脚本。4.根据权利要求3所述的方法,其特征在于,所述生成第二表差异脚本,包括:从所述目标数据库的元数据表中,读取所述第二表的表基本信息,并依据所述第二表的表基本信息,判断所述第二表是否为分区表;在所述第二表为所述分区表的情况下,从所述目标数据库的元数据表中,读取所述第二表的分区基本信息;从所述目标数据库的元数据表中,读取所述第二表的分区字段信息;从所述目标数据库的元数据表中,读取所述第二表的分区键值信息;依据所述第二表的分区基本信息,判断所述第二表是否为组合分区;在所述第二表为所述组合分区的情况下,从所述目标数据库的元数据表中,读取所述第二表的子分区字段信息;从所述目标数据库的元数据表中,读取所述第二表的子分区键值信息;在所述第二表不为所述分区表,以及所述第二表不为所述组合分区的情况下,从所述目标数据库的元数据表中,读取所述第二表的字段信息;从所述目标数据库的元数据表中,读取所述第二表的主键约束信息;从所述目标数据库的元数据表中,读取所述第二表的主键组成字段信息;基于所述第二表的表基本信息、分区基本信息、分区字段信息、分区键值信息、子分区字段信息、子分区键值信息、字段信息、主键约束信息以及主键组成字段信息,生成第二表差异脚本。5.根据权利要求3所述的方法,其特征在于,所述生成与所述第二表的每个索引对应的第三表差异脚本,包括:对于每个索引,从所述目标数据库的元数据表中,读取所述索引的组成字段信息;依据所述索引的组成字段信息,判断所述索引是否为全局分区索引;在所述索引为所述全局分区索引的情况下,从所述目标数据库的元数据表中,读取所
述索引的分区基本信息;从所述目标数据库的元数据表中,读取所述索引的分区字段信息;从所述目标数据库的元数据表中,读取所述索引的分区键值信息;基于所述索引的组成字段信息、分区基本信息、分区字段信息以及分区键值信息,生成与所述索引对应的第三表差异脚本;在所述索引不为所述全局分区索引的情况下,基于所述索引的组成字段信息,生成与所述索引对应的第三表差异脚本。6.根据权利要求3所述的方法,其特征在于,所述将所述第三表的字段和所述第四表的字段进行比对,得到字段比对结...

【专利技术属性】
技术研发人员:唐罡锋穆小亮杨蕾
申请(专利权)人:中国农业银行股份有限公司
类型:发明
国别省市:

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

1