標籤:
使用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?
- [email protected]:~/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‘
- fi
- {
- 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]2gotrade.com -t $DBALIST -u "Instance status on `hostname`" -o message-file=$LOG_FILE
- fi
-
- # ------------------------------------------------
- # Removing files older than $RETENTION parameter
- # ------------------------------------------------
-
- find ${LOG_DIR} -name "ck_inst*.*" -mtime +$RETENTION -exec rm {} \;
-
- exit
-
- [email protected]:~/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、尾部清除監控過程中產生的保留日期之前的日誌。
轉:http://blog.csdn.net/leshami/article/details/8563115
Linux/Unix shell 監控Oracle執行個體(monitor instance)