数据库更新系统、方法及相应计算机设备和存储介质与流程

阅读: 评论:0

1.本技术涉及电数字数据处理领域,尤其涉及数据库更新系统。本技术还涉及数据库更新方法及相应计算机设备和计算机可读存储介质。

背景技术


::2.面向企业的软件产品,尤其是像医疗服务运营管理系统这样业务相关性强的大型软件产品,总是需要频繁开发新功能以应对越来越多且越来越复杂的客户需求的,软件产品也需要频繁发布新的版本。而不同的客户使用的版本不一样,根据需求选择的要升级的新版本也不一样,从而导致客户项目上的升级容易遇到一些问题。3.另一方面,面向企业的软件产品的数据库里往往存储着大量的业务数据,业务表的数量也非常多,导致这类软件产品的数据库的升级不能像面向个人的软件产品一样,只提取少量的用户配置和用户数据转储,其他数据全量覆盖即可。面向企业的软件产品的版本升级中往往包含大量的数据库变更,不同版本的数据库内容差异大。而数据库更新的问题也是这类软件产品的升级过程中最常遇到的问题之一。4.目前针对数据库更新的主要方式是在开发的过程中按照一定的规范整理升级脚本。但是随着软件产品的功能越来越多,难免遇到以下两个问题:[0005]-参与开发的人员越来越多,升级脚本也越来越多,升级脚本的质量缺乏有效的监督,升级脚本的管理工作也越来越麻烦;[0006]-每次在客户项目上做版本升级时,实施人员都要取大量的升级脚本在客户的数据库上执行,取脚本和执行脚本的过程里也难免会有疏漏。[0007]因此,需要提供一种面向企业的软件产品的版本升级迭代的数据库自动更新工具。技术实现要素:[0008]本发明提供一种数据库更新系统、方法及相应计算机设备和存储介质,其能自动整理升级脚本从而提高升级脚本的质量以及数据库更新的准确性和效率。[0009]在本发明的第一方面,提供一种数据库更新系统,包括:[0010]连接信息配置模块,用于配置旧版本数据库和新版本数据库的连接信息;[0011]记录读取模块,用于逐行读取数据库变更规则文件中的记录并存入中间数据库,每一记录包括指明表名、是否更新表、是否合并表字段、是否合并表数据的变更规则数据;[0012]表读取模块,用于读取新、旧版本数据库的所有表及相应字段信息;[0013]表升级脚本模块,用于从中间数据库逐条读取变更规则数据,根据相应变更规则数据中的表名获取新、旧版本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本;[0014]表新增脚本模块,用于针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理按照新版本数据库创建表、按照新版本数据库插入数据的表新增脚本并保存;[0015]对象脚本模块,用于读取新、旧版本数据库的所有对象的名称和创建语句并将新版本数据库中多出的对象的创建语句保存为对象升级脚本,其中所述对象包括视图、索引、函数、存储过程、触发器和/或序列;[0016]脚本批量执行模块,用于执行所述表升级脚本、所述表新增脚本和所述对象升级脚本中的一个或多个从而实现旧版本数据库的更新。[0017]在本发明的第二方面,提供一种数据库更新方法,包括:[0018]配置旧版本数据库和新版本数据库的连接信息;[0019]逐行读取数据库变更规则文件中的记录并存入中间数据库,每一记录包括指明表名、是否更新表、是否合并表字段、是否合并表数据的变更规则数据;[0020]读取新、旧版本数据库的所有表及相应字段信息;[0021]从中间数据库逐条读取变更规则数据,根据相应变更规则数据中的表名获取新、旧版本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本;[0022]针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理按照新版本数据库创建表、按照新版本数据库插入数据的表新增脚本并保存;[0023]读取新、旧版本数据库的所有对象的名称和创建语句并将新版本数据库中多出的对象的创建语句保存为对象升级脚本,其中所述对象包括视图、索引、函数、存储过程、触发器和/或序列;[0024]执行所述表升级脚本、所述表新增脚本和所述对象升级脚本中的一个或多个从而实现旧版本数据库的更新。[0025]在本发明的第三方面,提供一种计算机设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中所述处理器执行所述计算机程序时实现根据本发明的第一方面的系统的功能或者实现根据本发明的第二方面的方法的步骤。[0026]根据本发明的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据本发明的第一方面的系统的功能或者实现根据本发明的第二方面的方法的步骤。[0027]按照本发明,通过配置旧版本数据库和新版本数据库的连接信息,逐行读取数据库变更规则文件中的记录并存入中间数据库,每一记录包括指明表名、是否更新表、是否合并表字段、是否合并表数据的变更规则数据,读取新、旧版本数据库的所有表及相应字段信息,从中间数据库逐条读取变更规则数据,根据相应变更规则数据中的表名获取新、旧版本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本,针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理按照新版本数据库创建表、按照新版本数据库插入数据的表新增脚本并保存,读取新、旧版本数据库的所有对象的名称和创建语句并将新版本数据库中多出的对象的创建语句保存为对象升级脚本,然后执行所述表升级脚本、所述表新增脚本和所述对象升级脚本中的一个或多个,能够实现数据库升级脚本的自动整理,提高升级脚本的质量并减少管理升级脚本的工作,进而可提高数据库更新的准确性和效率,同时降低计算机人员的工作负荷并节约人力成本。[0028]结合附图阅读本发明实施方式的详细描述后,本发明的其它特点和优点将变得更加清楚。附图说明[0029]图1为根据本发明系统的一实施例的框图;[0030]图2为根据本发明方法的一实施例的流程图。[0031]为清晰起见,这些附图均为示意性及简化的图,它们只给出了对于理解本发明所必要的细节,而省略其他细节。具体实施方式[0032]下面参照附图对本发明的实施方式和实施例进行详细说明。[0033]通过下面给出的详细描述,本发明的适用范围将显而易见。然而,应当理解,在详细描述和具体例子表明本发明优选实施例的同时,它们仅为说明目的给出。[0034]图1示出了根据本发明的数据库更新系统的一优选实施例的框图。[0035]连接信息配置模块102用于配置旧版本数据库和新版本数据库的连接信息,包括但不限于:数据库类型;旧版本数据库的url、用户名和密码;新版本数据库的url、用户名和密码等。在配置这些连接信息之后,还可测试相应的数据库连接,以确保配置的连接信息正确。[0036]记录读取模块104用于逐行读取数据库变更规则文件中的记录并存入中间数据库,每一记录包括指明表名、是否更新表、是否合并表字段、是否合并表数据的变更规则数据。在实施例中,数据库变更规则文件为excel格式。变更规则由开发人员在功能开发时进行记录。如果修改的已有表的表结构,而且升级时需要更新表结构,则需要在变更规则文件中做记录,新增的表不需要在变更规则文件中记录。例如,变更规则excel文件包括table_name、is_move、is_merge_table、is_merge_data、primary_key列。[0037]table_name指明需要更新表结构的表名。[0038]is_move指明表是否要更新,默认值为1。如果值为0,后续整理升级脚本时该表不做更新处理,is_merge_table和is_merge_data两列的值也不做判断。[0039]is_merge_table指明是否合并表字段,默认值为1。值为1表示将新版本数据库中多出的列添加到旧版本数据库中,把新版本数据库中长度比旧版本数据库长的字段在旧版本数据库中增加长度,不会删除旧版本数据库的字段或者减小旧版本数据库的字段长度;值为0表示在旧版本数据库中删除原来的表,按照新版本数据库来重新创建表和插入数据。[0040]is_merge_data指明是否合并表数据,默认值为1。值为1表示将新版本数据库的数据与旧版本数据库做对比,只把旧版本数据库中不存在的主键数据导入到旧版本数据库中。值为0表示将旧版本数据库的该表先清空再导入新版本数据库的数据。[0041]primary_key指明主键值。[0042]如果一张表在新、旧版本数据库都存在又不想更新它,那么在变更规则文件中记录且is_move为0与不在变更规则文件中记录的效果是一样的,都是不更新这张表。[0043]新版本数据库中新增的表不需要在变更规则文件中记录,因为新版本数据库中存在而旧版本数据库不存在的表可默认在旧版本数据库中创建并导入新版本数据库中的数据。[0044]只有程序使用的内部配置表才会有场景需要将is_merge_table和is_merge_data两列的值设为0。业务数据表必须将is_merge_table和is_merge_data两列的值设为1,否则会导致业务数据丢失。[0045]is_merge_table如果为0,is_merge_data也必须是0。[0046]在实施例中,本发明系统还包括校验模块,用于在读取变更规则excel文件中的记录时根据预设规则校验每一记录的变更规则数据,校验不通过则返回失败信息并结束当前更新。校验时例如可校验以下内容:[0047]1)如果is_merge_table为0则is_merge_data必须为0,否则校验失败;[0048]2)表名在新版本数据库中是否存在,不存在则校验失败。[0049]表读取模块106用于读取新、旧版本数据库的所有表及相应字段信息,包含表名、表描述、字段名称、字段类型、字段长度、字段默认值、字段是否非空、字段描述,分别放到一个map中。map是一种依照键存储元素的容器,此处用于表及字段信息的存储。[0050]表升级脚本模块108用于从中间数据库逐条读取变更规则数据,根据相应变更规则数据中的表名获取新、旧版本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本。换言之,逐条读取变更规则,根据变更规则中的表名获取新、旧数据库中的相应表及字段信息。判断变更规则信息,[0051]-如果is_move=0,则该表不做处理;[0052]-如果is_move=1,is_merge_table=0,则整理删除表、按照新版本数据库创建表、按照新版本数据库插入数据的脚本并保存;[0053]-如果is_move=1,is_merge_table=1,is_merge_data=0,则对比新、旧数据库的表的字段信息,出新版本数据库多出的字段和长度变长的字段,整理插入新字段、修改字段长度、清空表、按照新版本数据库插入数据的脚本并保存;[0054]-如果is_move=1,is_merge_table=1,is_merge_data=1,则对比两个库的表的字段信息和表数据的主键信息,出新版本数据库多出的字段、长度变长的字段和多出的主键数据,整理插入新字段、修改字段长度、插入新数据的脚本并保存。[0055]按变更规则处理完后,从两个map中删除该表信息。[0056]具体地,数据库表对比根据变更规则生成脚本。is_move、is_merge_table、is_merge_data只存在三种规则1-0-0、1-1-0、1-1-1。[0057]变更规则1-0-0[0058]将旧版本表的表重命名为_bak,使用新版本表的表结构创建表;插入新版本表的数据。[0059]表重命名为_bak脚本:[0060]sqlserver脚本:【execsp_rename旧表名,旧表名_bak】[0061]oracle脚本:【altertable旧表名renameto旧表名_bak】[0062]拼接建表语句脚本:【createtable表名(字段名字段类型[(字段长度)][notnull]......)】[0063]插入数据脚本:【insertinto表名(字段名1,字段名2)values(值a1,值b1)】[0064]表、表字段、表数据都已提取,根据上述对应规则拼接生成脚本即可。[0065]变更规则1-1-0[0066]对比表中的字段,进行添加修改操作(将新版本多余的列迁移到旧版本,相同的列使用新版本的字段类型,长度短的延长);清空旧版本表的数据,插入新版本表的数据。[0067]新增字段脚本:【altertable表名add字段名字段类型是否为空】[0068]修改字段脚本:【altertable表名modify字段名字段类型是否为空】[0069]清空表数据脚本:[0070]sqlserver脚本:【ifexists(select*fromsys.all_objectswhereobject_id=object_id(n'表名')andtypein('u'))truncatetable表名】[0071]oracle脚本:【[0072]declarenumnumber;[0073]begin[0074]selectcount(1)intonumfromall_tableswheretable_name='表名'andowner='数据库用户名';[0075]ifnum=1thenexecuteimmediate'truncatetable表名';[0076]endif;[0077]end;】[0078]插入数据脚本:【insertinto表名(字段名1,字段名2)values(值a1,值b1)】[0079]变更规则1-1-1[0080]对比表中的字段,进行添加修改操作(将新版本多余的列迁移到旧版本,相同的列使用新版本的字段类型,长度短的延长);新版本表多的数据插入(根据已查询出的数据条件依次判断,有主键时,新版本中的主键不同直接插入;无主键时,新版本中的数据直接插入)。[0081]新增字段脚本:【altertable表名add字段名字段类型是否为空】[0082]修改字段脚本:【altertable表名modify字段名字段类型是否为空】[0083]插入数据脚本:【insertinto表名(字段名1,字段名2)values(值a1,值b1)】,如果字段内容先插入null,根据主键采用update方式更新数据。[0084]表新增脚本模块110用于针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理按照新版本数据库创建表、按照新版本数据库插入数据的表新增脚本并保存。在表升级脚本模块的处理之后,两个map中只剩下不在变更规则中的表,对比两个map中的表名,即可获取新版本数据库中多出的表,整理按照新版本数据库创建表、按照新版本数据库插入数据的脚本并保存。[0085]对象脚本模块112用于读取新、旧版本数据库的所有对象的名称和创建语句并分别存到map中,所述对象包括视图、索引、函数、存储过程、触发器和/或序列;然后对比两个map中的对象名称确定新版本数据库中多出的对象并将其创建语句保存为对象升级脚本。[0086]脚本批量执行模块114用于执行整理/保存的表升级脚本、表新增脚本和对象升级脚本中的一个或多个从而实现旧版本数据库的更新。应注意,在执行表升级脚本中的插入数据脚本之前,需读取数据库所有表的数据信息。[0087]在实施例中,本发明系统还包括记录模块,用于提供用于记录变更规则数据的变更规则模板,使得开发人员能按照模板记录数据库变更规则。[0088]在实施例中,本发明系统还包括现有脚本执行模块,用于读取并执行非所述系统生成的脚本。即,如果有其他特殊脚本需要执行,可以在该模块执行,点击按钮后可弹出页面,输入其他特殊脚本的目录后执行即可。[0089]上述实施例提供面向企业的软件产品升级使用的数据库更新工具,由于可自动整理数据库升级脚本,提高了升级脚本的质量并减少了管理升级脚本的工作,进而提高了数据库更新的准确性和效率,同时降低了计算机人员的工作负荷并节约人力成本。[0090]图2示出了根据本发明的数据库更新方法的一优选实施例的流程图。[0091]在步骤s202,配置旧版本数据库和新版本数据库的连接信息;[0092]在步骤s204,逐行读取数据库变更规则文件中的记录并存入中间数据库,每一记录包括指明表名、是否更新表、是否合并表字段、是否合并表数据的变更规则数据;[0093]在步骤s206,读取新、旧版本数据库的所有表及相应字段信息;[0094]在步骤s208,从中间数据库逐条读取变更规则数据,根据相应变更规则数据中的表名获取新、旧版本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本;[0095]在步骤s210,针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理按照新版本数据库创建表、按照新版本数据库插入数据的表新增脚本并保存;[0096]在步骤s212,读取新、旧版本数据库的所有对象的名称和创建语句并将新版本数据库中多出的对象的创建语句保存为对象升级脚本,其中所述对象包括视图、索引、函数、存储过程、触发器和/或序列;[0097]在步骤s214,执行所述表升级脚本、所述表新增脚本和所述对象升级脚本中的一个或多个从而实现旧版本数据库的更新。[0098]在另一实施例中,本发明提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现结合图1所示所述的系统实施例或其它相应系统实施例的功能或者实现结合图2所示所述的方法实施例或其它相应方法实施例的步骤,在此不再赘述。[0099]在另一实施例中,本发明提供一种计算机设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中所述处理器执行所述计算机程序时实现结合图1所示所述的系统实施例或其它相应系统实施例的功能或者实现结合图2所示所述的方法实施例或其它相应方法实施例的步骤,在此不再赘述。[0100]在此所述的多个不同实施方式或者其特定特征、结构或特性可在本发明的一个或多个实施方式中适当组合。另外,在某些情形下,只要适当,流程图中和/或流水处理描述的步骤顺序可修改,并不必须精确按照所描述的顺序执行。另外,本发明的多个不同方面可使用软件、硬件、固件或者其组合和/或执行所述功能的其它计算机实施的模块或装置进行实施。本发明的软件实施可包括保存在计算机可读介质中并由一个或多个处理器执行的可执行代码。计算机可读介质可包括计算机硬盘驱动器、rom、ram、闪存、便携计算机存储介质如cd-rom、dvd-rom、闪盘驱动器和/或具有通用串行总线(usb)接口的其它装置,和/或任何其它适当的有形或非短暂计算机可读介质或可执行代码可保存于其上并由处理器执行的计算机存储器。本发明可结合任何适当的操作系统使用。[0101]除非明确指出,在此所用的单数形式“一”、“该”均包括复数含义(即具有“至少一”的意思)。应当进一步理解,说明书中使用的术语“具有”、“包括”和/或“包含”表明存在所述的特征、步骤、操作、元件和/或部件,但不排除存在或增加一个或多个其他特征、步骤、操作、元件、部件和/或其组合。如在此所用的术语“和/或”包括一个或多个列举的相关项目的任何及所有组合。[0102]前面说明了本发明的一些优选实施例,但是应当强调的是,本发明不局限于这些实施例,而是可以本发明主题范围内的其它方式实现。本领域技术人员可以在本发明技术构思的启发和不脱离本

发明内容

的基础上对本发明做出各种变型和修改,这些变型或修改仍落入本发明的保护范围之内。当前第1页12当前第1页12

技术特征:


1.一种数据库更新系统,其特征在于,所述系统包括:连接信息配置模块,用于配置旧版本数据库和新版本数据库的连接信息;记录读取模块,用于逐行读取数据库变更规则文件中的记录并存入中间数据库,每一记录包括指明表名、是否更新表、是否合并表字段、是否合并表数据的变更规则数据;表读取模块,用于读取新、旧版本数据库的所有表及相应字段信息;表升级脚本模块,用于从中间数据库逐条读取变更规则数据,根据相应变更规则数据中的表名获取新、旧版本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本;表新增脚本模块,用于针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理按照新版本数据库创建表、按照新版本数据库插入数据的表新增脚本并保存;对象脚本模块,用于读取新、旧版本数据库的所有对象的名称和创建语句并将新版本数据库中多出的对象的创建语句保存为对象升级脚本,其中所述对象包括视图、索引、函数、存储过程、触发器和/或序列;脚本批量执行模块,用于执行所述表升级脚本、所述表新增脚本和所述对象升级脚本中的一个或多个从而实现旧版本数据库的更新。2.根据权利要求1所述的系统,其特征在于,所述系统还包括:校验模块,用于根据预设规则校验每一记录的变更规则数据,响应于校验不通过,返回失败信息。3.根据权利要求1所述的系统,其特征在于,所述系统还包括:记录模块,用于提供用于记录变更规则数据的变更规则模板。4.根据权利要求1所述的系统,其特征在于,所述表升级脚本模块用于:响应于相应变更规则数据指明要更新表但不合并表字段,整理删除表、按照新版本数据库创建表、按照新版本数据库插入数据的脚本并保存。5.根据权利要求1所述的系统,其特征在于,所述表升级脚本模块用于:响应于相应变更规则数据指明要更新表、要合并表字段但不合并表数据,确定新版本数据库相应表多出的字段和长度变长的字段,整理插入新字段、修改字段长度、清空表、按照新版本数据库插入数据的脚本并保存。6.根据权利要求1所述的系统,其特征在于,所述表升级脚本模块用于:响应于相应变更规则数据指明要更新表、要合并表字段及要合并表数据,确定新版本数据库相应表多出的字段、长度变长的字段和多出的主键数据,整理插入新字段、修改字段长度、插入新数据的脚本并保存。7.根据权利要求1所述的系统,其特征在于,所述系统还包括:现有脚本执行模块,用于读取并执行非所述系统生成的脚本。8.一种数据库更新方法,其特征在于,所述方法包括:配置旧版本数据库和新版本数据库的连接信息;逐行读取数据库变更规则文件中的记录并存入中间数据库,每一记录包括指明表名、是否更新表、是否合并表字段、是否合并表数据的变更规则数据;读取新、旧版本数据库的所有表及相应字段信息;从中间数据库逐条读取变更规则数据,根据相应变更规则数据中的表名获取新、旧版
本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本;针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理按照新版本数据库创建表、按照新版本数据库插入数据的表新增脚本并保存;读取新、旧版本数据库的所有对象的名称和创建语句并将新版本数据库中多出的对象的创建语句保存为对象升级脚本,其中所述对象包括视图、索引、函数、存储过程、触发器和/或序列;执行所述表升级脚本、所述表新增脚本和所述对象升级脚本中的一个或多个从而实现旧版本数据库的更新。9.一种计算机设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中所述处理器执行所述计算机程序时实现根据权利要求1-7任一所述的系统的功能或者根据权利要求8所述的方法的步骤。10.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1-7任一所述的系统的功能或者根据权利要求8所述的方法的步骤。

技术总结


本申请公开了数据库更新系统、方法及相应计算机设备和存储介质,其中所述系统用于:配置新旧版本数据库的连接信息;读取数据库变更规则文件中的记录;读取新旧版本数据库的所有表及相应字段信息;读取变更规则数据并根据其中的表名获取新旧版本数据库的相应表及字段信息,根据相应变更规则数据以及获取的相应表及字段信息整理表升级脚本;针对不在变更规则数据中的表,确定新版本数据库中多出的表并整理表新增脚本并保存;读取新旧版本数据库的所有对象的名称和创建语句并将新版本数据库中多出的对象的创建语句保存为对象升级脚本;执行整理/保存的脚本中的一个或多个从而实现旧版本数据库的更新。本发明能提高数据库更新的准确性和效率。准确性和效率。准确性和效率。


技术研发人员:

张志昌 李庆超 张亚平

受保护的技术使用者:

望海康信(北京)科技股份公司

技术研发日:

2022.08.19

技术公布日:

2022/12/12

本文发布于:2022-12-19 07:17:26,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/37485.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据库   脚本   字段   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图