繁体   English   中英

Oracle 错误:池连接请求超时

[英]Oracle Error: Pooled connection request timed out

我将 Oracle12c 与 C# 中编写的应用程序一起使用,并使用 Oracle.ManagedDataAccess.dll 来处理数据库连接。

我们有一个产品在运行多年后开始偶尔抛出这个异常:

Oracle.ManagedDataAccess.Client.OracleException (0xFFFFFC0C): Pooled connection request timed out
   at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)
   at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch)
   at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword)
   at Oracle.ManagedDataAccess.Client.OracleConnection.Open()

我知道这个错误的原因。 查看代码,既没有处理 OracleConnection 也没有处理 OracleCommand 对象。 所以这些连接一直在建立,直到它最终抛出这个异常。

修复很简单。 将它们包装在Using语句中。 我不需要帮助。

然而,我感兴趣的是为什么这个问题现在开始了。 该软件运行多年没有问题。 他们做了一些数据库维护,更新了同一台服务器上的其他软件,然后这个问题就开始了。 我不知道他们做了什么 Db 维护。

应用程序中的连接字符串未指定任何池属性。

是否有 oracle db 设置会导致数据库中的同时连接数量减少,从而导致这种情况开始发生?

更新

我写了一个小测试应用程序来检查限制。 它只是循环并打开连接,执行基本查询并且不处理连接。 在我的测试系统上,它在 640ish 循环后开始抛出此异常。 每次我运行它时,它会给出或采用 10 个循环。

什么设置了这个限制?

我只是有同样的问题。

出现该异常的原因是 Oracle 池管理器不再有空闲连接(默认情况下您最多可以有 100 个连接)。 该问题的原因通常不是关闭的连接(因此“使用”是正确的方法)。

即使您已经为该问题找到了可靠的解决方案,我还是想补充一下:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM