公司数据库比较多,所以需要做个定时任务,每隔15分钟检查一次alert.log的内容,如果有错误就发到邮箱,方便管理。以下是我参考网络文档,修改后在工作中使用到的脚本。数据库11.2.0,操作系统Centos6.3.

 
  1. [oracle@oracleinstall script]$ cat ./test.sh  
  2. #!/bin/bash 
  3. ORACLE_SID=orcl; export $1  
  4. ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE  
  5. ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1; export ORACLE_HOME  
  6. export ORACLE_SID=$1  
  7. $ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/openwin/bin:/opt/bin:.; export PATH  
  8. export ALERT_DIR=/u01/app/oracle/diag/
  9. export ORACLE_SID=orcl   
  10. export MACHINE=`hostname`   
  11. DBALIST="masicong1019@hotmail.com";export DBALIST  
  12. db_stat=`ps -ef | grep pmon_$ORACLE_SID | grep -v grep| cut -f3 -d_`   
  13. if [ -z "$db_stat" ]; then   
  14.     date >/tmp/db_${ORACLE_SID}_stauts.log   
  15.     echo " $ORACLE_SID is not available on ${MACHINE} !!!" >>/tmp/db_${ORACLE_SID}_stauts.log    
  16.     MAIL_SUB=" $ORACLE_SID is not available on ${MACHINE} !!!"   
  17.     $MAIL_DIR/sendEmail -u $MAIL_SUB -f $MAIL_FM -t $MAIL_LIST -o message-file=/tmp/db_${ORACLE_SID}_stauts.log   
  18.     exit 1   
  19. fi;   
  20. sqlplus  '/ as sysdba' <<EOF  
  21. column xxxx format a10   
  22. column value format a80   
  23. set lines 132 
  24. spool /tmp/${ORACLE_SID}_monitor_temp.txt   
  25. SELECT value FROM  v\$parameter WHERE  name = 'background_dump_dest'   
  26. /   
  27. spool off 
  28. EOF 
  29. echo 'a' 
  30. cat /tmp/${ORACLE_SID}_monitor_temp.txt | awk '$1 ~ /xxxx/ {print $2}' > /tmp/${ORACLE_SID}_monitor_location.txt  
  31. echo 'a' 
  32. read ALERT_DIR < /tmp/${ORACLE_SID}_monitor_location.txt  
  33. echo 'a' 
  34. rm /tmp/${ORACLE_SID}_monitor_temp.txt 2>/dev/null  
  35. DT=`date +%Y%m%d`  
  36. DT_DIR=`date +%Y%m`  
  37. ARCH_DIR=${ALERT_DIR}/${DT_DIR}  
  38. echo 'a' 
  39. if [ ! -d "${ARCH_DIR}" ] ; then   
  40.     mkdir $ARCH_DIR   
  41. fi   
  42. ORIG_ALERT_LOG=${ALERT_DIR}/alert_${ORACLE_SID}.log 
  43. NEW_ALERT_LOG=${ARCH_DIR}/alert_${ORACLE_SID}.log.${DT} 
  44. TEMP_ALERT_LOG=${ORIG_ALERT_LOG}.temp 
  45. AWK_DIR=/home/oracle  
  46.  
  47. cat ${ORIG_ALERT_LOG} | awk -f $AWK_DIR/check_alert.awk > /tmp/${ORACLE_SID}_check_monitor_log.log 
  48. if [ -s "/tmp/${ORACLE_SID}_check_monitor_log.log" ];   
  49.    then    
  50. $0 ~ /Started recovery/{print $0}   
  51. $0 ~ /Archival required/{print $0}   
  52. $0 ~ /Instance terminated/ {print $0}   
  53. $0 ~ /Checkpoint not complete/ {print $0}   
  54. $1 ~ /ORA-/ { print $0; flag=1 }   
  55.      cat /tmp/${ORACLE_SID}_check_monitor_log.log >>  /tmp/${ORACLE_SID}_check_monitor_log.mail   
  56.      MAIL_SUB="Found errors in ${ORACLE_SID} on ${MACHINE}"   
  57.      $MAIL_DIR/sendEmail -u $MAIL_SUB -f $MAIL_FM -t $MAIL_LIST -o message-file=/tmp/${ORACLE_SID}_check_monitor_log.mail   
  58.