当前位置:  数据库>oracle

Oracle慢SQL监控脚本实现

    来源: 互联网  发布时间:2017-06-27

    本文导语: 线上Oracle准备实现类似MySQL slow query的监控脚本,把查询时间超出定值的SQL定时的发送邮件告警,实现过程记录如下: 主要思路是通过DBA_HIST的几个视图来获取每小时快照中慢SQL的情况,为了不影响线上环境,这里把脚本部署在...

线上Oracle准备实现类似MySQL slow query的监控脚本,把查询时间超出定值的SQL定时的发送邮件告警,实现过程记录如下:

主要思路是通过DBA_HIST的几个视图来获取每小时快照中慢SQL的情况,为了不影响线上环境,这里把脚本部署在了自己的监控端,通过DBLINK定期的抓取线上生产库的数据到监控数据库,并简单的处理后获得csv格式的报表,发送报表至邮箱。

定时脚本 每小时查询一次

00 * * * *  /opt/scripts/oracle/get_slow_query.sh

脚本内容如下

[oracle@59-Mysql-Test ~]$ cat /opt/scripts/oracle/get_slow_query.sh

#!/bin/bash

errlog="/opt/scripts/oracle/sqlerror.log"

sq_data="/opt/scripts/oracle/slow_query_data.xls"

check_file="/opt/scripts/oracle/slowsql_check.log"

send_mail_check="/opt/scripts/oracle/send_mail.chk"

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

export ORACLE_SID=oramon

export PATH=/usr/sbin:$PATH

export PATH=/u01/app/oracle/product/11.2.0/db_1/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

export CLASSPATH=/u01/app/oracle/product/11.2.0/db_1/JRE:/u01/app/oracle/product/11.2.0/db_1/jlib:/u01/app/oracle/product/11.2.0/db_1/rdbms/jlib

 

cd /opt/scripts/oracle/

[ -s ${send_mail_check} ]&& /bin/mail -a ${sq_data} -s "OracleDB find slow query,please check" xxx@xxx.com,xxx@xxx.com

 

[oracle@59-Mysql-Test oracle]$ cat main.sql

set linesize 5000

set term off verify off feedback off pagesize 999

set markup html on entmap ON spool on preformat off

spool slow_query_data.xls

spool off

exit

[oracle@59-Mysql-Test oracle]$ cat get_tables.sql

select sql_id,elapsed_time,cpu_time,iowait_time,gets,reads,rws,clwait_time,execs,elpe,machine,username,dbms_lob.substr(sqt,4000) from DBA_ORA_SLOW_QUERY where elpe > 10 and machine not in ('rac01','rac02');

存储过程pro_get_slow_query内容如下

CREATE OR REPLACE PROCEDURE SQMON.pro_get_slow_query

AS

BEGIN

/**********delete old data on sqltext*************/

delete from

commit;

insert into local_dba_hist_sqltextas select * from dba_hist_sqltext@dg2;

commit;

insert into  select a.*,sysdate from DBA_ORA_SLOW_QUERY;

commit;

delete from

commit;

/*

select * from DBA_ORA_SLOW_QUERY;

select * from DBA_ORA_SLOW_QUERY_HISTORY;

*/

/************insert new date ********************/

insert into  DBA_ORA_SLOW_QUERY

select v_1.sql_id,

      v_1.elapsed_time,

      v_1.cpu_time,

      v_1.iowait_time,

      v_1.gets,

      v_1.reads,

      v_1.rws,

      v_1.clwait_time,

      v_1.execs,

      v_1.elpe,

      v_2.machine,

      v_2.username,

      v_1.sqt

  from (select s.sql_id,

              elapsed_time / 1000000 elapsed_time,

              cpu_time / 1000000 cpu_time,

              iowait_time / 1000000 iowait_time,

              gets,

              reads,

              rws,

              clwait_time / 1000000 clwait_time,

              execs,

              st.sql_text sqt,

              elapsed_time / 1000000 / decode(execs, 0, null, execs) elpe

          from (select *

                  from (select sql_id,

                              sum(executions_delta) execs,

                              sum(buffer_gets_delta) gets,

                              sum(disk_reads_delta) reads,

                              sum(rows_processed_delta) rws,

                              sum(cpu_time_delta) cpu_time,

                              sum(elapsed_time_delta) elapsed_time,

                               sum(clwait_delta) clwait_time,

                              sum(iowait_delta) iowait_time

                          from dba_hist_sqlstat@HUBSDG2

                        where snap_id >=

                              (select max(snap_id) - 1

                                  from dba_hist_snapshot@DG2)

                          and snap_id


    
 
 

您可能感兴趣的文章:

  • linux环境下oracle条件导出数据的shell脚本怎么写
  • Oracle新手教程 手工创建数据库的全部脚本及说明
  • 杀掉oracle在线用户脚本分享
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • linux下oracle的自启动脚本解析
  • 怎么写一个Shell来执行这样的功能,访问Oracle数据库,然后执行一个SQL脚本,生成一个文件。急!
  • oracle使用sql脚本生成csv文件案例学习
  • shell 执行oracle sql脚本的问题
  • Linux下Oracle归档日志自动清理脚本代码(sh)
  • 求教:shell 脚本怎么获取ORACLE存储过程的返回值?
  • Oracle 10g在Solaris 10下的自动运行脚本
  • Oracle 获得以百分号结尾的脚本有三种写法
  • Linux下用SHELL脚本执行带输入输出参数的ORACLE存储过程并得到结果
  • Linux oracle数据库自动备份自动压缩脚本代码
  • 高手帮忙solaris中oracle的启动脚本
  • Oracle 下导入txt的shell脚本以及配置
  • Linux下安装ORACLE 10g前的系统设置脚本
  • Oracle 数据库管理脚本命名规范
  • oracle 服务启动,关闭脚本(windows系统下)
  • 请教:如何在java程序里直接执行Oracle的sql脚本,谢谢先!在线等待,有参考意见即可加分。
  • Zabbix的Oracle监控插件 orabbix
  • Oracle 8x监控sysdba角色用户登陆情况
  • Oracle 10g各个帐号的访问权限、登录路径、监控状态命令查询等等
  • Oracle 创建监控账户 提高工作效率
  • 对Oracle执行计划进行监控
  • oracle监控某表变动触发器例子(监控增,删,改)
  • 在Oracle中监控和跟踪索引使用情况
  • Oracle10g使用sql获得ADDM报告以及利用ADDM监控表的dml情况
  • Linux平台下如何监控Oracle数据库的性能
  • 利用Oracle threshold(度量阀值)监控表空间
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 不想装oracle却还要在redhat8.0下用jdbc连接oracle如何实现?
  • 那位高手知道怎样实现用JSP跟ORACLE连上?
  • oracle定时备份压缩的实现步骤
  • oracle增加表空间大小两种实现方法
  • MySQL实现类似Oracle中的decode()函数的功能
  • 请问在 Linux 下如何用代码实现连接oracle数据库 并 执行 SQL 语句?
  • 老大们,虚拟机上系统os是linux,我想在它安装oracle,怎么实现?
  • 用oracle pl/sql 从A unix机器,去读取B unix机器上的一个文件,怎么实现?
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • 通过Oracle发送Email的实现方法
  • 如何实现将客户机上的word文件,以B/S方式最终存入oracle数据库?
  • oracle列合并的实现方法
  • 用java怎样实现oracle数据库表和excel数据表的转换
  • Oracle中字符串连接的实现方法
  • linux下用什么办法连接oracle数据库并且读取数据呢?(用c++代码实现时)
  • 成功实现应用程序和Oracle客户端一起打包
  • Oracle与SQLServer的实现互连
  • 实现Oracle数据库的逐渐自增
  • 读一个10M的txt文件到Oracle数据库中,用C实现,请问有什么好的方法吗?即不怎么占内存,又不怎么占Cpu!
  • 利用windows任务计划实现oracle的定期备份
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3