使用shell腳本實現對Oracle數據庫的監控與管理將大大簡化DBA的工做負擔,如常見的對實例的監控,監聽的監控,告警日誌的監控,以及數據庫的備份,AWR report的自動郵件等。本文給出Linux 下使用 shell 腳原本監控 Oracle 告警日誌(monitor alter log file)。python
Linux Shell的相關參考:
Linux/Unix shell 腳本中調用SQL,RMAN腳本
Linux/Unix shell sql 之間傳遞變量
Linux/Unix shell 調用 PL/SQL
Linux/Unix shell 監控Oracle實例(monitor instance)
Linux/Unix shell 監控Oracle監聽器(monitor listener)sql
一、監控Oracle告警日誌腳本shell
二、過濾Oracle告警日誌錯誤信息數據庫
- robin@SZDB:~/dba_scripts/custom/bin> more check_alert.awk
- $0 ~ /Errors in file/ {print $0}
- $0 ~ /PMON: terminating instance due to error 600/ {print $0}
- $0 ~ /Started recovery/{print $0}
- $0 ~ /Archival required/{print $0}
- $0 ~ /Instance terminated/ {print $0}
- $0 ~ /Checkpoint not complete/ {print $0}
- $1 ~ /ORA-/ { print $0; flag=1 }
- $0 !~ /ORA-/ {if (flag==1){print $0; flag=0;print " "} }
- $0 ~ /ERROR_AUDIT/ {print $0}
三、老化Oracle告警日誌腳本bash
- robin@SZDB:~/dba_scripts/custom/bin> more age_alert.sh
-
-
- if [ -z "${1}" ];then
- echo "Usage: "
- echo " `basename $0` ORACLE_SID"
- exit 1
- fi
-
-
- if [ -f ~/.bash_profile ]; then
- . ~/.bash_profile
- fi
-
- export MAIL_DIR=/users/robin/dba_scripts/sendEmail-v1.56
- export MAIL_LIST='Robinson.cheng@12306.com'
- export MAIL_FM='oracle@szdb.com'
- ORACLE_SID=$1; export ORACLE_SID
-
-
- db_stat=`ps -ef | grep pmon_$ORACLE_SID | grep -v grep| cut -f3 -d_`
- if [ -z "$db_stat" ]; then
- echo " $ORACLE_SID is not available on `hostname` !!!"
- MAIL_SUB=" $ORACLE_SID is not available on `hostname` !!!"
- MAIL_MSG="$ORACLE_SID is not available on `hostname` before age alert log file, exit, please check !"
- $MAIL_DIR/sendEmail -u $MAIL_SUB -f $MAIL_FM -t $MAIL_LIST -m $MAIL_MSG
- exit 1
- fi
-
-
- DUMP_DIR=`sqlplus -S '/ as sysdba' << EOF
- set pagesize 0 feedback off verify off heading off echo off
- SELECT value FROM v\\$parameter WHERE name = 'background_dump_dest';
- exit
- EOF`
- if [ -z ${DUMP_DIR} ]; then
- echo "The bdump directory was not found for ${ORACLE_SID}"
- MAIL_SUB="The bdump directory was not found for ${ORACLE_SID}"
- MAIL_MSG="The bdump directory was not found for ${ORACLE_SID} on `hostname` before age log file,exit,please check !"
- $MAIL_DIR/sendEmail -u $MAIL_SUB -f $MAIL_FM -t $MAIL_LIST -m $MAIL_MSG
- exit 1
- else
- echo ${DUMP_DIR}
- fi
-
-
- DT=`date +%Y%m%d -d '-1 day'`
- OLD_DIR=${DT:0:6}
- NEW_DIR=`date +%Y%m`
- ORIG_ALERT_LOG=${DUMP_DIR}/alert_${ORACLE_SID}.log
- OLD_ARC_DIR=${DUMP_DIR}/${OLD_DIR}
- NEW_ARC_DIR=${DUMP_DIR}/${NEW_DIR}
-
- if [ ! -d "${NEW_ARC_DIR}" ] ; then
- mkdir ${NEW_ARC_DIR}
- fi
-
- if [ "${OLD_DIR}" \< "${NEW_DIR}" ];then
- ARC_LOG=${OLD_ARC_DIR}/alert_${ORACLE_SID}.log.${DT}
- else
- ARC_LOG=${NEW_ARC_DIR}/alert_${ORACLE_SID}.log.${DT}
- fi
-
- cat ${ORIG_ALERT_LOG} >>${ARC_LOG}
- cat /dev/null>${ORIG_ALERT_LOG}
- exit
四、部署腳本到crontaboracle
- */15 * * * * /users/robin/dba_scripts/custom/bin/ck_alert.sh MMBOTST
- 0 0 * * * /users/robin/dba_scripts/custom/bin/age_alert.sh MMBOTST
五、補充
a、上面腳本用於實時監控Oracle告警日誌,一旦檢測到錯誤,將發送郵件。
b、對於已經檢查過且發現錯誤的日誌將被移動做爲歸檔,也就是Oracle錯誤不會被重複檢測。
c、全部有關錯誤檢測的過濾條件被放置到過濾文件check_alert.awk中。
d、第3個腳本用於老化告警日誌,建議設置老化的時間爲天天0點,這樣子,天天將會保留當天的告警日誌。
e、對於老化的告警日值,按年月來存放,也便是以年月命名文件夾,當天告警日誌會存放在當月文件夾。
f、使用了sendEmail郵件發送程序來發送郵件。參閱:不可或缺的 sendEmail
g、該腳本僅在Oracle 10g測試可用,Oracle 11g應作相應修改。測試
轉:http://blog.csdn.net/leshami/article/details/8569759ui