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 ...
随机推荐
- java io系列07之 FileInputStream和FileOutputStream
本章介绍FileInputStream 和 FileOutputStream 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_07.html File ...
- Linux记录-salt-minion安装
python -m SimpleHTTPServer 8888#!/bin/bash sed -i 's/^#//g' /etc/yum.repos.d/centos7.4.repo sed -i ' ...
- android 与html交互java调js与js调java操作
1.首先在项目下建一个assets目录(右击app->New->Folder->Assets Flolder),直接放在项目根目录下和res目录同级别(把所html,js,图片,cs ...
- Oracle数据库用户锁定原因以及处理方式(ORA-28000)
现场在实施过程中,基于安全考虑(用户名和密码之前暴露给其他公司了),需要对用户密码进行修改. 修改过程很简单(alter user [username] identified by [password ...
- 介绍3款Markdown编辑器
为什么写此篇 自从CSDN的博客有了Markdown后,慢慢的了解并学会了用Markdown语法写博客.但CSDN博客是在浏览器中使用,于是一直寻找离线的Markdown编辑器. 网上先是找到了M ...
- DirectX11 With Windows SDK--03 索引缓冲区、常量缓冲区
前言 一个立方体有8个顶点,然而绘制一个立方体需要画12个三角形,如果按照前面的方法绘制的话,则需要提供36个顶点,而且这里面的顶点数据会重复4次甚至5次.这样的绘制方法会占用大量的内存空间. 接下来 ...
- Spring Boot 起步
……………………………………………………………………………………………………………… [应用配置]application.yml [port][context-path][datasource][jp ...
- Intelij IDEA 内置 sql gui
IDEA 内置 自带 SQL GUI 最大意义 会自动识别 domain 对象与数据表的关系,也可以通过 Database 的数据表直接生成 domain 对象等等. 第一步 打开数据库视图 Vie ...
- Coursera Deep Learning 2 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization - week2, Assignment(Optimization Methods)
声明:所有内容来自coursera,作为个人学习笔记记录在这里. 请不要ctrl+c/ctrl+v作业. Optimization Methods Until now, you've always u ...
- CF 1060E. Sergey and Subway
题目链接 题意:给你一棵树,然后连接两个有公共邻居的点,问你连完后,任意两点的距离之和. 一开始看这种题,还不怎么会做,借鉴了这位大佬的博客,get到了新技能,当我们求树上任意俩点的距离之时,可以转化 ...