ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 找出长时间滞留session执行的最后一条sql语句的方法

找出长时间滞留session执行的最后一条sql语句的方法

原创 Linux操作系统 作者:tigersun 时间:2007-11-02 11:49:15 0 删除 编辑
前几天发帖,说我们数据库中有很多session保持几天的不释放,有可能是应用程序中的部分connect未关闭所致,应用那边不愿意彻底排查应用程序,所以希望从数据库这边入手,找出这些session所执行过的最后一条sql语句,以便在程序中定位未关闭connect。
    考虑过使用sql_trace,logmnr,审计等方案,都觉得不太合适,今天仔细观察了一下v$session这个视图,发现有PREV_HASH_VALUE和PREV_ADDRESS两列用来鉴别被session执行的上一条语句,受到了启发,既然我们session的问题就是connect未关闭所致,那么这些遗留session所执行的上一条sql语句,也就是它的最后一条sql语句。
    通过以下方法:
    select distinct(sql_text)
        from v$sql a,v$session b
        where a.hash_value=b.prev_hash_value
        and a.address=b.prev_sql_addr
        and b.status='INACTIVE'
        and to_char(b.logon_time)='02-11月-07';
        可以找出滞留session所执行的最后一条语句,于是应用也可以很快定位到程序中未关闭connect的地方。

    以上是我刚刚得出的结论,发出来一是让大家参考,二也是想做个求证,如果有前辈认为不对,请多多指教。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/310745/viewspace-6312/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 请教v$sql
请登录后发表评论 登录
全部评论

注册时间:2007-12-26

  • 博文量
    31
  • 访问量
    22739