使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等。本文给出Linux 下使用 shell 脚本来监控 Oracle 监听器。

Linux Shell的相关参考:
        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量        Linux/Unix shell 调用 PL/SQL        Linux/Unix shell 监控Oracle实例(monitor instance)

1、监控Oracle监听shell脚本

  1. robin@SZDB:~/dba_scripts/custom/bin> more ck_lsnr.sh
  2. # +-------------------------------------------------------+
  3. # +    CHECK LISTENER STATUS AND RESTART IT WHEN FAILED   |
  4. # +    Author : Robinson                                  |
  5. # +    Blog   :http://blog.csdn.net/robinson_0612        |
  6. # +    Parameter : No                                     |
  7. # +-------------------------------------------------------+
  8. #!/bin/bash
  9. # --------------------
  10. # Define variable
  11. # --------------------
  12. if [ -f ~/.bash_profile ]; then
  13. . ~/.bash_profile
  14. fi
  15. TIMESTAMP=`date +%Y%m%d%H%M`;  export TIMESTAMP
  16. DBALIST="robinson.cheng@12306.com"; export DBALIST
  17. MAILPATH=/users/robin/dba_scripts/sendEmail-v1.56
  18. LOG_DIR=/users/robin/dba_scripts/custom/log
  19. LOG_FILE=${LOG_DIR}/lsnr_status_$TIMESTAMP.log
  20. RETENTION=2
  21. # -----------------------------------------
  22. # Define how many listeners need to monitor
  23. # -----------------------------------------
  24. DB_COUNT=6
  25. DB[1]=CNBO1
  26. DB[2]=CNBOTST
  27. DB[3]=CNMMBO
  28. DB[4]=MMBOTST
  29. DB[5]=SYBO2SZ
  30. DB[6]=CNBO2
  31. # -------------------------
  32. # Begin to check listener
  33. # -------------------------
  34. touch $LOG_FILE
  35. echo "`date` " >>$LOG_FILE
  36. echo " The following listeners are down on `hostname`" >>$LOG_FILE
  37. echo "-----------------------------------------------" >>$LOG_FILE
  38. COUNT=1
  39. while [ $COUNT -le $DB_COUNT ];
  40. do
  41. for db in ${DB[$COUNT]};
  42. do
  43. lsnr_flag=`ps -ef | grep -i listener_${DB[$COUNT]} | grep -v grep`
  44. if [ -z "$lsnr_flag" ]; then
  45. echo "The listener for the database ${DB[$COUNT]} is down." >>$LOG_FILE
  46. echo "=======> restart listener for the database ${DB[$COUNT]}" >>$LOG_FILE
  47. lsnrctl start listener_${DB[$COUNT]} >>$LOG_FILE
  48. echo -e "------------------------------------------------------------------\n" >>$LOG_FILE
  49. fi
  50. done;
  51. COUNT=`expr $COUNT + 1`
  52. done;
  53. # --------------------------
  54. # Send Email
  55. # --------------------------
  56. cnt=`grep "restart listener" $LOG_FILE |wc -l`
  57. if [ "$cnt" -gt 0 ];then
  58. $MAILPATH/sendEmail -f szdb@2gotrade.com -t $DBALIST -u "Listener crashed on `hostname`" -o message-file=$LOG_FILE
  59. else
  60. rm -rf $LOG_FILE
  61. fi
  62. # ------------------------------------------------
  63. # Removing files older than $RETENTION parameter
  64. # ------------------------------------------------
  65. find ${LOG_DIR} -name "*lsnr_status*" -mtime +$RETENTION -exec rm {} \;
  66. exit
  67. oracle@SZDB:/users/robin/dba_scripts/custom/bin> ./ck_lsnr.sh
  68. Feb 01 17:16:34 szdb sendEmail[18611]: Email was sent successfully!
  69. Fri Feb  1 17:16:33 CST 2013      #下面是测试脚本邮件发送包含的内容
  70. The following listeners are down on SZDB
  71. -----------------------------------------------
  72. The listener for the database CNBO1 is down.
  73. =======> restart listener for the database CNBO1
  74. LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 01-FEB-2013 17:16:33
  75. Copyright (c) 1991, 2006, Oracle.  All rights reserved.
  76. Starting /users/oracle/OraHome10g/bin/tnslsnr: please wait...
  77. TNSLSNR for Linux: Version 10.2.0.3.0 - Production System parameter file is
  78. /users/oracle/OraHome10g/network/admin/listener.ora
  79. Log messages written to /users/oracle/OraHome10g/network/log/listener_cnbo1.log
  80. Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.101.7.2)(PORT=1901)))
  81. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.101.7.2)(PORT=1901)))
  82. STATUS of the LISTENER
  83. ------------------------
  84. Alias                     listener_CNBO1
  85. Version                   TNSLSNR for Linux: Version 10.2.0.3.0 - Production
  86. Start Date                01-FEB-2013 17:16:33
  87. Uptime                    0 days 0 hr. 0 min. 0 sec
  88. Trace Level               off
  89. Security                  ON: Local OS Authentication
  90. SNMP                      OFF
  91. Listener Parameter File   /users/oracle/OraHome10g/network/admin/listener.ora
  92. Listener Log File         /users/oracle/OraHome10g/network/log/listener_cnbo1.log
  93. Listening Endpoints Summary...
  94. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.101.7.2)(PORT=1901)))
  95. Services Summary...
  96. Service "CNBO1" has 1 instance(s).
  97. Instance "CNBO1", status UNKNOWN, has 1 handler(s) for this service...
  98. The command completed successfully
  99. ------------------------------------------------------------------

2、补充
   a、上面的监控监听脚本可以监控多个监听器。
   b、监听器的名字的定义格式为LISTENER_$ORACLE_SID,未考虑缺省监听器的情形,如使用缺省监听器请做相应更改。
   c、使用了数组的方式来定义实例名,每一个对应一个监听器,确保DB_COUNT的值与需要监控的监听器个数相符。
   d、数组的每一个元素使用的是ORACLE_SID,如果是RAC,可以将其改为主机名。
   e、如果检测到监听器宕掉的情形则会自动重启监听并发送邮件。
   f、使用了sendEmail邮件发送程序来发送邮件。参阅:不可或缺的 sendEmail
   g、通过crontab来部署该脚本。另,Oracle 10g测试可用,Oracle 11g待测。

转:http://blog.csdn.net/leshami/article/details/8563744

Linux/Unix shell 监控Oracle监听器(monitor listener)的更多相关文章

  1. Linux/Unix shell 监控Oracle实例(monitor instance)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  2. Linux/Unix shell 监控Oracle告警日志(monitor alter log file)

    使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份,AWR report的自动邮件等.本文给出Linu ...

  3. Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  4. Linux/Unix shell sql 之间传递变量

    灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考. Lin ...

  5. Linux/Unix shell 自动发送AWR report(二)

    观察Oracle数据库性能,Oracle自带的awr 功能为我们提供了一个近乎完美的解决方案,通过awr特性我们可以随时从数据库提取awr报告.不过awrrpt.sql脚本执行时需要我们提供一些交互信 ...

  6. Linux/Unix shell 脚本监控磁盘可用空间

    Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少.下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考. 1.监控磁盘的空闲空间shell脚本 robi ...

  7. Linux/Unix shell 自动发送AWR report

    观察Oracle数据库性能,Oracle自带的awr 功能为我们提供了一个近乎完美的解决方案,通过awr特性我们可以随时从数据库提取awr报告.不过awrrpt.sql脚本执行时需要我们提供一些交互信 ...

  8. Linux Unix shell 编程指南学习笔记(第五部分)

    第二十五章 深入讨论 << 当shell 看到 << 的时候,它知道下一个词是一个分界符.该分界符后面的内容都被当做输入,直到shell又看到该分界符(位于单独的一行).比方: ...

  9. Linux/UNIX环境下Oracle数据库多实例开机启动脚本(转)

    操作系统平台:RHEL 5Shell环境:BashOracle:10g2 功能描述:开机时自动切换到oracle用户下,启动oracle的多个实例.并记录数据库的启动情况到自定义的日志文件中. #!/ ...

随机推荐

  1. 《JavaScript基础教程(第8版)》PDF

    简介:JavaScript基础教程(第8版)循序渐进地讲述了JavaScript及相关的CSS.DOM.Ajax.jQuery等技术.书中从JavaScript语言基础开始,分别讨论了图像.框架.浏览 ...

  2. UVA 10673 扩展欧几里得

    题意:给出x 和k,求解p和q使得等式x = p[x / k] + q [ x / k], 两个[x / k]分别为向下取整和向上取整 题解:扩展欧几里得 //meek///#include<b ...

  3. 关于在linux下清屏的几种技巧

    在windows的DOS操作界面里面,清屏的命令是cls,那么在linux 里面的清屏命令是什么呢?下面笔者分享几种在linux下用过的清屏方法. 1.clear命令.这个命令将会刷新屏幕,本质上只是 ...

  4. hdu 1515 Anagrams by Stack

    题解: 第一:两个字符不相等(即栈顶字符与目标字符不相等):这种情况很容易处理,将匹配word的下一个字符入栈,指针向后挪已为继续递归. 第二:两个字符相等(即栈顶字符与目标字符相等):这种情况有两种 ...

  5. C++运算符重载——重载二元运算符

    1.重载二元操作符的方法 二元运算符又称为双目运算符,即需要2个操作数的运算符,例如 + - * / 等. 运算符重载可以分为3种方式:类的非静态成员函数.类的友元函数.普通函数. 例如有 2 个操作 ...

  6. CentOS目录树详细解释

    [sdm_download id=”292″ fancy=”1″] /boot 该目录默认下存放的是Linux的启动文件和内核. initramfs-* 系统启动时的模块供应的主要来源 启动系统所需加 ...

  7. 《c程序设计语言》读书笔记-字符型0-9转为数字0-9

    #include <stdio.h> #define Num 10 int atoi(char s[]); int main() { int c,i = 0; char s[Num]; i ...

  8. WebDriverExtensionsByC#

    测试工具//********************************************************************************************** ...

  9. STL笔记(4)关于erase,remove

    STL笔记(4)关于erase,remove 你要erase的元素很容易识别.它们是从区间的“新逻辑终点”开始持续到区间真的终点的原来区间的元素.要除去那些元素,你要做的所有事情就是用那两个迭代器调用 ...

  10. ViewPager的监听事件失效

    主要是因为在我项目使用了PageIndicator,所以这个时候监听事件要写在PageIndicator上. mIndicator.setOnPageChangeListener(new OnPage ...