如何跟踪某个session的SQL

 

第一种方法:

获取当前用户所连接的所有session的sid:select sid from v$session where audsid=userenv('sessionid');

获取当前用户当前终端所连接的session的sid:select * from v$session where sid in(select sid from v$mystat);

首先你要确定跟踪哪个session,比如select sql_address from v$session where sid=505;

然后,select * from v$sqltext where address=<sql_address> order by piece;就可以找出session正在执行的sql

另,也可以通过查v$open_cursor来完成。

第二种方法:

捕捉运行很久的SQL

SELECT username, SID, opname,
       ROUND (sofar * 100 / totalwork, 0) || '%' AS progress, time_remaining,
       sql_text
  FROM v$session_longops, v$sql
 WHERE time_remaining <> 0
   AND sql_address = address
   AND sql_hash_value = hash_value

如果跟踪自己的会话或者是别人的会话    
  [A]跟踪自己的会话很简单    
  Alter   session   set   sql_trace   true|false    
  如果跟踪别人的会话,需要调用一个包    
  exec   dbms_system.set_sql_trace_in_session(sid,serial#,true|false)    
  or    
  exec   dbms_system.set_sql_trace_in_session(sid,serial#,8,’’),这里的8是跟踪级别    
  跟踪的信息在user_dump_dest   目录下可以找到    
  可以通过Tkprof来解析跟踪文件,如    
  Tkprof   原文件   目标文件   sys=n    
   
   
  怎么设置整个数据库 系统跟踪    
  [A]其实文档上的alter   system   set   sql_trace=true是不成功的    
  但是可以通过设置事件来完成这个工作,作用相等    
  alter   system   set   events    
      ‘10046   trace   name   context   forever,level   1’;    
  如果关闭跟踪,可以用如下语句    
  alter   system   set   events    
      ‘10046   trace   name   context   off’;    
  其中的level   1与上面的8都是跟踪级别    
  level   1:跟踪SQL语句,等于sql_trace=true    
  level   4:包括变量的详细信息     sql_text
  level   8:包括等待事件    
  level   12:包括绑定变量与等待事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值