Oracle 错误:池连接请求超时

问题描述 投票:0回答:1

我使用 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 数据库设置会导致数据库中的并发连接数减少,从而导致这种情况开始发生?

更新

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

这个限制是什么设置的?

c# .net oracle oracle12c oracle.manageddataaccess
1个回答
1
投票

我也遇到了同样的问题。

出现该异常的原因是 Oracle Pool Manager 不再有空闲连接(默认情况下最多可以有 100 个连接)。通常该问题的原因不是连接关闭。

即使您已经找到了该问题的解决方案,我想添加这些:

© www.soinside.com 2019 - 2024. All rights reserved.