Oracle到.Net的连接-连接池

Oracle到.Net的连接-连接池,.net,ssrs-2008,odp.net,oracleclient,.net,Ssrs 2008,Odp.net,Oracleclient,这在SQL Server Reporting Services中更为具体,但我也认为这是典型的.Net应用程序问题 问题就在这里。我们正在使用SSRS报告Oracle数据库中的数据。从第一天开始,我们的用户就抱怨他们收到了错误,比如ORA-2396:超过最大空闲时间,ORA-01012-未登录等 我们包括了DBA、应用程序开发人员、网络工程师,但到目前为止,我们还没有找到更好的线索 最近,在进行一些研究时,我发现许多人记录了一个与oracle的.Net连接有关的“已知”问题。正如他们提到的,如果

这在SQL Server Reporting Services中更为具体,但我也认为这是典型的.Net应用程序问题

问题就在这里。我们正在使用SSRS报告Oracle数据库中的数据。从第一天开始,我们的用户就抱怨他们收到了错误,比如ORA-2396:超过最大空闲时间,ORA-01012-未登录等

我们包括了DBA、应用程序开发人员、网络工程师,但到目前为止,我们还没有找到更好的线索

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

以下是上面提到的链接

还有一些。然而,我并没有得到一个非常肯定的声明,说是的,这是当前(最新版本的.Net和oracle等)的一个问题

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

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


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

这是一个已知的问题,它发生在您使用连接池的任何地方,并且取决于多个因素—其中之一是服务器上的设置。。。有时甚至在使用Oracle RAC时变得复杂。。。 一些Oracle.NET提供商有内置的池解决方案,可以无缝地解决此问题。。。Devart出售的就是这样一家供应商


我不是Devart的下属,只是一个快乐的客户…

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

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

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

以下是对oracle数据提供程序的连接字符串参数的引用(如果您还没有):

此处是有效的SQL Server连接字符串:。您可能希望尝试关闭连接池:请将最大池大小设置为1以执行此操作。根据组织策略,不允许使用有关限制池大小或关闭池的选项。感谢您的回复。是的,我意识到为什么连接字符串属性没有被重新编码。我也看到了DBA更改设置的要点。然而,我的核心问题是,是否确认连接池行为仅是这样的?i、 在某一点上,池中可能存在实际上根本不可用的连接,并且在它们实际使用之前没有办法清除它们吗?您可以做一些编程方面的事情,但是在SSRS的上下文中,我想说,除了禁用池之外,您可以做的事情不多(在我看来,这是一个完全合法的选择,因为在长查询时间和大数据集是常态的报告上下文中,连接创建可能可以忽略不计)。因为在返回连接后会检查连接的生存期过期,所以我认为不存在受保护的解决方案,只存在可以减少问题的更改。如果要继续使用MS提供程序,这里有一个指向连接字符串选项的链接