c# - 甲骨文错误 : Pooled connection request timed out

标签 c# .net oracle oracle12c oracle.manageddataaccess

我将 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 个连接)。该问题的原因通常不是关闭的连接(因此“使用”是正确的方法)。

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

关于c# - 甲骨文错误 : Pooled connection request timed out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55146380/

相关文章:

c# - 在后台线程上调用 Application.DoEvents() 有何效果?

c# - 什么情况下 ConcurrentBag.TryTake() 会失败?

oracle - ORA-03001 : unimplemented feature when converting XMLTYPE to NCLOB from table

sql - Oracle 分区序列

c# - 引用Shell32.dll?

c# - 设置最小起订量并验证是否调用了方法

c# - "SignalR"无法识别集线器

c# - 如何创建 .tfignore 文件?

.net - 什么情况下UIElement.UpdateLayout()可以调用Environment.FailFast?

mysql - 我如何决定何时使用右连接/左连接或内连接或者如何确定哪个表在哪一侧?