公开/公告号CN104866595A
专利类型发明专利
公开/公告日2015-08-26
原文格式PDF
申请/专利权人 北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司;
申请/专利号CN201510289793.8
发明设计人 李亮光;
申请日2015-05-29
分类号
代理机构北京品源专利代理有限公司;
代理人孟金喆
地址 100080 北京市海淀区杏石口路65号西杉创意园西区11C楼东段1-4层西段1-4层
入库时间 2023-12-18 10:36:06
法律状态公告日
法律状态信息
法律状态
2019-05-03
授权
授权
2015-09-23
实质审查的生效 IPC(主分类):G06F17/30 申请日:20150529
实质审查的生效
2015-08-26
公开
公开
技术领域
本发明实施例涉及数据库管理技术,尤其涉及一种对关系数据库脚本加入 事务控制的方法及装置。
背景技术
在数据库日常运维管理中经常会批量插入脚本,批量插入的脚本通常由开 发人员提供,插入脚本基本是上万条甚至几十万条以上数据,一次插入而且没 有任何提交条语句,在程序异常时事务回滚对运行系统产生影响是不言而喻的, 因此,需要在执行脚本时加入事务控制语句COMMIT。
现有技术中,加入事务控制语句是由运维DBA(Database administrator, 数据库管理员)或者开发人员手动加入的。这种人工手动加入事务控制的方法 效率较低,在数据量大时工作量巨大,由于人为错误,也会产生大量系统脏数 据,从而增加运维DBA的工作量。
发明内容
有鉴于此,本发明实施例提供一种对关系数据库脚本加入事务控制的方法 及装置,以提高加入事务控制的效率。
第一方面,本发明实施例提供了一种对关系数据库脚本加入事务控制的方 法,所述方法包括:
配置事务颗粒度;
将脚本的行号为事务颗粒度的整数倍的行之前或之后加入事务控制语句。
进一步地,在配置事务颗粒度之前,还包括:
根据是否已经存在事务控制语句,判断是否需要加入事务控制,若是,则 触发配置事务颗粒度的操作。
进一步地,将脚本的行号为事务颗粒度的整数倍的行之前或之后加入事务 控制语句,包括:
将读取到的脚本的临时行号对事务颗粒度进行取余计算;
在计算结果为0的行之前或之后加入事务控制语句。
进一步地,还包括:
配置数据表信息及导出脚本的数据库版本信息;
将脚本的行号为事务颗粒度的整数倍的行之前或之后加入事务控制语句, 包括:
将查询语句的行号对事务颗粒度进行取余计算;
在计算结果为0的行中查询语句的后面加入事务控制语句;
使用动态结构化查询语言行转化列算法将所述事务控制语句与所述查询语 句合并为一列;
根据所述数据表信息和导出脚本的数据库版本信息,将加入事务控制语句 的查询程序导出为数据库脚本。
进一步地,所述事务颗粒度的范围为200-500。
第二方面,本发明实施例还提供了一种对关系数据库脚本加入事务控制的 装置,所述装置包括:
事务颗粒度配置模块,用于配置事务颗粒度;
事务控制加入模块,用于将脚本的行号为事务颗粒度的整数倍的行之前或 之后加入事务控制语句。
进一步地,还包括:
判断模块,用于在配置事务颗粒度之前,根据是否已经存在事务控制语 句,判断是否需要加入事务控制,若是,则触发配置事务颗粒度的操作。
进一步地,所述事务控制加入模块包括:
第一取余计算单元,用于将读取到的脚本的临时行号对事务颗粒度进行取 余计算;
第一事务控制加入单元,用于在计算结果为0的行之前或之后加入事务控 制语句。
进一步地,还包括:
数据表和数据库版本配置模块,用于配置数据表信息及导出脚本的数据库 版本信息;
所述事务控制加入模块包括:
第二取余计算单元,用于将查询语句的行号对事务颗粒度进行取余计算;
第二事务控制加入单元,用于在计算结果为0的行中查询语句的后面加入 事务控制语句;
合并模块,用于使用动态结构化查询语言行转化列算法将所述事务控制语 句与所述查询语句合并为一列;
脚本导出模块,用于根据所述数据表信息和导出脚本的数据库版本信息, 将加入事务控制语句的查询程序导出为数据库脚本。
进一步地,所述事务颗粒度的范围为200-500。
本发明实施例提供的对关系数据库脚本加入事务控制的方法及装置,通过 配置事务颗粒度,将脚本的行号为事务颗粒度的整数倍的行之前或之后加入事 务控制语句,可以对事务颗粒度进行动态配置,实现了加入事务控制的动态可 配,提高了加入事务控制的效率并且可以提高整体工作效率,随着维护系统的 增多,可以减少大量重复性的手动工作,大大提高工作效率,避免了现有技术 中手工操作而产生的人为错误。
附图说明
图1是本发明实施例一提供的一种对关系数据库脚本加入事务控制的方法 的流程图;
图2是本发明实施例二提供的一种对关系数据库脚本加入事务控制的方法 的流程图;
图3是本发明实施例三提供的一种对关系数据库脚本加入事务控制的方法 的流程图;
图4是本发明实施例四提供的一种对关系数据库脚本加入事务控制的方法 的流程图;
图5是本发明实施例五提供的一种对关系数据库脚本加入事务控制的装置 的示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此 处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需 要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内 容。
实施例一
图1是本发明实施例一提供的一种对关系数据库脚本加入事务控制的方法 的流程图,本实施例可适用于对已经从关系数据库导出的脚本加入事务控制或 在关系数据库中导出脚本时加入事务控制,该方法可以由计算机来执行,具体 包括如下步骤:
步骤110,配置事务颗粒度。
其中,事务颗粒度是指对关系数据库脚本插入事务控制的最小单位,即对 关系数据库脚本中每隔事务颗粒度的行数的脚本插入一次事务控制语句 COMMIT。
其中,所述事务颗粒度的范围优选为200-500。事务颗粒度的范围,即行 间隔200-500是通过多次测试得出的,可以满足各种类型的业务需要。
计算机提供设置窗口供用户配置事务颗粒度大小,用户可以根据业务需要 动态配置事务颗粒度,并通过所述设置窗口输入计算机中,计算机接收到用户 输入的配置事务颗粒度的值后,按照用户输入的事务颗粒度的值对事务颗粒度 进行配置。这种对事务颗粒度的动态可配方式方便用户的日常工作需要,并且 可以在对关系数据库脚本加入事务控制的过程中根据业务需要动态调整事务颗 粒度的大小,即可以随时动态控制事务颗粒度,适应各种不同类别数据库对事 务提交的要求。
步骤120,将脚本的行号为事务颗粒度的整数倍的行之前或之后加入事务 控制语句。
对关系数据库脚本加入的事务控制语句可以位于脚本的行号为事务颗粒度 的整数倍的行之前,也可以位于脚本的行号为事务颗粒度的整数倍的行之后。
其中,脚本的行号在已经从关系数据库导出的脚本中是读取到的脚本行的 临时行号,在从关系数据库中导出脚本时是查询语句的行号。在已经从关系数 据库导出的脚本中添加事务控制时,只需在读取到的脚本行的临时行号为事务 颗粒度的整数倍的行之前或之后加入事务控制语句;在从关系数据库中导出脚 本时添加事务控制时,在查询语句的行号为事务颗粒度的整数倍的行之前或之 后加入事务控制语句后,再执行导出脚本的程序。
本实施例对已经从数据库中导出脚本的脚本语言没有限制,即适用于在 Windows平台上基于VBA脚本和在Linux、Unix平台上基于Perl、Shell、 Python脚本,而且可以跨平台实现动态添加事务控制。
本实施例通过配置事务颗粒度,将脚本的行号为事务颗粒度的整数倍的行 之前或之后加入事务控制语句,实现了加入事务控制的动态可配,提高了加入 事务控制的效率并且可以提高整体工作效率,随着维护系统的增多,可以减少 大量重复性的手动工作,大大提高工作效率,避免了现有技术中手工操作而产 生的人为错误。
实施例二
图2是本发明实施例二提供的一种对关系数据库脚本加入事务控制的方法 的流程图,具体包括如下步骤:
步骤210,根据是否已经存在事务控制语句,判断是否需要加入事务控 制,若是,则触发配置事务颗粒度的操作。
当数据库脚本中已经存在事务控制语句时,判断为不需要加入事务控制; 当然,当数据库脚本中已经存在事务控制语句但是脚本中的事务控制语句的行 间隔较大(例如行间隔为1000,但是业务需要的行间隔为200),不满足业务 需要时,也判断为需要加入事务控制;当数据库脚本中不存在事务控制语句 时,判断为需要加入事务控制,当需要加入事务控制时,触发配置事务颗粒度 的操作。
步骤220,配置事务颗粒度。
步骤230,将脚本的行号为事务颗粒度的整数倍的行之前或之后加入事务 控制语句。
本实施例通过根据是否已经存在事务控制语句,判断是否需要加入事务控 制,当需要加入事务控制时,配置事务颗粒度,将脚本的行号为事务颗粒度的 整数倍的行之前或之后加入事务控制语句,实现了加入事务控制的动态可配, 提高了加入事务控制的效率,与实施例一相比,本实施例通过判断得出已经存 在事务控制语句时不必再加入事务控制语句,避免了事务控制的重复加入。
实施例三
图3是本发明实施例三提供的一种对关系数据库脚本加入事务控制的方法 的流程图,本实施例与实施例一相比,进一步将步骤120拆分成了步骤320和 步骤330,本实施例适用于对已经从关系数据库中导出的脚本加入事务控制, 具体包括如下步骤:
步骤310,配置事务颗粒度。
步骤320,将读取到的脚本的临时行号对事务颗粒度进行取余计算。
对已经从数据库中导出的脚本加入事务控制时,可以从脚本的第一行开始 读取脚本,并在读取到一行脚本的过程中,将读取到的脚本的临时行号对事务 颗粒度进行取余计算。其中,临时行号是指读取脚本时,读取到的脚本的行 号,由于导出的脚本是文本文件的格式,不存在行号,所以这里记为临时行 号。
步骤330,在计算结果为0的行之前或之后加入事务控制语句。
在读取脚本的过程中,读取到的某一行脚本的临时行号对事务颗粒度进行 取余计算,其计算结果为0,则可以在该行之前设置一个断点,从而加入事务 控制语句,也可以在该行之后设置断点加入事务控制语句。
本实施例通过配置事务颗粒度,并将读取到的脚本的临时行号对事务颗粒 度进行取余计算,在计算结果为0的行之前或之后加入事务控制语句,实现了 对已经从关系数据库中导出的脚本加入事务控制的动态可配,提高了加入事务 控制的效率。
实施例四
图4是本发明实施例四提供的一种对关系数据库脚本加入事务控制的方法 的流程图,本实施例适用于对从关系数据库中导出脚本时加入事务控制,具体 包括如下步骤:
步骤410,配置事务颗粒度。
步骤420,配置数据表信息及导出脚本的数据库版本信息。
在从关系数据库中导出脚本时,除了要配置事务颗粒度外,还要配置数据 表信息及导出脚本的数据库版本信息。其中,数据表信息即需要导出脚本的数 据表的信息,例如,需要导出的数据表的数量及类型。
步骤430,将查询语句的行号对事务颗粒度进行取余计算。
对某个数据表从数据库中导出脚本时,数据表的信息是由查询语句实现 的,在查询语句之前会有各个查询语句所在行的行号,将查询语句的行号对事 务颗粒度进行取余计算。
步骤440,在计算结果为0的行中查询语句的后面加入事务控制语句。
在计算结果为0的行中查询语句的后面直接先加入事务控制语句,加入事 务控制语句后在屏幕上显示的效果为具有三列的一个表格,即表头分别为行 号、查询语句和事务控制语句,因此,整个表格具有三列,即行号列、查询列 和事务控制列,如表1所示,表1为以事务颗粒度200为例加入事务控制语句 后在屏幕上显示的效果。表1中,查询列中为空白是因为这里不限定是什么样 的查询语句,事务控制列中除了行号为200和400的其他行中均为空白是因为 在其他行中不需要加入事务控制。
表1加入事务控制语句后在屏幕上显示的效果
步骤450,使用动态结构化查询语言行转化列算法将所述事务控制语句与 所述查询语句合并为一列。
使用动态结构化查询语言(Structured Query Language,SQL)行转化列 算法将所述事务控制语句所在的列与所述查询语句所在的列合并为一列,在合 并后,加入的事务控制语句可以位于合并前该事务控制语句所在的行中的查询 语句之前的行,也可以位于合并前该事务控制语句所在的行中的查询语句之后 的行。
步骤460,根据所述数据表信息和导出脚本的数据库版本信息,将加入事 务控制语句的查询程序导出为数据库脚本。
根据所述数据表信息和导出脚本的数据库版本信息,将加入事务控制语句 的查询所述数据表信息所表示的数据表的程序导出为数据库脚本。
本实施例通过配置事务颗粒度并配置数据表信息和数据库版本信息,将查 询语句的行号对事务颗粒度进行取余计算,在计算结果为0的行后面加入事务 控制语句,使用动态SQL行转列算法将所述事务控制语句与所述查询语句合并 为一列,根据所述数据表信息和导出脚本的数据库版本信息,将加入事务控制 语句的查询程序导出为数据库脚本,实现了从关系数据库中导出脚本时加入事 务控制,并可以动态控制事务颗粒度的大小,适用于各种主流的关系数据库, 如Oracle、SQL Server、Mysql等,提高了加入事务控制的效率。
实施例五
图5是本发明实施例五提供的一种对关系数据库脚本加入事务控制的装置 的示意图,如图5所示,本实施例提供的对关系数据库脚本加入事务控制的装 置包括:事务颗粒度配置模块510和事务控制加入模块520。
其中,事务颗粒度配置模块510用于配置事务颗粒度;
事务控制加入模块520用于将脚本的行号为事务颗粒度的整数倍的行之前 或之后加入事务控制语句。
优选的,还包括:
判断模块,用于在配置事务颗粒度之前,根据是否已经存在事务控制语 句,判断是否需要加入事务控制,若是,则触发配置事务颗粒度的操作。
优选的,所述事务控制加入模块包括:
第一取余计算单元,用于将读取到的脚本的临时行号对事务颗粒度进行取 余计算;
第一事务控制加入单元,用于在计算结果为0的行之前或之后加入事务控 制语句。
优选的,还包括:
数据表和数据库版本配置模块,用于配置数据表信息及导出脚本的数据库 版本信息;
所述事务控制加入模块包括:
第二取余计算单元,用于将查询语句的行号对事务颗粒度进行取余计算;
第二事务控制加入单元,用于在计算结果为0的行中查询语句的后面加入 事务控制语句;
合并模块,用于使用动态结构化查询语言行转化列算法将所述事务控制语 句与所述查询语句合并为一列;
脚本导出模块,用于根据所述数据表信息和导出脚本的数据库版本信息, 将加入事务控制语句的查询程序导出为数据库脚本。
优选的,所述事务颗粒度的范围为200-500。
上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功 能模块和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员 会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进 行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽 然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以 上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例, 而本发明的范围由所附的权利要求范围决定。
机译: DML NoSQL事务控制方法,用于将关系数据库中的DML语句同步到NoSQL数据库
机译: 脚本提供系统,脚本提供装置,脚本执行终端,脚本提供方法,脚本执行方法和程序
机译: 关系数据库的加入方法