当网络不稳定时,如何防止数据库连接发生故障?

问题描述:

我们有一个应用程序使用连接到Oracle数据库的BDE。
我对SQL查询使用TQuery,它连接到TDatabase,我们不是专业的程序员,我们不知道底层会发生什么。当网络不稳定时,如何防止数据库连接发生故障?

我们的网络是不稳定的,我们有一个数据包丢失的问题。

出现问题时,从DB服务器我们的应用程序断开连接,或未能完成当前查询。
处理这个问题的最佳方法是什么?

我们的网络团队目前正在努力解决其根源问题,我们已经改变了代码重新连接到数据库的时候,我们有一个失败。我们遇到了数据库服务器上公开会话数量的问题。

有没有解决方案?
这似乎是我们常见的问题。

我建议在数据库组件以下。

  1. 确实连接每个sql并关闭完成。
  2. 使用连接超时&重启查询是否有超时
  3. 如果数据库被断开,数据假脱机到客户端上的本地数据库,并重新传输到*数据库再次出现连接。这样你就不会丢失任何数据。
  4. 使用计时器检查*数据库连接,以便对未传输的数据进行后台处理。

这个问题对车间数据采集通用及以上的建议是我能有效地处理这个问题的唯一途径。

对不起,答案很简单...解决您的网络。在这一点上,这对你来说确实是最好的选择。

+0

恐怕有时候很难做调试,尤其是硬件..大家都知道tcp/ip不稳定,网络不稳定,但是我们需要在它之上建立稳定的系统。 – linjunhalida 2009-05-20 01:07:42

尝试实施“看门狗”跟帖说:

  1. 的Ping网络(数据库服务器的IP地址),每X秒
  2. 如果不可用,那么禁用UI,并尝试重新连接

考虑到任何交易可能根本不会成功,并保存在某个地方的信息。然后,通过“看门狗”线程连接时,如果事务性质允许,则尝试再次执行该事务。

将n层解决方案还可以帮助......特别是如果中间层也是在数据库服务器上,从而它的连接是本地的。 Delphi最近的大部分实现都使用一个自定义的HTTP服务器作为中间层,这样做的好处是只有当前请求被执行时才需要连接。只要请求完成,连接就可以被切断而不会出现任何问题。

使用dbExpress技术,而不是别的ADO。结构dbquery + provider + Clientdataset是按设计“断开”的。

您可以简单地测试打开数据集,删除连接,重新连接并发布数据。

顺便说一句,使用DBExpress很容易将应用程序升级到n层方案。