一种用于数据库持续集成与脚本文件管理的方法及系统与流程

文档序号:16735184发布日期:2019-01-28 12:34阅读:390来源:国知局
一种用于数据库持续集成与脚本文件管理的方法及系统与流程

本发明涉及数据库集成技术领域,更具体地,涉及一种用于数据库持续集成与脚本文件管理的方法及系统。



背景技术:

在软件开发过程中,随着对需求的完成,对系统bug的修复以及对系统易用性的完善除了对代码的增加与修改外,数据库的变化也是重要的一个环节。软件功能的变化,程序的更新都要以数据库的变化为前提。软件的升级即从一个版本更新至另一个版本的开发过程中,数据库的更新是在软件开发过程中一个持续的过程,经常性的数据库结构的变化以及预置数据的变化就需要一个完整的脚本管理与集成的过程。

在高并发,高数据量的事务型数据库当中,oracle数据库首屈一指。在oracle集成过程中,大量脚本因为需要有语法正确性的要求,数据各种约束的要求,blob、clob字段的特殊性,ddl语句不可回滚性特点,给oracle持续集成带来很大的难度。

因此,需要一种技术,以实现数据库持续集成与脚本文件管理。



技术实现要素:

本发明技术方案提供了一种用于数据库持续集成与脚本文件管理的方法及系统,以解决如何对数据库持续集成与脚本文件管理的问题。

为了解决上述问题,本发明提供了一种用于数据库持续集成与脚本文件管理的方法,所述方法包括:

将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,在数据库集成环境中执行所述脚本文件;

通过脚本集成工具dbit执行所述脚本文件和管理所述脚本文件汇总目录下,包括:

在每个时间段的脚本文件汇总目录的路径下创建子目录;

在验证库中执行脚本文件,判断所述脚本文件是否为异常,并将异常的所述脚本文件导入当前时间段的脚本文件汇总目录下的所述子目录;

将非异常的所述脚本文件在正式库中执行,并将执行成功后的脚本文件追加至版本升级脚本文件;

清除所述验证库上的会话控制,利用所述正式库重建验证库。

优选地,还包括:在数据库环境中创建标准库和验证库,所述标准库在持续集成后为正式库。

优选地,还包括:

定义所述脚本文件的命名规则。

优选地,所述命名规则为:

日期_提交人姓名_模块名_说明.txt。

优选地,所述脚本集成工具dbit由java语言开发,包括预先设置的定时任务,所述定时任务由任务框架quartz执行。

优选地,所述子目录还包括文本文件,所述文本文件用于记录所述脚本文件的异常原因。

优选地,所述数据库集成环境为oracle数据库集成环境。

优选地,采用提交脚本文件的方式,对所述数据库进行持续集成。

优选地,所述脚本文件包括:不同日期、不同提交人和不同模块的脚本文件。

优选地,所述将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,包括:

所述当前时间段的脚本文件汇总目录是通过脚本集成工具dbit按日期自动生成,生成时间是在执行完前一日脚本之后。

基于本发明的另一方面,提供一种用于数据库持续集成与脚本文件管理的系统,所述系统包括:

提交单元,用于将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,在数据库集成环境中执行所述脚本文件;

集成单元,用于通过脚本集成工具dbit执行所述脚本文件和管理所述脚本文件汇总目录下,包括:

在每个时间段的脚本文件汇总目录的路径下创建子目录;

在验证库中执行脚本文件,判断所述脚本文件是否为异常,并将异常的所述脚本文件导入当前时间段的脚本文件汇总目录下的所述子目录;

将非异常的所述脚本文件在正式库中执行,并将执行成功后的脚本文件追加至版本升级脚本文件;

清除所述验证库上的会话控制,利用所述正式库重建验证库。

优选地,还包括建立单元,用于在数据库环境中创建标准库和验证库,所述标准库在持续集成后为正式库。

优选地,还包括:

定义所述脚本文件的命名规则。

优选地,所述命名规则为:

日期_提交人姓名_模块名_说明.txt。

优选地,所述脚本集成工具dbit由java语言开发,包括预先设置的定时任务,所述定时任务由任务框架quartz执行。

优选地,所述子目录还包括文本文件,所述文本文件用于记录所述脚本文件的异常原因。

优选地,所述数据库集成环境为oracle数据库集成环境。

优选地,采用提交脚本文件的方式,对所述数据库进行持续集成。

优选地,所述脚本文件包括:不同日期、不同提交人和不同模块的脚本文件。

优选地,所述将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,包括:

所述当前时间段的脚本文件汇总目录是通过脚本集成工具dbit按日期自动生成,生成时间是在执行完前一日脚本之后。

本发明技术方案提供一种用于数据库持续集成与脚本文件管理的方法和系统,其中方法包括:将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,在数据库集成环境中执行脚本文件;通过脚本集成工具dbit执行脚本文件和管理脚本文件汇总目录下,包括:在每个时间段的脚本文件汇总目录的路径下创建子目录;在验证库中执行脚本文件,判断脚本文件是否为异常,并将异常的脚本文件导入当前时间段的脚本文件汇总目录下的子目录;将非异常的脚本文件在正式库中执行,并将执行成功后的脚本文件追加至版本升级脚本文件;清除验证库上的会话控制,利用正式库重建验证库。本发明的技术方案解决了软件开发过程中,oralce数据库的持续集成与升级脚本文件的制作,以及提供一个脚本文件管理的解决方案。由于现有技术是按照语法对脚本文件进行复杂的验证,且验证结果并不好,本发明技术方案将脚本在验证库上执行的,解决了繁琐的脚本语法校验工作。本发明创新的转换成为:直接执行脚本,然后通过执行过程中java程序捕获异常的方式来纠错。本发明技术方案由事先判断转为由结论反向推导。本发明中无论是路径的创建、脚本的验证、脚本的执行、数据库自动备份都是通过脚本集成工具dbit自动执行,无需人工干预。因此在软件开发过程中,数据库的持续集成可以尽量自动化,最大限度的减少工作量,增加集成中数据库的稳定性与正确性。

附图说明

通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:

图1为根据本发明优选实施方式的一种用于数据库持续集成与脚本文件管理的方法流程图;

图2为根据本发明优选实施方式的一种用于数据库持续集成与脚本文件管理的方法流程图;以及

图3为根据本发明优选实施方式的一种用于数据库持续集成与脚本文件管理的系统结构图。

具体实施方式

现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。

除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。

图1为根据本发明优选实施方式的一种用于数据库持续集成与脚本文件管理的方法流程图。软件开发时,需要先建立一个数据库版本。在实际软件开发的编码过程中,每一位设计师,开发工程师在编码之前都要事先设计数据库表的结构,各种约束、索引、视图等数据库对象以及预置数据。复杂的系统都需要多名工程师的团队合作完成。而为了一致性大家往往会面对同一个数据库,每一天每一个人都可能会对这个数据库进行修改。这个过程我们用脚本文件的方式提交给数据库执行。所以脚本文件的管理,数据库集成是一项非常重要的工作。如图1所示,一种用于数据库持续集成与脚本文件管理的方法,方法包括:

优选地,在步骤101:将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,在数据库集成环境中执行脚本文件。

优选地,在步骤102:通过脚本集成工具dbit执行脚本文件和管理脚本文件汇总目录下,包括:在每个时间段的脚本文件汇总目录的路径下创建子目录;在验证库中执行脚本文件,判断脚本文件是否为异常,并将异常的脚本文件导入当前时间段的脚本文件汇总目录下的子目录;将非异常的脚本文件在正式库中执行,并将执行成功后的脚本文件追加至版本升级脚本文件。

本申请在每次循环中处理脚本文件,将ddl和dml操作的命令分别提取,并首先在验证库上通过ojdbc驱动调用数据库执行方法执行ddl操作,如果执行过程中抛出任何异常都会由javatry-catch捕获,同时应将该文件移出内存,再将文件本身剪切至“执行失败脚本”路径下并将错误日志追加至“说明文件.txt”中。这里“说明文件.txt”也是常驻内存的,以便实时更新。每次更新都刷新内存同时回写硬盘。如果成功则继续执行dml操作,如果失败至复制ddl执行失败的操作。如果成功则表示提交的脚本文件正确,这时将脚本文件内语句在正式库上执行。执行成功后将脚本内容追加至版本升级脚本。如此步骤将全部脚本文件处理完成。

优选地,方法还包括:在数据库环境中创建标准库和验证库,标准库在持续集成后为正式库。

优选地,方法还包括:定义脚本文件的命名规则。优选地,命名规则为:日期_提交人姓名_模块名_说明.txt。

本申请首先使用javaio技术在每日脚本汇总路径下创建子目录,名为“执行失败脚本”,并在其中创建“说明文件.txt”。接着将每日提交的脚本文件加载进内存,存放在list<file>集合中,依次循环检查名称规范,不符合名称规范的的移出内存并将脚本文件本身剪切到“执行失败脚本”目录中,同时将不符合的原因写入“说明文件.txt”中

优选地,脚本集成工具dbit由java语言开发,包括预先设置的定时任务,定时任务由任务框架quartz执行。

优选地,子目录还包括文本文件,文本文件用于记录脚本文件的异常原因。

优选地,数据库集成环境为oracle数据库集成环境。

优选地,采用提交脚本文件的方式,对数据库进行持续集成。

优选地,脚本文件包括:不同日期、不同提交人和不同模块的脚本文件。

优选地,将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,包括:

当前时间段的脚本文件汇总目录是通过脚本集成工具dbit按日期自动生成,生成时间是在执行完前一日脚本之后。

优选地,清除验证库上的会话控制,利用正式库重建验证库。本申请中,自动备份正式库,然后清空杀掉所有在验证库上的session,接着删除验证库,并用正式库备份文件重建验证库。此一系列操作采用java调用批处理命令的方式。批处理执行oracleexp命令,将正式库以dmp文件格式导出至备份路径下;然后执行altersystemkillsession命令杀掉所有连接验证库的会话,而后执行dropuser删除验证库,最后执行createuser命令重建,并grant所有相关oracle权限与角色。此保证验证库始终与正式库一致,使得下一次在验证库上的预执行能够与在正式库执行效果一致。本发明的实施方式很好的省掉了重杂繁琐的脚本验证,采用预执行的方式达到了同样的效果而且更加简洁,也防止了脚本验证带来的校验不全面的问题。

图2为根据本发明优选实施方式的一种用于数据库持续集成与脚本文件管理的方法流程图。对oracle数据库的持续集成,采取提交脚本文件的方式。不同日期,不同提交人,不同模块都可能有脚本文件,为了很好的管理与错误定位,要求提交的脚本文件的命名规则如下:“日期_提交人姓名_模块名_说明.txt。本申请用oracle集成环境专门来执行脚本。集成环境包括一个数据库环境、脚本集成工具dbit以及脚本管理目录。各提交人会将脚本提交至脚本管理目录下的当日脚本汇总目录下,该目录是通成脚本集成工具dbit按日期自动生成的,生成时间是在执行完前一日脚本之后。数据库环境包括oracle标准库和验证库。这个标准库就是持续集成后的正式库,验证库是脚本预执行的环境。对于脚本的执行和脚本管理目录由脚本集成工具dbit自动统一管理。脚本集成工具dbit由java语言开发,内设定时任务,比如每个时间段夜间10点启动。这里采用java定时任务框架quartz实现。如图2所示,种用于数据库持续集成与脚本文件管理的方法包括:

1、首先使用javaio技术在每日脚本汇总路径下创建子目录,名为“执行失败脚本”,并在其中创建“说明文件.txt”。接着将每日执交的脚本文件加载进内存,存放在list<file>集合中,依次循环检查名称规范,不符合的移出内存并将文件本身剪切到“执行失败脚本”目录中,同时将不符合的原因写入“说明文件.txt”中。

2、在每次循环中处理脚本文件,将ddl和dml操作的命令分别提取,并首先在验证库上通过ojdbc驱动调用数据库执行方法执行ddl操作,如果执行过程中抛出任何异常都会由javatry-catch捕获,同时应该文件移出内存,再将文件本身剪切至“执行失败脚本”路径下并将错误日志追加至“说明文件.txt”中。这里“说明文件.txt”也是常驻内存的,以便实时更新。每次更新都刷新内存同时回写硬盘。如果成功则继续执行dml操作,如果失败至复制ddl执行失败的操作。如果成功则表示提交的脚本文件正确,这时将脚本文件内语句在正式库上执行。执行成功后将脚本文件内容追加至版本升级脚本文件。如此步骤将全部脚本文件处理完成。

3、自动备份正式库,然后清空杀掉所有在验证库上的session,接着删除验证库,并用正式库备份文件重建验证库。此一系列操作采用java调用批处理命令的方式。批处理执行oracleexp命令,将正式库以dmp文件格式导出至备份路径下;然后执行altersystemkillsession命令杀掉所有连接验证库的会话,而后执行dropuser删除验证库,最后执行createuser命令重建,并grant所有相关oracle权限与角色。此保证验证库始终与正式库一致,使得下一次在验证库上的预执行能够与在正式库执行效果一致。本申请的实施方式很好的省掉了重杂繁琐的脚本验证,采用预执行的方式达到了同样的效果而且更加简洁,也防止了脚本验证带来的校验不全面的问题。

因为oracle包含有blob,clob等字段类型,sql脚本难以执行。本发明的集成方法,支持提交dmp文件。该操作在上面执行顺序2的最后完成。因为dmp文件内容不可见,可能由于提交人的误操作导出更多无关表,这时会覆盖标准库。所以脚本集成工具dbit需要读出dmp文件头信息,确认其只包括一个表并内含blob,clob类型的字段。

为了保证脚本文件提交的正确性,规范sql编写规则,导出dmp文件的准备。日常需要重视提交脚本的正确性。设计人员要掌握oracle的脚本编写规则;并了解系统的业务流程与开发技术;最后还要定期对人员提交的脚本质量进行考核,让所有成员时刻重视脚本的规范性与正确性。

关于在提交脚本给脚本集成工具dbit之前,每个人都应确认脚本的可执行性,这需要有一个与标准库完全一致的环境供测试用。脚本文件集成工具惧备向指向机器创建数据库的功能。只要脚本文件提交人向集成工具发送一个“请求建库”命令,集成工具会自动将最近的标准库备份文件向目标机器导出创建测试库。此处采用java设计模式思想,消息请求与响应,数据库命令,批处理调度等技术结合的方式实现。

为了保证脚本提交的正确性,规范sql编写规则,导出dmp文件的准备。日常对开发人员的培训与规范化管理也很重要。对于有经验的人员,要定时提醒和监督,使整个开发团队有意识的重视提交脚本的正确性。对于新成员,要对其进行培训、指导,使其掌握oracle的脚本编写规则;并对其进行业务培训,让其了解系统的业务流程与开发技术;最后还要定期对人员提交的脚本质量进行考核,让所有成员时刻重视脚本的规范性与正确性。关于在提交脚本给脚本集成工具之前,每个人都应确认脚本的可执行性,这需要有一个与标准库完全一致的环境供测试用。脚本集成工具惧备向指向机器创建数据库的功能。只要脚本提交人向集成工具发送一个“请求建库”命令,集成工具会自动将最近的标准库备份文件向目标机器导出创建测试库。此处采用java设计模式思想,消息请求与响应,数据库命令,批处理调度等技术结合的方式实现。

图3为根据本发明优选实施方式的一种用于数据库持续集成与脚本文件管理的系统结构图。如图3所示,一种用于数据库持续集成与脚本文件管理的系统,系统包括:

提交单元301,用于将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,在数据库集成环境中执行脚本文件;

集成单元302,用于通过脚本集成工具dbit执行脚本文件和管理脚本文件汇总目录下,包括:在每个时间段的脚本文件汇总目录的路径下创建子目录;在验证库中执行脚本文件,判断脚本文件是否为异常,并将异常的脚本文件导入当前时间段的脚本文件汇总目录下的子目录;将非异常的脚本文件在正式库中执行,并将执行成功后的脚本文件追加至版本升级脚本文件。

本申请在每次循环中处理脚本文件,将ddl和dml操作的命令分别提取,并首先在验证库上通过ojdbc驱动调用数据库执行方法执行ddl操作,如果执行过程中抛出任何异常都会由javatry-catch捕获,同时应将该文件移出内存,再将文件本身剪切至“执行失败脚本”路径下并将错误日志追加至“说明文件.txt”中。这里“说明文件.txt”也是常驻内存的,以便实时更新。每次更新都刷新内存同时回写硬盘。如果成功则继续执行dml操作,如果失败至复制ddl执行失败的操作。如果成功则表示提交的脚本文件正确,这时将脚本文件内语句在正式库上执行。执行成功后将脚本内容追加至版本升级脚本。如此步骤将全部脚本文件处理完成。

优选地,系统还包括:定义脚本文件的命名规则。优选地,命名规则为:日期_提交人姓名_模块名_说明.txt。

优选地,脚本集成工具dbit由java语言开发,包括预先设置的定时任务,定时任务由任务框架quartz执行。

优选地,子目录还包括文本文件,文本文件用于记录脚本文件的异常原因。

优选地,数据库集成环境为oracle数据库集成环境。

优选地,采用提交脚本文件的方式,对数据库进行持续集成。

优选地,脚本文件包括:不同日期、不同提交人和不同模块的脚本文件。

优选地,将脚本文件提交至脚本文件管理目录下的当前时间段的脚本文件汇总目录下,包括:

当前时间段的脚本文件汇总目录是通过脚本集成工具dbit按日期自动生成,生成时间是在执行完前一日脚本之后。

优选地,还包括建立单元,用于在数据库环境中创建标准库和验证库,标准库在持续集成后为正式库。

优选地,清除验证库上的会话控制,利用正式库重建验证库。本申请中,自动备份正式库,然后清空杀掉所有在验证库上的session,接着删除验证库,并用正式库备份文件重建验证库。此一系列操作采用java调用批处理命令的方式。批处理执行oracleexp命令,将正式库以dmp文件格式导出至备份路径下;然后执行altersystemkillsession命令杀掉所有连接验证库的会话,而后执行dropuser删除验证库,最后执行createuser命令重建,并grant所有相关oracle权限与角色。此保证验证库始终与正式库一致,使得下一次在验证库上的预执行能够与在正式库执行效果一致。本发明的实施方式很好的省掉了重杂繁琐的脚本验证,采用预执行的方式达到了同样的效果而且更加简洁,也防止了脚本验证带来的校验不全面的问题。

已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。

通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1