oracle sqla工具,Oracle SQL自动化审核工具的实现

作者介绍

梁铭图,新炬网络首席架构师,十多年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有Oracle OCM、Togaf企业架构师(鉴定级)、IBM CATE等认证,曾获dbaplus年度MVP以及华为云MVP等荣誉,并参与数据资产管理国家标准的编写工作。在数据库运维管理和架构设计、运维体系规划、数据资产管理方面有深入研究。

一、背景

我们客户现场的Oracle运维团队需要对开发团队提交上来的Oracle数据库SQL脚本进行评审。众所周知,这个活儿看起来高大上,实际上单靠人工检查的话,耗时费事、效率低下且机械重复,是很难长期实施的。

根据SRE以软件工程方法解决运维问题的逻辑,我们当然需要使用自动化的工具来解决这个问题。

二、自动化审查

首先,Oracle运维团队将SQL评审经验总结为上百个评审规则,例如:

所有新建对象的SQL都需要在对象名的前面加上用户名;

创建SEQUENCE的SQL语句,需要指定CACHE值不小于200;

delete和update等DML语句,必须带where条件;

……

用这些评审规则去审核一个个SQL,仍然是非常苦逼的活儿,我们需要一个自动化的工具来实现。为了不重复制造轮子,最好的方法当然是找一个开源的工具进行二次开发,经过团队讨论和反复验证后,最终采用了开源的SOAR进行二次开发实现。

SOAR工具原来是基于MySQL数据库进行开发的,可客户现场SQL检查是基于Oracle的SQL脚本。尽管Oracle和MySQL在语法上有明显的差别,但上述的分析框架和逻辑是可以重用的,我们主要是通过屏蔽SOAR自带的SQL检查规则,通过添加自定义规则实现。

1、SOAR组成

SOAR,即SQL Optimizer And Rewriter,是一款SQL智能优化与改写工具,由小米运维DBA团队出品。SOAR主要由语法解析器、集成环境、优化建议、重写逻辑、工具集五大模块组成。

3119d761d9ef568d44fdf80fc541893a.png

2、与其他工具对比

15be030403bbad1df55069dadb5ec27a.png

3、功能特性

跨平台支持(支持Linux、Mac环境,Windows环境理论上也支持,不过未全面测试);

支持基于启发式算法的语句优化;

支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT);

支持EXPLAIN信息丰富解读;

支持SQL指纹、压缩和美化;

支持同一张表多条ALTER请求合并;

支持自定义规则的SQL改写。

三、工具框架安装

操作系统版本:CentOS 7.2。

1、安装Go环境

这里使用二进制包来安装,下载二进制安装包:

$ wget  https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz

$ tar zxvf go1.10.2.linux-amd64.tar.gz

配置环境变量:

#go的安装目录

export GOROOT=解压的go的目录

export GOPATH=解压的go的目录

export PATH=$PATH:$GOROOT/bin

查看Go版本:

ec6f1cb76c2237bd18ec0723a6f0b805.png

2、安装Git客户端

使用具有安装权限的用户执行以下命令:

$ yum -y install git

查看Git客户端版本:

9f21c76cbbeab8d112ce69afebb0aa5d.png

3、下载SOAR源码并编译

新建workspace目录:

$ mkdir workspace

$ cd workspace

下载SOAR源码并编译:

$ go get -d github.com/XiaoMi/soar

$ cd ${GOPATH}/src/github.com/XiaoMi/soar && make

7197222f3cb1c844c624225cf31b4591.png

安装验证:

$ cd ${GOPATH}/bin

$ echo 'select * from film' | ./soar

fc412480fbc51c81e815503c1a890556.png

四、规则开发

1、下载goland IDE

https://www.jetbrains.com/go/

2、打开下载的soar源代码工程

$ git clone https://github.com/XiaoMi/soar.git

3、基于SOAR的启发式检查规则进行二次开发,主要增加规则代码:

5a5857d3dc75a440c6af70978912eb82.png

dce94ebd85a8daf383f3cd0f2098d6cd.png

并在配置文件中屏蔽SOAR自带默认检查规则:

12944577cfd0bab9ea13ceb4cb444175.png

将SOAR可执行文件以及soar.yaml放到需要执行的目录soar_path:

$ cd $soar_path

$./soar -config ./soar.yaml -query 待评审和检查的文件绝对路径

五、图形化界面

我们还针对SOAR提供的web图形化界面的小工具,进行了定制改造。让这款小工具可以进一步开放给开发团队的同事使用。大致步骤如下:

1、安装Python

$ yum install python36 python36-pip

$ pip install Flask

$ pip install pymysql

$ pip install pycryptodome

若Crypto模块找不到, 则需要在Python的依赖库目录Lib\site-packages中将crypto重命名为Crypto。

2、下载soar-web并启动

$ wget https://codeload.github.com/xiyangxixian/soar-web/zip/master -O soar-web-master.zip

$ unzip soar-web.zip

$ cd soar-web-matster

将上述二次开发的SOAR执行文件以及soar.yaml文件上传到指定目录下:

f9a97135ea8c12cf0cad4141672482e7.png

a30c41d765a53d955bc107f1c2966a81.png

并修改core/common.py文件:

519f7a563d022e0060081c29b05fd6b5.png

67293d5a58fcde0e1b05d32c4119c56f.png

最终开放给开发团队效果如下图:

e1e362ad8af988bf2abc20c38d5ed4d5.png

4942b9f2517f2790a93d5d3cd34b32b6.png

六、小结

至此,这个Oracle SQL审核的小工具就开发完成了。通过一些简易的配置和开发实现90% Oracle SQL的自动化审核,极大简化了现场DBA的工作量。当然,还可以实现更多种类数据库的支持,留待更多DBA同仁去探索一番。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值