從零開始實現資料庫自動化巡檢(一)

chenoracle發表於2022-05-03

一:資料庫巡檢分為幾個階段

第一階段:手動巡檢

通過逐條執行巡檢命令,複製貼上到巡檢word文件。

第二階段:指令碼巡檢

將巡檢命令打包到指令碼,執行指令碼,巡檢內容輸出文字檔案,在複製貼上到巡檢word文件裡。

第三階段:自動巡檢

在第二階段基礎上,指令碼巡檢的基礎上,通過python讀取巡檢文字檔案,將內容輸出到巡檢wrod文件裡。

第四階段:智慧巡檢

在第三階段基礎上,通過python讀取巡檢文字檔案時,根據關鍵字匹配,自動解讀巡檢內容輸出報告說明和處理建議,並將風險項自動加粗標紅。

說明:

本次主要講解第三階段,自動巡檢部分。


二:明確巡檢範圍

本次以Oracle RAC資料庫巡檢為例。

1:資料庫基礎資訊

作業系統版本、IP資訊、VIP資訊、架構資訊、資料庫建立時間、資料庫啟動時間、資料庫版本資訊、資料庫補丁資訊、字符集、例項狀態。

2:資料庫檔案資訊

表空間資訊、資料檔案資訊、臨時檔案資訊、UNDO檔案資訊、回滾段資訊、REDO LOG檔案資訊、ARCHIVELOG資訊、控制檔案資訊。

3:資料庫叢集資訊

ASM磁碟組資訊、ASM磁碟資訊、OCR資訊、OLR資訊、VOTEDISK資訊、CRS資訊、監聽資訊。

4:資料庫物件資訊

表資訊、分割槽表資訊、檢視、觸發器、儲存過程、索引、失效物件、異常物件、JOBS、SCHEDULER_JOBS、資料庫大小、使用者資料大小。

5:資料庫備份資訊

全備資訊、增量備份資訊、歸檔備份資訊、異地備份檔案資訊。

6:資料庫效能資訊

使用者角色、使用者密碼策略、使用者統計資訊、等待事件、TOP SQL

7:資料庫引數資訊

根據引數基線匹配當前引數設定是否正確。

8:資料庫系統資訊

磁碟目錄資訊、NFS資訊、

9:資料庫日誌資訊

資料庫告警日誌、叢集告警日誌、ASM日誌、作業系統日誌。

10:資料庫巡檢結果


三:Oracle RAC巡檢指令碼

指令碼名稱:Oracle_rac_check_v1_20211111.sh

通過指令碼巡檢方式:

使用root使用者,

./Oracle_rac_check_v1_20211111.sh > oracle_check_20220503.log


獲取指令碼內容:

微信公眾號《IT小Chen》---Oracle---日常維護---Oracle RAC巡檢指令碼v1.0

四:通過python自動巡檢

由於本人沒接觸過python,也不懂開發,自動巡檢實現過程也肯定是漏洞百出的,後面也會逐步完善。

一開始考慮通過python直接連線資料庫,執行資料庫操作,結果輸出到word文件,但是出於資料庫安全、輸出格式考慮,放棄了這種方式。

後來考慮通過python讀取整個巡檢文字檔案,根據模糊搜尋拷貝指定段落到word文件,由於能力有限,這種方式沒有試驗成功。

最後考慮採用如下最笨的方式:

1.通過巡檢指令碼自動生成多個巡檢檔案。

例如:

1_資料庫基礎資訊.log、2_資料庫檔案資訊.log、3_資料庫叢集資訊.log等。

2.資料庫作業系統上配置定時任務,每月25號,自動執行巡檢指令碼。

3.巡檢文字結果過自動上傳到FTP伺服器指定目錄。

4.通過python依次讀取log檔案,並輸出到巡檢word文件裡。

5.FTP伺服器上配置定時任務,自動執行python,生成word格式巡檢文件。

6.DBA檢查並收集巡檢文件。


其中:Python部分指令碼內容如下:

# 匯入庫
from docx import Document
from docx.shared import Pt
from docx.shared import Inches
from docx.oxml.ns import qn
from docx.shared import RGBColor
# 新建空白文件
doc1 = Document()
# 讀取巡檢文字內容
f1 = open("D:\\python\\tmp\\1.txt",encoding = "utf-8")
f2 = open("D:\\python\\tmp\\2.txt",encoding = "utf-8")
f3 = open("D:\\python\\tmp\\3.txt",encoding = "utf-8")
# 文件標題
doc1.add_heading('XXX系統Oracle資料庫巡檢報告',0)
#段落描述
doc1.add_paragraph('巡檢時間 2022年05月03日\n巡檢人:陳舉超')
#建立一級標題(資料庫基礎資訊)
doc1.add_heading('一:資料庫基礎資訊',1)
#段落描述
paragraph = doc1.add_paragraph('')
run = paragraph.add_run(f1.read())
#字號:預設11號,改成10號
run.font.size = Pt(10)
#字型:預設Cambria(正文),改成"Times New Roman"字型
run.font.name = 'Times New Roman'
#字型顏色:預設黑色,改成紅色
#run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)
# 建立一級標題(資料庫叢集資訊)
doc1.add_heading('二:資料庫叢集資訊',1)
#段落描述
doc1.add_paragraph(f2.read())
# 建立一級標題
doc1.add_heading('三:資料庫物件資訊',1)
#段落描述
doc1.add_paragraph(f3.read())
# 建立一級標題
doc1.add_heading('十:巡檢結果',1)
#段落描述
doc1.add_paragraph('巡檢結果:正常')
# word文件名稱
doc1.save('XXX系統Oracle資料庫巡檢報告20220503.docx')
#關閉檔案
f1.close()
f2.close()
f3.close()


執行python指令碼

檢視巡檢文件

檢視巡檢文件內容


###chenjuchao 20220503###


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2890643/,如需轉載,請註明出處,否則將追究法律責任。

相關文章