JDBC在Oracle中的非活动会话

JDBC在Oracle中的非活动会话,oracle,jdbc,Oracle,Jdbc,我们有一个用Java编写的web服务,正在连接到Oracle数据库进行数据提取。最近,我们的web服务JDBC在Oracle数据库中遇到了太多的非活动会话 我们非常确定在每个进程之后,所有连接都将关闭并设置为null 有人能帮我们吗?为什么它会导致数据库中的非活动会话?解决方案是什么 多谢各位 到底是什么问题 通常,中间层应用服务器会创建一个连接池。当您的代码请求一个连接时,它会从池中获得一个已经打开的连接,而不是通过产生到数据库的新连接的开销。当代码关闭连接时,连接将返回到池中,而不是通过物理

我们有一个用Java编写的web服务,正在连接到Oracle数据库进行数据提取。最近,我们的web服务JDBC在Oracle数据库中遇到了太多的非活动会话

我们非常确定在每个进程之后,所有连接都将关闭并设置为null

有人能帮我们吗?为什么它会导致数据库中的非活动会话?解决方案是什么


多谢各位

到底是什么问题

通常,中间层应用服务器会创建一个连接池。当您的代码请求一个连接时,它会从池中获得一个已经打开的连接,而不是通过产生到数据库的新连接的开销。当代码关闭连接时,连接将返回到池中,而不是通过物理关闭连接的开销。这意味着在
V$SESSION
中的
STATUS
在任何给定时间点处于“非活动”状态时,将有合理数量的数据库连接。这很正常

即使在负载下,来自中间层的大多数数据库连接在大多数情况下都是“非活动”的。“INACTIVE”状态仅仅意味着在运行查询时,会话没有执行SQL语句。大多数连接的大部分时间要么坐在连接池中等待Java会话打开,要么等待Java会话处理数据,要么等待网络在机器之间传输数据


您是否确实收到错误(即ORA-00020:超出最大进程数)?或者你只是被
V$SESSION
中的条目数量弄糊涂了?

嗨,贾斯汀,谢谢你的回复。问题是数据库中的非活动项太多,并且正在达到阈值。有没有办法摆脱那些不活跃的条目?@sprena-“达到阈值”是什么意思?您是否收到错误(即ORA-00020)?您是否在中间层中使用连接池?您确定数据库中的非活动会话不仅仅是连接池中的连接吗?Justin,达到阈值意味着超过了允许的最大会话数。我用Java修改了数据库连接代码,问题已经解决了。谢谢。@lanthe我们在boneCP连接池上也有同样的问题。你能解释一下为了避免这个问题,你在Java代码中做了哪些修改吗?嗨,Justin,有没有办法从DB的角度找出连接池中某个特定会话在哪个时间点处于活动状态,以及该特定会话处于空闲状态多长时间?