在具有连接池或共享服务器的多层环境中,一个会话可以跨越多个进程,甚至跨越多个实例。DBMS_MONITOR是在Oracle 10g中引入的内置的程序包,通过该程序包可以跟踪从客户机到中间层、再到后端数据库的任何用户的会话,从而可以较为容易地标识创建大量工作量的特定用户。DBMS_MONITOR取代了传统的跟踪工具,例如DBMS_ SUPPORT。需要具有DBA角色才可以使用DBMS_MONITOR。

端对端的应用程序跟踪可以基于如下:

会话:基于会话ID(SID)和序列号。

客户端标识符:允许跨越多个会话设置跟踪。基于登录ID指定终端用户。使用DBMS_SESSION.SET_IDENTIFIER过程设置该值。

实例:基于实例名指定给定的实例。

服务名:指定一组相关的应用程序。使用DBMS_SERVICE.CREATE_SERVICE过程设置该值。

模块名:开发人员在其应用程序代码中使用DBMS_ APPLICATION _INFO.SET _MODULE过程设置该值。使用该名称表示执行的模块或代码。

操作名:开发人员在其应用程序代码中使用DBMS_ APPLICATION _INFO.SET _ACTION过程设置该值。使用该名称表示模块执行的操作。

最后3个跟踪选项在层次上关联;不可以在没有指定模块名和服务名的情况下就指定操作名,但是可以只指定服务名,或者只指定服务名和模块名。

1. 基于会话ID和序列号设置跟踪

为了基于会话ID和序列号设置跟踪,首先确定需要跟踪的会话的SID和序列号:

Select     sid,serial#,username
from       v$session;
SID       SERIAL# USERNAME
----------  ---------- ------------------------------
156          3588  SCOTT
142          1054 SYS

为了启用跟踪,可执行如下语句:

SQL> exec dbms_monitor.session_trace_enable(156,3588,TRUE,FALSE);

第三个参数用于等待(默认为TRUE),第四个参数用于绑定变量(默认为FALSE)。

为了关闭跟踪,可执行如下语句:

SQL> exec dbms_monitor.session_trace_disable(156,3588);

为了跟踪当前的会话,可设置SID和SERIAL#为空:

SQL> exec dbms_monitor.session_trace_enable(null,null);

2. 基于客户端标识符设置跟踪

为了基于表示用户的客户端标识符设置跟踪,可运行如下语句:

SQL> exec dbms_session.set_identifier('bryan id');

为了验证客户端标识符,可执行如下语句:

select     sid,serial#,username, client_identifier
from        v$session
where      client_identifier is not null;
SID     SERIAL#  USERNAME                      CLIENT_IDENTIFIER
---------- ----------  ------------------------   ------------------
156         3588   SCOTT                         bryan id

现在就可以为这个客户端标识符设置跟踪:

SQL> exec dbms_monitor.client_id_trace_enable('bryan id',true,false);

第二个参数用于等待(默认为TRUE),第三个参数用于绑定变量(默认为FALSE)。

为了禁用这个客户端标识符跟踪,可执行如下语句:

SQL> exec dbms_monitor.client_id_trace_disable('bryan id');

3. 设置服务名/模块名/操作名的跟踪

为了使用操作名,必须有对应的模块名和服务名。为了使用模块名,必须有服务名。对全局范围内针对某个数据库的服务名、模块名和操作名的给定组合启用跟踪,除非为过程指定了实例名。服务名由用于连接到服务的连接字符串确定。

Oracle数据库表示为作为服务的客户端;也就是说,数据库代表客户端执行相应的操作。数据库可以有一个或多个与其关联的服务。例如,可以有一个数据库,该数据库带有两个用于Web客户端的不同服务:用于购买书籍的客户端的book.us.acme.com,以及用于购买软件的客户端的soft.us.acme.com。在该示例中,数据库名是sales.acme.com,因此服务名并不基于数据库名。服务名由初始参数文件中的SERVICE_NAMES参数指定。服务名默认为由数据库名(DB_NAME参数)和域名(DB_DOMAIN参数)组成的全局数据库名。

为了启用服务名的跟踪,可执行如下语句:

SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name=>'ebk2');

这将跟踪服务名为ebk2的所有会话。

为了启用服务名、模块名和操作名组合的跟踪,可执行如下语句:

SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name=>'ebk2', -
module_name=>'salary_update', action_name=>'insert_item');

为了禁用前面代码中的跟踪,可使用过程SERV_MOD_ACT_TRACE_DISABLE,如下说是:

SQL> exec dbms_monitor.serv_mod_act_trace_disable(service_name=>'ebk2', -
module_name=>'salary_update', action_name=>'insert_item');

为了跟踪整个数据库或实例,可执行如下语句(不推荐这样操作):

execute DBMS_MONITOR.DATABASE_TRACE_ENABLE(waits => TRUE, binds => FALSE, -
instance_name => 'ebk1');

技巧:

使用DBMS_MONITOR时,请确保在完成操作时禁用跟踪;否则,将会跟踪满足指定条件的每个会话。

4. 启用跟踪视图

查看DBA_ENABLED_TRACES和DBA_ENABLED_AGGREGATIONS视图,可以看到启用的跟踪和收集的统计信息。可以使用这些视图确保已经禁用的所有跟踪选项。

DBMS_MONITOR程序开启10046事件的更多相关文章

  1. SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

    1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session ...

  2. 10046事件跟踪会话sql

    背景知识: 10046 事件按照收集信息内容,可以分成4个级别: Level 1: 等同于SQL_TRACE 的功能 Level 4: 在Level 1的基础上增加收集绑定变量的信息 Level 8: ...

  3. Oracle 课程八之性能优化之10046事件

    Oracle 的事件很多. 具体参考blog: Oracle 跟踪事件 set event 转摘:http://blog.csdn.net/tianlesoftware/archive/2009/12 ...

  4. Oracle SQL Trace 和 10046 事件

    http://blog.csdn.net/tianlesoftware/article/details/5857023 一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRAC ...

  5. C# WinForm 应用程序 开启Console窗口

    /********************************************************************************* * C# WinForm 应用程序 ...

  6. Oracle执行语句跟踪(2)——使用10046事件实现语句追踪

    接上篇博文Oracle执行语句跟踪(1)--使用sql trace实现语句追踪,一旦我们通过会话追踪获取到超时事物的执行语句,就可以使用10046事件对语句进行追踪. 启用10046事件追踪的方式 S ...

  7. 微信小程序开发 [03] 事件、数据绑定和传递

    1.事件绑定 在微信小程序中,事件的绑定依附于组件,当事件触发时,就会执行事件对应的处理函数. 我们回到前几章中的例子,将index页面调整为首页(app.json中调整pages数组元素的顺序),此 ...

  8. 10046事件sql_trace跟踪

    查看 sql 执行计划的方法有许多种, 10046 事件就是其中的一种. 与其他查看 sql 执行计划不同, 当我们遇到比较复杂的 sql 语句, 我们可以通过 10046 跟踪 sql 得到执行计划 ...

  9. 深入理解Oracle调试事件:10046事件详解

    10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQL_TRACE"       有效的追踪级别:              ① 0级:SQL_TRACE=FASL ...

随机推荐

  1. @override 报错问题

    Java的Eclipse工程换一台电脑后编译总是@override报错,把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多. 这是jdk的问题,@Ove ...

  2. Centos + HHVM 生产环境安装!

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  3. 01 Servlet & Jsp 技术概述

    Servlet 介绍 servlet 是运行在web服务器或应用服务器上的java程序, 它是一个中间层, 负责连接来自web浏览器或其他http客户端的请求和HTTP服务器上的数据库或应用程序. 为 ...

  4. python笔记- 发送邮件

    依赖: Python代码实现发送邮件,使用的模块是smtplib.MIMEText,实现代码之前需要导入包: import smtplib from email.mime.text import MI ...

  5. K-NN算法 学习总结

    1. K-NN算法简介 K-NN算法 ( K Nearest Neighbor, K近邻算法 ), 是机器学习中的一个经典算法, 比较简单且容易理解. K-NN算法通过计算新数据与训练数据特征值之间的 ...

  6. LTP4J的使用BUG及解决方案

    子墨子曾经曰过,LTP是个好模型! car老师oneplus还有bhan开发的LTP4J是个很好的项目,使用起来也非常方便,下面贴几个常见的错误使用引起的bug的log分析 1.现象描述:程序中断,生 ...

  7. SmartUI2.0后续声明

    感谢很多朋友关注,因为今年一直在另外一个公司做顾问,网络环境管制相当严格,所以一直没有更新博客. 同时也很抱歉,SmartUI 2.0一直都没有下文.在次声明一下,SmartUI一直都在做,只不过Sm ...

  8. db2 sequence

    我的上两个专栏中已经介绍到了与版本 8 功能相关的主题.我们可能需要在今天设计的数据库和应用程序中考虑这些功能.我们已经谈论了新的数据分区的辅助索引和附加的索引修改.在上一期中,我们了解了 DSSIZ ...

  9. 动画间隔AnimationInterval 场景切换、图层叠加

    从这一个月的学习进度上来看算比较慢的了,从开始学习C++到初试cocos,这也是我做过的比较大的决定,从工作中里挤出时间来玩玩自己喜欢的游戏开发也是一件非常幸福的事情,虽然现在对cocos的了解还只是 ...

  10. hdu 2074 叠筐 好有意思的绘图题

    叠筐 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...