汇总连接超时

Cod*_*der 12 database oracle connection data-access

在生产服务器上,有时随机连接失败到ORacle数据库.我得到了很多
Oracle.DataAccess.Client.OracleException 池化连接请求超时 在Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,OpoSqlValCtx*pOpoSqlValCtx,Object src,String procedure,Boolean bCheck, Int32 isRecoverable)位于路径中ws.DataConnection()的Oracle.DataAccess.Client.OracleConnection.Open()上的Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,Object src).

我搜索了一些解决方案,但没有运气.奇怪的是,Exception没有像Ora-123那样的标识符......我使用了OracleDataAccess客户端.有时这个问题是5-10秒,有时我必须重新启动IIS(6.1,Windows Server 2008 R2)才能解决问题.令人沮丧...我不能设置pooling = false因为我们有一个庞大的网站.有解决方案吗

Nic*_*man 11

我所知道的最常见的原因是无法正确处理与Oracle.DataAccess.Client关联的IDisposable对象.

可能有一些代码没有正确处理某些对象.这将导致Oracle保留实际未使用的连接,从而导致池中的可用连接用完.重新启动IIS解决了它,因为它会杀死所有这些连接.

仔细检查您的代码,确保所有IDisposable对象都正确处理或封装在using语句中.


dre*_*w_w 5

我见过的最常见的连接问题是:

  • 应用程序将连接保持打开状态。这会耗尽所有可用的连接,因此连接会被随机拒绝。最简单的代码解决方案是确保应用程序尽快关闭连接(而不是等待变量离开作用域)。.NET 中的“using”语句对此很有效。
  • 您的连接池可能需要回收。您可以参考此站点以获取更多信息:http : //docs.oracle.com/cd/E11882_01/java.112/e12265/manage.htm#BABICIII
  • 您可能只是没有足够大的连接池(默认最大大小为 100)。尝试增加这个。

另一个可能有帮助的网站是这个:http : //blog.ilab8.com/2011/09/02/odp-net-pooling-and-connection-request-timed-out/