Oracle 一鍵巡檢自動生成 Word 報告
前言
Oracle 數(shù)據庫巡檢通常需要消耗大量時間和精力,包括收集數(shù)據庫以及主機的相關信息。針對 Word 報告的樣式調整,也是重復和費事的,所以我針對 Oracle 巡檢所需檢查的信息以及報告模板,寫了一套自動巡檢并且生成報告的腳本。巡檢人員只需要執(zhí)行腳本,腳本會自動生成一個完整的 Word 報告(樣式格式都無需調整),只需要檢查報告中是否存在問題即可。
本文演示一套 19C RAC 的集群數(shù)據庫自動巡檢。
介紹
Oracle 一鍵巡檢腳本可將巡檢結果一鍵生成為 Word 報告!本腳本通過 python 將巡檢結果生成為 Word 報告,分為兩部分:
- 第一部分通過 shell 和 sql 腳本生成巡檢壓縮包。
- 第二部分通過 python 解析巡檢壓縮包生成 Word 巡檢報告。
Word 報告內容主要包括:主機巡檢,數(shù)據庫巡檢,DataGuard 同步檢查,Rman 備份檢查, rac 集群檢查,數(shù)據庫性能分析(awr 內部 sql 獲?。?,抓取 alert日志,抓取 awr 報告等,內容極其豐富。如果是 rac,會抓取所有節(jié)點報告。
- 報告可選:周/月/季三種類型,生成的 Word 可直接交付客戶。
- 支持所有操作系統(tǒng),所有版本。
- 支持Oracle 10/11/12/18/19/21 等版本。
- 支持 non-cdb/cdb 架構。
- 如果一臺主機有多個實例,支持一鍵巡檢多個實例,生成一個巡檢文件,方便快捷。
- 支持一鍵生成多個數(shù)據庫 Word 報告。
- Word 報告生成支持自定義客戶名稱,巡檢公司名稱,巡檢人員名稱,巡檢公司 LOGO等,直接解放雙手。
- Word 報告生成后根據數(shù)據庫巡檢結果,在 Word 中直接提供巡檢建議,全程智能巡檢。
- 數(shù)據庫主機無需安裝任何第三方軟件,只需要上傳巡檢腳本,一鍵執(zhí)行生成巡檢文件即可。
- 腳本持續(xù)更新。
Oracle 數(shù)據庫主機只需需要上傳對應 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 是用來巡檢主機相關信息以及配置檢查。dbcheck*.sql 是用來巡檢數(shù)據庫相關信息,12c 包括 12c 以后的版本。
演示
Oracle 數(shù)據庫巡檢
Oracle 數(shù)據庫其中一個節(jié)點上傳巡檢腳本(本文選擇節(jié)點一):
[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ù)據庫:
## 如果一臺主機上有多個實例,可以通過參數(shù) -o 來指定,例如:
sh oscheck.sh -o orcl,lucifer,test
## 確保 ORACLE_SID 正確后,執(zhí)行腳本
[oracle@rac01:/home/oracle/check]$ sh oscheck.sh
#==============================================================#
Oracle數(shù)據庫主機檢查
#==============================================================#
收集主機 OS 層信息 ...
收集數(shù)據庫補丁信息 ...
收集數(shù)據庫監(jiān)聽信息 ...
#==============================================================#
檢查數(shù)據庫實例:luciferdg1
#==============================================================#
收集數(shù)據庫ALERT日志 ...
收集數(shù)據庫AWR報告 ...
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í)行完之后會在當前目錄生成一個 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
這個就是腳本獲取到的所有信息集合,包含以下內容:
[oracle@rac01:/home/oracle/check]$ cd dbcheck_rac01_20240315/
[oracle@rac01:/home/oracle/check/dbcheck_rac01_20240315]$ ll
## 節(jié)點1的 alert 日志
-rw-r--r-- 1 oracle oinstall 54530 Mar 15 09:27 alert_luciferdg1.log
## 節(jié)點2的 alert 日志
-rw-r--r-- 1 oracle oinstall 3785318 Mar 15 09:27 alert_luciferdg2.log
## 節(jié)點1的 awrrpt 報告
-rw-r--r-- 1 oracle oinstall 1506483 Mar 15 09:27 awrrpt_luciferdg1_13_46.html
## 節(jié)點2的 awrrpt 報告
-rw-r--r-- 1 oracle oinstall 1455454 Mar 15 09:27 awrrpt_luciferdg2_13_46.html
## Oracle Database 巡檢報告 html 格式
-rw-r--r-- 1 oracle oinstall 121960 Mar 15 09:28 dbcheck_4019382963_LUCIFER_19.0.0.0.0_20240315.html
## Oracle 主機巡檢報告 txt 格式
-rw-r--r-- 1 oracle oinstall 12823 Mar 15 09:27 oscheck_rac01_20240315.txt
接下來就是將 tar 文件獲取到本地,進行 word 報告一鍵生成程序即可。
生成 Word 報告
放入巡檢文件
通過 sftp 等工具獲取到 tar 報告,放到 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 請將巡檢文件移動到此目錄下.txt
配置 Python 環(huán)境
前置工作(必須滿足):
- 建議下載安裝 Python 3 最新版本,并且配置好 Python 環(huán)境。
- 下載安裝 chrome 瀏覽器以及 chromedriver。
- 需要安裝以下 Python 模塊,在根目錄下執(zhí)行:pip install -r requirements.txt 即可。
Word 報告一鍵生成程序是通過 Python 來寫的,完整程序目錄如下:
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck ?main●?
╰─$ tree -N
.
├── README.md
├── checkfiles
│ └── 請將巡檢文件移動到此目錄下.txt
├── example
│ └── example.md
├── reports
│ └── word 巡檢報告將在此目錄下生成.txt
├── requirements.txt
├── resources
│ ├── chromedriver
│ ├── config.ini
│ ├── images
│ │ └── Oracle.png
│ ├── js
│ │ └── crt21.js
│ └── templates
│ ├── Oracle數(shù)據庫巡檢報告模板_周.docx
│ ├── Oracle數(shù)據庫巡檢報告模板_季.docx
│ └── Oracle數(shù)據庫巡檢報告模板_月.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
運行 Python 腳本需要安裝 Python 運行環(huán)境,去官方下載最新的安裝包即可:
“https://www.python.org/downloads/
注意:在安裝 Python 時勾選 "Add Python to PATH" 復選框,安裝程序會自動添加環(huán)境變量,否則需要手動配置。
安裝好 Python 之后,運行命令安裝依賴包:
## 命令行窗口進入到 requirements.txt 所在目錄運行
╭─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)定版本后進行安裝即可,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 報告
進入到 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
運行腳本調用圖形化程序:
╭─lucifer@Lucifer-2 /Volumes/DBA/Github/OracleHealthCheck/src ?main●?
╰─$ python main.py
運行完之后會彈出一個圖形化報告生成工具:
工具頁面包含可編輯選項:
- 客戶公司名稱
- 服務公司名稱
- 巡檢人員
- 服務公司 logo
- 巡檢類型:根據不同巡檢類型生成不同的報告內容
- 周
- 月
- 季
- Word 報告保存位置(默認建議不改動)
根據自己實際情況填寫后,本文按照默認配置選擇季度巡檢,點擊 生成報告
即可,查看運行過程:
解壓 /Volumes/DBA/Github/OracleHealthCheck/checkfiles/dbcheck_rac01_20240315.tar.gz 到臨時目錄
復制 crt21.js 到臨時目錄 $_tmp
啟動谷歌游覽器并設置寬度
訪問 html 文件 file:///Volumes/DBA/Github/OracleHealthCheck/src/$_tmp/dbcheck_4019382963_LUCIFER_19.0.0.0.0_20240315.html
正在截取 awrcrt 性能分析圖,請稍等...
截圖已完成
關閉游覽器
保存到 /Volumes/DBA/Github/OracleHealthCheck/reports/Lucifer 有限公司-Oracle數(shù)據庫4019382963_LUCIFER巡檢報告_20240315.docx
刪除圖片臨時目錄
刪除臨時目錄
執(zhí)行完成!
運行完成后在 reports 目錄下已自動生成 Word 報告:
╭─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ù)據庫4019382963_LUCIFER巡檢報告_20240315.docx
-rw-r--r--@ 1 lucifer staff 0B 1 22 10:19 word 巡檢報告將在此目錄下生成.txt
至此,Word 報告已經生成完成。