当网络不稳定时,如何防止数据库连接失败?

时间:2009-05-20 00:35:33

标签: oracle delphi networking bde

我们有一个使用连接到Oracle DB的BDE的应用程序 我使用TQuery进行SQL查询,它连接到TDatabase,我们不是专业的程序员,我们不知道幕后会发生什么。

我们的网络不稳定,我们遇到丢包问题。

问题发生时,我们的应用程序与数据库服务器断开连接,或者无法完成当前查询 处理这个问题的最佳方法是什么?

我们的网络团队目前正在努力解决根本问题,并且在发生故障时我们已将代码更改为重新连接到数据库。我们遇到了数据库服务器上打开会话数量的问题。

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

5 个答案:

答案 0 :(得分:3)

我建议在数据库组件上进行以下操作。

  1. 在每个sql上建立连接并在完成时关闭。
  2. 使用连接超时&如果有超时,则重新启动查询
  3. 如果数据库已断开连接,请将数据假脱机到客户端上的本地数据库,并在再次连接后重新开始传输到中央数据库。这样就不会丢失任何数据。
  4. 使用计时器检查中央数据库连接,以便对未传输的数据进行假脱机。
  5. 这个问题在车间数据收集中很常见,上面的建议是我有效处理问题的唯一方法。

答案 1 :(得分:2)

转到n层解决方案也可能有所帮助......尤其是如果中间层也在数据库服务器上,那么它的连接是本地的。 Delphi最近的大多数实现使用自定义HTTP服务器作为中间层,其优点是只需要对当前正在执行的请求进行连接。请求完成后,连接可以被切断而没有任何问题

答案 2 :(得分:2)

对不起,简短的回答...修复你的网络。在这一点上,这真的是你最好的选择。

答案 3 :(得分:1)

尝试实现一个“看门狗”线程:

  1. 每隔X秒ping网络(数据库服务器的IP地址)
  2. 如果不可用,则禁用用户界面并尝试重新连接
  3. 考虑到任何交易可能根本不会成功,并将该信息保存在某处。然后,在通过“看门狗”线程连接时,如果交易的性质允许,则尝试再次预先形成该交易。

答案 4 :(得分:1)

使用DBExpress技术而不是其他任何ADO。结构dbquery + provider + Clientdataset按设计“断开连接”。

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

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