一种数据库语句检查方法和装置与流程

文档序号:14036767阅读:154来源:国知局
一种数据库语句检查方法和装置与流程

本发明涉及数据处理技术领域,具体涉及一种数据库语句检查方法和装置。



背景技术:

数据库是系统构建中必不可少的一部分,而随着信息时代的大爆炸,各种信息铺天盖地,信息数量、信息规模都与日俱增,对数据库操作的要求越来越高。在数据库操作语句的开发过程中,一点小瑕疵就可能无限放大,最终导致系统出现严重的问题。

在企业级的大型系统的构建中,因规模庞大、参与人员众多、系统迭代频繁、开发人员水平不一,导致数据库操作语句开发过程中难免存在性能、语法等问题,而程序复核依靠人力耗时耗力,检查效率低。

因此,如何提高检查数据库语句的效率成为本领域技术人员亟待解决的技术问题之一。



技术实现要素:

有鉴于此,本发明实施例提供一种数据库语句检查方法和装置,以提高数据库语句的检查效率。

为实现上述目的,本发明实施例提供如下技术方案:

一种数据库语句检查方法,包括:

获取待检测的目标数据库的数据库脚本;

获取预存储的数据库脚本检查规则;

调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,判断数据库脚本编码是否存在问题,并输出检查结果。

优选的,上述数据库语句检查方法中,所述获取待检测的目标数据库的数据库脚本,具体包括:

通过输入目录、输入单个脚本文件或输入sql语句的方式获取用户选择的目标数据库的数据库脚本,或获取用户输入的目录下的一个或多个目标数据库的数据库脚本。

优选的,上述数据库语句检查方法中,所述由检查规则存储单元中调用所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,具体包括:

获取所述检查规则存储单元中的第一预设规则,依据所述第一预设规则检查获取到的目标数据库的数据库脚本中是否存在回车符,如果是,输出所述数据库脚本包含回车符的语句的具体位置;

获取所述检查规则存储单元中的第二预设规则,依据所述第二预设规则检查获取到的目标数据库的数据库脚本中的insert、select、merge是否符合规范,如果否,输出不符合规范的insert、select、merge的具体位置;

获取所述检查规则存储单元中的第三预设规则,依据所述第三预设规则检查获取到的目标数据库的数据库脚本中的insert、update、merge插入、修改数据项是否与预设数据库表中的字段定义类型一致,如果不一致,输出所述insert、update、merge插入、修改数据项的具体位置;

获取所述检查规则存储单元中的第四预设规则,依据所述第四预设规则检查获取到的目标数据库的数据库脚本中的表外键是否建立索引,如果没有索引,输出表外键的具体位置;

获取所述检查规则存储单元中的第五预设规则,依据所述第五预设规则检查获取到的目标数据库的数据库脚本索引执行情况,输出不能有效执行的索引的具体位置;

获取所述检查规则存储单元中的第六预设规则,依据所述第六预设规则检查获取到的目标数据库的数据库脚本表执行情况,输出不能有效执行的数据库脚本表的具体位置;

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查获取到的目标数据库的数据库脚本中是否包含有对满足设定条件的大数据表的操作,如果是,输出所述大数据表的位置以及对所述大数据表操作的数据库脚本的具体位置;

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查目标数据库脚本中是否存在未提交的sql语句,如果是,输出未提交的sql语句的具体位置。

优选的,上述数据库语句检查方法中,在获取到所述目标数据库的数据库脚本之后,依据数据库脚本检查规则对所述数据库脚本进行检查之前,还包括:

对所述数据库脚本进行解析,得到sql语句的各个组成部分的信息。

优选的,上述数据库语句检查方法中,输出检查结果之后,还包括:

显示所述目标数据库的数据库脚本以及数据检查单元的检查结果。

优选的,上述数据库语句检查方法中,所述显示所述目标数据库的数据库脚本以及数据检查单元的检查结果,具体包括:

在第一显示栏显示所述目标数据库的数据库脚本,在第二显示栏中采用对所述目标数据库的数据库脚本进行标注的形式显示检查结果,并标注不满足所述数据库脚本检查规则的sql语句。

一种数据库语句检查装置,包括:

数据采集单元,用于获取待检测的目标数据库的数据库脚本;

检查规则存储单元,用于存储预设的数据库脚本检查规则;

数据检查单元,用于获取所述目标数据库的数据库脚本,由检查规则存储单元中调用所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,判断数据库脚本编码是否存在问题,并输出检查结果。

优选的,上述数据库语句检查装置中,所述数据采集单元,具体用于:

通过输入目录、输入单个脚本文件或输入sql语句的方式获取用户选择的目标数据库的数据库脚本,或获取用户输入的目录下的一个或多个目标数据库的数据库脚本。

优选的,上述数据库语句检查装置中,所述数据检查单元具体用于:

获取所述检查规则存储单元中的第一预设规则,依据所述第一预设规则检查获取到的目标数据库的数据库脚本中是否存在回车符,如果是,输出所述数据库脚本包含回车符的语句的具体位置;

获取所述检查规则存储单元中的第二预设规则,依据所述第二预设规则检查获取到的目标数据库的数据库脚本中的insert、select、merge是否符合规范,如果否,输出不符合规范的insert、select、merge的具体位置;

获取所述检查规则存储单元中的第三预设规则,依据所述第三预设规则检查获取到的目标数据库的数据库脚本中的insert、update、merge插入、修改数据项是否与预设数据库表中的字段定义类型一致,如果不一致,输出所述insert、update、merge插入、修改数据项的具体位置;

获取所述检查规则存储单元中的第四预设规则,依据所述第四预设规则检查获取到的目标数据库的数据库脚本中的表外键是否建立索引,如果没有索引,输出表外键的具体位置;

获取所述检查规则存储单元中的第五预设规则,依据所述第五预设规则检查获取到的目标数据库的数据库脚本索引执行情况,输出不能有效执行的索引的具体位置;

获取所述检查规则存储单元中的第六预设规则,依据所述第六预设规则检查获取到的目标数据库的数据库脚本表执行情况,输出不能有效执行的数据库脚本表的具体位置;

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查获取到的目标数据库的数据库脚本中是否包含有对满足设定条件的大数据表的操作,如果是,输出所述大数据表的位置以及对所述大数据表操作的数据库脚本的具体位置;

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查目标数据库脚本中是否存在未提交的sql语句,如果是,输出未提交的sql语句的具体位置。

优选的,上述数据库语句检查装置中,数据检查单元具体在获取到所述目标数据库的数据库脚本之后,依据数据库脚本检查规则对所述数据库脚本进行检查之前,还用于:

对所述数据库脚本进行解析,得到sql语句的各个组成部分的信息。

优选的,上述数据库语句检查装置中,还包括:

显示单元,用于显示所述目标数据库的数据库脚本以及数据检查单元的检查结果。

优选的,上述数据库语句检查装置中,所述显示单元具体用于:

在第一显示栏显示所述目标数据库的数据库脚本,在第二显示栏中采用对所述目标数据库的数据库脚本进行标注的形式显示检查结果,并标注不满足所述数据库脚本检查规则的sql语句。

基于上述技术方案,本发明实施例提供的方法和装置,在获取到目标数据库脚本后,依据预存储的数据库脚本检查规则对所述目标数据库脚本进行检查,并输出检查结果,从而实现了目标数据库脚本的自动检查,提高了数据库检脚本检查效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例公开的一种数据库语句检查方法的流程示意图;

图2为本申请实施例公开的一种数据库语句检查装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

针对于现有技术中采用人工筛查的方式检查数据库语句而造成的检查效率低的问题,本申请公开了一种数据库语句检查方法,参见图1,该方法可以包括:

步骤s101:获取待检测的目标数据库的数据库脚本;

所述数据库脚本为数据库操作语句的文本文件,所述数据库操作语句为操作数据库的编程语言,简称sql语句。sql即结构化查询语言(structuredquerylanguage),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

所述数据库脚本为用户所要检查的目标数据库的数据库脚本,所述目标数据库可以指的是一个数据库也可以指的是多个数据库,所述数据库脚本的具体采集方式可以依据用户需求自行选择,例如,其可以通过输入目录、输入单个脚本文件或输入sql语句的方式获取,通过该方式可以选择用户指定的一个数据库的数据库脚本或者用户指定的跟目录下的多个目标数据库的数据库脚本。

其中,所述输入目录指的是:获取目录下所有目录及脚本文件,按目录、脚本文件、sql语句的关系解析形成sql语句的队列,并保存相应的路径、文件名等信息。

所述输入单个脚本文件指的是:解析获取脚本文件中的sql语句,保存相应信息。

所述输入sql语句指的是:支持多个sql语句的输入解析。

步骤s102:获取预存储的数据库脚本检查规则;

在执行本申请实施例公开的方法之前,可以预先设置用于对数据库语句进行检查的数据库脚本检查规则,该规则的具体内容可以依据用户需求进行编辑,其数量可以依据用户需求进行删减或增加。

例如,在本申请实施例公开的技术方案中,所述数据库脚本检查规则可以用于:检查sql脚本是否含有回车符^m、检查sql语句是否符合规范、检查sql数据项是否与数据库表字段定义类型一致、检查外表键是否建立索引、检查sql语句索引执行情况、检查是否包括全表扫描、检查是否含有对大数据量表的操作、检查数据库脚本中是否有未提交的sql语句等。

步骤s103:调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,判断数据库脚本编码是否存在问题,并输出检查结果;

在本步骤中,采用所述数据库脚本检查规则对获取到的数据库脚本进行检查,判断组成所述数据库脚本的sql语句是否符合规范,并输出检查结果。具体的,为了方便查看,在输出检查结果是,可以再用对所述数据库脚本的sql语句进行标注的方式来显示检查结果,在检查结果中,将不符合所述数据库脚本检查规则的sql语句采用设定方式标出出来,并且,显示其不符合数据库脚本检查规则的原因,当然,为了方便用户修正所述sql语句,在检查结果中,还可以给出对应的sql语句修正方式。在显示检查结果时,为了便于对比,在显示检查结果时,具体可以采用以下方式检查:显示所述目标数据库的数据库脚本以及数据检查单元的检查结果。

通过本申请上述实施例公开的方法可见,在获取到目标数据库脚本后,依据预存储的数据库脚本检查规则对所述目标数据库脚本进行检查,并输出检查结果,从而实现了目标数据库脚本的自动检查,提高了数据库检脚本检查效率。

所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,具体可以包括:

sql语句在aix(advancedinteractiveexecutive)环境中执行时,包含^m会导致脚本执行失败,所以脚本中必须去除^m。^m:指文本输入中回车换行里的回车符,回车换行在文本中是两个独立的个体,但键盘中enter直接就是包含回车换行两个,编写sql脚本时容易疏忽而包含回车符,但在aix环境中执行sql语句的过程中包含有^m则会执行失败,所以不能包含回车符。针对于此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,可以包括:

获取所述检查规则存储单元中的第一预设规则,依据所述第一预设规则检查获取到的目标数据库的数据库脚本中是否存在回车符^m,如果是,输出所述数据库脚本包含回车符的语句的具体位置,并在原数据库脚本的sql语句中进行标注。

在数据库脚本中,所述sql语句的格式必须符合规范,具体的例如insert、select、merge必须写明具体字段,这是因为如果不写明具体字段,容易导致错位而使得实际的操作的字段与想要的操作的字段不一致,因此,在对数据库脚本进行检查时,必须要避免此情况的发生。针对于此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,还可以包括:

获取所述检查规则存储单元中的第二预设规则,依据所述第二预设规则检查获取到的目标数据库的数据库脚本中的insert、select、merge是否符合规范,如果否,输出不符合规范的insert、select、merge的具体位置,并在原数据库脚本的sql语句中进行标注。

数据库脚本中,insert、update、merge插入、修改数据项必须与数据库表字段定义类型一致,避免隐式转换及数据库不能执行转换时的错误;赋值数据不能超长;赋值数据不能为空。所述数据库中表字段定义类型,包括数值型,字符型,日期型等。隐式转换:指输入数据库中数据的字段类型与数据库表定义的字段类型不一致,而在数据库层面进行了强制转换的操作。执行此操作后,会导致数据库性能消耗增加,且涉及索引字段时无法执行索引而大量耗费数据库性能,甚至使数据库卡顿。针对于此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,还可以包括:

获取所述检查规则存储单元中的第三预设规则,依据所述第三预设规则检查获取到的目标数据库的数据库脚本中的insert、update、merge插入、修改数据项是否与预设数据库表中的字段定义类型一致,如果不一致,输出所述insert、update、merge插入、修改数据项的具体位置,并在原数据库脚本的sql语句中进行标注。

外键表示了两个主从表之间的相关关系,以另一个关系的外键作为主关键字的表称为主表,具有此外键的表称为主表的从表。数据库脚本中,需要对表外键建立索引,如果外键没有建立索引时,会导致数据库在执行过程中因外键所在表操作缓慢而影响自身表数据操作。对此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,还可以包括:

获取所述检查规则存储单元中的第四预设规则,依据所述第四预设规则检查获取到的目标数据库的数据库脚本中的表外键是否建立索引,如果没有索引,输出表外键的具体位置。

在检查数据库脚本时,还需要检查各条sql语句的索引执行情况,包括sql语句是否有执行索引,由索引的在执行的索引是否全局索引、快速全局索引等无效索引。如果不能正确执行有效的索引将导致数据库执行缓慢。对此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,还可以包括:

获取所述检查规则存储单元中的第五预设规则,依据所述第五预设规则检查获取到的目标数据库的数据库脚本索引执行情况,输出不能有效执行的索引的具体位置。

在检查数据库脚本时,还需要检查sql语句表的执行情况,包括表是否全表扫描(指操作表中的所有数据),表数据关联取值范围是否有缩小。尽可能的优化取值范围,最小的关联取值,对数据库性能消耗越小。对此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,还可以包括:

获取所述检查规则存储单元中的第六预设规则,依据所述第六预设规则检查获取到的目标数据库的数据库脚本表执行情况,输出不能有效执行的数据库脚本表的具体位置;

在检查数据库脚本时,还需要检查sql语句中是否有对大数据量表的操作,由于大数据量的表操作会大量消耗数据库性能,所以需要关注执行时间等其他的情况,需额外关注。对此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,还可以包括:

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查获取到的目标数据库的数据库脚本中是否包含有对满足设定条件的大数据表的操作,如果是,输出所述大数据表的位置以及对所述大数据表操作的数据库脚本的具体位置;

在检查数据库脚本时,还需要检查数据库脚本中是否有未提交sql语句,未提交的sql语句将不会被执行。对此,所述调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,并输出检查结果,还可以包括:

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查目标数据库脚本中是否存在未提交的sql语句,如果是,输出未提交的sql语句的具体位置。

在本申请上述实施例公开的技术方案中,在检查数据库脚本时,不同的sql类型的语句需要采用不同数据库脚本检查规则进行检查,因此,在调用与所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查之前,本申请上述实施例公开的方案中还包括:

对所述数据库脚本进行解析,得到sql语句的各个组成部分的信息。具体的,通过对获取的sql语句的结构进行解析拆分,得到sql语句的各个组成部分的信息,包括表信息、条件语句信息、关联关系信息、参数信息、操作字段信息等。

本实施例中,对应于上述方法,本申请还公开了一种数据库语句检查装置,组成该装置的各个单元的具体工作内容,请参见上述方法实施例的内容,

下面对本申请实施例提供的数据库语句检查装置进行描述,下文描述的数据库语句检查装置与上文描述的数据库语句检查方法可相互对应参照。

参见图2,所述数据库语句检查装置可以包括:

数据采集单元100,用于获取待检测的目标数据库的数据库脚本,该单元可以应用于计算机系统的数据库层,具体用于获取目标数据库的列表名称及属性,获取表索引信息,获取存储过程信息,获取主键外键信息,获取执行计划信息;

检查规则存储单元200,用于存储预设的数据库脚本检查规则;

数据检查单元300,用于获取所述目标数据库的数据库脚本,由检查规则存储单元中调用所述数据库脚本相匹配的数据库脚本检查规则对所述数据库脚本进行检查,判断数据库脚本编码是否存在问题,并输出检查结果。所述数据检查单元300可以应用于计算机系统的应用层,其具体用于解析数据库脚本,得到sql语句及其复制参数类型,对所述sql语句进行解析,得到所述sql语句所包含的参数和条件信息,在采用所述数据库脚本检查规则对所述参数和条件信息进行检查,得到检查结果。

与上述方法相对应,所述数据采集单元,具体用于:

通过输入目录、输入单个脚本文件或输入sql语句的方式获取用户选择的目标数据库的数据库脚本,或获取用户输入的目录下的一个或多个目标数据库的数据库脚本。

与上述方法相对应,所述数据检查单元具体用于:

获取所述检查规则存储单元中的第一预设规则,依据所述第一预设规则检查获取到的目标数据库的数据库脚本中是否存在回车符,如果是,输出所述数据库脚本包含回车符的语句的具体位置;

获取所述检查规则存储单元中的第二预设规则,依据所述第二预设规则检查获取到的目标数据库的数据库脚本中的insert、select、merge是否符合规范,如果否,输出不符合规范的insert、select、merge的具体位置;

获取所述检查规则存储单元中的第三预设规则,依据所述第三预设规则检查获取到的目标数据库的数据库脚本中的insert、update、merge插入、修改数据项是否与预设数据库表中的字段定义类型一致,如果不一致,输出所述insert、update、merge插入、修改数据项的具体位置;

获取所述检查规则存储单元中的第四预设规则,依据所述第四预设规则检查获取到的目标数据库的数据库脚本中的表外键是否建立索引,如果没有索引,输出表外键的具体位置;

获取所述检查规则存储单元中的第五预设规则,依据所述第五预设规则检查获取到的目标数据库的数据库脚本索引执行情况,输出不能有效执行的索引的具体位置;

获取所述检查规则存储单元中的第六预设规则,依据所述第六预设规则检查获取到的目标数据库的数据库脚本表执行情况,输出不能有效执行的数据库脚本表的具体位置;

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查获取到的目标数据库的数据库脚本中是否包含有对满足设定条件的大数据表的操作,如果是,输出所述大数据表的位置以及对所述大数据表操作的数据库脚本的具体位置;

获取所述检查规则存储单元中的第七预设规则,依据所述第七预设规则检查目标数据库脚本中是否存在未提交的sql语句,如果是,输出未提交的sql语句的具体位置。

与上述方法相对应,数据检查单元具体在获取到所述目标数据库的数据库脚本之后,依据数据库脚本检查规则对所述数据库脚本进行检查之前,还用于:

对所述数据库脚本进行解析,得到sql语句的各个组成部分的信息。

与上述方法相对应,上述装置还包括:

显示单元,用于显示所述目标数据库的数据库脚本以及数据检查单元的检查结果。

与上述方法相对应,所述显示单元具体用于:

在第一显示栏显示所述目标数据库的数据库脚本,在第二显示栏中采用对所述目标数据库的数据库脚本进行标注的形式显示检查结果,并标注不满足所述数据库脚本检查规则的sql语句。

为了描述的方便,描述以上系统时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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