JDBC会话与Oracle进程之间的关系

Jua*_*uan 8 java oracle jdbc c3p0

当连接限制为1,100(使用C3P0)时,我们遇到了创建太多Oracle进程(超过2,000个)的问题

两个问题:

  • Oracle进程和JDBC连接之间的关系是什么?是否为每个会话创建了一个Oracle进程?是否为每个JDBC 语句创建了一个?没有任何关系?

  • 您是否曾经遇到过这种情况,您创建的进程多于JDBC连接?

任何评论都会非常感激.

Ale*_*ole 2

每个连接有一个会话。这听起来像是连接泄漏,在某个地方打开一个新连接但没有正确关闭。一种可能性是您在块内打开、使用和关闭连接try,并且正在处理 a 中的异常catch,或者由于其他原因提前返回。如果是这样,您需要确保连接关闭已完成,finally否则可能不会发生,从而导致连接(以及会话)挂起。在同一范围内打开两个连接而不在其间显式关闭也可以做到这一点。

我不熟悉 C3PO,所以不知道如何处理连接,也不知道您的 1100 限制是在哪里以及如何施加的;如果它(或您)有一个连接池,并且您引用的 1100 是最大池大小,那么这听起来不像是问题,因为您会在会话上限之前达到池上限。

您可以查看v$session以确认所有会话都来自 JDBC,并且没有其他连接。