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 ...
随机推荐
- python 变量 if
#########################总结###################### 1. 初识python python是一门弱类型的解释型高级编程语言 解释器: CPython 官方 ...
- Hadoop记录-Hadoop集群重要监控指标
通用监控指标 对于每个RPC服务应该监控 RpcProcessingTimeAvgTime(PRC处理的平均时间) 通常hdfs在异常任务突发大量访问时,这个参数会突然变得很大,导致其他用户访问hdf ...
- c++中sizeof的理解
1. 例题 #include <iostream> class A {}; class B { char m_data; }; class C { ]; }; class D { char ...
- elementUi模态框使用baiduMap错误记录
报错如下,可能是因为目标div还没生成 elementUi文档说明 在dom生成后再调用,正常 buildMap(){ let map = new BMap.Map("allmap" ...
- MySQL 数据库应用程序编程
普通用户使用客户端应用程序(Client Application)和服务器程序(Server Application)通信以取得服务, 而服务器程序通常要和数据库服务器通信以取得数据存取服务, 这时就 ...
- IDAPython教程(三)
在过去两个部分中,我们已经讨论了使用IDAPython让逆向工程更容易一些.这一部分我们来看一下条件断点. 当在IDA中调试时,分析者经常会遇到希望可以在一个特殊的地址中断下来的情况,但这只有在一些特 ...
- 【python小练】0011题
第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights. #word.tx ...
- tensorflow---alexnet training (tflearn)
# 输入数据 import input_data mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) imp ...
- Rsync + inotify 实现文件实时同步
Rsync 用来实现触发式的文件同步. Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等 ...
- Food Log with Speech Recognition and NLP
1. 分词 word segmentation 国内有jieba 分词 2. Named Entity Recognition 训练自己的Model How can I train my own NE ...