一种数据库修正方法、装置、设备及存储介质与流程
- 国知局
- 2024-11-06 14:29:00
本技术涉及数据库,尤其涉及一种数据库修正方法、装置、设备及存储介质。
背景技术:
1、随着软件开发的日益复杂和迭代速度的加快,数据库作为软件应用的核心组件之一,其版本管理变得尤为重要。数据库版本管理主要涉及到对数据库结构和数据的变更进行跟踪、记录和管理,允许用户访问和恢复到特定版本的数据。
2、目前常用的数据库管理工具是flyway,flyway可用于数据库的版本管理和数据库的修正,具体地,flyway需要开发人员依据基准表和目标表,并按照flyway约定的特定格式编写数据库脚本,执行开发人员编写的数据库脚本来消除基准表与目标表之间的差异,此种方法通用性较差且容易出错;
3、因此,如何实现一种通用性较高且自动化程度较高的数据库修正方法是亟需考虑的问题。
技术实现思路
1、本技术提供一种数据库修正方法、装置、设备及存储介质,用以提高数据库修正方法的通用性和自动化程度。
2、第一方面,本技术提供一种数据库修正方法,该方法包括:
3、确定基准库中各待比对基准表对应的第一数据定义语言(data definitionlanguage,ddl)和第一数据操纵语言(datamanipulationlanguage,dml)以及目标库中各待比对目标表对应的第二ddl和第二dml;
4、分别确定各第一ddl对应的第一建表对象集合、各第一dml对应的第一数据对象集合、各第二ddl对应的第二建表对象集合以及各第二dml对应的第二数据对象集合;
5、将所述第一建表对象集合和所述第二建表对象集合进行差异比对,以及将所述第一数据对象集合和所述第二数据对象集合进行差异比对,获取差异对象集合;
6、对所述差异对象集合中的各差异对象进行反解析,得到各差异对象对应的数据库脚本;
7、在所述目标库中执行所述各差异对象对应的数据库脚本,从而实现将所述目标库修正为所述基准库。
8、本技术提供的数据库修正方法,在确定基准库中各待比对基准表的第一ddl和第一dml,以及目标库中各待比对目标表的第二ddl和第二dml之后,由于无法直接对各第一ddl和各第二ddl进行差异比对,因此,先根据各第一ddl确定第一建表对象集合、根据各第一dml确定第一数据对象集合、根据各第二ddl确定第二建表对象集合以及根据各第二dml确定第二数据对象集合,在获得上述对象集合后,即可进行差异比对;具体地,将第一建表对象集合和第二建表对象集合进行差异比对,以及将第一数据对象集合和第二数据对象集合进行差异对比,从而获得差异对象集合,接着对差异对象集合中的各差异对象进行反解析,即可得到各差异对象对应的数据库脚本,无需人工编写数据库脚本,自动化程度高且不易出错,执行反解析获得的数据库脚本即可实现将目标库修正为基准库。本技术提出的数据库修正方法不受基准库和目标库的类型的约束,也无需根据特定的格式来编写数据库脚本,具有很好的通用性。
9、在一种可能的设计中,通过如下方式确定所述基准库中各待比对基准表以及所述目标库中各待比对目标表,包括:
10、针对所述基准库和所述目标库中具有相同表名的数据表,若所述数据表在所述基准库中对应的ddl和所述数据表在所述目标库中对应的ddl不同,和/或所述数据表在所述基准库中对应的dml和所述数据表在所述目标库中对应的dml不同,则确定所述数据表为所述基准库中待比对基准表以及所述数据表为所述目标库中待比对目标表;
11、将所述基准库和所述目标库中不具有相同表名的数据表,确定为所述基准库中待比对基准表或所述目标库中待比对目标表。
12、本技术在对基准表和目标表进行比对之前,先对基准表和目标表进行了筛选,减少了后续差异比对的工作量,因此,能够更快的获得差异对象集合,进而提高数据库修正的效率。
13、在一种可能的设计中,所述确定各第一ddl对应的第一建表对象集合,包括:
14、针对任一第一ddl,对所述第一ddl进行解析,生成所述第一ddl对应的建表语法树;遍历所述第一ddl对应的建表语法树上的各节点,通过监听器获取各节点的数据值,作为第一建表对象集合中的各建表对象。
15、由于无法直接对各第一ddl和各第二ddl进行差异比对,因此,需要先将各第一ddl转换为建表语法树,遍历建表语法树的节点确定第一建表对象集合;类似地,对于各第一dml、各第二ddl以及各第二dml也是同样的处理方式,先转换为对应的语法树,再遍历语法树确定对应的对象集合。
16、在一种可能的设计中,所述将所述第一建表对象集合和所述第二建表对象集合进行差异比对,包括:
17、根据所述第一建表对象集合中存在,但所述第二建表对象集合中不存在的建表对象,创建新增表类型的差异对象;
18、根据所述第一建表对象集合中不存在,但所述第二建表对象集合中存在的建表对象,创建删除表类型的差异对象;
19、对所述第一建表对象集合中存在,且所述第二建表对象集合中存在的建表对象,进行修改表差异比对,创建对应的修改表类型的差异对象。
20、在一种可能的设计中,所述修改表差异比对包括列差异比对、索引差异比对、分区定义差异比对、分区差异对比以及表属性差异比对中的至少一种。
21、进行多种类型的修改表差异比对,确保对第一建表对象集合和第二建表对象集合进行全面的差异比对,提高本技术提出的数据库修正方法的可靠性。
22、在一种可能的设计中,所述将所述第一数据对象集合和所述第二数据对象集合进行差异比对,包括:
23、对于所述基准库中存在但所述目标库中不存在的数据表,根据所述数据表在所述第一数据对象集中对应的数据对象,创建新增数据类型的差异对象;
24、对于所述基准库中不存在但所述目标库中存在的数据表,根据所述数据表在所述第二数据对象集合中对应的数据对象,创建删除数据类型的差异对象;
25、对于所述基准库中存在且所述目标库中存在的数据表,将所述数据表在所述第一数据对象集合中对应的数据对象的各字段值与所述数据表在所述第二数据对象集合中对应的数据对象的各字段值进行比对;若存在任一字段值不一致,则根据所述数据表在所述第一数据对象集合中对应的数据对象以及所述数据表在所述第二数据对象集合中对应的数据对象,创建更新数据类型的差异对象。
26、在一种可能的设计中,对所述差异对象集合中的各差异对象进行反解析,得到各差异对象对应的数据库脚本之前,还包括:
27、将所述差异对象集合中针对同一张表的多个修改表类型的差异对象合并为一个差异对象;
28、将所述差异对象集合中的各差异对象按照差异对象的所属类型进行排序。
29、若不对差异对象做合并处理,那么针对同一张表的多个修改表类型的差异对象将会被反解析为多个数据库脚本,分次执行,执行修改表类型的差异对象反解析得到的数据库脚本,需要进行一系列资源密集型操作,例如,验证表结构、创建新的表结构、复制数据、重建索引等,可能会导致锁定表,影响并发性能,因此,将针对同一张表的多个修改表类型的差异对象合并为一个差异对象,能够降低锁定表的概率,减少对并发性能的影响,提高数据库脚本的执行效率。
30、在一种可能的设计中,所述根据所述第一建表对象集合中存在,但所述第二建表对象集合中不存在的建表对象,创建新增表类型的差异对象,包括:
31、若所述第一建表对象集合中存在,但所述第二建表对象集合中不存在的建表对象,且所述建表对象具有分表属性,则采用预设的分表规则确定各分表表名;
32、根据所述各分表表名创建每个分表对应的新增表类型的差异对象。
33、第二方面,本技术还提供一种数据库修正装置,该装置包括:确定单元和比对单元;
34、所述确定单元,用于确定基准库中各待比对基准表对应的第一ddl和第一dml以及目标库中各待比对目标表对应的第二ddl和第二dml;以及用于分别确定各第一ddl对应的第一建表对象集合、各第一dml对应的第一数据对象集合、各第二ddl对应的第二建表对象集合以及各第二dml对应的第二数据对象集合;
35、所述比对单元,用于将所述第一建表对象集合和所述第二建表对象集合进行差异比对,以及将所述第一数据对象集合和所述第二数据对象集合进行差异比对,获取差异对象集合;对所述差异对象集合中的各差异对象进行反解析,得到各差异对象对应的数据库脚本;以及在所述目标库中执行所述各差异对象对应的数据库脚本,从而实现将所述目标库修正为所述基准库。
36、在一种可能的设计中,所述确定单元通过如下方式确定所述基准库中各待比对基准表以及所述目标库中各待比对目标表:针对所述基准库和所述目标库中具有相同表名的数据表,若所述数据表在所述基准库中对应的ddl和所述数据表在所述目标库中对应的ddl不同,和/或所述数据表在所述基准库中对应的dml和所述数据表在所述目标库中对应的dml不同,则确定所述数据表为所述基准库中待比对基准表以及所述数据表为所述目标库中待比对目标表;将所述基准库和所述目标库中不具有相同表名的数据表,确定为所述基准库中待比对基准表或所述目标库中待比对目标表。
37、在一种可能的设计中,所述确定单元,用于确定各第一ddl对应的第一建表对象集合时:针对任一第一ddl,对所述第一ddl进行解析,生成所述第一ddl对应的建表语法树;遍历所述第一ddl对应的建表语法树上的各节点,通过监听器获取各节点的数据值,作为第一建表对象集合中的各建表对象。
38、在一种可能的设计中,所述比对单元,用于将所述第一建表对象集合和所述第二建表对象集合进行差异比对时:根据所述第一建表对象集合中存在,但所述第二建表对象集合中不存在的建表对象,创建新增表类型的差异对象;根据所述第一建表对象集合中不存在,但所述第二建表对象集合中存在的建表对象,创建删除表类型的差异对象;对所述第一建表对象集合中存在,且所述第二建表对象集合中存在的建表对象,进行修改表差异比对,创建对应的修改表类型的差异对象。
39、在一种可能的设计中,所述修改表差异比对包括列差异比对、索引差异比对、分区定义差异比对、分区差异对比以及表属性差异比对中的至少一种。
40、在一种可能的设计中,所述比对单元,用于将所述第一数据对象集合和所述第二数据对象集合进行差异比对时:对于所述基准库中存在但所述目标库中不存在的数据表,根据所述数据表在所述第一数据对象集中对应的数据对象,创建新增数据类型的差异对象;对于所述基准库中不存在但所述目标库中存在的数据表,根据所述数据表在所述第二数据对象集合中对应的数据对象,创建删除数据类型的差异对象;对于所述基准库中存在且所述目标库中存在的数据表,将所述数据表在所述第一数据对象集合中对应的数据对象的各字段值与所述数据表在所述第二数据对象集合中对应的数据对象的各字段值进行比对;若存在任一字段值不一致,则根据所述数据表在所述第一数据对象集合中对应的数据对象以及所述数据表在所述第二数据对象集合中对应的数据对象,创建更新数据类型的差异对象。
41、在一种可能的设计中,对所述差异对象集合中的各差异对象进行反解析,得到各差异对象对应的数据库脚本之前,所述对比单元,还用于将所述差异对象集合中针对同一张表的多个修改表类型的差异对象合并为一个差异对象;以及将所述差异对象集合中的各差异对象按照差异对象的所属类型进行排序。
42、在一种可能的设计中,所述对比单元用于根据所述第一建表对象集合中存在,但所述第二建表对象集合中不存在的建表对象,创建新增表类型的差异对象时:若所述第一建表对象集合中存在,但所述第二建表对象集合中不存在的建表对象,且所述建表对象具有分表属性,则采用预设的分表规则确定各分表表名;根据所述各分表表名创建每个分表对应的新增表类型的差异对象。
43、第三方面,本技术还提供一种数据库修正设备,该设备包括:处理器,以及与所述处理器通信连接的存储器;
44、所述存储器存储计算机执行指令;
45、所述处理器执行所述存储器存储的计算机执行指令,以实现上述第一方面所述的方法。
46、第四方面,本技术还提供一种计算机可读存储介质,所述存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现上述第一方面所述的方法。
47、第五方面,本技术还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的方法。
本文地址:https://www.jishuxx.com/zhuanli/20241106/322332.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。