select a.sid,a.serial#,a.username,a.osuser,a.machine,a.program,a.logon_time,a.status,b.sql_text
from v$session a, v$sql b where a.sql_address=b.address(+) and a.username ='SSO'用这种方式,我得到目前的数据库连接状态,发现其中有几十个inactive session的sql_text都是同一个sql。我想知道的是这是不是代表这个sql语句的连接关闭有问题呢?为什么没有其它的sql语句出现?不太清楚我上面的sql脚本是不是正确的。有人说是因为那条sql被执行最多次的原因,但是说不通为什么几十个session 的sql_text都是相同的。inactive session什么时候会被oracle自动关闭呢?如何减少它的数量?高手给帮个忙把.

解决方案 »

  1.   

    一般是用v$session的decode(sql_hash_value,null,pre_hash_value,sql_hash_value)等于v$sql的hash_value来关联的.
    sql_address也可以关联么?
      

  2.   

    试了下好像可以,不过也要像上面一样decode一下.
    用v$session的decode(sql_address,'00',PREV_SQL_ADDR,sql_address)等于v$sql的address来关联的.
      

  3.   

    为什么要decode呢?
    我的问题是什么原因呢?
      

  4.   

    sql_address存储的是当前正在处理的sql地址.有可能session已经处理完sql,现在处于idle状态.那么sql_address会是'00',prev_sql_address存储了刚才执行的sql_address,所以要decode下