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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章