Oracle 一鍵巡檢自動(dòng)生成 Word 報(bào)告
前言
Oracle 數(shù)據(jù)庫(kù)巡檢通常需要消耗大量時(shí)間和精力,包括收集數(shù)據(jù)庫(kù)以及主機(jī)的相關(guān)信息。針對(duì) Word 報(bào)告的樣式調(diào)整,也是重復(fù)和費(fèi)事的,所以我針對(duì) Oracle 巡檢所需檢查的信息以及報(bào)告模板,寫了一套自動(dòng)巡檢并且生成報(bào)告的腳本。巡檢人員只需要執(zhí)行腳本,腳本會(huì)自動(dòng)生成一個(gè)完整的 Word 報(bào)告(樣式格式都無需調(diào)整),只需要檢查報(bào)告中是否存在問題即可。
本文演示一套 19C RAC 的集群數(shù)據(jù)庫(kù)自動(dòng)巡檢。
介紹
Oracle 一鍵巡檢腳本可將巡檢結(jié)果一鍵生成為 Word 報(bào)告!本腳本通過 python 將巡檢結(jié)果生成為 Word 報(bào)告,分為兩部分:
- 第一部分通過 shell 和 sql 腳本生成巡檢壓縮包。
- 第二部分通過 python 解析巡檢壓縮包生成 Word 巡檢報(bào)告。
Word 報(bào)告內(nèi)容主要包括:主機(jī)巡檢,數(shù)據(jù)庫(kù)巡檢,DataGuard 同步檢查,Rman 備份檢查, rac 集群檢查,數(shù)據(jù)庫(kù)性能分析(awr 內(nèi)部 sql 獲?。?,抓取 alert日志,抓取 awr 報(bào)告等,內(nèi)容極其豐富。如果是 rac,會(huì)抓取所有節(jié)點(diǎn)報(bào)告。
- 報(bào)告可選:周/月/季三種類型,生成的 Word 可直接交付客戶。
- 支持所有操作系統(tǒng),所有版本。
- 支持Oracle 10/11/12/18/19/21 等版本。
- 支持 non-cdb/cdb 架構(gòu)。
- 如果一臺(tái)主機(jī)有多個(gè)實(shí)例,支持一鍵巡檢多個(gè)實(shí)例,生成一個(gè)巡檢文件,方便快捷。
- 支持一鍵生成多個(gè)數(shù)據(jù)庫(kù) Word 報(bào)告。
- Word 報(bào)告生成支持自定義客戶名稱,巡檢公司名稱,巡檢人員名稱,巡檢公司 LOGO等,直接解放雙手。
- Word 報(bào)告生成后根據(jù)數(shù)據(jù)庫(kù)巡檢結(jié)果,在 Word 中直接提供巡檢建議,全程智能巡檢。
- 數(shù)據(jù)庫(kù)主機(jī)無需安裝任何第三方軟件,只需要上傳巡檢腳本,一鍵執(zhí)行生成巡檢文件即可。
- 腳本持續(xù)更新。
Oracle 數(shù)據(jù)庫(kù)主機(jī)只需需要上傳對(duì)應(yīng) DB 的巡檢腳本:
[oracle@rac01:/home/oracle/check]$ ll
-rw-r--r-- 1 root root 202369 Mar 15 09:12 dbcheck10g.sql
-rw-r--r-- 1 root root 206342 Mar 15 09:12 dbcheck11g.sql
-rw-r--r-- 1 root root 207786 Mar 15 09:12 dbcheck12c.sql
-rw-r--r-- 1 root root 24819 Mar 15 09:13 oscheck.sh
oscheck.sh 是用來巡檢主機(jī)相關(guān)信息以及配置檢查。dbcheck*.sql 是用來巡檢數(shù)據(jù)庫(kù)相關(guān)信息,12c 包括 12c 以后的版本。
演示
Oracle 數(shù)據(jù)庫(kù)巡檢
Oracle 數(shù)據(jù)庫(kù)其中一個(gè)節(jié)點(diǎn)上傳巡檢腳本(本文選擇節(jié)點(diǎn)一):
[root@rac01:/root]$ chown -R oracle:oinstall /home/oracle/check/
[oracle@rac01:/home/oracle/check]$ chmod +x oscheck.sh
[oracle@rac01:/home/oracle/check]$ ll
total 232
-rw-r--r-- 1 oracle oinstall 207786 Mar 15 09:12 dbcheck12c.sql
-rwxr-xr-x 1 oracle oinstall 24819 Mar 15 09:13 oscheck.sh
執(zhí)行腳本一鍵巡檢 Oracle 數(shù)據(jù)庫(kù):
## 如果一臺(tái)主機(jī)上有多個(gè)實(shí)例,可以通過參數(shù) -o 來指定,例如:
sh oscheck.sh -o orcl,lucifer,test
## 確保 ORACLE_SID 正確后,執(zhí)行腳本
[oracle@rac01:/home/oracle/check]$ sh oscheck.sh
#==============================================================#
Oracle數(shù)據(jù)庫(kù)主機(jī)檢查
#==============================================================#
收集主機(jī) OS 層信息 ...
收集數(shù)據(jù)庫(kù)補(bǔ)丁信息 ...
收集數(shù)據(jù)庫(kù)監(jiān)聽信息 ...
#==============================================================#
檢查數(shù)據(jù)庫(kù)實(shí)例:luciferdg1
#==============================================================#
收集數(shù)據(jù)庫(kù)ALERT日志 ...
收集數(shù)據(jù)庫(kù)AWR報(bào)告 ...
Note1: Information about Instance
INST_ID DBID NAME DATABASE_ROLE CREATED LOG_MODE OPEN_MODE VERSION SESSIONID
---------- ---------- ---------- -------------------- -------------------- ------------- -------------------- ---------- --------------------
1 4019382963 LUCIFER PRIMARY 2024-03-13 10:21:39 ARCHIVELOG READ WRITE 19.0.0.0.0 392,13105,30182
2 4019382963 LUCIFER PRIMARY 2024-03-13 10:21:39 ARCHIVELOG READ WRITE 19.0.0.0.0 392,13105,30182
Note2: Information abount Recyclebin
+------------------------------------------------------------------------------------------------------------+
| Oracle Database health Check script |
|------------------------------------------------------------------------------------------------------------+
| Copyright (c) 2022-2100 lpc. All rights reserved. |
+------------------------------------------------------------------------------------------------------------+
DBHealthCheck Author: Lucifer
+----------------------------------------------------------------------------+
Now DBCheck staring, the time cost depending on size of database.
Begining ......500
+----------------------------------------------------------------------------+
-----Oracle Database Check STRAT, Starting Collect Data Dictionary Information----
start...Set Environment Variables, Configure html headers.....
start collect...Database Informaion...
start collect......Overview of Instance Informaion...
start collect......Overview of Database Informaion...
start collect......Database Version Informaion...
start collect......Database Component and Patch Informaion...
start collect......Database Parameter Informaion...
start collect......Database Resource Informaion...
start collect......Database ControlFile Informaion...
start collect......Database LogFile Informaion...
start collect......Archive Log Size in last 10 Days...
start collect......Invalid Object Informaion...
start collect......Tablespace Usage Informaion...
start collect......Top10 Index Informaion...
start collect......Range Partition Extend Check Informaion...
start collect......Object in System TableSpace Informaion...
start collect......BitCoin Attack Check...
start collect......SYSAUX Objects Informaion...
start collect......Flashback Database Parameters...
start...OverView Database User Information...
start collect......System Manager Role Informaion...
start collect......Schema Informaion...
start collect......Profile Informaion...
start collect......Directory Informaion...
start collect......Job Informaion...
start collect......Database Link Informaion...
start collect......Autotask Informaion...
start...OverView Database of Backup and Recover Information...
start collect......Dataguard Parameter...
start collect......Dataguard Applied Status...
start collect......Dataguard Status...
start collect......RMAN Backup Info...
start collect......Orphaned DataPump Jobs...
start collect......Instacne Alert Log...
start...OverView Database of ASM Information...
start collect......ASM Instance Informaion...
start collect......ASM Diskgroup Attribute...
start collect......ASM Disk Group...
start...OverView Database Performace Information...
start collect......AWR Configure Informaion...
start collect......Awrrpt Snap Informaion...
start collect......Awrrpt Load Profile Informaion...
start collect......Instance Efficiency Percentages...
start collect......TOP 10 Wait Event...
start collect......System Time Model...
start collect......TOP 10 SQL Order by Elapsed Time...
start collect......Awrcrt Informaion...
Database script execution ends....
壓縮包位置: /home/oracle/check/dbcheck_rac01_20240315.tar.gz
執(zhí)行完之后會(huì)在當(dāng)前目錄生成一個(gè) tar 壓縮包:
[oracle@rac01:/home/oracle/check]$ ll
total 640
-rw-r--r-- 1 oracle oinstall 207786 Mar 15 09:12 dbcheck12c.sql
drwxr-xr-x 2 oracle oinstall 227 Mar 15 09:28 dbcheck_rac01_20240315
-rw-r--r-- 1 oracle oinstall 417254 Mar 15 09:28 dbcheck_rac01_20240315.tar.gz
-rwxr-xr-x 1 oracle oinstall 24819 Mar 15 09:13 oscheck.sh
這個(gè)就是腳本獲取到的所有信息集合,包含以下內(nèi)容:
[oracle@rac01:/home/oracle/check]$ cd dbcheck_rac01_20240315/
[oracle@rac01:/home/oracle/check/dbcheck_rac01_20240315]$ ll
## 節(jié)點(diǎn)1的 alert 日志
-rw-r--r-- 1 oracle oinstall 54530 Mar 15 09:27 alert_luciferdg1.log
## 節(jié)點(diǎn)2的 alert 日志
-rw-r--r-- 1 oracle oinstall 3785318 Mar 15 09:27 alert_luciferdg2.log
## 節(jié)點(diǎn)1的 awrrpt 報(bào)告
-rw-r--r-- 1 oracle oinstall 1506483 Mar 15 09:27 awrrpt_luciferdg1_13_46.html
## 節(jié)點(diǎn)2的 awrrpt 報(bào)告
-rw-r--r-- 1 oracle oinstall 1455454 Mar 15 09:27 awrrpt_luciferdg2_13_46.html
## Oracle Database 巡檢報(bào)告 html 格式
-rw-r--r-- 1 oracle oinstall 121960 Mar 15 09:28 dbcheck_4019382963_LUCIFER_19.0.0.0.0_20240315.html
## Oracle 主機(jī)巡檢報(bào)告 txt 格式
-rw-r--r-- 1 oracle oinstall 12823 Mar 15 09:27 oscheck_rac01_20240315.txt
接下來就是將 tar 文件獲取到本地,進(jìn)行 word 報(bào)告一鍵生成程序即可。
生成 Word 報(bào)告
放入巡檢文件
通過 sftp 等工具獲取到 tar 報(bào)告,放到 checkfiles 目錄下:
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck/checkfiles ?main●?
╰─$ ll
total 816
-rw-r--r-- 1 lucifer staff 407K 3 15 09:38 dbcheck_rac01_20240315.tar.gz
-rw-r--r--@ 1 lucifer staff 0B 1 22 10:19 請(qǐng)將巡檢文件移動(dòng)到此目錄下.txt
配置 Python 環(huán)境
前置工作(必須滿足):
- 建議下載安裝 Python 3 最新版本,并且配置好 Python 環(huán)境。
- 下載安裝 chrome 瀏覽器以及 chromedriver。
- 需要安裝以下 Python 模塊,在根目錄下執(zhí)行:pip install -r requirements.txt 即可。
Word 報(bào)告一鍵生成程序是通過 Python 來寫的,完整程序目錄如下:
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck ?main●?
╰─$ tree -N
.
├── README.md
├── checkfiles
│ └── 請(qǐng)將巡檢文件移動(dòng)到此目錄下.txt
├── example
│ └── example.md
├── reports
│ └── word 巡檢報(bào)告將在此目錄下生成.txt
├── requirements.txt
├── resources
│ ├── chromedriver
│ ├── config.ini
│ ├── images
│ │ └── Oracle.png
│ ├── js
│ │ └── crt21.js
│ └── templates
│ ├── Oracle數(shù)據(jù)庫(kù)巡檢報(bào)告模板_周.docx
│ ├── Oracle數(shù)據(jù)庫(kù)巡檢報(bào)告模板_季.docx
│ └── Oracle數(shù)據(jù)庫(kù)巡檢報(bào)告模板_月.docx
├── scripts
│ ├── db
│ │ ├── dbcheck10g.sql
│ │ ├── dbcheck11g.sql
│ │ └── dbcheck12c.sql
│ └── os
│ └── oscheck.sh
└── src
├── awrcrt.py
├── create_config.py
├── create_desc.py
├── create_report.py
├── main.py
└── parse_file.py
運(yùn)行 Python 腳本需要安裝 Python 運(yùn)行環(huán)境,去官方下載最新的安裝包即可:
“https://www.python.org/downloads/
注意:在安裝 Python 時(shí)勾選 "Add Python to PATH" 復(fù)選框,安裝程序會(huì)自動(dòng)添加環(huán)境變量,否則需要手動(dòng)配置。
安裝好 Python 之后,運(yùn)行命令安裝依賴包:
## 命令行窗口進(jìn)入到 requirements.txt 所在目錄運(yùn)行
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck ?main●?
╰─$ pip install -r requirements.txt
等待安裝完成即可。
接下來還需要下載 chromedriver 以及 Google Chrome 瀏覽器:
“https://googlechromelabs.github.io/chrome-for-testing/#stable。
Stable
Version: 122.0.6261.128 (r1250580)
Binary Platform URL HTTP status
chrome mac-arm64 https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.128/mac-arm64/chrome-mac-arm64.zip
chrome mac-x64 https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.128/mac-x64/chrome-mac-x64.zip
chrome win64 https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.128/win64/chrome-win64.zip
chromedriver mac-arm64 https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.128/mac-arm64/chromedriver-mac-arm64.zip
chromedriver mac-x64 https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.128/mac-x64/chromedriver-mac-x64.zip
chromedriver win64 https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.128/win64/chromedriver-win64.zip
下載穩(wěn)定版本后進(jìn)行安裝即可,chromedriver 下載解壓后放到 resources 目錄下(Windows的是有后綴的):
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck/resources ?main●?
╰─$ ll
-rwxr-xr-x@ 1 lucifer staff 15M 3 12 07:17 chromedriver
-rw-r--r--@ 1 lucifer staff 2.0K 2 29 14:00 config.ini
drwxr-xr-x@ 4 lucifer staff 128B 1 22 12:28 images
drwxr-xr-x@ 3 lucifer staff 96B 1 22 10:19 js
drwxr-xr-x@ 5 lucifer staff 160B 1 22 10:19 templates
至此,腳本所需 Python 環(huán)境就配置好了。
生成 Word 報(bào)告
進(jìn)入到 main.py 所在的目錄 src:
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck/src ?main●?
╰─$ ll
-rw-r--r--@ 1 lucifer staff 3.2K 1 22 10:19 awrcrt.py
-rw-r--r--@ 1 lucifer staff 3.0K 1 22 10:19 create_config.py
-rw-r--r--@ 1 lucifer staff 14K 1 22 10:19 create_desc.py
-rw-r--r--@ 1 lucifer staff 5.1K 1 22 10:19 create_report.py
-rwxr-xr-x@ 1 lucifer staff 8.2K 1 22 10:19 main.py
-rw-r--r--@ 1 lucifer staff 5.3K 1 22 10:19 parse_file.py
運(yùn)行腳本調(diào)用圖形化程序:
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck/src ?main●?
╰─$ python main.py
運(yùn)行完之后會(huì)彈出一個(gè)圖形化報(bào)告生成工具:
工具頁(yè)面包含可編輯選項(xiàng):
- 客戶公司名稱
- 服務(wù)公司名稱
- 巡檢人員
- 服務(wù)公司 logo
- 巡檢類型:根據(jù)不同巡檢類型生成不同的報(bào)告內(nèi)容
- 周
- 月
- 季
- Word 報(bào)告保存位置(默認(rèn)建議不改動(dòng))
根據(jù)自己實(shí)際情況填寫后,本文按照默認(rèn)配置選擇季度巡檢,點(diǎn)擊 生成報(bào)告
即可,查看運(yùn)行過程:
解壓 /Volumes/DBA/Github/OracleHealthCheck/checkfiles/dbcheck_rac01_20240315.tar.gz 到臨時(shí)目錄
復(fù)制 crt21.js 到臨時(shí)目錄 $_tmp
啟動(dòng)谷歌游覽器并設(shè)置寬度
訪問 html 文件 file:///Volumes/DBA/Github/OracleHealthCheck/src/$_tmp/dbcheck_4019382963_LUCIFER_19.0.0.0.0_20240315.html
正在截取 awrcrt 性能分析圖,請(qǐng)稍等...
截圖已完成
關(guān)閉游覽器
保存到 /Volumes/DBA/Github/OracleHealthCheck/reports/Lucifer 有限公司-Oracle數(shù)據(jù)庫(kù)4019382963_LUCIFER巡檢報(bào)告_20240315.docx
刪除圖片臨時(shí)目錄
刪除臨時(shí)目錄
執(zhí)行完成!
運(yùn)行完成后在 reports 目錄下已自動(dòng)生成 Word 報(bào)告:
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck/reports ?main●?
╰─$ ll
total 1192
-rw-r--r--@ 1 lucifer staff 594K 3 15 09:59 Lucifer 有限公司-Oracle數(shù)據(jù)庫(kù)4019382963_LUCIFER巡檢報(bào)告_20240315.docx
-rw-r--r--@ 1 lucifer staff 0B 1 22 10:19 word 巡檢報(bào)告將在此目錄下生成.txt
至此,Word 報(bào)告已經(jīng)生成完成。