3

如果我正在为将使用 SQL Server 集群的环境进行开发,我应该注意什么(如果有的话)?

从我所见,我应该处理数据库操作的异常并有两个选择:

  • 向用户显示“重试”。到用户重试时,故障转移节点应该已经启动。
  • 等待几秒钟,然后重试,而不通知用户。

它是否正确?这就是我需要做的吗?

这是一个 ASP.NET 应用程序,但我认为这不会对这种方法产生巨大影响。

任何意见,将不胜感激

邓肯

4

1 回答 1

3

只需重试连接就足够了。当一个实例处于故障转移过程中并且我们的应用程序打开了一个连接时,会发生以下情况:

  1. 连接正常
  2. SQLException:“向服务器发送请求时发生传输级错误。(提供者:TCP 提供者,错误:0 - 现有连接被远程主机强行关闭。)”
  3. SQLException:“建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。未找到或无法访问服务器。验证实例名称是否正确,并且 SQL Server 已配置为允许远程连接。(提供者:TCP 提供者,错误:0 - 由于目标机器主动拒绝,无法建立连接。)”
  4. 将重复步骤 3 中的消息,直到故障转移完成。
  5. 重新连接成功。

在这种情况下,您只需要尝试重试连接。如果您的 SQL 服务器通常响应速度很快,您可以尝试将连接代码包装在一个数据库调用在 30 秒后超时的类中,但在该类中,使用较短的超时并重试几次。这将使您的整个应用程序只需进行一次调用,并在需要时允许内部连接有时间进行故障转移。

不过,网络名称和 IP 地址的转换是无缝的,因此如果发生故障转移,您无需执行任何特殊操作即可恢复 - 只需重新连接并继续运行即可。但请记住,任何正在进行的事务都将被回滚,因此如果在断开连接时您有任何正在运行的东西,您需要在新节点上重新提交它。

于 2009-07-07T20:16:43.107 回答