QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

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

2020 年 7 月 25 日

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

本文由 dbaplus 社群授权转载。


一、背景

我们客户现场的 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 主要由语法解析器、集成环境、优化建议、重写逻辑、工具集五大模块组成。



2、与其他工具对比


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
复制代码



安装验证:


$ cd ${GOPATH}/bin$ echo 'select * from film' | ./soar
复制代码



四、规则开发

1、下载 goland IDE

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


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

$ git clone https://github.com/XiaoMi/soar.git
复制代码


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



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



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




并修改 core/common.py 文件:




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




六、小结

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


作者介绍


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


原文链接


https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=2650791880&idx=2&sn=80b2500fb1de80b4e6135cca28598eaa&chksm=f3f96a5dc48ee34b26e01b5e48002dc4b40f0ba84a9a7a918e2f8b179fa95fa5ec0e809ecf8d&scene=27#wechat_redirect


2020 年 7 月 25 日 10:001874

评论

发布
暂无评论
发现更多内容

如果创意也可以被设计「幻想短篇 26/28」

道伟

28天写作

浅谈OKR工作法

一笑

管理 OKR 28天写作

手机里什么APP都没有,一个很无趣的人 | 视频号28天(27)

赵新龙

28天写作

深入理解 ProtoBuf 原理与工程实践(概述)

vivo互联网技术

数据结构 序列化 protobuf

工业互联网的“第一高地”,在哪?

浪潮云

工业互联网

产品训练营-第三次作业

Geek_娴子

第 3 周作业

老元宵

即兴演讲的几种实用脚本

熊斌

读书笔记 28天写作

产品训练营·第三周作业 & 总结

tiu

漫话递归与迭代

Justin

算法 方法论 成长 心灵鸡汤 28天写作

智汇华云 | ArSDN之多集群简介

华云数据

华云数据

数据中心网络技术新贵:VXLAN与园区网络虚拟化

华为云开发者社区

网络 数据中心 虚拟化 VXLAN 二层网络

浏览器同源策略,听说过么?

华为云开发者社区

浏览器 jsonp CORS 同源策略 跨域

火出圈的Clubhouse,究竟有什么奥秘?

拍乐云Pano

flutter RTC 语音聊天室 社交APP出海 clubhouse

03- 抽奖小助手的那个「谁」

sting

熬夜肝了个IDEA插件整合程序员常用的工具,总有你能用上的

Silently9527

IDEA idea插件 java程序员

超好用的文件转换神器!拿走不谢~

白色蜗牛

程序员 软件工具 生产工具

VUCA时代-不敏捷就得死

Ian哥

28天写作

【CSS】css控制鼠标点击事件(pointer-events)

学习委员

html/css CSS小技巧 28天写作 纯CSS 2月春节不断更

28天瞎写的第二百三十六天:emacs 党的没落

树上

28天写作

车载操作系统 (28天写作 Day26/28)

mtfelix

28天写作 车载操作系统 AOS QNX

考前复习必备MySQL数据库(关系型数据库管理系统)

魔王哪吒

MySQL 程序员 面试 后端 2月春节不断更

Elasticsearch Document 查询内部原理

escray

七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

利益相关者的问题及方案

梁媛

开发质量提升系列:日常重视好投产,运维拍肩也不怕

罗小龙

最佳实践 方法论 28天写作 2月春节不断更

GitHub 标星 167k!你要的优质书籍这都有,还开源!

沉默王二

GitHub 开源项目 电子书

从JNOS商业操作系统,看京东零售商业化之路新探索

京东科技开发者

零售 数字化转型

区块链矿机挖矿游戏开发,区块链矿机游戏开发

v16629866266

机器学习笔记之:最熟悉的陌生阵

Nydia

offline app

lidaobing

28天写作 offline app

为您收录的操作系统系列-进程管理(上篇)

Arvin

操作系统 进程

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

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