天天看點

Linux/Unix shell 監控Oracle執行個體(monitor instance)

  使用shell腳本實作對Oracle資料庫的監控與管理将大大簡化DBA的工作負擔,如常見的對執行個體的監控,監聽的監控,告警日志的監控,以及資料庫的備份,AWR report的自動郵件等。本文給出Linux 下使用 shell 腳本來監控 Oracle 執行個體。

    Linux Shell的相關參考:

        Linux/Unix shell 腳本中調用SQL,RMAN腳本        Linux/Unix shell sql 之間傳遞變量        Linux/Unix shell 調用 PL/SQL

1、監控Oracle執行個體shell腳本

[python] ​​view plain​​ ​​copy​​

 ​​print​​​​?​​

robin@SZDB:~/dba_scripts/custom/bin> more ck_inst.sh     

# +-------------------------------------------------------+  

# +    CHECK INSTANCE STATUS AND SEND MAIL                |  

# +    Author : Robinson                                  |  

# +    Blog   : http://blog.csdn.net/robinson_0612        |  

# +    Desc:                                              |  

# +         variable X_DB use to exclude some instance    |   

#!/bin/bash  

# --------------------------------------------  

# Set environment vairable and define variable  

if [ -f ~/.bash_profile ]; then  

    . ~/.bash_profile  

fi  

ORATAB=/etc/oratab  

TIMESTAMP=`date +%Y%m%d%H%M`      

MAILPATH=/users/robin/dba_scripts/sendEmail-v1.56  

LOG_DIR=/users/robin/dba_scripts/custom/log               

LOG_FILE=${LOG_DIR}/ck_inst_$TIMESTAMP.log   

DBALIST="[email protected];[email protected]"  

X_DB='SYBO2SZ|CNQDII|CNFO'  

RETENTION=1  

# ----------------------  

# Check instance status  

if [ -z "$X_DB" ]; then  

    X_DB='DUMMY'  

{  

echo "`date` "   

echo "Oracle Database(s) Status on `hostname`"   

echo "-----------------------------------------"   

db=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 | grep -v "\#" | grep -v "\*"`   

pslist=`ps -ef | grep pmon | grep -v grep`  

dblist=`for i in $db; do echo $i; done | grep -vP $X_DB`  

for i in $dblist; do   

    echo "$pslist" | grep "[oa]*_pmon_$i" > /dev/null 2>&1   

    if (( $? )); then   

        echo "Oracle Instance - $i: Down"   

    else   

        echo "Oracle Instance - $i: Up"   

    fi  

done;  

}|tee -a ${LOG_FILE} 2>&1  

# ------------------------  

# Send Email  

cnt=`cat $LOG_FILE | grep Down | wc -l`  

if [ "$cnt" -gt 0 ]; then  

    $MAILPATH/sendEmail -f [email protected] -t $DBALIST -u "Instance status on `hostname`" -o message-file=$LOG_FILE   

# ------------------------------------------------  

# Removing files older than $RETENTION parameter   

find ${LOG_DIR} -name "ck_inst*.*" -mtime +$RETENTION -exec rm {} \;  

exit  

robin@SZDB:~/dba_scripts/custom/bin> ./ck_inst.sh   

Fri Feb  1 15:10:41 CST 2013   

Oracle Database(s) Status on SZDB  

-----------------------------------------  

Oracle Instance - CNBO1: Up  

Oracle Instance - CNBOTST: Down  

Oracle Instance - CNMMBO: Up  

Oracle Instance - MMBOTST: Up  

Oracle Instance - CNMMBOBK: Down  

Oracle Instance - CI8960U: Up  

Oracle Instance - CNBO2: Up  

Feb 01 15:10:41 szdb sendEmail[16024]: Email was sent successfully!  

2、補充

  a、上面的腳本根據/etc/oratab中列出的執行個體進行監控,可以監控多個執行個體。

  b、變量X_DB用于排除那些不需要監控的執行個體,如腳本中排出了3個執行個體。也可以将該變量置空。

  c、如果X_DB的值為空時,我們賦予了DUMMY,確定你的資料庫執行個體名沒有使用DUMMY,否則過濾不掉。

  d、監控腳本在監控過程中隻要有一個執行個體宕掉,則發送整個監控報告。

  d、使用了sendEmail郵件發送程式來發送郵件。參閱:不可或缺的 sendEmail  e、尾部清除監控過程中産生的保留日期之前的日志。