46

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

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg%3D%3D&%3Bmid=2650791880&%3Bidx=2&%3Bsn=80b2500fb1de80b4e6135cca28598eaa
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

b6bERzn.gif

作者介绍

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

一、背景

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

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

二、自动化审查

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

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

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

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

  4. ……

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

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

1、SOAR组成

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

nY32UrI.png!web

2、与其他工具对比

InMBrib.png!web

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版本:

2、安装Git客户端

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

$ yum -y install git    

查看Git客户端版本:

3、下载SOAR源码并编译

新建workspace目录:

$ mkdir workspace                                                   

$ cd workspace 

下载SOAR源码并编译:

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

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

VZjYR3I.png!web

     

安装验证:

$ cd ${GOPATH}/bin

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

b2eiymI.png!web

四、规则开发

1、下载goland IDE

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

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

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

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

VvaQfmU.png!web

A7BfI3Y.png!web

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

YFZn2iy.png!web

将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文件上传到指定目录下:

eiYN3aA.png!web

7Jr2QjV.png!web

并修改core/common.py文件:

qiUVvuE.png!web

v6RZref.png!web

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

BrMVjqE.png!web

NrYNv2R.png!web

六、小结

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

随着数字化转型与云化从互联网行业渗透到了各个传统行业 ,运维迎来了新的契机,想破解运维转型困局,让 Gdevops全球敏捷运维峰会北京站 给你新思路:

  • 《建设敏捷型消费金融中台及云原生下的DevOps实践》 中邮消费金融总经理助理 李远鑫

  • 《浙江移动AIOps实践》 浙江移动云计算中心NOC及AIOps负责人 潘宇虹

  • 《云时代下,传统行业的运维转型,如何破局?》 新炬网络运维产品部总经理 宋辉

  • 《数据智能时代: 构建能力开放的运营商大数据DataOps体系》 中国联通大数据基础平台负责人/资深架构师 尹正军

  • 《银行日志监控系统优化手记》 中国银行DevOps负责人 付大亮 & 中国银行高级软件工程师 李晓宁

  • 《民生银行智能运维平台实践之路》 民生银行智能运维平台负责人/应用运维专家 张舒伟

  • 《腾讯新闻DevOps实践》 腾讯客户端高级开发工程师 褚佳义

AbquQbi.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK