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

Linux Shell的相关参考:
        Linux/Unix shell 脚本中调用SQL,RMAN脚本        Linux/Unix shell sql 之间传递变量        Linux/Unix shell 调用 PL/SQL

1、监控Oracle实例shell脚本

  1. robin@SZDB:~/dba_scripts/custom/bin> more ck_inst.sh
  2. # +-------------------------------------------------------+
  3. # +    CHECK INSTANCE STATUS AND SEND MAIL                |
  4. # +    Author : Robinson                                  |
  5. # +    Blog   : http://blog.csdn.net/robinson_0612        |
  6. # +    Desc:                                              |
  7. # +         variable X_DB use to exclude some instance    |
  8. # +-------------------------------------------------------+
  9. #!/bin/bash
  10. # --------------------------------------------
  11. # Set environment vairable and define variable
  12. # --------------------------------------------
  13. if [ -f ~/.bash_profile ]; then
  14. . ~/.bash_profile
  15. fi
  16. ORATAB=/etc/oratab
  17. TIMESTAMP=`date +%Y%m%d%H%M`
  18. MAILPATH=/users/robin/dba_scripts/sendEmail-v1.56
  19. LOG_DIR=/users/robin/dba_scripts/custom/log
  20. LOG_FILE=${LOG_DIR}/ck_inst_$TIMESTAMP.log
  21. DBALIST="robinson.cheng@12306.com;robinson_0612@12306.com"
  22. X_DB='SYBO2SZ|CNQDII|CNFO'
  23. RETENTION=1
  24. # ----------------------
  25. # Check instance status
  26. # ----------------------
  27. if [ -z "$X_DB" ]; then
  28. X_DB='DUMMY'
  29. fi
  30. {
  31. echo "`date` "
  32. echo "Oracle Database(s) Status on `hostname`"
  33. echo "-----------------------------------------"
  34. db=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 | grep -v "\#" | grep -v "\*"`
  35. pslist=`ps -ef | grep pmon | grep -v grep`
  36. dblist=`for i in $db; do echo $i; done | grep -vP $X_DB`
  37. for i in $dblist; do
  38. echo "$pslist" | grep "[oa]*_pmon_$i" > /dev/null 2>&1
  39. if (( $? )); then
  40. echo "Oracle Instance - $i: Down"
  41. else
  42. echo "Oracle Instance - $i: Up"
  43. fi
  44. done;
  45. }|tee -a ${LOG_FILE} 2>&1
  46. # ------------------------
  47. # Send Email
  48. # ------------------------
  49. cnt=`cat $LOG_FILE | grep Down | wc -l`
  50. if [ "$cnt" -gt 0 ]; then
  51. $MAILPATH/sendEmail -f szdb@2gotrade.com -t $DBALIST -u "Instance status on `hostname`" -o message-file=$LOG_FILE
  52. fi
  53. # ------------------------------------------------
  54. # Removing files older than $RETENTION parameter
  55. # ------------------------------------------------
  56. find ${LOG_DIR} -name "ck_inst*.*" -mtime +$RETENTION -exec rm {} \;
  57. exit
  58. robin@SZDB:~/dba_scripts/custom/bin> ./ck_inst.sh
  59. Fri Feb  1 15:10:41 CST 2013
  60. Oracle Database(s) Status on SZDB
  61. -----------------------------------------
  62. Oracle Instance - CNBO1: Up
  63. Oracle Instance - CNBOTST: Down
  64. Oracle Instance - CNMMBO: Up
  65. Oracle Instance - MMBOTST: Up
  66. Oracle Instance - CNMMBOBK: Down
  67. Oracle Instance - CI8960U: Up
  68. Oracle Instance - CNBO2: Up
  69. Feb 01 15:10:41 szdb sendEmail[16024]: Email was sent successfully!

2、补充
  a、上面的脚本根据/etc/oratab中列出的实例进行监控,可以监控多个实例。
  b、变量X_DB用于排除那些不需要监控的实例,如脚本中排出了3个实例。也可以将该变量置空。
  c、如果X_DB的值为空时,我们赋予了DUMMY,确保你的数据库实例名没有使用DUMMY,否则过滤不掉。
  d、监控脚本在监控过程中只要有一个实例宕掉,则发送整个监控报告。
  d、使用了sendEmail邮件发送程序来发送邮件。参阅:不可或缺的 sendEmail  e、尾部清除监控过程中产生的保留日期之前的日志。

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

Linux/Unix shell 监控Oracle实例(monitor instance)的更多相关文章

  1. Linux/Unix shell 监控Oracle监听器(monitor listener)

    使用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 自动发送AWR report(二)

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

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

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

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

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

  6. Linux Unix 环境变量设置实例

    背景 从第一次写Hello World我们便开始接触环境变量.这最基础的系统设置是必须要掌握的,尤其在是Linux/Unix系统中.比如,哪天某个Java进程出现问题,我们想分析一下其线程堆栈,却发现 ...

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

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

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

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

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

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

随机推荐

  1. shell脚本替换文件中字符

    1.将当前目录下包含jack串的文件中,jack字符串替换为tom sed -i "s/jack/tom/g" `grep "jack" -rl ./` 2.将 ...

  2. http://my.oschina.net/u/719192/blog/506062?p={{page}}

    http://my.oschina.net/u/719192/blog/506062?p={{page}}

  3. 字符模型和Windows等价程序

    二者很明显的区别,dos和gui 字符模式模型 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]){    print ...

  4. iOS开发--CoreGraphics简单绘图

    一.导入coreGraphics.framework 二.绘制图形 1.绘制矩形 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // 绘制矩形 - (v ...

  5. JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-007UserTypes的用法(@org.hibernate.annotations.Type、@org.hibernate.annotations.TypeDefs、CompositeUserType、DynamicParameterizedType、、、)

    一.结构 二.Hibernate支持的UserTypes接口  UserType —You can transform values by interacting with the plain JD ...

  6. Android 代码检查工具SonarQube

    http://blog.csdn.net/rain_butterfly/article/details/42170601 代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一 ...

  7. Android从零单排之自动跟新

    自动更新原理 当我们发布我们的应用程序的时候,肯定会想到后续版本的更新,那么该怎么对我们的程序进行更新呢? 更新APK的原理实际上就是比较程序中的AndroidManifest.xml中的versio ...

  8. MyEclipse配置Tomcat 并编写第一个JSP程序

    安装myeclipse之后配置tomcat服务器,在window里选择servers 选择tomcat的文件夹路径(我的是从别人那里考过来的文件夹) 选中上enable即可 出现了这个界面 在这里可以 ...

  9. python 调用 C++ code

    本文以实例code讲解python 调用 C++的方法. 1. 如果没有参数传递从python传递至C++,python调用C++的最简单方法是将函数声明为C可用函数,然后作为C code被pytho ...

  10. (step4.2.5)hdu 1495(非常可乐——BFS)

    题目大意:输入三个整数 a,b,c.   a : 可乐瓶的容量,b: 甲杯的容量 ,c: 乙杯的容量.问能否用这三个被来实现饮料的平分???如果可以输出倒饮料的次数, 否则输出NO 解题思路:BFS ...