如何追踪session中执行的SQL语句

pears_sun2 2004-01-07 04:59:43
我的程序中很多地方使用了数据库. 但有些程序建立了连接没有关闭.
随着未关的连接的积累, 数据库的性能会下降.
程序文件有几千个, 无法一一查那个文件没有关连接.
所以, 我想在未关的连接session中查出这个session都执行了那些sql语句,
怎么查?
...全文
672 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baojianjun 2004-01-09
  • 打赏
  • 举报
回复
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
beckhambobo 2004-01-08
  • 打赏
  • 举报
回复
如果跟踪自己的会话或者是别人的会话
[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:包括变量的详细信息
level 8:包括等待事件
level 12:包括绑定变量与等待事件

pears_sun2 2004-01-07
  • 打赏
  • 举报
回复
能查到所有的历史SQL语句吗?
LGQDUCKY 2004-01-07
  • 打赏
  • 举报
回复
捕捉运行很久的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
bzszp 2004-01-07
  • 打赏
  • 举报
回复
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧