使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日至的监控,以及数据库的备份,AWR report的自动邮件等。本文给出Linux 下使用 shell 脚本来监控 Oracle 监听器。Linux Shell的相关参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本 http://www.linuxidc.com/Linux/2012-09/70310.htmLinux/Unix shell sql 之间传递变量 http://www.linuxidc.com/Linux/2013-01/78811.htmLinux Unix shell 调用 PL/SQL http://www.linuxidc.com/Linux/2013-01/78810.htmLinux/Unix shell 监控Oracle实例(monitor instance) http://www.linuxidc.com/Linux/2013-02/78932.htm1、监控Oracle监听shell脚本robin@SZDB:~/dba_scripts/custom/bin> more ck_lsnr.sh
# +-------------------------------------------------------+
# + CHECK LISTENER STATUS AND RESTART IT WHEN FAILED |
# + Author : Robinson |
# + Blog :http://blog.csdn,net/robinson_0612 |
# + Parameter : No |
# +-------------------------------------------------------+#!/bin/bash
# --------------------
# Define variable
# --------------------if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi
TIMESTAMP=`date +%Y%m%d%H%M`; export TIMESTAMP
DBALIST="robinson.cheng@12306.com"; export DBALIST
MAILPATH=/users/robin/dba_scripts/sendEmail-v1.56
LOG_DIR=/users/robin/dba_scripts/custom/log
LOG_FILE=${LOG_DIR}/lsnr_status_$TIMESTAMP.log
RETENTION=2# -----------------------------------------
# Define how many listeners need to monitor
# -----------------------------------------DB_COUNT=6
DB[1]=CNBO1
DB[2]=CNBOTST
DB[3]=CNMMBO
DB[4]=MMBOTST
DB[5]=SYBO2SZ
DB[6]=CNBO2# -------------------------
# Begin to check listener
# -------------------------touch $LOG_FILE
echo "`date` " >>$LOG_FILE
echo " The following listeners are down on `hostname`" >>$LOG_FILE
echo "-----------------------------------------------" >>$LOG_FILECOUNT=1
while [ $COUNT -le $DB_COUNT ];
do
for db in ${DB[$COUNT]};
do
lsnr_flag=`ps -ef | grep -i listener_${DB[$COUNT]} | grep -v grep`
if [ -z "$lsnr_flag" ]; then
echo "The listener for the database ${DB[$COUNT]} is down." >>$LOG_FILE
echo "=======> restart listener for the database ${DB[$COUNT]}" >>$LOG_FILE
lsnrctl start listener_${DB[$COUNT]} >>$LOG_FILE
echo -e "------------------------------------------------------------------
" >>$LOG_FILE
fi
done;
COUNT=`expr $COUNT + 1`
done;# --------------------------
# Send Email
# --------------------------cnt=`grep "restart listener" $LOG_FILE |wc -l`
if [ "$cnt" -gt 0 ];then
$MAILPATH/sendEmail -f szdb@2gotrade.com -t $DBALIST -u "Listener crashed on `hostname`" -o message-file=$LOG_FILE
else
rm -rf $LOG_FILE
fi# ------------------------------------------------
# Removing files older than $RETENTION parameter
# ------------------------------------------------find ${LOG_DIR} -name "*lsnr_status*" -mtime +$RETENTION -exec rm {} ;exitoracle@SZDB:/users/robin/dba_scripts/custom/bin> ./ck_lsnr.sh
Feb 01 17:16:34 szdb sendEmail[18611]: Email was sent successfully!
Fri Feb 1 17:16:33 CST 2013 #下面是测试脚本邮件发送包含的内容
The following listeners are down on SZDB
-----------------------------------------------
The listener for the database CNBO1 is down.
=======> restart listener for the database CNBO1LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 01-FEB-2013 17:16:33Copyright (c) 1991, 2006, Oracle. All rights reserved.Starting /users/oracle/OraHome10g/bin/tnslsnr: please wait...TNSLSNR for Linux: Version 10.2.0.3.0 - Production System parameter file is
/users/oracle/OraHome10g/network/admin/listener.ora
Log messages written to /users/oracle/OraHome10g/network/log/listener_cnbo1.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.101.7.2)(PORT=1901)))Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.101.7.2)(PORT=1901)))
STATUS of the LISTENER
------------------------
Alias listener_CNBO1
Version TNSLSNR for Linux: Version 10.2.0.3.0 - Production
Start Date 01-FEB-2013 17:16:33
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /users/oracle/OraHome10g/network/admin/listener.ora
Listener Log File /users/oracle/OraHome10g/network/log/listener_cnbo1.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.101.7.2)(PORT=1901)))
Services Summary...
Service "CNBO1" has 1 instance(s).
Instance "CNBO1", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
------------------------------------------------------------------2、补充a、上面的监控监听脚本可以监控多个监听器。b、监听器的名字的定义格式为LISTENER_$ORACLE_SID,未考虑缺省监听器的情形,如使用缺省监听器请做相应更改。b、使用了数组的方式来定义实例名,每一个对应一个监听器,确保DB_COUNT的值与需要监控的监听器个数相符。c、数组的每一个元素使用的是ORACLE_SID,如果是RAC,可以将其改为主机名。d、如果检测到监听器宕掉的情形则会自动重启监听并发送邮件。e、使用了sendEmail邮件发送程序来发送邮件。参阅:不可或缺的 sendEmailf、通过crontab来部署该脚本。另,Oracle 10g测试可用,Oracle 11g待测。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12DB2取浮点数的小数部分Linux/Unix shell 监控Oracle实例(monitor instance)相关资讯 Oracle监听器 监听器listener monitor listener
- Oracle 监听器无法启动(TNS-12555 (08/21/2015 10:17:10)
- 监听器listener.ora中HOST参数配置 (05/03/2014 14:26:37)
- Oracle 监听器日志配置与管理 (08/17/2013 08:47:15)
| - Oracle 监听器无法启动(TNS-12537 (04/30/2015 09:14:18)
- Oracle监听器启动故障TNS-00517解 (05/03/2014 14:23:05)
- Oracle 双监听器的配置 (12/11/2012 09:55:20)
|
本文评论 查看全部评论 (0)