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

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

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


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

技术介绍

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

【技术保护点】

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

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

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

1