使用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、尾部清除監控過程中産生的保留日期之前的日志。