数据库:甲骨文 10g
操作系统:Windows Server 2003 64 位
我查询 Web 应用程序生成的 Oracle 会话列表(按 program=w3wp.exe 过滤)
select * from V$session
where UPPER(program) LIKE '%W3%'
order by logon_time
根据 Logon_Time,为什么从 2012 年 7 月 31 日或 2012 年 1 月 8 日或今天(2012 年 8 月 21 日)之前的任何会话仍然存在会话?
我在 sqlnet.ora 上配置: SQLNET.EXPIRE_TIME= 20 所以这意味着 Oracle 每 20 分钟检查一次连接是否仍然处于活动状态。
所有用户模式都有默认配置文件。这意味着没有会话永远不会过期或死亡?
为回应菲尔的评论而添加:
为回应菲尔的回答而添加:
我怀疑它们是连接池的一部分,因此并没有因为它们被频繁使用而闲置。
INACTIVE
inv$session
仅表示在您检查的确切时刻没有执行 SQL 语句v$session
。如果他们是连接池的一部分,他们会通过长时间登录来正常工作。连接池的全部意义在于消除对大量登录/注销的需求并保持持久会话以快速启动查询 - 登录执行一个查询的开销要大得多,然后每次都断开连接。
要获取每个会话的最后活动时间:
我建议不要终止会话,除非您知道这样做不会导致应用程序端出现问题(例如,尝试使用已被终止的会话)。
您可能正在查看一个配置不正确的连接池,一旦应用程序启动,它就会创建数百个连接 - 连接池可能比它需要的大一个数量级。我建议联系开发人员/应用程序支持人员并查看连接池的配置方式。
经过一番研究,w3wp.exe 是 IIS 应用程序池进程——您几乎肯定想与您的 IIS 网络服务器管理员交谈,以帮助深入了解连接池配置。