
一:数据库巡检分为几个阶段
第一阶段:手动巡检
通过逐条执行巡检命令,复制粘贴到巡检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、数据库大小、用户数据大小。
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
获取RAC巡检脚本
微信公众号《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 Documentfrom docx.shared import Ptfrom docx.shared import Inchesfrom docx.oxml.ns import qnfrom 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###





