oracle监控
python代码
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- import subprocess
- import sys
- import re
- def run_cmd(cmd, cwd=None, runas=None):
- if not sys.platform.startswith('win') and runas and runas != 'root':
- cmd = 'su - {} -c "{}"'.format(runas, cmd)
- proc = subprocess.Popen(cmd,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- shell=True,
- cwd=cwd)
- return proc
- def get_os_oracle_user():
- cmd = ''' ps -ef | grep ora_ | grep -v grep | awk '{ print $1 }' | uniq '''
- code, res = run_cmd(cmd)
- if code == 0:
- os_oracle_user = res
- return os_oracle_user
- else:
- print "获取运行database的操作系统用户失败...", res
- sys.exit(1)
- def get_grid_user():
- cmd = '''ps -ef | grep asm_pmon | grep -v grep |uniq'''
- return_code, result = run_cmd(cmd)
- if return_code == 0 and result:
- os_oracle_user = result.split('\n')[0].split()[0].strip()
- return os_oracle_user
- else:
- print "获取运行database的操作系统用户失败...", result
- sys.exit(1)
- class Oracle_init():
- """所有监控oracle的基类"""
- def __init__(self, user='monitoruser', password='123456'):
- try:
- if user == 'sysdba':
- self.user = '/ as sysdba'
- elif user and password:
- self.user = '{0}/{1}'.format(user, password)
- else:
- self.user = None
- self.os_oracle_user=get_os_oracle_user()
- except Exception as err:
- print err
- sys.exit(1)
- def run_cmd(self,sid,cmd):
- cmd = r'''su - {} -c "export ORACLE_SID={}
- sqlplus -S /nolog <<EOF
- conn /as sysdba;
- {}
- exit;
- EOF"'''.format(self.os_oracle_user, sid,cmd)
- code, res = run_cmd(cmd)
- error=self.check_error(res)
- if error:
- print error
- sys.exit(1)
- else:
- return res
- def check_error(self,res):
- if re.search(r'ORA-01017', res):
- error = '账号或密码错误'
- elif re.search(r'ORA-01034', res):
- error = '数据库不可用'
- elif re.search('ORA-\d+:[\s\S]*', res):
- error = re.search('ORA-\d+:[\s\S]*', res).group()
- else:
- error = None
- return error
- # 获取所有实例名
- def get_sids():
- sids = ''
- cmd = "ps -ef|grep -v grep |grep ora_pmon|awk '{print $NF}'|sed 's/ora\_pmon\_//'|uniq"
- code, res = run_cmd(cmd)
- if not code and res:
- sids = res.replace('\n', ' ')
- return sids
- ########判断ohasd状态##############
- def get_oracleOhasdStatus():
- try:
- cmd = "ps -ef | grep ohasd.bin|grep -v grep"
- code,res=run_cmd(cmd)
- if code:
- return False
- else:
- return True
- except Exception as err:
- sys.stderr.write(err.__str__() + '\n')
- return False
- ################监听日志大小##############
- def get_oracle_listenerLog(sid):
- try:
- global is_cluster
- if is_cluster:
- user=get_grid_user()
- else:
- user= get_os_oracle_user()
- cmd = 'su - {} -c "export ORACLE_SID={};' \
- 'du -sm $ORACLE_BASE/diag/tnslsnr/`hostname`/listener/trace/listener.log"'.format(user,sid)
- code,res=run_cmd(sid, cmd)
- if not res:
- print '未获得数据'
- sys.exit(1)
- else:
- return res.split()[0]
- except Exception as err:
- sys.stderr.write(err.__str__() + '\n')
- return -1
- ################监听trace文件# ##############
- def get_oracleTrace(sid):
- try:
- global is_cluster
- if is_cluster:
- user = get_grid_user()
- cmd = 'su - {} -c "export ORACLE_SID={};cat $ORACLE_BASE/diag/asm/+asm/$ORACLE_SID/trace/alert_+ASM1.log |egrep \'ORA-|ERROR\'"'.format(
- user, sid)
- else:
- user = get_os_oracle_user()
- cmd='su - {} -c "export ORACLE_SID={};cat $ORACLE_BASE/diag/rdbms/$DB_UNIQUENAME/$ORACLE_SID/trace |egrep \'ORA-|ERROR\'"'.format(
- user, sid)
- code, res = run_cmd(sid, cmd)
- if not res:
- print '未获得数据'
- sys.exit(1)
- else:
- return res.split()[0]
- except Exception as err:
- sys.stderr.write(err.__str__() + '\n')
- return -1
- if __name__=='__main__':
- output = "metric=%s|value=%d|type=%s|tags=%s"
- print output % ("system.file.number", get_oracleOhasdStatus(), 'gauge', '')
- obj = Oracle_init(user='monitoruser', password='123456')
- sql_cmd = "select value from v\\\$parameter where name='cluster_database';"
- sids=get_sids()
- res=obj.run_cmd(sids[0],sql_cmd)
- res=res.split('\n')
- length=len(res)
- is_cluster=None
- for i in range(-1,-1-length,-1):
- if not i :
- continue
- if i.strip()=='False':
- is_cluster=False
- break
- if i.strip()=='True':
- is_cluster=True
- break
- if is_cluster is None:
- print '无法判断是否是集群'
- sys.exit(1)
- for sid in sids:
- print output % ("system.file.number", get_oracle_listenerLog(sid), 'gauge', '')
- print output % ("system.file.number", get_oracleTrace(sid), 'gauge', '')
oracle监控的更多相关文章
- oracle 监控执行的sql语句
oracle 监控执行的sql语句 select * from v$sqlarea a where module='PL/SQL Developer' order by a.FIRST_LOAD_TI ...
- oracle监控参数
Sar –u 检查CPU的繁忙程度列说明Usr用户模式下cpu运行所占的百分比Sys系统模式下cpu运行所占的百分比Wio因为有进程等待块I/O而使cpu处于闲置状态所占百分比IdleCpu为闲置状态 ...
- oracle监控脚本
简单命令 1.显示服务器上的可用实例:ps -ef | grep smon2.显示服务器上的可用监听器:ps -ef | grep -i listener | grep -v grep3.查看Orac ...
- Oracle监控代理安装ITM(IBM Tivoli Monitoring)
1 监控代理安装 2 1.1 安装 2 1.1.1 解压安装包 2 1.1.2 安装 2 1.2 配置 5 1.2.1 给Agent授权 5 1.2.2 配置Oracle Agent 10 目录 1 ...
- zabbix oracle监控插件orabbix部署安装
1,下载orabbix插件包(插件包同时满足在大部分POSIX-linux及unix和大部分版本的windows下运行,玩转类似但不等同于Tomcat) wget http://www.smartma ...
- Oracle 监控索引使用
Oracle提供一个监控索引的方法,来确定索引是否被使用.如果索引没有被使用,就可以删除它们以减少不必要的语句的开销.因为表上的大量不必要的索引可能会降低DML语句的性能,给数据库性能产生压力.所以生 ...
- oracle监控脚本【转】
1. 监控事例的等待 select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_Time,0,1,0)) ...
- Oracle监控的关键指标
1.监控事例的等待 select event, , , )) "Prev", , , )) "Curr", count(*) "Tot" f ...
- 转 oracle 监控执行计划突然变化
########sample 执行计划突然变化 问题: 接受到一条信息,执行计划突然变化了. SELECT /*+ db120190621 no_expand */ INTERNAL_KEY FROM ...
随机推荐
- layui(二)——layer组件常见用法总结
layer是layui的代表作,功能十分强大,为方便以后快速配置这里对其常见用法做了简单总结 一.常用调用方式 //1.普通消息:alert(content,[options],[yesCallBac ...
- centos 6.5 安装jdk1.8
1.源码包准备: 首先到官网下载jdk-8u66-linux-x64.tar.gz, http://www.oracle.com/technetwork/java/javase/downloads/j ...
- SpringMVC的概念和图解
1.概念 Spring MVC起步:慕课网视频 SpringMVC架构浅析:参考 Spring详解(一)------概述 Spring架构简单描述 2.图片
- JDK源码之ArrayList
序言 ArrayList底层通过数组实现. ArrayList即动态数组,实现了动态的添加和减少元素 需要注意的是,容量拓展,是创建一个新的数组,然后将旧数组上的数组copy到新数组,这是一个很大的消 ...
- Image转Base64
今天和一个朋友联调图片转Base64时发现一个问题 public static string ImageToBase64(Image img) { BinaryFormatter binFormatt ...
- Mono.Cecil
Mono Cecil十分强大,强大到可以静态注入程序集(注入后生成新的程序集)和动态注入程序集(注入后不改变目标程序集,只在运行时改变程序集行为),它甚至可以用来调试PDB MDB调试符号格式文件. ...
- 如何利用iconfont图标代替小图片
1.首先 你要有一个阿里巴巴矢量图这个网站的账号:http://www.iconfont.cn/ 在这里注册哦~ 2.蓝后 可以在首页搜索你想要的图标,比如 我想放一个管理员的图标在页面上: 就要点击 ...
- axis2客户端
package com.yq.test; /** * Created by yangqing on 2016/12/6. */ import java.util.Date; import java.u ...
- PHP实现权限管理功能
权限管理系统,它主要是为了给不同的用户设定不同的权限,从而实现不同权限的用户登录之后使用的功能不一样. 首先先看下数据库 总共有5张表,users,roles和roleswork 3张表与另外2张表形 ...
- EF 复杂语句的使用
//EF多重排序 context.Serials .Where(s => ("," + s.VideoGenreIds + ",").Contains(& ...