关于oracle监控和oracle监控软件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于12.Oracle杂记——Oracle等待事件性能监控脚本、13.Oracle杂记——Oracle
关于oracle 监控和oracle监控软件的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于12.Oracle杂记——Oracle等待事件性能监控脚本、13.Oracle杂记——Oracle错误故障诊断监控脚本、14.Oracle杂记——Oracle SQL监控脚本、15.Oracle杂记——Oracle诊断磁盘IO监控脚本等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- oracle 监控(oracle监控软件)
- 12.Oracle杂记——Oracle等待事件性能监控脚本
- 13.Oracle杂记——Oracle错误故障诊断监控脚本
- 14.Oracle杂记——Oracle SQL监控脚本
- 15.Oracle杂记——Oracle诊断磁盘IO监控脚本
oracle 监控(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'', '''')
12.Oracle杂记——Oracle等待事件性能监控脚本
12.Oracle杂记——Oracle等待事件性能监控脚本
在第10篇中,列了一个执行脚本但是感觉还是太粗,缺少针对性。对此又进行了一些优化和雕琢。雕琢算不上,只是进行了揣摩。
原型脚本集成的命令太多太散,不能精确分析问题,所以进行了分治。
脚本名字从原先的select_dbinfo.exe改为dbwaiteventmon.exe
更加形象,当然其中和wait无关的监控后续也会重新进行整理。
考虑到数值动态变化,会话与系统统计数据的差异,各类相关信息区别和联系;蛤蟆初步规划如下,当然此处只是个规划,后续可能会改变。如有改变后续再加以说明,很多在可以图形化OEM点击得到,而且非常直观,此处实现用于学习目的和给文本爱好者的朋友。
等待事件监控:dbwaiteventmon.exe
用于错误故障诊断监控:dberrfind.exe
诊断磁盘IO类:dbiomon.exe
诊断内存命中类:dbhitratiomon.exe
诊断表索引类:dbtableindexmon.exe
诊断表空间类:dbtbspacetmon.exe
诊断sql类:dbsqlmon.exe
诊断进程类:dbprocessmon.exe
诊断会话类:dbsessionmon.exe
报告类:dbreport.exe
此篇主要是实现等待事件动态监控:dbwaiteventmon.exe
据说等待事件从ORACLE7.0.12开始的,对此不做任何评论,这种历史错了又何妨呢?
在12C 中共有等待事件:1650种,记住每个等待事件的可能性几乎是0. 如果能全记住,蛤蟆建议去参加最强大脑,但是生活中没记住可以查的,只要知道哪里可以查找即可。
主要分为IDLE和NON-IDLE的,我们关系NON-IDLE的等待。
当前实现的功能如下:
$ sh dbwaiteventmon.sh
Invalid Arguments!
pls use like this : ./dbwaiteventmon.exe [NUMBER ]
the NUMBER can be from 1 to 100
[1] show the wait event's parameters meaning
[2] show the specified SESSION's current all wait,you should specify the SESSIONID
[3] show the specified SESSION's history TOP 10 wait,you should specify theSESSION ID
[4] show ALL SESSION's current wait
[5] show SYstem's TOP 10 wait event (the statistical information begin withinstance started)
[6] show SYstem's latch wait,gets,misses,sleeps,need latch name input
[7] get the last Minuts's wait event,you can define how minutes
[8] get the waitevent which waited more than ? seconds,you can control thesecond number
[9] get database wait time ratio
共9个功能。
分别是:
1 显示等待事件的参数含义
2 显示指定会话的当前所有等待,需要输入会话ID
3 显示指定会话的TOP 10历史等待,需要输入会话ID
4显示所有会话的当前等待
5 显示系统TOP 10等待事件
6 显示SYstem LATCH的WAITS,GETS,MISSES,SLEEPS,需要输入LATCH名字
7 获取最后几分钟等待事件,可以定义多少分钟
8 获取 超过多少秒的等待事件,可以输入多少秒
9 获取数据库等待事件占总体的比例,这个颗粒度比较大。
后续蛤蟆会不断更新,如果有更新会直接传到CSDN上。
下载地址:http://download.csdn.net/detail/notbaron/9447082
后续几篇的小工具也已经一并打包到里面,大家可以直接下载尝试一下。
13.Oracle杂记——Oracle错误故障诊断监控脚本
13.Oracle杂记——Oracle错误故障诊断监控脚本
错误故障诊断的脚本,还没实现多少,此处先放上来,后续继续完善会。
当前实现的功能如下:
$ sh dberrfind.sh
Invalid Arguments!
pls use like this : ./dberrfindmon.exe [NUMBER ]
the NUMBER can be from 1 to 100
[1] get hidden parameters
只是获取隐藏参数。
程序名字如下:dberrfind.exe
下载地址: http://download.csdn.net/detail/notbaron/9447082
14.Oracle杂记——Oracle SQL监控脚本
14.Oracle杂记——Oracle sql监控脚本
根据第上一篇描述的,需要dbsqlmon.exe脚本来监控sql语句。
长时间运行的sql(超过6秒)可以通过监控V$SESSION_LONGOPS来观察。(包括很多备份、恢复函数,静态统计收集,查询执行等)
而监控数据被记录在V$sql_MONITOR视图中。V$sql_MONITOR收集的信息每秒刷新一次。当sql执行完毕后 ,至少会保留一分钟。
当前实现的功能如下:
$ sh dbsqlmon.sh
Invalid Arguments!
pls use like this : ./dbsqlmon.exe [ NUMBER]
the NUMBER can be from 1 to 100
[1] show the instance's sql monitor status
[2] report sql monitor
[3] tuning sql recommendations with exactly sql_ID
[4] get the session's execuing sql TEXT,need the SESSION_ID
[5] get the sql's explain,need the "sqlTEXT"
[6] get the sql's explain which cause session to wait. but you need input thewaitevent name
[7] get the last Mins's busiest sql,you can define how minuts
[8] get sid,sqltext,sql's waitevent of the executing sql
现在主要8个功能
1 显示实例sql监控状态
2 获取sql 监控 报告
3 获取sql ID 的调优建议
4 获取会话的当前正在执行的sql 文本
5 获取sql执行计划,需要输入sql文本(相关即可)
6 导致会话具体等待的sql执行计划,需要输入等待事件名字
7 获取最后几分钟最繁忙的sql
8 获取当前正在执行sql的SID,sqlTEXT,等待事件
程序名字如下:dbsqlmon.exe
下载地址: http://download.csdn.net/detail/notbaron/9447082
15.Oracle杂记——Oracle诊断磁盘IO监控脚本
15.Oracle杂记——Oracle诊断磁盘IO监控脚本
继上面的监控脚本,这次是IO监控脚本
主要是系统IO相关类
执行功能如下
$ sh dbiomon.sh
Invalid Arguments!
pls use like this : ./dbiomon.exe [ NUMBER]
the NUMBER can be from 1 to 100
[1] show the db's file io statistic
[2] show the segment io statistic
[3] show the os's file system io statistic
主要功能如下:
1 显示数据库文件的IO 统计信息
2 显示段 IO统计信息
3 显示操作系统 文件系统的IO 统计信息
程序名字如下:dbiomon.exe
下载地址: http://download.csdn.net/detail/notbaron/9447082
关于oracle 监控和oracle监控软件的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于12.Oracle杂记——Oracle等待事件性能监控脚本、13.Oracle杂记——Oracle错误故障诊断监控脚本、14.Oracle杂记——Oracle SQL监控脚本、15.Oracle杂记——Oracle诊断磁盘IO监控脚本等相关内容,可以在本站寻找。
本文标签: