【问题标题】:ORA-03113: end-of-file on communication channel in VB Application upon Database RebootORA-03113: 数据库重新启动时 VB 应用程序中通信通道上的文件结尾
【发布时间】:2012-09-03 05:27:15
【问题描述】:

我使用 VB 制作了一个 Windows 服务,它监听来自表的特定数据的传入请求并向客户端提供数据。该应用程序运行良好;但是,晚上我们会断开数据库一段时间以进行备份。然后数据库再次启动。但是,不会重新启动 Windows 服务。第二天,当任何客户请求数据时,我收到 ORA-03113;通信通道上的文件结束此行发生的异常

connection.Execute("my query goes here")

我什至尝试在收到客户的任何数据请求后立即进行如下检查。

If connection.State = ConnectionState.Closed Then
       connection.Open()
End If 

谁能在这里指导我到底做错了什么。谢谢

【问题讨论】:

  • 不要断开数据库进行热备份。热备份已经存在了 10 多年。或者您是否有特定的理由进行离线备份?
  • 好吧。我不是这里的数据库管理员,所以我不知道为什么要进行离线备份的原因。但我想他们选择热备份肯定有一些原因。有什么办法可以在我的 VB Windows 服务中处理这个问题??
  • 您是在使用连接池,还是您的应用程序打开单个连接并使其无限期打开?

标签: vb.net oracle database-connection


【解决方案1】:

数据库通信 (IMHO) 的最佳方法就是这个。

  1. 创建连接

  2. 连接

  3. 创建命令

  4. 执行查询

  5. 处理命令

  6. 释放连接

这似乎是一个很大的开销和性能杀手为每个查询创建一个连接。但是,大多数 .NET Dataprovider 都支持池化,所以基本上打开的连接仍然存在并且有效,并且会在下次请求时被回收。

这种方法比执行 connection.State 要好得多,因为您不能 100% 依赖它,而且比为每个查询执行 TnsPing 更快。

oracle 的连接池:http://msdn.microsoft.com/en-us/library/aa719767(v=vs.71).aspx

示例代码:

Public Static Readonly ConnectionString = "Data Source=MyOracleServer;Integrated Security=yes;"
Public Shared Function ExecuteScalar(of T)(string commandString)

    Using con As new OracleConnection(connectionString)

       con.Open()

       Using cmd As new OracleCommand(con, commandString)

           Return CType(cmd.ExecuteScalar(), T)

       End Using

    End Using ' this one will call con.Dispose() which will close the connection

End Function

使用这个简单的代码,您就拥有了一种无连接的方法,就像您使用与您的数据库通信的网站一样。您所需要的只是巧妙的异常处理(这对服务应用程序来说应该不难。只需使用全局异常处理程序,将异常转储到事件日志并稍后重试。

【讨论】:

  • 谢谢.. 在阅读您的评论之前,我的想法完全一样。我一定会尝试这个。我实际上不确定它是否会导致很多开销。我会在得到结果后立即接受答案。再次感谢
【解决方案2】:

尝试将 TNSPING 合并到您的 VB.net 代码中。 似乎有一些关于如何在互联网上执行此操作的指示。 基本上,使用 vb.net 运行脚本文件并解释文件的重定向输出。

【讨论】:

  • tnsping 不会告诉您数据库是否已关闭,只有在侦听器响应时才会告诉您;如果它被反弹(即下降,但现在又恢复了),当然不会。
  • 这是我的问题。服务器在进行备份时在晚上关闭,然后在早上重新启动.. TNSPING 在这种情况下对我来说不起作用..
猜你喜欢
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多