如何跟踪某个session的SQL?


1 oracle自带的sql trace程序可以跟踪本地session

    sys: alter system set sql_trace = true;对所有会话跟踪

    schema: alter session set sql_trace = true; 对某个session 会话跟踪sql语句

     用tkprof 来格式化跟踪文件输出

    tkprof 输出内容包括 1 sql 语句 2统计信息 3explain table 执行计划

 

2 基于DBMS_MONITOR包来跟踪会话,这种情况一般是

通过该程序包可以跟踪从客户机到中间层、再到后端数据库的任何用户会话,从而可以较为容易的标识创建大量工作量的特定用户。会话:基于会话ID和序列号 DBMS_MONITOR.session_trace_enable(sid,serial#,true);                         DBMS_MONITOR.session_trace_enable(sid,serial#,false);客户端标识符:允许跨越多个会话设置跟踪,基于登录ID指定终端用户。              客户端设置的参数:DBMS_SESSION.SET_IDENTIFIER过程设置该值               运行语句:dbms_monitor.client_id_trace_enable('identifier',true,false);                       dbms_monitor.client_id_trace_disable('identifier');实例:基于实例名指定给定的实例               dbms_monitor.database_trace_enable(instance_name=>'orcl');服务名:指定一组相关的应用程序,使用DBMS_SERVICE.CREATE_SERVICE过程设置该值,dbms_monitor.serv_mod_act_trace_enable(service_name=>'orcl1',module_name=>'salary_update',action_name=>'insert_item');dbms_monitor.serv_mod_act_trace_disable(service_name=>'orcl1',module_name=>'salary_update',action_name=>'insert_item');模块名:开发人员在其应用程序代码中使用DBMS_APPLICATION_INFO.SET_MODULE程设置该值 操作名:开发人员在其应用程序中使用DBMS_APPLICATION_INFO.SET_ACTION过程设置该值  trcsess提取跟踪文件,可以基于会话ID或者模块名称,具体参考trcsess帮助usage

 这个很常用

3  DBMS_system包也可以跟踪系统中其他session的sql执行语句

 

  dbms_system.set_sql_trace_in_session(sid,serial#,true);

  dbms_system.set_sql_trace(true)跟踪本地session

 

4 使用10046事件来实现

运用10046进程sql跟踪
全局或者session范围
level 1
level 4 : 1+bind variable
level 8 : 1+wait events
level 12 : 1 +4+8
tkprof 的时候 4,8,12的信息被忽略
全局设定,修改initial文件
event='10046 trace name context forever,level12'
alter system set events
session设定
alter session set events='10046 trace name context forever,level 8';
alter session set events='10046 trace name context off';

 

以上4中session跟踪方法,通过dbms_monitor,和dbms_system可以用来跟踪其他指定session的sql,其他两个方法都是本地

session或者system级别的跟踪


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号