CN102073640B - Sql语句的检测方法、系统及服务器 - Google Patents

Sql语句的检测方法、系统及服务器 Download PDF

Info

Publication number
CN102073640B
CN102073640B CN 200910221882 CN200910221882A CN102073640B CN 102073640 B CN102073640 B CN 102073640B CN 200910221882 CN200910221882 CN 200910221882 CN 200910221882 A CN200910221882 A CN 200910221882A CN 102073640 B CN102073640 B CN 102073640B
Authority
CN
China
Prior art keywords
sql statement
sql
changed
file
rule
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN 200910221882
Other languages
English (en)
Other versions
CN102073640A (zh
Inventor
钟离
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced New Technologies Co Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN 200910221882 priority Critical patent/CN102073640B/zh
Publication of CN102073640A publication Critical patent/CN102073640A/zh
Priority to HK11107092.9A priority patent/HK1153000A1/xx
Application granted granted Critical
Publication of CN102073640B publication Critical patent/CN102073640B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例公开了一种SQL语句的检测方法、系统及服务器,所述方法预先配置SQL语句的匹配规则,该方法包括:获取发生变化的SQL文件;解析所述发生变化的SQL文件,根据解析结果获得发生变化的SQL文件中发生变化的SQL语句;将所述发生变化的SQL语句与所述匹配规则进行匹配,根据发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确。本申请实施例中当SQL语句发生变化时,无需DBA对SQL语句进行下载和检测,而是通过服务器自身解析出变化的SQL语句,并利用预先配置的规则对SQL语句进行检测,因此降低了DBA的工作量,并且降低了错误检测率,由此提升了数据库系统的可靠性。

Description

SQL语句的检测方法、系统及服务器
技术领域
本申请涉及计算机技术领域,尤其涉及一种SQL语句的检测方法、系统及服务器。
背景技术
SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。以支付宝(www.alipay.com)为例,其为客户提供业务时,每一个业务功能都具有可操作的数据库,而对数据库的所有操作动作均通过SQL实现,因此对SQL语句的性能和可靠性具有较高的要求。尤其对于在线支付系统,由于客户群数量庞大,对该系统的使用频率较高,因此对其中的SQL语句的性能和可靠性的要求更高,通常每一条SQL语句都需要经过DBA(Database Administrator,数据库管理员)的检测,当符合要求时才可以应用于客户服务。
发明人在对现有技术的研究和实践过程中发现,现有技术中当SQL开发人员完成某个项目的SQL代码书写后,DBA需要手工下载该项目中的每一个SQL代码,并根据个人经验对SQL代码的问题进行主观判断;或者,当某个项目中的若干SQL代码发生改变时,也需要手工下载发生改变的SQL代码并进行主观判断。由此可知,对于一个大型的在线支付系统,其能提供多个业务功能,每个业务功能都有各自的SQL代码,因此在进行SQL检测时,DBA需要多次手动下载不同业务功能的SQL代码,并人工判断SQL代码是否满足要求,由此增加了DBA的工作量;并且,由于需要判断的SQL代码数量庞大,且DBA均通过主观判断SQL代码的问题,因此容易产生错误,由此导致SQL代码所应用的数据库系统的可靠性下降。
发明内容
本申请实施例的目的是提供一种SQL语句的检测方法、系统及服务器,以解决现有技术中SQL代码需要DBA通过手动下载并进行主观检测,导致错误率增加,由此降低数据库系统可靠性的问题。
为解决上述技术问题,本申请实施例提供了一种SQL语句的检测方法,是这样实现的:
一种SQL语句的检测方法,预先配置SQL语句的匹配规则,包括:
获取发生变化的SQL文件;
解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句;
将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确。
为解决上述技术问题,本申请实施例还提供了一种SQL语句的检测系统,是这样实现的:
一种SQL语句的检测系统,包括:代理服务器和检测服务器,
所述代理服务器,用于获取发生变化的SQL文件,解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句,并将所述发生变化的SQL语句传输到所述检测服务器;
所述检测服务器,用于预先配置SQL语句的匹配规则,将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确。
为解决上述技术问题,本申请实施例还提供了一种SQL语句的检测服务器,是这样实现的:
一种SQL语句的检测服务器,包括:
预置单元,用于预先配置SQL语句的匹配规则;
获取单元,用于获取发生变化的SQL文件;
解析单元,用于解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句;
检测单元,用于将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确。
可见,本申请实施例中预先配置了SQL语句的匹配规则,当SQL文件发生变化时,解析发生变化的SQL文件,根据解析结果获得发生变化的SQL文件中发生变化的SQL语句,将发生变化的SQL语句与匹配规则进行匹配,根据发生变化的SQL语句与匹配规则是否匹配,判断发生变化的SQL语句是否正确。应用本申请实施例,由于预先配置了匹配规则,因此当SQL语句发生变化时,无需DBA对SQL语句进行下载和检测,而是通过服务器自身解析,得到变化的SQL语句,并利用预先配置的规则对SQL语句进行检测,因此降低了DBA检测SQL代码的工作量,并且服务器根据规则可以进行更为客观的匹配检测,降低了错误检测率,由此提升了数据库系统的可靠性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请SQL语句的检测方法的第一实施例流程图;
图2A为本申请SQL语句的检测方法的第二实施例流程图;
图2B为上述第二实施例中一种执行计划的结果示意图;
图3为本申请SQL语句的检测系统的实施例框图;
图4为本申请SQL语句的检测服务器的第一实施例框图;
图5为本申请SQL语句的检测服务器的第二实施例框图。
具体实施方式
本申请实施例提供一种SQL语句的检测方法、系统及服务器。
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中技术方案作进一步详细的说明。
参见图1,为本申请SQL语句的检测方法的第一实施例流程图:
步骤101:预先配置SQL语句的匹配规则。
SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统语句。本申请实施例中的SQL语句是对各种项目数据库(或称业务数据库)进行操作的SQL语句,通常SQL语句在书写时可能涉及查询字段“SELECT”,条件字段“WHERE”等。对SQL语句中不同字段检测的难易程度也不相同,基于此,本申请实施例可以根据需要预先分别配置简单匹配规则和复杂匹配规则。其中,简单匹配规则根据正则表达式进行匹配,其匹配过程比较简单,一般将SQL语句本身与规则进行匹配即可,例如,一条简单匹配规则为“SQL语句中使用SELECT*”;复杂匹配规则需要通过SQL语句的执行计划进行匹配,其匹配过程较为复杂,需要对SQL语句本身进行解析,例如,一条复杂匹配规则为“WHERE条件中没有使用索引”。
上述仅分别示例了一条简单匹配规则和一条复杂匹配规则,实际应用中可以根据检测需要和要求配置多条简单匹配规则和复杂匹配规则,当检测时,将SQL语句顺序与每一条匹配规则进行匹配,只要有一条匹配即说明该SQL语句不正确,如果全不匹配,则说明该SQL语句正确。
步骤102:获取发生变化的SQL文件。
当SQL代码库中的SQL文件接受操作并发生变化后,接收该SQL代码库发送的发生变化的SQL文件,该发生变化的SQL文件中可以包括变化前的SQL语句文件及变化后的SQL语句文件,并将发生变化的SQL文件存放在其所应用项目的项目文件下。通常每个项目可能对应多个SQL文件,因此属于某一个项目的SQL文件发生变化时,都保存到该项目的项目文件下,便于分类统计。
步骤103:解析发生变化的SQL文件,根据解析结果获得发生变化的SQL文件中发生变化的SQL语句。
比较变化前的SQL语句文件和变化后的SQL语句文件,根据比较结果,获取发生变化的SQL文件中发生了变化的SQL语句的标识,根据该SQL语句的标识可以查找变化的SQL文件,并获取发生变化的SQL语句中的SQL内容。
步骤104:将发生变化的SQL语句与匹配规则进行匹配,根据发生变化的SQL语句与匹配规则是否匹配,判断发生变化的SQL语句是否正确。
具体的,可以在检测到发生变化的SQL语句与匹配规则匹配时,判断发生变化的SQL语句不正确,或者,也可以在检测到发生变化的SQL语句与匹配规则匹配时,判断发生变化的SQL语句正确。
参见图2A,为本申请SQL语句的检测方法的第二实施例流程图,该实施例详细示出了分别通过简单匹配规则和负杂匹配规则对SQL语句进行检测的过程:
步骤201:服务器预先配置SQL语句的匹配规则,包括根据正则表达式进行匹配的简单匹配规则和通过SQL语句的执行计划进行匹配的复杂匹配规则。
SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统语句。本申请实施例中的SQL语句是对各种项目数据库(或称业务数据库)进行操作的SQL语句,通常SQL语句在书写时可能涉及查询字段“SELECT”,条件字段“WHERE”等。对SQL语句中不同字段检测的难易程度也不相同,基于此,本申请实施例可以根据需要预先分别配置简单匹配规则和复杂匹配规则。其中,简单匹配规则根据正则表达式进行匹配,其匹配过程比较简单,一般将SQL语句本身与规则进行匹配即可,例如,一条简单匹配规则为“SQL语句中使用SELECT*”;复杂匹配规则需要通过SQL语句的执行计划进行匹配,其匹配过程较为复杂,需要对SQL语句本身进行解析,例如,一条复杂匹配规则为“WHERE条件中没有使用索引”,则如果SQL语句与该规则匹配,说明SQL语句错误;或者,也可以设置该复杂匹配规则为“WHERE条件中使用了索引”,则如果SQL语句与该规则匹配,则说明SQL语句正确,对于匹配规则的设置与SQL语句之间匹配的关系本申请实施例不进行限制。
上述仅分别示例了一条简单匹配规则和一条复杂匹配规则,实际应用中可以根据检测需要和要求配置多条简单匹配规则和复杂匹配规则,当检测时,将SQL语句顺序与每一条匹配规则进行匹配,只要有一条匹配即说明该SQL语句不正确,如果全不匹配,则说明该SQL语句正确。
后续步骤将结合匹配规则对检测过程进行详细描述,本步骤不再详述。
步骤202:当SQL代码库中的SQL文件接受操作并发生变化后,接收该SQL代码库发送的发生变化的SQL文件。
通常每个项目数据库都有对其进行操作的SQL语句文件,当项目的功能改进时,相应的对其进行操作的SQL语句文件也将发生变化,在SQL代码库中就存储了这些SQL语句文件,对每个项目数据库建立至少一个SQL文件。例如,开始某个SQL文件中保存了变化前的SQL语句文件(对应具体的业务数据库时,也可称为前一版本的SQL语句文件),当对SQL语句文件中的某些SQL语句操作后,则在该SQL文件中再保存一个变化后的SQL语句文件(对应具体的业务数据库时,也可称为后一版本的SQL语句文件)。一旦SQL代码库中的SQL语句被操作后,SQL代码库就将保存了变化前的SQL语句文件和变化后的SQL语句文件的SQL文件发送到服务器。
步骤203:将发生变化的SQL文件存放在其所应用项目的项目文件下。
服务接收到包含了变化前的SQL语句文件和变化后的SQL语句文件的SQL文件后,将该SQL文件保存在对应的项目文件下,该项目的项目数据库就是该SQL文件所要操作的数据库。
步骤204:比较变化前的SQL语句文件和变化后的SQL语句文件,并根据比较结果获取变化的SQL文件中发生变化的SQL语句的标识。
为了示例清晰,假设一个保存的SQL文件中,变化前的SQL语句文件中包含如下两条SQL语句:
    <select id=″SELECT-BY-DETAIL-ID″resultMap=″RM-DETAIL″>
              select*from DETAIL where(DETAIL_ID=#value#)
    </select>
    <select id=″UPDATE-BY-DETAIL-ID″resultMap=″RM-DETAIL″>
              UPDATE DETAIL SET status=#value#where(DETAIL_ID=
#value#)
    </select>
假变化后的SQL语句文件中包含如下三条SQL语句:
      <select id=″SELECT-BY-DETAIL-ID″resultMap=″RM-DETAIL″>
                select*from DETAIL where(DETAIL_ID=#value#)and
status=#value#
      </select>
      <select id=″UPDATE-BY-DETAIL-ID″resultMap=″RM-DETAIL″>
                UPDATE DETAIL SET status=#value#where(DETAIL_ID=
#value#)
      </select>
      <select id=″DELETE-BY-DETAIL-ID″resultMap=″RM-DETAIL″>
                DELETE FROM DETAIL where(DETAIL_ID=#value#)
</select>
在进行比较时,将每一个完整的SQL语句去掉换行符号,转换为一行,例如对于如下的SQL语句:
<select id=″DELETE-BY-DETAIL-ID″resultMap=″RM-DETAIL″>
          DELETE FROM DETAIL where(DETAIL_ID=#value#)
</select>
去掉换行符号后如下所示:
<select id=″DELETE-BY-DETAIL-ID″resultMap=″RM-DETAIL″>DELETEFROM DETAIL where(DETAIL_ID=#value#)</select>
转变完成后,按照字符顺序比较变化前的SQL语句文件和变化后的SQL语句文件中的SQL语句,找出发生变化的SQL语句的标识,上述SQL语句中,“id=”后面的引号内的内容就是该SQL语句的标识,该标识可以用于唯一识别该SQL语句。
由上述示例可知,比较的结果为变化后的SQL语句文件中的第一个SQL语句发生了修改,获取该第一个SQL语句的标识为“SELECT-BY-DETAIL-ID”,而第二个SQL语句没有发生变化,第三个SQL语句为新增加的SQL语句,获取该第三个SQL语句的标识为“DELETE-BY-DETAIL-ID”。
上述描述可知,发生变化的SQL语句的种类可以包括对变化前的SQL语句进行修改后的SQL语句,或者新增加的SQL语句;另外,也可以包括已删除的SQL语句。
步骤205:根据SQL语句的标识查找发生变化的SQL文件,获取发生变化的SQL语句中的SQL内容。
以上述步骤204中,增加的第三个SQL语句为例,根据该SQL语句的标识(id)查找两个SQL语句文件,在变化前的SQL语句文件中没有找到对应该id的SQL语句,而在变化后的SQL语句文件中找到了对应的SQL内容,即为“DELETE FROM DETAIL where(DETAIL_ID=#value#)”;同理,如果以第一个SQL语句的id进行查询,则分别从两个SQL语句文件中找到该SQL语句修改前的SQL内容和修改后的SQL内容。另外,如果是删除了SQL语句,则根据该SQL语句的id,可以在变化前的SQL语句文件中找到该删除前SQL语句的SQL内容。
步骤206:保存发生变化的SQL语句。
步骤205中已经查找到了SQL文件中所有变化前后的SQL语句,服务器将这些SQL语句按照其所属项目、所在SQL文件、SQL语句id的索引顺序进行保存到数据库中的相应数据表中,假设该数据库表命名为DML_SQLS。
步骤207:将每一条简单匹配规则转换为正则表达式。
正则表达式由一些普通字符和一些元字符组成的查找串,现有技术中的使用已经非常成熟,在此不再赘述。
步骤201中示出了一条简单规则的示例,仍然以该简单规则为“SQL语句中使用SELECT*”为例,且假设需要进行匹配的SQL语句为:
select*from DETAIL where(DETAIL_ID=#value#)and status=#value#
则可以将规则“SQL语句中使用SELECT*”转换为如下的正则表达式:
String selectRegExp=″(\\*)″
对于其它的简单匹配规则,在检测之前也将其转换为正则表达式,用于后续的匹配检测。
步骤208:判断正则表达式与发生变化的SQL语句是否匹配,若是,则执行步骤214;否则,执行步骤209。
将步骤207中的正则表达式与步骤206中保存的SQL语句进行匹配,如果两者匹配,则说明该条SQL语句不正确;如果有由多条简单匹配规则转换的多个正则表达式,则需要将SQL语句顺序与每个正则表达式进行匹配,一旦与一个正则表达式匹配,则不再进行后续匹配,说明该SQL语句不正确,如果与所有正则表达式都不匹配,则继续进行后续的步骤。
下面步骤209至步骤213为通过复杂匹配规则进行匹配的过程。
步骤209:获取发生变化的SQL语句所应用项目的项目数据库的连接信息,并根据连接信息连接到对应的项目数据库。
以如下SQL语句为例:
select*from DETAIL where(DETAIL_ID=#value#)
查找SQL语句中关键字“from”所在的第一个位置,再找到关键字“where”所在的第一个位置,如果没有“where”,则取“from”所在位置后的所有字符,这些字符为SQL语句所要操作的项目数据库中数据表的表名;如果有“where”,则可以根据where后的逗号区分是否有多表的情况,可以得到多个数据表的表名。本申请实施例中,可以根据某个数据表的表名获得项目数据库的连接信息,因此我们只要获得待匹配的SQL语句中的任何一个数据表的表名即可。
在服务器中预先存储了其所要服务的多个项目数据库的信息,例如,可以分别设置表名为Dict_databases和表名为Dict_tables的表。其中,Dict_databases表用来存储每个项目数据库的信息,Dict_tables表可以用来存储每个项目数据库中的数据表的信息。因此,前述获取到数据表的表名后可以在Dict_tables表中查询该数据表所在的项目数据库的信息,然后根据查找到的项目数据库的信息在Dict_databases表中查找该项目数据库的连接信息。例如,在实现该查找过程时,可以通过如下具体的SQL语句完成连接信息的查询:
   SELECT distinct
   ′jdbc:oracle:thin:′‖a.owner‖′/′‖passwd‖′′‖ip‖′:1521′‖′:′‖db_name as
DBURL FROM dict_databases a,dict_tables b
   WHERE UPPER(a.OWNER)=b.OWNER and b.table_name=’DETAIL’and
DB_TYPE=’ORACLE’
服务器根据查找到的连接信息可以与相应的项目数据库进行连接,进一步服务器还可以同时缓存该连接,以便后续减少查找和连接的次数。
步骤210:在项目数据库中执行发生变化的SQL语句。
在所连接的项目数据库中执行发生变化的SQL语句之前,首先要将该SQL语句中的所有变量转换为占位符,假设SQL语句为:
select email from DETAIL where(DETAIL_ID=#value#and name=#name#)
转换为占位符后的SQL语句为:
select email from DETAIL where(DETAIL_ID=:1 and name=:2)
在转换时,由于转换前的SQL语句中的变量值无规律可循,因此从右往左逐个解析转换前的SQL语句,找到以“#”号为标志的开始和结束位置,然后将开始和结束位置间的字符统一替换为占位符号。
将转换后的SQL语句,使用explain for在项目数据库中执行以获取执行计划,执行计划是数据库执行SQL时的访问路径,不同的访问的路径,一般数据库中使用explain plan或者explain为SQL语句解释出执行计划,SQL语句本身并没有实际地执行查询,执行的SQL语句示例如下:
explain plan for select email from DETAIL where NAME=:1
步骤211:判断执行结果是否正确,若是,则执行步骤212;否则,执行步骤214。
步骤212:接收项目数据库根据执行结果输出的执行计划,并将执行计划与复杂匹配规则进行匹配。
当执行结果正确时,接收项目数据库根据执行结果输出的执行计划,可以将该正确的执行计划存储到前述建立的DML_SQL数据表中。
假设获得的执行计划结果如图2B所示,通过该执行计划结果与步骤210中在项目数据库中执行的SQL语句“explain plan for select email from DETAILwhere NAME=:1”进行匹配进行说明,假设检测关键字符串“TABLE ACCESSFULL“,然后检查获得的执行计划字符串中是否含有该关键字符串,如果含有,则表明与复杂匹配规则“where条件中没有使用索引”相匹配。
步骤213:判断执行计划与复杂规则是否匹配,若是,则执行步骤214;否则,执行步骤215。
步骤214:确定发生变化的SQL语句的检测结果为错误,结束当前流程。
根据步骤208的判断结果,如果与简单匹配规则匹配,则可以将有错误的SQL语句和错误信息存储到数据库表名为DML_SQL_RESULT的数据表中;
根据步骤211的判断结果,如果执行结果不正确,也可以将SQL语句和错误信息存储到DML_SQL_RESULT表中;
根据步骤213的判断结果,如果与复杂匹配规则匹配,同样可以将有错误的SQL语句和错误信息存储到DML_SQL_RESULT表中;
步骤215:确定发生变化的SQL语句的检测结果为正确,结束当前流程。
根据上述步骤214和215的检测结果,可以将DML_SQLS表中对应该SQL语句的检测状态更改为“已检测”,并且为了后续汇总报表,可以将DML_SQLS表中存储的已检测过的SQL语句的信息转存到dml_sqls_history表中进行汇总。
根据上述实施例的描述,所有保存在DML_SQLS表中需要自动检测的SQL语句都需要经过简单匹配规则和复杂匹配规则的匹配,然后根据匹配的结果判断,并将所有匹配完的结果记录存储在dml_sqls_history表中,包括所有检测过的正确和不正确的SQL语句,所有检测过程中产生的错误信息记录在dml_sql_result表中。
后续DBA可以根据需求,通过dml_sqls_history表和dml_sql_result表统计已经检测过的SQL语句,并将统计结果以报表的形式输出,当某个报表已发送,则后续不再进行发送。报表中的统计内容可以按照如下规则发送:本周内所有发生变动的SQL语句的个数,或者本周内新增加的SQL语句的个数,或者本周每个项目中的SQL语句检查的错误信息等,本申请实施例对上述发送规则不进行限制。
与本申请SQL语句的检测方法的实施例相对应,本申请还提供了SQL语句的检测系统和服务器的实施例。
参见图3,为本申请SQL语句的检测系统的实施例框图,该系统包括:代理服务器310和检测服务器320。
其中,所述代理服务器310,用于获取发生变化的SQL文件,解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句,并将所述发生变化的SQL语句传输到所述检测服务器320;
所述检测服务器320,用于预先配置SQL语句的匹配规则,将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确。
进一步,所述检测服务器320还可以用于,当到达预设的时间间隔时,执行所述将发生变化的SQL语句与所述匹配规则进行匹配的操作;
进一步,所述检测服务器320还可以用于,将对所述发生变化的SQL语句的检测结果存储到预设的检测信息表中,并根据输入的统计条件,通过所述检测信息表输出相应的检测报表。
参见图4,为本申请SQL语句的检测服务器的第一实施例框图:
该检测服务器包括:预置单元410、获取单元420、解析单元430和检测单元440。
其中,预置单元410,用于预先配置SQL语句的匹配规则;
获取单元420,用于获取发生变化的SQL文件;
解析单元430,用于解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句;
检测单元440,用于将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确。
参见图5,为本申请SQL语句的检测服务器的第二实施例框图:
该检测服务器包括:预置单元510、获取单元520、解析单元530、保存单元540、触发单元550、检测单元560、存储单元570和报表单元580。
其中,预置单元510,用于预先配置SQL语句的匹配规则;
获取单元520,用于获取发生变化的SQL文件;
解析单元530,用于解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句;
保存单元540,用于保存所述解析单元530解析出的发生变化的SQL语句;
触发单元550,用于当到达预设的时间间隔时,触发所述检测单元560执行所述将发生变化的SQL语句与所述匹配规则进行匹配的操作;
检测单元560,用于将所述发生变化的SQL语句与所述匹配规则进行匹配,如果检测到所述发生变化的SQL语句与所述匹配规则匹配,则所述发生变化的SQL语句不正确;
存储单元570,用于将所述检测单元560对所述发生变化的SQL语句的检测结果存储到预设的检测信息表中;
报表单元580,用于根据输入的统计条件,通过所述检测信息表输出相应的检测报表。
具体的,所述获取单元520可以包括(图5中未示出):接收文件单元,用于当SQL代码库中的SQL文件接受操作并发生变化后,接收所述SQL代码库发送的所述发生变化的SQL文件,所述发生变化的SQL文件中包括变化前的SQL语句文件及变化后的SQL语句文件;保存文件单元,用于将所述发生变化的SQL文件存放在其所应用项目的项目文件下。
具体的,所述解析单元530可以包括(图5中未示出):比较文件单元,用于比较所述变化前的SQL语句文件和所述变化后的SQL语句文件;获取结果单元,用于根据比较结果,获取所述变化的SQL文件中发生变化的SQL语句的标识;查找文件单元,用于根据所述SQL语句的标识查找所述变化的SQL文件,获取发生变化的SQL语句中的SQL内容。
具体的,所述检测单元560可以包括(图5中未示出):转换规则单元,用于当预置单元中保存了根据正则表达式进行匹配的简单匹配规则时,将所述简单匹配规则转换为正则表达式;简单匹配单元,用于将所述正则表达式与所述发生变化的SQL语句进行匹配;和/或
连接数据库单元,用于当预置单元中保存了通过所述SQL语句的执行计划进行匹配的复杂匹配规则时,获取发生变化的SQL语句所应用项目的项目数据库的连接信息,并根据所述连接信息连接到所述项目数据库;获取执行计划单元,用于在所述项目数据库中执行所述发生变化的SQL语句,如果执行结果正确,则接收所述项目数据库根据所述执行结果输出的执行计划;复杂匹配单元,用于将所述执行计划与所述复杂匹配规则进行匹配。
通过以上的实施方式的描述可知,本申请实施例中预先配置了SQL语句的匹配规则,当SQL文件发生变化时,解析发生变化的SQL文件,根据解析结果获得发生变化的SQL文件中发生变化的SQL语句,将发生变化的SQL语句与匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确。应用本申请实施例,由于预先配置了匹配规则,因此当SQL语句发生变化时,无需DBA对SQL语句进行下载和检测,而是通过服务器自身解析,得到变化的SQL语句,并利用预先配置的规则对SQL语句进行检测,因此降低了DBA检测SQL代码的工作量,并且服务器根据规则可以进行更为客观的匹配检测,降低了错误检测率,由此提升了数据库系统的可靠性。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。

Claims (20)

1.一种SQL语句的检测方法,其特征在于,预先配置SQL语句的匹配规则,包括:
获取发生变化的SQL文件;
解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句;
将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确,所述匹配规则包括根据正则表达式进行匹配的简单匹配规则和通过所述SQL语句的执行计划进行匹配的复杂匹配规则,所述执行计划为执行SQL语句的访问路径,或,所述匹配规则包括通过所述SQL语句的执行计划进行匹配的复杂匹配规则,所述执行计划为执行SQL语句的访问路径。
2.根据权利要求1所述的方法,其特征在于,所述获取发生变化的SQL文件包括:
当SQL代码库中的SQL文件接受操作并发生变化后,接收所述SQL代码库发送的所述发生变化的SQL文件,所述发生变化的SQL文件中包括变化前的SQL语句文件及变化后的SQL语句文件;
将所述发生变化的SQL文件存放在其所应用项目的项目文件下。
3.根据权利要求2所述的方法,其特征在于,所述解析所述发生变化的SQL文件,根据解析结果获得所述SQL文件中发生变化的SQL语句包括:
比较所述变化前的SQL语句文件和所述变化后的SQL语句文件;
根据比较结果,获取所述变化的SQL文件中发生变化的SQL语句的标识;
根据所述SQL语句的标识查找所述变化的SQL文件,获取发生变化的SQL语句中的SQL内容。
4.根据权利要求1所述的方法,其特征在于,所述发生变化的SQL语句包括:对变化前的SQL语句进行修改后的SQL语句,或者新增加的SQL语句,或者已删除的SQL语句。
5.根据权利要求1所述的方法,其特征在于,所述根据解析结果获得发生变化的SQL文件中发生变化的SQL语句后,还包括:
保存所述发生变化的SQL语句;
当到达预设的时间间隔时,执行所述将发生变化的SQL语句与所述匹配规则进行匹配的操作。
6.根据权利要求1所述的方法,其特征在于,当所述匹配规则为简单匹配规则时,所述将所述发生变化的SQL语句与所述匹配规则进行匹配包括:
将所述简单匹配规则转换为正则表达式;
将所述正则表达式与所述发生变化的SQL语句进行匹配。
7.根据权利要求1所述的方法,其特征在于,当所述匹配规则为复杂匹配规则时,所述将所述发生变化的SQL语句与所述匹配规则进行匹配包括:
获取发生变化的SQL语句所应用项目的项目数据库的连接信息,并根据所述连接信息连接到所述项目数据库;
在所述项目数据库中执行所述发生变化的SQL语句,如果执行结果正确,则接收所述项目数据库根据所述执行结果输出的执行计划;
将所述执行计划与所述复杂匹配规则进行匹配。
8.根据权利要求1所述的方法,其特征在于,所述判断发生变化的SQL语句是否正确具体为:
如果检测到所述发生变化的SQL语句与所述匹配规则匹配,则所述发生变化的SQL语句不正确;或者,
如果检测到所述发生变化的SQL语句与所述匹配规则匹配,则所述发生变化的SQL语句正确。
9.根据权利要求1所述的方法,其特征在于,还包括:
将对所述发生变化的SQL语句的检测结果存储到预设的检测信息表中;
根据输入的统计条件,通过所述检测信息表输出相应的检测报表。
10.一种SQL语句的检测系统,其特征在于,包括:代理服务器和检测服务器,
所述代理服务器,用于获取发生变化的SQL文件,解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句,并将所述发生变化的SQL语句传输到所述检测服务器;
所述检测服务器,用于预先配置SQL语句的匹配规则,将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确,所述匹配规则包括根据正则表达式进行匹配的简单匹配规则和通过所述SQL语句的执行计划进行匹配的复杂匹配规则,所述执行计划为执行SQL语句的访问路径,或,所述匹配规则包括通过所述SQL语句的执行计划进行匹配的复杂匹配规则,所述执行计划为执行SQL语句的访问路径。
11.根据权利要求10所述的系统,其特征在于,所述检测服务器还用于,当到达预设的时间间隔时,执行所述将发生变化的SQL语句与所述匹配规则进行匹配的操作。
12.根据权利要求10所述的系统,其特征在于,所述检测服务器还用于,将对所述发生变化的SQL语句的检测结果存储到预设的检测信息表中,并根据输入的统计条件,通过所述检测信息表输出相应的检测报表。
13.一种SQL语句的检测服务器,其特征在于,包括:
预置单元,用于预先配置SQL语句的匹配规则;
获取单元,用于获取发生变化的SQL文件;
解析单元,用于解析所述发生变化的SQL文件,根据解析结果获得所述发生变化的SQL文件中发生变化的SQL语句;
检测单元,用于将所述发生变化的SQL语句与所述匹配规则进行匹配,根据所述发生变化的SQL语句与所述匹配规则是否匹配,判断所述发生变化的SQL语句是否正确,所述匹配规则包括根据正则表达式进行匹配的简单匹配规则和通过所述SQL语句的执行计划进行匹配的复杂匹配规则,所述执行计划为执行SQL语句的访问路径,或,所述匹配规则包括通过所述SQL语句的执行计划进行匹配的复杂匹配规则,所述执行计划为执行SQL语句的访问路径。
14.根据权利要求13所述的服务器,其特征在于,所述获取单元包括:
接收文件单元,用于当SQL代码库中的SQL文件接受操作并发生变化后,接收所述SQL代码库发送的所述发生变化的SQL文件,所述发生变化的SQL文件中包括变化前的SQL语句文件及变化后的SQL语句文件;
保存文件单元,用于将所述发生变化的SQL文件存放在其所应用项目的项目文件下。
15.根据权利要求14所述的服务器,其特征在于,所述解析单元包括:
比较文件单元,用于比较所述变化前的SQL语句文件和所述变化后的SQL语句文件;
获取结果单元,用于根据比较结果,获取所述变化的SQL文件中发生变化的SQL语句的标识;
查找文件单元,用于根据所述SQL语句的标识查找所述变化的SQL文件,获取发生变化的SQL语句中的SQL内容。
16.根据权利要求13所述的服务器,其特征在于,还包括:
保存单元,用于保存所述解析单元解析出的发生变化的SQL语句;
触发单元,用于当到达预设的时间间隔时,触发所述检测单元执行所述将发生变化的SQL语句与所述匹配规则进行匹配的操作。
17.根据权利要求13所述的服务器,其特征在于,所述检测单元包括:
转换规则单元,用于当预置单元中保存了根据正则表达式进行匹配的简单匹配规则时,将所述简单匹配规则转换为正则表达式;
简单匹配单元,用于将所述正则表达式与所述发生变化的SQL语句进行匹配。
18.根据权利要求13所述的服务器,其特征在于,所述检测单元包括:
连接数据库单元,用于当预置单元中保存了通过所述SQL语句的执行计划进行匹配的复杂匹配规则时,获取发生变化的SQL语句所应用项目的项目数据库的连接信息,并根据所述连接信息连接到所述项目数据库;
获取执行计划单元,用于在所述项目数据库中执行所述发生变化的SQL语句,如果执行结果正确,则接收所述项目数据库根据所述执行结果输出的执行计划;
复杂匹配单元,用于将所述执行计划与所述复杂匹配规则进行匹配。
19.根据权利要求13所述的服务器,其特征在于,所述检测单元具体用于,将所述发生变化的SQL语句与所述匹配规则进行匹配,如果检测到所述发生变化的SQL语句与所述匹配规则匹配,则所述发生变化的SQL语句不正确;或者,
如果检测到所述发生变化的SQL语句与所述匹配规则匹配,则所述发生变化的SQL语句正确。
20.根据权利要求13所述的服务器,其特征在于,还包括:
存储单元,用于将所述检测单元对所述发生变化的SQL语句的检测结果存储到预设的检测信息表中;
报表单元,用于根据输入的统计条件,通过所述检测信息表输出相应的检测报表。
CN 200910221882 2009-11-19 2009-11-19 Sql语句的检测方法、系统及服务器 Active CN102073640B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN 200910221882 CN102073640B (zh) 2009-11-19 2009-11-19 Sql语句的检测方法、系统及服务器
HK11107092.9A HK1153000A1 (en) 2009-11-19 2011-07-08 Checking method, system and server for sql sentence sql

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200910221882 CN102073640B (zh) 2009-11-19 2009-11-19 Sql语句的检测方法、系统及服务器

Publications (2)

Publication Number Publication Date
CN102073640A CN102073640A (zh) 2011-05-25
CN102073640B true CN102073640B (zh) 2013-12-18

Family

ID=44032184

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200910221882 Active CN102073640B (zh) 2009-11-19 2009-11-19 Sql语句的检测方法、系统及服务器

Country Status (2)

Country Link
CN (1) CN102073640B (zh)
HK (1) HK1153000A1 (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577319A (zh) * 2012-08-07 2014-02-12 腾讯科技(深圳)有限公司 源代码文件检测方法及装置、文件发布系统
CN104679646B (zh) * 2013-11-29 2018-02-06 阿里巴巴集团控股有限公司 一种用于检测sql代码缺陷的方法和装置
CN105335403B (zh) 2014-07-23 2020-02-14 华为技术有限公司 数据库访问方法及装置、数据库系统
CN104391995A (zh) * 2014-12-15 2015-03-04 北京趣拿软件科技有限公司 一种sql语句审核的方法、数据库运维的方法及系统
CN104809254A (zh) * 2015-05-19 2015-07-29 郑州悉知信息技术有限公司 一种数据查询方法及装置
CN106503019A (zh) * 2015-09-08 2017-03-15 中兴通讯股份有限公司 一种获取数据库变更信息的方法和装置
CN106682098A (zh) * 2016-12-01 2017-05-17 无线生活(杭州)信息科技有限公司 一种dml处理方法及装置
CN108319620A (zh) * 2017-01-18 2018-07-24 北京京东尚科信息技术有限公司 一种防止数据库索引错乱的方法、系统、装置及存储介质
CN107341110B (zh) * 2017-07-11 2020-01-07 浪潮软件集团有限公司 一种软件测试定位补丁修改及影响范围的工具及实现方法
CN107844425A (zh) * 2017-11-16 2018-03-27 中国银行股份有限公司 一种数据库语句检查方法和装置
CN108984612B (zh) * 2018-06-12 2024-02-02 中国平安人寿保险股份有限公司 目标sql语句的获取方法、装置、计算机设备及存储介质
CN110716912B (zh) * 2018-07-12 2021-09-28 马上消费金融股份有限公司 一种sql性能检测方法及服务器
CN109753513A (zh) * 2018-12-19 2019-05-14 国网新疆电力有限公司电力科学研究院 一种基于正则表达式匹配的输变配台帐核查方法及系统
CN110134737B (zh) * 2019-05-20 2021-02-26 中国铁道科学研究院集团有限公司 数据变化监听方法及装置、电子设备和计算机可读存储介质
CN111857721B (zh) * 2020-03-30 2021-09-17 马上消费金融股份有限公司 Sql语句的验证方法、数据获取方法、设备及存储装置
CN114896269A (zh) * 2022-05-31 2022-08-12 北京达佳互联信息技术有限公司 结构化查询语句检测方法、装置、电子设备及存储介质
CN117331963B (zh) * 2023-11-28 2024-03-08 恒生电子股份有限公司 数据访问处理方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101187888A (zh) * 2007-12-11 2008-05-28 浪潮电子信息产业股份有限公司 一种异构环境中复制数据库数据的方法
CN101267357A (zh) * 2007-03-13 2008-09-17 北京启明星辰信息技术有限公司 一种sql注入攻击检测方法及系统
CN101526947A (zh) * 2009-04-23 2009-09-09 山东中创软件商用中间件股份有限公司 应用正则表达式防sql注入技术

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101267357A (zh) * 2007-03-13 2008-09-17 北京启明星辰信息技术有限公司 一种sql注入攻击检测方法及系统
CN101187888A (zh) * 2007-12-11 2008-05-28 浪潮电子信息产业股份有限公司 一种异构环境中复制数据库数据的方法
CN101526947A (zh) * 2009-04-23 2009-09-09 山东中创软件商用中间件股份有限公司 应用正则表达式防sql注入技术

Also Published As

Publication number Publication date
HK1153000A1 (en) 2012-03-16
CN102073640A (zh) 2011-05-25

Similar Documents

Publication Publication Date Title
CN102073640B (zh) Sql语句的检测方法、系统及服务器
US11354219B2 (en) Machine defect prediction based on a signature
US10339038B1 (en) Method and system for generating production data pattern driven test data
US10237295B2 (en) Automated event ID field analysis on heterogeneous logs
US9679021B2 (en) Parallel transactional-statistics collection for improving operation of a DBMS optimizer module
CN112506807B (zh) 服务于多系统的接口自动化测试系统
US11386086B2 (en) Permutation-based machine learning for database query optimization
CN115061721A (zh) 一种报表生成方法、装置、计算机设备及存储介质
WO2010045331A2 (en) Method and apparatus for gathering and organizing information pertaining to an entity
CN109241384B (zh) 一种科研信息的可视化方法及装置
CN107784068A (zh) 数据变化的获取方法、装置、存储介质、处理器及服务端
CN110941629B (zh) 元数据处理方法、装置、设备及计算机可读存储介质
CN110674161A (zh) 上线sql的方法、系统、存储介质及sql操作平台
CN111831755A (zh) 一种跨数据库数据同步方法、系统、介质及设备
CN109634585B (zh) 一种基于表单自适应展示和更新服务端数据的方法
CN111125045B (zh) 一种轻量级etl处理平台
US8005870B1 (en) System and method for syntax abstraction in query language generation
CN115658731A (zh) 一种数据查询方法、装置、设备和存储介质
CN112346672B (zh) 日志染色方法、装置、设备及存储介质
CN114153438A (zh) 一种api自动生成系统
CN111311329B (zh) 标签数据获取方法、装置、设备及可读存储介质
CN111881128B (zh) 大数据回归验证方法及大数据回归验证装置
CN101883004A (zh) 一种业务数据合成的方法、装置及系统
US20230400841A1 (en) System of Matching Segmented Words to Check Correctness of Components of Device and Method Thereof
CN117370202A (zh) 数仓全链路测试方法、装置、设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1153000

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1153000

Country of ref document: HK

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20191216

Address after: P.O. Box 31119, grand exhibition hall, hibiscus street, 802 West Bay Road, Grand Cayman, British Cayman Islands

Patentee after: Innovative advanced technology Co., Ltd

Address before: Cayman Islands Grand Cayman capital building, a four storey No. 847 mailbox

Patentee before: Alibaba Group Holding Co., Ltd.