分享两个监控脚本,用于监控Oracle ADG的状态,如果状态异常则发送邮件告警
脚本一:
利用语句查询日志的应用状态,如果长时间未应用则邮件告警,提醒DBA检查ADG的状态是否异常;
阈值条件:最近一次日志应用时间和当前执行时间差>3600s
缺点:对于负载很小的系统,可能会误报
#!/bin/bash
# 设置环境变量(根据实际的 Oracle 环境进行调整)
export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db
export 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" <<EOF
SET HEADING OFF
SET FEEDBACK OFF
SELECT TO_CHAR(next_time, 'YYYY-MM-DD HH24:MI:SS')
FROM v\$archived_log
WHERE 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 1
fi
# 获取当前时间
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" <<EOF
Warning: 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.
EOF
else
echo "[$(date)] ADG is normal. Last applied log time: $LAST_APPLIED_TIME" >> $MAIL_LOG
fi
复制
脚本二
利用语句查询SCN推进状态,如果SCN未推进则邮件告警,提醒DBA检查ADG的状态是否异常;
阈值条件: 间隔5秒查询系统当前的SCN号,如果SCN未推进则报警
对比下来,感觉利用SCN变化来监控adg更为精准,而且基本不会误报。
#!/bin/bash
# 设置环境变量(根据实际的 Oracle 环境进行调整)
export ORACLE_SID=orcldg
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export 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 <<EOF
set heading off feedback off verify off
SELECT TO_CHAR(current_scn) FROM v\$database;
exit;
EOF
)
# 等待5秒
sleep 5
# 执行第二次查询
SCN2=$(sqlplus -s / as sysdba <<EOF
set heading off feedback off verify off
SELECT 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/sh
table='v$archived_log'
#设置环境变量
export ORACLE_SID=orcldg
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
$ORACLE_HOME/bin/sqlplus -silent "/ as sysdba" <<EOF > /home/oracle/scripts/deletedgarch.sh
set 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 /<<END
crosscheck archivelog all;
delete noprompt expired archivelog all;
exit;
END
复制
附录如何在linux配置发送邮件
安装客户端
#基于 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
复制
最后修改时间:2024-09-20 13:58:30
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
自动删除归档日志脚本是不是存在问题呀,只能获取rm命令,不执行删除
6月前

1
相关阅读
2025年3月中国数据库排行榜:PolarDB夺魁傲群雄,GoldenDB晋位入三强
墨天轮编辑部
1663次阅读
2025-03-11 17:13:58
【专家观点】罗敏:从理论到真实SQL,感受DeepSeek如何做性能优化
墨天轮编辑部
1241次阅读
2025-03-06 16:45:38
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1222次阅读
2025-03-13 11:40:53
01. HarmonyOS Next应用开发实践与技术解析
若城
1180次阅读
2025-03-04 21:06:20
DeepSeek R1助力,腾讯AI代码助手解锁音乐创作新
若城
1161次阅读
2025-03-05 09:05:00
03 HarmonyOS Next仪表盘案例详解(二):进阶篇
若城
1160次阅读
2025-03-04 21:08:36
05 HarmonyOS NEXT高效编程秘籍:Arkts函数调用与声明优化深度解析
若城
1152次阅读
2025-03-04 22:46:06
04 高效HarmonyOS NEXT编程:ArkTS数据结构优化与属性访问最佳实践
若城
1143次阅读
2025-03-04 21:09:35
02 HarmonyOS Next仪表盘案例详解(一):基础篇
若城
1138次阅读
2025-03-04 21:07:43
06 HarmonyOS Next性能优化之LazyForEach 列表渲染基础与实现详解 (一)
若城
1133次阅读
2025-03-05 21:09:40