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

    使用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脚本

  robin@SZDB:~/dba_scripts/custom/bin> more ck_inst.sh   
  # +-------------------------------------------------------+
  # +    CHECK INSTANCE STATUS AND SEND MAIL                |
  # +    Author : Robinson                                  |
  # +    Blog   : http://blog.csdn.net/robinson_0612        |
  # +    Desc:                                              |
  # +         variable X_DB use to exclude some instance    | 
  # +-------------------------------------------------------+
  
  #!/bin/bash
  
  # --------------------------------------------
  # Set environment vairable and define variable
  # --------------------------------------------
  
  if [ -f ~/.bash_profile ]; then
      . ~/.bash_profile
  fi
  
  ORATAB=/etc/oratab
  TIMESTAMP=`date +%Y%m%d%H%M`    
  MAILPATH=/users/robin/dba_scripts/sendEmail-v1.56
  LOG_DIR=/users/robin/dba_scripts/custom/log             
  LOG_FILE=${LOG_DIR}/ck_inst_$TIMESTAMP.log 
  DBALIST="robinson.cheng@12306.com;robinson_0612@12306.com"
  X_DB='SYBO2SZ|CNQDII|CNFO'
  RETENTION=1
  
  # ----------------------
  # Check instance status
  # ----------------------
  
  if [ -z "$X_DB" ]; then
      X_DB='DUMMY'
  fi
  {
  echo "`date` " 
  echo "Oracle Database(s) Status on `hostname`" 
  echo "-----------------------------------------" 
  db=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 | grep -v "\#" | grep -v "\*"` 
  pslist=`ps -ef | grep pmon | grep -v grep`
  dblist=`for i in $db; do echo $i; done | grep -vP $X_DB`
  for i in $dblist; do 
      echo "$pslist" | grep "[oa]*_pmon_$i" > /dev/null 2>&1 
      if (( $? )); then 
          echo "Oracle Instance - $i: Down" 
      else 
          echo "Oracle Instance - $i: Up" 
      fi
  done;
  }|tee -a ${LOG_FILE} 2>&1
  
  # ------------------------
  # Send Email
  # ------------------------
  
  cnt=`cat $LOG_FILE | grep Down | wc -l`
  if [ "$cnt" -gt 0 ]; then
      $MAILPATH/sendEmail -f szdb@2gotrade.com -t $DBALIST -u "Instance status on `hostname`" -o message-file=$LOG_FILE 
  fi
  
  # ------------------------------------------------
  # Removing files older than $RETENTION parameter 
  # ------------------------------------------------
  
  find ${LOG_DIR} -name "ck_inst*.*" -mtime +$RETENTION -exec rm {} \;
  
  exit
  
  robin@SZDB:~/dba_scripts/custom/bin> ./ck_inst.sh 
  Fri Feb  1 15:10:41 CST 2013 
  Oracle Database(s) Status on SZDB
  -----------------------------------------
  Oracle Instance - CNBO1: Up
  Oracle Instance - CNBOTST: Down
  Oracle Instance - CNMMBO: Up
  Oracle Instance - MMBOTST: Up
  Oracle Instance - CNMMBOBK: Down
  Oracle Instance - CI8960U: Up
  Oracle Instance - CNBO2: Up
  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、尾部清除监控过程中产生的保留日期之前的日志。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蓝天

MySQL数据导入导出方法与工具mysqlimport

mysqlimport位于mysql/bin目录中,是mysql的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具。有两个参数以及大量的选项可...

2143
来自专栏杨建荣的学习笔记

11g主库归档自动删除的小问题分析 (r8笔记第1天)

最近在无疑中查看一个数据库的日志的时候,发现里面有这么一段内容。 Sat Feb 06 10:07:25 2016 Deleted Oracle manag...

35411
来自专栏依乐祝

.NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能。今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码...

1653
来自专栏杨建荣的学习笔记

使用ash分析ORA-01652问题(r4笔记第36天)

今天在检查生产库的问题的时候,收到开发的邮件,他们在运行一个job的时候报出了ora的错误,想让我们来看一下是什么原因。 ora错误是01652的错误,单纯来看...

2875
来自专栏乐沙弥的世界

SQL server 数据导入导出BCP工具使用详解

    数据的导入导出是数据库管理员常见的工作任务之一,尤其是平面文件的导入导出。BCP 工具则为这些任务提供了强有力的支持,它是基于DB-Library,尤其...

2002
来自专栏数据分析

[SQLServer大对象]——FileTable从文件系统迁移文件

阅读导航 从文件系统中迁移文件到FileTable 批量加载文件到FileTable 如何批量加载文件到FileTable 通过博文[SQLServer大对象]...

3956
来自专栏沃趣科技

Oracle Data Guard Feature 12cR2系列(一)

Data Guard是Oracle推出的一种高可用性数据库方案,从Oracle 9i开始正式更名为Oracle Data Guard。Data Guard在11...

1564
来自专栏陈仁松博客

暴力遍历还没注册的双拼域名

最近突然发现双拼域名越来越少,价格也在不断上涨。想注册一个有趣的双拼域名玩玩,于是动手写了一个暴力查询双拼域名的工具。 思路比较简单,首先找到域名查询的接口,这...

5976
来自专栏我的博客

Sqlite使用说明

安装apt-get install slqite .databases List names and files of attached databases(列...

3594
来自专栏沃趣科技

复制状态与变量记录表 | performance_schema全方位介绍

不知不觉中,performance_schema系列快要接近尾声了,今天将带领大家一起踏上系列第六篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解p...

1873

扫码关注云+社区

领取腾讯云代金券