【问题标题】:Oracle Connection to .Net - Connection PoolOracle 连接到 .Net - 连接池
【发布时间】:2011-07-18 20:35:25
【问题描述】:

这更具体地与 SQL Server Reporting Services 相关,但我也将此视为典型的 .Net 应用程序问题。

这就是问题所在。我们正在使用 SSRS 来报告来自 Oracle 数据库的数据。从第一天开始,我们的用户就抱怨他们收到诸如 ORA-2396: Exceeded maximum idle time, ORA-01012-Not logged on 等错误。

我们包括 DBA、应用程序开发人员、网络工程师,但到目前为止,我们找不到任何更好的线索。

最近在进行一些研究时,我观察到许多人记录了 .Net 与 oracle 连接的一个“已知”问题。正如他们所提到的,如果我们使用连接池,则池中甚至可能存在无用的连接。在下一次请求时,可能会使用此连接,此时将引发错误。正如我们的 DBA 所确认的,我们的 oracle 实例设置为在空闲 X 分钟时终止连接。

这里是上面提到的链接 http://msdn.microsoft.com/en-us/library/8xx3tyca(v=VS.90).aspx

http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx

还有更多。但是,我在任何地方都没有得到非常确认的声明,表明是的,这是当前(最新版本的 .Net 和 oracle 等)的问题。

在解决方案部分,他们提到我们将使用“Validate Connection=true”属性作为连接字符串的一部分。但是如果我尝试使用它,它会显示“不支持关键字 - 验证连接”。 (我也试过Validcon)

我的问题是这些 1. 是否确认这个从连接池读取的“脏”问题存在? 2. 如果是,有什么解决办法? 3. 如果不是,是什么导致了我们的问题。

如果您需要更多信息,请随时发表评论。

【问题讨论】:

  • 有效的 SQL Server 连接字符串在这里:msdn.microsoft.com/en-us/library/…。您可能想尝试关闭连接池:设置 Max Pool Size = 1 来执行此操作。
  • 根据组织政策,不允许使用有关限制池大小或关闭池的选项。

标签: .net ssrs-2008 odp.net oracleclient


【解决方案1】:

这里的根本问题属于您的 DBA。当我使用的帐户(即我的个人 oracle 帐户)对我们的 DBA 运行的相同空闲连接清理很有效时,我看到了同样的错误。最好的解决办法是让他们为您分配一个在空闲时间后不会终止的“服务”帐户。

也就是说,我猜您会收到“不支持关键字 - 验证连接”,因为您使用的是 microsoft 提供程序而不是 oracle 提供程序。我对 SSRS 连接不太熟悉,所以我不确定你是如何选择一个而不是另一个。然而,在 .net 中,它是 System.Data.OracleClient 和 Oracle.DataAccess 之间的区别。

如果您解决了这个问题,验证连接选项会通过在使用连接之前预先 ping 连接来增加开销,使其比简单地禁用池稍微好一点。您可以尝试的另一件事是设置 min pool size = 0 ,这可以让池变为零,从而减少连接闲置时间过长的可能性。不幸的是,这不是一个完美的解决方案,因为提供者只在使用过时的连接后检查它们。

如果您还没有,这里是对 oracle 数据提供者的连接字符串参数的引用: http://download.oracle.com/docs/html/E10927_01/featConnecting.htm#i1006393

【讨论】:

  • 感谢您的回复。是的,我意识到为什么无法识别连接字符串属性。我也看到了关于 DBA 更改设置的观点。但是,我的核心问题是它是否确认连接池行为只是这样?即在某些时候,池中可能存在实际上根本不可用的连接,并且没有办法在它们实际使用之前清除它们?
  • 您可以做一些程序化的事情,但是在 SSRS 的上下文中,我想说除了禁用池之外您无能为力(考虑到连接创建,在我看来这是一个完全合法的选项)在长查询时间和大数据集是常态的报告环境中可能可以忽略不计)。因为在返回连接后会检查连接寿命到期,所以我认为不存在有保证的解决方案,只有可以减少问题的更改。
  • 如果想继续使用 MS 提供程序msdn.microsoft.com/en-us/library/…,我认为这是您的连接字符串选项的链接
【解决方案2】:

这是一个已知问题,在您使用连接池的任何地方都会发生,并且取决于几件事——其中之一是服务器上的设置……有时在使用 Oracle RAC 时甚至会变得复杂…… 一些 Oracle .NET 供应商有内置的解决方案,用于无缝处理这个问题...其中一个供应商是 Devart 出售的...http://www.devart.com/dotconnect/oracle/

我不隶属于 Devart,只是一个快乐的客户......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    相关资源
    最近更新 更多