连接必须有效并在Ddtek.Oracle.OracleConnection中打开

时间:2012-03-14 17:43:59

标签: c# oracle .net-4.0

需要Oracle应用开发者的帮助:

我有一个C#.NET 4.0应用程序,它使用DDTek.Oracle库更新并插入到表中。我的应用程序每天运行大约12个小时,这个例外恰好两次,间隔15天,从未有过。在这些日子里,它运行良好几个小时(它在此期间进行了插入和更新)。然后这个例外来了。我已经读过这个异常可能是来自一个错误的连接字符串,但正如我之前所说,该应用程序运行良好一段时间。这可能是数据库或网络问题还是其他问题?

System.InvalidOperationException: Connection must be valid and open
at DDTek.Oracle.OracleConnection.get_Session()
at DDTek.Oracle.OracleConnection.BeginDbTransaction(IsolationLevel isolationLevel)
at DDTek.Oracle.OracleConnection.BeginTransaction()

仅供参考(如果这可能是原因),我在两个线程上有两个连接。每个线程更新一个不同的表。 PS:如果有人知道DDTek的好文档。请回复一个链接。

1 个答案:

答案 0 :(得分:1)

根据您所描述的我只能推测 - 有几种可能性:

  • 大多数提供商提供内置池,有时池中的连接变得无效并且您会遇到一些奇怪的行为
  • 有时网络设置/防火墙/ IDS ...限制TCP连接可以保持打开的时间
  • 有时一个微妙的错误(从两个不同的线程访问相同的连接)会导致奇怪的问题
  • 有时数据库服务器(或数据库防火墙)会限制会话保持连接的时间
  • 有时内存问题导致这种行为,几乎每个Oracle提供商都使用OCI,需要使用非托管堆等 我有一个提供商泄漏非托管内存(通过内存分析器诊断并且供应商的修复速度相当快)
  • 有时当连接到RAC时,一个侦听器/节点出现故障和/或发生一些故障转移,导致当前连接无效

关于DDTek.Oracle综合文档的链接,请参阅herehere