巧用nagios脚本监控oracle连接

简介:

场景:
程序修改完成后,上传到应用服务器tomcat,重启tomcat后,发现启动异常!前端nginx负载均衡出现504错误,网站无法打开!

排查:
经过排查tomcat日志,发现连接数据库异常;登陆数据库后以"conn /as sysdba"方式登陆正常,数据库轻载,无压力;于是检查数据库的监听器,输入"lsntctl services"命令,卡住,半天不出结果…

故障处理:
输入"lsntctl stop" 或者"lsntctl reload"命令,卡住,半天不出结果,于是输入service network restart命令,一样没有效果!于是出必杀技,输入"netstat -ntpl|grep :1521"命令找出监听器的进程号,kill -9结束掉,然后重启监听器,再启动tomcat正常,网站访问畅通无阻!

原因分析:
可能由于数据库bug的原因,出现监听器卡住的情况,导致数据库连接失败!参见:http://hi.baidu.com/hzcasper/blog/item/8bdf7449e350263d0bf7ef70.html

后期维护:
为了尽量避免这种问题,想到去写一个监控脚本配合nagios监控,当数据库连接异常的时候,可以第一时间收到报警短信;java程序连接数据库使用连接池,所以不一定会及时暴露出问题!

写一个脚本放任务计划中运行,定期去连接下数据库,查询下系统时间和数据库的状态,spool输出到临时文件上

 
  1. [root@server199 ~]# crontab -l  
  2. */5  *    *             *  *  /usr/local/nagios/libexec/connect_oracle.sh  
  3. [root@server199 ~]# cat /usr/local/nagios/libexec/connect_oracle.sh
    #!/bin/sh
    #functions: connect oracle server test
    #author:lw.yang
    #modify_date: 2012-02-22
  4. rm -rf /tmp/check_oracle.log
    export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1/
    $ORACLE_HOME/bin/sqlplus username/password@ip:1521/services_name <<EOF
    set echo off
    set feedback off
    spool /tmp/check_oracle.log
    alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS';
    select sysdate from dual;
    select name,open_mode from v\$database;
    spool off
    set echo on
    set feedback on
    EOF

再写一个脚本来根据临时文件来判断数据库是否正常,该脚本供nagios插件check_nrpe调用,之所以分两个脚本,中间使用临时文件,主要是出于权限问题的考虑,nagios本身带了一个check_oracle的插件,感觉不太适用,还需要在nagios服务器端安装oracle客户端,配置tnsnames.ora文件,设置oracle相关的环境变量等等…

 
  1. [root@server199 ~]# cat /usr/local/nagios/libexec/check_oracle.sh   
  2. #!/bin/sh  
  3. #functions: use monitor oracle server status with nagios nrpe plugin  
  4. #author:lw.yang  
  5. #modify_date: 2012-02-22  
  6.  
  7. STATE_OK=0 
  8. STATE_CRITICAL=2 
  9.  
  10. if  [ -f /tmp/check_oracle.log  ];then  
  11.       COUNT=$(grep -i 'READ WRITE' /tmp/check_oracle.log  |wc -l)  
  12.         if [ $COUNT -eq 1 ];then  
  13.         echo "connect oracle server normal..."  
  14.         exit $STATE_OK  
  15.         else  
  16.         echo "database not open"  
  17.         exit $STATE_CRITICAL  
  18.         fi  
  19.       else  
  20.       echo "can't connect to oracle server..."  
  21.       exit $STATE_CRITICAL  
  22. fi       

监控效果!

[root@server199 ~]# cat /tmp/check_oracle.log 
SQL> alter session set nls_date_format='YYYY-MM-DD:HH24:MI:SS';
SQL> select sysdate from dual;

SYSDATE                                                                         
-------------------                                                             
2012-02-23:10:10:03                                                             
SQL> select name,open_mode from v$database;

NAME      OPEN_MODE                                                             
--------- ----------                                                            
EPROWB2B  READ WRITE                                                            
SQL> spool off

 

 本文转自斩月博客51CTO博客,原文链接http://blog.51cto.com/ylw6006/787496如需转载请自行联系原作者


ylw6006

相关文章
|
5月前
|
SQL Oracle 关系型数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
142 0
|
6月前
|
Oracle 关系型数据库 流计算
Flink CDC不支持直接连接到Oracle ADG备库进行数据同步
Flink CDC不支持直接连接到Oracle ADG备库进行数据同步
109 1
|
7月前
|
存储 SQL Oracle
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
Oracle数据库批量删除表、视图、序列、存储过程、函数脚本
68 0
|
1月前
|
Oracle Java 关系型数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
|
1月前
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
Flink CDC产品常见问题之使用cdc-Oracle连接器报错如何解决
|
3月前
|
Oracle 关系型数据库 Linux
RHEL7.9系统下一键脚本安装Oracle 11gR2单机版本
RHEL7.9系统下一键脚本安装Oracle 11gR2单机版本
60 1
|
4月前
|
SQL Oracle 关系型数据库
[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101
[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101
55 0
|
4月前
|
Oracle 小程序 关系型数据库
laravel5.8(十四)连接oracle数据库
首先确定你的PHP已经支持oracle数据库的链接。PHP需要安装OCI8扩展。 确定PHP可以链接ORACLE数据库之后。我们使用composer安装laravel支持oracle链接的插件 yajra/laravel-oci8 欢迎访问个人博客 guanchao.site 欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的” 一:使用composer安装 yajra/laravel-oci8 1 :运行如下命令: bash 复制代码 composer require yajra/laravel-oci8 2 :安装过程中可能会报错,不要纠结那些报错,最简单的解决办法:
70 0
|
4月前
|
Oracle 关系型数据库 Python
python连接oracle12c
python连接oracle12c
34 0
|
5月前
|
Oracle 关系型数据库 数据库
Navicat连接Oracle报错:Oracle library is not loaded
Navicat连接Oracle报错:Oracle library is not loaded
106 0

推荐镜像

更多