• SHELL脚本学习-定时检查Oracle alert日志并发送mail


    对于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}'`
  • 相关阅读:
    洛谷 P1282 多米诺骨牌
    【2017杭二联考】穿越矩形
    【2017杭二联考】 图的有向环
    树状数组
    Test2014-3-1 魅力值比较
    NOI2007 货币兑换
    POI2001 金矿
    太空飞行计划问题
    Genotype&&陨石的秘密
    usaco 土地并购 && hdu 玩具装箱
  • 原文地址:https://www.cnblogs.com/ctulzq/p/10449738.html
Copyright © 2020-2023  润新知