分享两个ADG监控脚本

embedded/2024/9/25 1:00:40/

 

分享两个监控脚本,用于监控Oracle ADG的状态,如果状态异常则发送邮件告警

脚本一:

利用语句查询日志的应用状态,如果长时间未应用则邮件告警,提醒DBA检查ADG的状态是否异常;

阈值条件:最近一次日志应用时间和当前执行时间差>3600s

缺点:对于负载很小的系统,可能会误报

#!/bin/bash
# 设置环境变量(根据实际的 Oracle 环境进行调整)export ORACLE_SID=orclexport ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbexport PATH=$ORACLE_HOME/bin:$PATH
# Oracle 用户和密码 #如果监控脚本布置在adg本机 可以不设置DB_USER="sys"DB_PASS="password"TNS_ADMIN="orcl"  # TNS Entry for standby database# 邮件设置MAIL_TO="xiaoxiangqin@mail.com"SUBJECT=" ADG Status Alert"MAIL_LOG="/tmp/adg_alert_mail.log"# 查询数据库,获取最后应用的日志时间 # LAST_APPLIED_TIME=$(sqlplus -s "$DB_USER/$DB_PASS as sysdba" <<EOFSET HEADING OFFSET FEEDBACK OFFSELECT TO_CHAR(next_time, 'YYYY-MM-DD HH24:MI:SS') FROM v\$archived_logWHERE sequence# = (SELECT MAX(sequence#)                    FROM v\$archived_log                    WHERE applied = 'YES');EXIT;EOF)
# 如果查询失败,退出脚本if [ -z "$LAST_APPLIED_TIME" ]; then    echo "[$(date)] Error: Unable to retrieve last applied log time." >> $MAIL_LOG    exit 1fi
# 获取当前时间CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 将时间转换为时间戳LAST_APPLIED_TIMESTAMP=$(date -d "$LAST_APPLIED_TIME" +%s)CURRENT_TIMESTAMP=$(date -d "$CURRENT_TIME" +%s)
# 计算时间差(单位:秒)TIME_DIFF=$((CURRENT_TIMESTAMP - LAST_APPLIED_TIMESTAMP))
# 时间差是否超过 1 小时(3600 秒)#这个时间和数据库的负载相关,如果是比较繁忙的系统,可以设置短一些if [[ "$TIME_DIFF" -gt 3600]]; then    echo "[$(date)] Last Applied Log Time: $LAST_APPLIED_TIME" >> $MAIL_LOG    echo "[$(date)] Current Time: $CURRENT_TIME" >> $MAIL_LOG    echo "[$(date)] Time difference exceeds 3 hours, sending alert." >> $MAIL_LOG
    # 发送报警邮件    mailx -s "$SUBJECT" "$MAIL_TO" <<EOFWarning: The last applied log on the ADG standby database was applied at $LAST_APPLIED_TIME.Current time is $CURRENT_TIME.The time difference exceeds 3 hours. Please check the ADG status.EOFelse    echo "[$(date)] ADG is normal. Last applied log time: $LAST_APPLIED_TIME" >> $MAIL_LOGfi

脚本二

利用语句查询日志的应用状态,如果长时间未应用则邮件告警,提醒DBA检查ADG的状态是否异常;

阈值条件: 间隔5秒查询系统当前的SCN号,如果SCN未推进则报警

对比下来,感觉利用SCN变化来监控adg更为精准,而且基本不会误报。

#!/bin/bash
# 设置环境变量(根据实际的 Oracle 环境进行调整)export ORACLE_SID=orcldgexport ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1export PATH=$ORACLE_HOME/bin:$PATH# 邮件设置MAIL_TO="xiaoxiangqin@mail.com"SUBJECT="ADG Status Alert"#MAIL_LOG="/tmp/adg_alert_mail.log"MESSAGE="ADG error:SCN not change,please check。"# 执行第一次查询SCN1=$(sqlplus -s / as sysdba <<EOFset heading off feedback off verify offSELECT TO_CHAR(current_scn) FROM v\$database;exit;EOF)
# 等待5秒sleep 5
# 执行第二次查询SCN2=$(sqlplus -s / as sysdba <<EOFset heading off feedback off verify offSELECT TO_CHAR(current_scn) FROM v\$database;exit;EOF)
# 对比两次查询的SCN值,如果相同则发送告警邮件if [ "$SCN1" = "$SCN2" ]; then    echo "$MESSAGE" | mailx -s "$SUBJECT" "$MAIL_TO"fi

脚本三

ADG自动删除archive log

#!/bin/shtable='v$archived_log'#设置环境变量export ORACLE_SID=orcldgexport ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1$ORACLE_HOME/bin/sqlplus -silent "/ as sysdba" <<EOF > /home/oracle/scripts/deletedgarch.shset heading off;set pagesize 0;set term off;set feedback off;set linesize 32767;select 'rm -rf '||name from ${table} where DELETED='NO' and APPLIED='YES';exit;EOF
sh /home/oracle/scripts/deletedgarch.sh
rman target /<<ENDcrosscheck archivelog all;delete noprompt expired archivelog all;exit;END

附录如何在linux配置发送邮件

  1. 安装客户端

#基于 RedHat/CentOS 的系统yum install mailx#Debian/Ubuntu 的系统apt install mailutils

2. 配置参数/etc/mail.rc

set bsdcompat##设置发送邮件的邮件名set from=OracleAlert@mail.com##设置smtp 需要确保ip地址和端口通的 set smtp=10.8.8.8:25

3. 测试发送邮件

echo "Test email body" | mailx -s "Test Subject" OracleAlert@mail.com

4.邮件还是一个Linux和windows之间好用的文件传输工具

#将/home/oracle/script/check_dg_status_scn.sh以附件的形势发送给我自己echo "test"|mailx -s "test" -a /home/oracle/script/check_dg_status_scn.sh xiaoxiangqin@mail.com

图片


http://www.ppmy.cn/embedded/116368.html

相关文章

Git:Git管理

目录 Git 文件管理检测文件状态 status跟踪新文件 add提交更新 commit撤销提交 Commit Git 校验和历史查看 log版本回退 resetgit 忽略文件 Git 分支管理Git 提交对象Git master分支Git 分支管理本地分支管理远程分支管理分支hotfix处理 Git 工作流常见分支冲突处理分支合并冲突…

QT Creator cmake 自定义项目结构, 编译输出目录指定

1. 目的 将不同的源文件放到不同的目录下进行管理&#xff0c; 如下&#xff1a; build: 编译输出目录 include: 头文件目录 rsources: 资源文件目录 src: cpp文件目录 2. 创建完cmake工程后修改CMakeLists.txt 配置 注 &#xff1a; 这里头文件目录是include, 所以在includ…

python调用c++动态链接库,环境是VS2022和vscode2023

目录 前言&#xff1a;配置环境&#xff1a;基础夯实&#xff08;对于ctypes的介绍&#xff09;&#xff1a;1. 加载共享库2. 定义函数原型3. 调用函数4. 处理数据结构5. 处理指针6. 错误处理7. 使用 ctypes.util总结 效果展示&#xff1a;操作步骤(保姆级教学)一在VS中创建dll…

面试金典题2.2

实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4 本题的思路其实很简单&#xff0c;总共n个数&#xff0c;找倒数第k个数&#xff0c;其实就是找第n-k个数。主要的问题是这…

Node-RED和物联网分析:实时数据处理和可视化平台

这篇论文的标题是《Node-RED and IoT Analytics: A Real-Time Data Processing and Visualization Platform》&#xff0c;发表在《Tech-Sphere Journal of Pure and Applied Sciences (TSJPAS)》2024年第一期上。论文主要探讨了Node-RED和物联网分析在物联网(IoT)实时数据处理…

SpringSecurity6.x整合手机短信登录授权

前言&#xff1a;如果没有看过我的这篇文章的Springboot3.x.x使用SpringSecurity6(一文包搞定)_springboot3整合springsecurity6-CSDN博客需要看下&#xff0c;大部分多是基于这篇文章的基础上实现的。 明确点我们的业务流程&#xff1a; 需要有一个发送短信的接口&#xff0…

解决uniapp开发的app,手机预览,上下滑动页面,页面出现拉伸,抖动的效果问题,

在pages.json文件里“globalStyle”下面的"app-plus"里加入"bounce": "none"即可 "app-plus": { "bounce": "none", //关闭窗口回弹效果 }

什么是后端开发 ?

后端&#xff0c;亦称“服务器端开发”。同样&#xff0c;在后端服务器和浏览器或应用程序之间存储网站、应用数据和中间媒介的服务器都属于后端。也可以这么说&#xff0c;在应用程序或网站的屏幕上看不到的所有东西都是前端的后端。那么后端开发的基本流程是什么呢&#xff1…