Oracle数据库管理常用的监控脚本------极大的简化运维工作(一)

2014-11-24 18:05:32 · 作者: · 浏览: 0

# 监控Oracle监听状态(chk_lsnr_stat.sh)
# ======================================================================================
# 监控Oracle监听器状态,发现状态异常启动监听,并发送邮件通知管理员,如果启动监听失败,发送邮件
# 通知管理员。
# ======================================================================================

#! /bin/bash

. /home/oracle/.bash_profile

tempfile=$ORACLE_BASE/admin/$ORACLE_SID/tempfile.lis

su - oracle -c "lsnrctl status" > /dev/null

if [ $ != '0' ]; then
echo "" >> $tempfile

echo "======================================================" >> $tempfile

echo "`date +%D-%T`" >> $tempfile

su - oracle -c "lsnrctl start" >> $tempfile

if [ $ = '0' ]; then

cat $tempfile | mail dba@163.com -s "The Listener Shutdown,and Restarted Success"

else

cat $tempfile | mail dba@163.com -s "The Listener Shutdown,and Restarted Failed"

fi

fi



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


# 监控Oracle实例状态(chk_inst_stat.sh)
# =====================================================================================
# 监控Oracle实例是否打开,实例打开时,数据库是否可用,当实例关闭,数据库不可用时发送告警邮件
# 通知管理员(判断时除开+ASM这个特殊实例)
# =====================================================================================

#! /bin/bash

ORATAB=/etc/oratab

tempfile=/home/oracle/tempfile.lis

db=`cat $ORATAB |egrep -i ":Y|:N"|cut -d ":" -f 1|grep -v "^+"`

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

mark=n

dbstat=`su - oracle << EOF

sqlplus -s /nolog

conn / as sysdba

set feedback off heading off pagesize 0

select status from v\\$instance;

exit

EOF`

for db_name in $db; do

echo "$pslist" | grep "ora_pmon_$db_name" > /dev/null 2>&1

if [ $ = "0" ]; then

if [ $dbstat != "OPEN" ];then

mark=y

break

fi

else

mark=y

break

fi

done

if [ $mark != 'n' ];then

echo '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' >> $tempfile
echo "SERVER: $HOSTNAME" >> $tempfile
echo "`date +%D-%T`" >> $tempfile
echo 'WARN!!! Oracle Database Unavailable' >> $tempfile
echo "Maybe The Following Reasons: The Instance or Database is not OPEN" >>$tempfile

echo | mail -s "Oracle Database Abnormal" dba@163.com < $tempfile
rm -f $tempfile

fi

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


# 监控归档目录空间(chk_arc_space.sh)
#=====================================================================================
# 将日志目录空间控制在200M,当容量大于200M时,将最旧日志打包复制到其它目录,并删除之
# 直到日志目录空间容量小于200M为止。
#=====================================================================================

#! /bin/bash

ARC_DIR=/disk01/tbs03

BAK_DIR=/opt/arcbackup

limit=200

capacity()

{

du -sh $ARC_DIR|awk -F " " '{print $1}'|tr -d M

}


oldlog()

{

ls -l|sort -k6|sed '1d'|head -1|awk -F " " '{print $9}'

}

cd $ARC_DIR

if [ `capacity` -gt $limit ]; then

echo ""|mail -s "The Archivelog Directory is Over Than $limit"\
dba@163.com

fi

while [ `capacity` -gt $limit ]

do

file=`oldlog`

tar -czf $file.`date +%Y%m%d%H%M`.tar.gz $file

cp $file.`date +%Y%m%d%H%M`.tar.gz $BAK_DIR/

rm -rf $ARC_DIR/$file $ARC_DIR/$file.`date +%Y%m%d%H%M`.tar.gz

done



# 监控警告文件错误信息(chk_alert_info.sh)
#================================================================================
# 固定时间间隔内检查alert_$ORACLE_SID.log文件中是否包含ORA-开头的错误信