简单的检查DB是否夯死的监控脚本

在非工作时间(如:凌晨时分),有时数据库会遇到一些夯死状态,造成新的session无法登陆到数据库,如果手头没有任何监控工具,那么可以通过简单的shell脚本来实现监控,其原理是通过登录数据库服务器来执行简单的查询语句,如此时session无法登陆,就无法得到查询结果,即可判断此时数据库可能已夯死。

以下为脚本完整内容:

#!/bin/sh
# version 1.0 created by aaron8219
# set the environment
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH
export PATH
. /home/oracle/.bash_profile
cd /home/oracle/scripts 
# delete logfile
rm -f dbcheck.txt
# display message
echo '#############################################################'>dbcheck.txt
echo 'dbcheck on'>>dbcheck.txt
date>>dbcheck.txt
echo '#############################################################'>>dbcheck.txt
echo ' '>>dbcheck.txt
echo '#############################################################'>>dbcheck.txt
echo '###########ORA10G STATUS CHECK################################'>>dbcheck.txt
echo '#############################################################'>>dbcheck.txt
# check db status
sqlplus -S system/oracle@ora10g <<EOF  
    set echo off  
    set feedback off  
    spool dbcheck.txt append 
    alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS';  
    select sysdate from dual;  
    spool off  
    set echo on  
    set feedback on  
    exit  
EOF
# send mail to mailbox
uuencode /home/oracle/scripts/dbcheck.txt dbcheck.txt | mailx -s 'db status check!!!' dba01@126.com

如果是unix系统,使用mailx,如果是linux系统,则使用mail语法基本一致
uuencode可将二进制文件转换为文本文件,转换后的文件可以通过纯文本e-mail进行传输,在接收方对该文件使用uudecode再将其转换为初始的二进制文件

在数据库正常情况下,运行后生成的txt日志文件会显示如下内容:

[root@ora10g oracle]# cat dbcheck.txt
#############################################################
dbcheck on
Fri Aug 21 16:16:40 CST 2015
#############################################################
 
#############################################################
###########ORA10G STATUS CHECK################################
#############################################################

SYSDATE                                                                         
-------------------                                                             
2015-08-21:16:16:40 

将以上shell脚本添加到root用户的crontab中,让其每隔一段时间(如:1小时)自动运行,然后通过发邮件到指定邮箱实现邮件监控

[root@ora10g oracle]# crontab -l
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
01 10 * * * su - oracle -c /u01/orabackup/scripts/backup_full.sh
20 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * /home/oracle/scripts/dbcheck.sh >> /home/oracle/scripts/dbcheck.log &

由crontab执行后生成的文件dbcheck.log的内容会少一些,但这个log文件的内容会追加,不像txt文件每次都会删除,可以另外作为一个参考

[root@ora10g oracle]# cat dbcheck.log

SYSDATE
-------------------
2015-08-21:16:20:02

如果监听意外停止或未启动,那么运行脚本的时候屏幕会输出:

[root@ora10g oracle]# su - oracle
[oracle@ora10g ~]$ lsnrctl stop

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 21-8月 -2015 16:28:11

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora10g)(PORT=1521)))
The command completed successfully
[oracle@ora10g ~]$ exit
logout
[root@ora10g oracle]# ./dbcheck.sh
ERROR:
ORA-12541: TNS:no listener


SP2-0306: Invalid option.
Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
where <logon>  ::= <username>[/<password>][@<connect_identifier>] | /
SP2-0306: Invalid option.
Usage: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]
where <logon>  ::= <username>[/<password>][@<connect_identifier>] | /
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

而此时去查看日志内容,是没有sysdate的值的:

[root@ora10g oracle]# cat dbcheck.txt
#############################################################
dbcheck on
Fri Aug 21 16:28:34 CST 2015
#############################################################
 
#############################################################
###########ORA10G STATUS CHECK################################
#############################################################

可以在脚本中添加对多套数据库的监控,通过NET SERVICE NAME连接到这些库,因此前提是这些库的监听和TNS
字符串都正常,因此这个脚本的局限性的。但即便只是发现监听未启动而不是数据库夯死,只要发现邮件中的查询没有值,就可以由当班监控值班人员(负责检查监控邮件的人)第一时间通知DBA,对及时发现数据库问题而言,还是有一定意义的。当然了,有条件的话,当然是使用一些专业的监控工具更靠谱了。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值