【问题标题】:Oracle ManagedDataAccess - Connection Request Timed out - PoolingOracle ManagedDataAccess - 连接请求超时 - 池化
【发布时间】:2015-09-06 11:25:07
【问题描述】:

我终于承认失败并寻求帮助。我已经尽我所能来解决这个问题,但我似乎无能为力。

我正在与: VS2010 C# 甲骨文 12c ODP.Net Managed121012

我继承了一个同时使用托管和非托管数据访问 dll 的应用程序。在我卸载 oracle 之前它一直在工作。然后我为 64 位机器重新安装了 11g 客户端。我马上注意到只安装了框架 2 的数据访问 dll,但我还是继续。然后,我将 client_1 文件夹中的所有 oci 和 ora dll 复制到我的应用程序的 bin 目录中,并将 Oracle.DataAccess.dll 也复制到我的 bin 目录中。我还将 Oracle.ManagedDataAccess.dll 复制到此文件夹中。

只要我没有对我的数据集进行任何更改,我的应用程序就会成功运行。我会很乐意继续这样做,除非我必须创建更多数据集。当我尝试添加新数据集时,我的数据源连接向导下拉列表为空白。然后我尝试重新创建连接,但只能看到 .Net Framework DProviders。我看不到托管提供商。在某些时候,我也收到此错误“当前未选择数据提供者”。

认为这是因为未安装托管提供程序我卸载了 11g 客户端并安装了 64 位 12c 客户端并将所有相关文件复制到我的应用程序的 bin 中。我在 app.config 文件中添加了以下几行:

      <configSections>
    <section name="oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess" />

  <system.data>
<DbProviderFactories>
  <remove invariant="Oracle.DataAccess.Client" />
  <remove invariant="Oracle.ManagedDataAccess.Client" />
  <add name="ODP.NET, Managed Driver" invariant="Oracle.DataAccess.Client"
         description="Oracle Data Provider for .NET, Managed Driver"
         type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />     
</DbProviderFactories>

在此之后,我现在可以看到一些旧数据源,但我无法连接到我的数据库,因为我收到“连接请求超时”。当我手动创建新连接时,我可以与非托管提供程序正常连接,但会收到连接请求超时错误。

我真的已经走到尽头了,在我使用绳索之前,我真的很感激新鲜的眼睛。

提前致谢。

【问题讨论】:

  • 通常 ODP.NET 托管驱动程序不需要任何进一步的 Oracle 客户端安装。要使用非托管 ODP.NET 提供程序,您需要满足一些条件,请参阅此处:stackoverflow.com/questions/659341/…

标签: c# oracle visual-studio-2010 odp.net-managed


【解决方案1】:

切换到托管驱动程序后,我遇到了同样的问题。甚至使用本机和托管驱动程序编写了一个测试应用程序。结论是托管驱动程序需要比本地驱动程序更多的时间来打开新连接。一个对我们有用的解决方案是使用连接字符串设置一个大的连接超时。

<connectionStrings>
    <add name="ConnectionString" connectionString="data source=xxxx;user id=xxxx;password=xxxx;persist security info=false;Connection Timeout=120;" />

</connectionStrings>

【讨论】:

  • 感谢您的回答!甚至在一年后真的帮助了我。将Connection Timeout=120; 添加到我的连接字符串解决了这个问题。
  • 我遇到了同样的问题,希望根据这个答案更改我们的默认连接超时,我的问题是,将超时增加到 120 是否有任何连锁反应?
【解决方案2】:

以防万一有人在单声道 4.8 上运行时遇到此问题。似乎有一个同步错误,导致 Oracle 客户端在使用完所有连接后无法扩展连接池。看到这个bug

【讨论】:

    【解决方案3】:

    在 Visual Studio 中使用即时窗口进行一些测试时,我们看到了同样的错误。我们真的很困惑一段时间,直到我们正常运行代码(不使用即时窗口)并且问题消失了。因此,与 Oracle ManagedDataAccess 和 Visual Studio 中的即时窗口的某种交互可能会导致此错误。

    我知道这不是你们大多数人的答案,但我希望它对某人有用。

    【讨论】:

      【解决方案4】:

      请检查 Oracle 输出参数。因为我的应用程序也面临同样的情况。

      我们将 oracle output 参数更改为 Refcursor。也许这个解决方案很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多