对于DBA来说,检查alert日志是日常工作。告警日志日积月累往往很大,而且每次在服务器上查看或者下载到目标主机查看都十分不方便。
为了方便,以下做出两种情况:(其他情况类推)
第一场景:每天早上上班检查头一天的告警日志。于是用以下脚本截取前一天的日志,发送到指定接收人的邮箱。
#编辑脚本:vim alertlog_day.sh #oracle用户下执行 #!/bin/bash # 筛选前一日的alert日志,方便每天早上查看前一天的日志。 # export LANG=en_US TODAY=`date +%Y-%m-%d` YESTERDAY=`date -d -1days +%Y-%m-%d` sed -n "/$YESTERDAY/,/$TODAY/"p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log > /opt/oraclesh/alert_$ORACLE_SID_$YESTERDAY.log echo "Please find the attachment!" |mail -s "ALTER_SID_LOG_$YESTERDAY" -a /opt/oraclesh/alert_$ORACLE_SID_$YESTERDAY.log xxx@xxx.com
第二场景:每隔一个小时截取一次告警日志,并对日志内容初步分析。判断是否存在ORA-相关错误,出现错误的才发至指定接收人邮箱。
#编辑脚本:vim alertlog_hour.sh #oracle用户下执行 #!/bin/bash # 筛选alter日志:按每小时截取日志并存放到目标路径。 # 判断如果该日志存在ORA-的相关错误,则发送邮件给接收人; # 判断如果该日志无任何错误,则无需发送邮件。只记录一下执行日志即可,以备后续查阅。 export LANG=en_US ONE_HOUR_AGO=`date -d -1hour +%Y-%m-%dT%H` CURRENT_TIME=`date +%Y-%m-%dT%H` STORAGE_PATH="/opt/oraclesh/alert_$ORACLE_SID_$ONE_HOUR_AGO.log" sed -n "/$ONE_HOUR_AGO/,/$CURRENT_TIME/"p $ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log > $STORAGE_PATH if [ `grep -i "ORA-" $STORAGE_PATH | wc -l` -ne 0 ] ;then echo "Find errors, please see the attachment for details !" |mail -s "ALTER_SID_LOG_$ONE_HOUR_AGO" -a $STORAGE_PATH xxx@xxx.com else echo "$ONE_HOUR_AGO: No error find in file" >> /opt/alert_normal.log fi
如果要在root用户下书写,增加设置变量:
ORACLE_BASE=`su - oracle -c "env | grep ORACLE_BASE "|awk -F "=" '{print $2}'` ORACLE_SID=`su - oracle -c "env | grep ORACLE_SID "|awk -F "=" '{print $2}'`