为什么 Oracle 会话在处于非活动状态两周后仍然有效

Del*_*nte 16 oracle oracle-10g

数据库:Oracle 10g

操作系统:Windows Server 2003 64 位

我查询 Web 应用程序生成的 Oracle 会话列表(按 program=w3wp.exe 过滤)

select * from V$session
where UPPER(program) LIKE '%W3%'
order by logon_time
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

根据 Logon_Time,为什么 31/07/2012 或 01/08/2012 或今天(21/08/2012)之前的任何会话仍然活动?

我在 sqlnet.ora 上配置了: SQLNET.EXPIRE_TIME= 20 所以这意味着每 20 分钟 Oracle 都会检查连接是否仍然处于活动状态。

所有用户架构都有默认配置文件。这意味着没有会话永远不会过期或死亡?

在此处输入图片说明

在回复 Phil 的评论时添加:

在此处输入图片说明

添加响应 Phil 的回答:

在此处输入图片说明

Phi*_*lᵀᴹ 22

我怀疑它们是连接池的一部分,因此没有闲置,因为它们被频繁使用。

INACTIVEinv$session仅意味着在您检查的确切时刻没有正在执行 SQL 语句v$session

如果他们是连接池的一部分,他们通过长时间登录来正常工作。连接池的全部意义在于消除对大量登录/注销的需要并保持持久会话以快速启动查询 - 登录执行一个查询的开销要大得多,然后每次都断开连接。

要获取每个会话的最后活动时间:

select username, UPPER(program), logon_time, 
       floor(last_call_et / 60) "Minutes since active", status
from v$session
where UPPER(program) LIKE '%W3%'
order by last_call_et;
Run Code Online (Sandbox Code Playgroud)

我建议不要终止会话,除非您知道这样做不会在应用程序端造成问题(例如,尝试使用已终止的会话)。

您可能会看到配置不正确的连接池,该连接池在应用程序启动后会创建数百个连接 - 连接池可能比实际需要大一个数量级。我建议联系开发人员/应用程序支持人员并查看连接池的配置方式。

经过一些研究,w3wp.exe 是 IIS 应用程序池进程 - 您几乎肯定希望与 IIS 网络服务器管理员交谈以帮助了解连接池配置的底部。