Linux环境下Oracle数据库监控与报警设置方法
通过Shell脚本定期检查Oracle实例进程,若进程不存在则发送邮件告警。脚本需获取ORACLE_SID环境变量,定位告警日志路径,检查实例进程是否存在,若异常则记录日志并通过sendEmail工具发送邮件。
#!/bin/bash
export ORACLE_SID=$1
source ~/.bash_profile
db_stat=$(ps -ef | grep pmon_$ORACLE_SID | grep -v grep | cut -f3 -d_)
if [ -z "$db_stat" ]; then
echo "$(date): $ORACLE_SID instance is down!" >> /tmp/db_status.log
mail -s "$ORACLE_SID instance DOWN" dba@example.com < /tmp/db_status.log
fi
监控Oracle监听器进程,若进程不存在则尝试重启,并发送告警邮件。脚本遍历预定义的数据库列表,检查listener_<SID>进程,若未运行则执行lsnrctl start命令,并将结果记录到日志文件。
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d%H%M)
LOG_FILE="/tmp/lsnr_status_$TIMESTAMP.log"
for DB in CNBO1 CNBOTST CNMMBO; do
lsnr_flag=$(ps -ef | grep -i listener_$DB | grep -v grep)
if [ -z "$lsnr_flag" ]; then
echo "Listener for $DB is down. Restarting..." >> $LOG_FILE
lsnrctl start listener_$DB >> $LOG_FILE 2>&1
fi
done
if grep -q "restart listener" $LOG_FILE; then
mail -s "Listener crashed on $(hostname)" dba@example.com < $LOG_FILE
fi
v$database.current_scn,间隔5秒,若SCN未变化则发送告警,适用于低负载环境。v$archived_log视图,获取备库最近应用的日志时间,若与主库当前时间差超过阈值(如1小时)则告警。Oracle官方提供的全面监控工具,支持集中式监控多个Oracle数据库实例。通过OEM可监控性能指标(CPU、内存、I/O)、空间使用、会话状态、SQL执行情况等,内置告警规则(如Tablespace Full、Database Down),支持邮件、短信等多种通知方式。配置步骤:登录OEM控制台,进入“Preferences”→“Notification Methods”,添加SMTP服务器及邮件地址,设置告警接收人。
开源企业级监控工具,通过Zabbix Agent采集Oracle数据库指标(如SGA使用率、PGA使用率、活跃会话数)。需安装Zabbix Oracle模块,配置监控项(如oracle.tablespace.usage)和触发器(如{oracle:tablespace.usage.avg(5m)}>80),触发告警时可通过邮件、钉钉等方式通知。
Prometheus是开源时间序列数据库,Oracle Exporter是用于采集Oracle指标的Exporter。通过Prometheus采集Oracle的oci_recovery_service命名空间指标(如恢复窗口使用率、数据库状态),配置Alertmanager规则(如oci_recovery_service_recovery_window_used_percent > 70),触发告警时发送通知。
使用mailx工具配置邮件发送功能,编辑/etc/mail.rc文件,添加SMTP服务器、发件人信息:
set from=oracle_alert@example.com
set smtp=smtp.example.com:25
set smtp-auth=login
set smtp-auth-user=oracle_alert
set smtp-auth-password=your_password
测试邮件发送:echo "Test body" | mailx -s "Test Subject" dba@example.com。
登录OEM控制台,进入“Setup”→“Notification Methods”,添加SMTP服务器信息(如smtp.example.com、端口25),设置发件人邮箱(如dba_alert@example.com),添加接收人邮箱(如dba_team@example.com)。
Instance Status)。Listener Status)。CPU Usage、Memory Usage、Disk I/O、Sessions、SQL Execution Time)。Tablespace Usage、Archive Log Space)。SCN Change、Archive Log Apply Lag)。