暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

从零开始实现数据库自动化巡检(一)

IT小Chen 2022-05-04
3822

一:数据库巡检分为几个阶段

第一阶段:手动巡检

通过逐条执行巡检命令,复制粘贴到巡检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

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###

    文章转载自IT小Chen,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论