System.Data.OracleClient 在数据库操作中,连接中断了,怎么恢复?

zlhxx89 2008-09-11 04:13:03
在一个长时间运行的系统中,可能发生网络故障或者oracle服务器重启等问题,导致一个数据库操作失败。在一次数据库操作失败后,我发现即使数据库连接恢复正常,比如网络连接好了,数据库重启完毕等等。系统后续执行的数据库操作仍然会报错,报TNS找不到之类的,或者12545等等错误。那怎样在程序中恢复数据库连接呢?
还有,在C/S的程序中,OracleClient数据库连接打开后,是否默认使用连接池?还是要在连接字符串中写点什么的?C/S程序中,数据库连接是一直保持close状态,在执行SQL时再打开,还是一直保持open状态?
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlhxx89 2008-09-12
  • 打赏
  • 举报
回复
我发现我问题没说清楚。
一个24小时运行的系统,但连接的ORACLE数据库几天要重启一下,而部署系统的机器的网络连接,也有时候会中断再恢复。
我的程序,启动时数据库连接open一下,然后close,执行SQL操作时再自动连接。
现在的问题是,当本地网络中断后,马上再恢复,但是我的程序在网络连接恢复后,却不能执行SQL数据库操作了,会报TNS之类的错误。我的想法是,既然网络连接已经恢复了,那程序就不能报错了,希望能自行恢复,继续无问题的进行数据库操作。
还有就是数据库服务器重启了,而我的系统也必须无问题的继续数据库操作,这如何处理?
tnt3d 2008-09-11
  • 打赏
  • 举报
回复
你可以在服务里面启动下TNS,看是不是TNS没有启动的原因,直接把他设置成自动启动,这个服务和ORACLE服务都在一起的
  • 打赏
  • 举报
回复
连接数据库 最好是用到的时候连接 不用的时候关闭。
zlhxx89 2008-09-11
  • 打赏
  • 举报
回复
回3楼,但是这样的代码:

Using rq As New System.Data.OracleClient.OracleDataAdapter("SELECT SYSDATE FROM DUAL", m_conn)
rq.Fill(dt)
End Using
dgv.DataSource = dt
m_conn.Close()

第一次执行正常,我将本地网络无效,再次执行,显然报错了。然后我将本地连接恢复,再次执行,还是报错。再执行一次,又自动恢复连接了。这个是什么原因呢?可不可用来作为恢复连接的办法?
zlkingdom 2008-09-11
  • 打赏
  • 举报
回复
1.好像和你说的不一样,首先数据库挂掉了以后你的程序中应该有容错机制才能在数据库恢复的时候重新连接数据库,你不能指望他们之间自己恢复连接。
2.OracleClient数据库连接打开后使用的一般都是默认的连接池
3.程序在操作数据库的时候最好先打开,再执行,最后关闭连接,不要长时间保持与数据库的连接,这样会加重服务器的负担
zlhxx89 2008-09-11
  • 打赏
  • 举报
回复
2楼,比如我的系统很长时间没有执行数据库操作了,然后本地网络断了。然后,系统去oracle数据库查询下时间,显然要报错了。这时候,本地网络恢复了。但是,数据库连接对象再执行其他SQL语句时,还会报错。我要数据库连接恢复,能立即执行其他SQL操作。
viki117 2008-09-11
  • 打赏
  • 举报
回复
连接中断了,执行不就终止了。。TNS是什么东西来的

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧