2009-07-02 56 views
3

如果我正在开发一个可以利用SQL Server集群的环境,那么我应该知道什么(如果有的话)?针对SQL Server集群进行开发

从我所看到的东西,我应该处理的数据库操作异常,有两种选择:

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

这是正确的吗?这是我需要做的吗?

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

任何意见,将不胜感激

邓肯

回答

3

只需重试连接应该是足够的。当一个实例是在故障转移的中间,我们的应用程序打开一个连接,这里发生了什么:

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

在这种情况下,您只需要尝试重试连接。如果你的SQL服务器一般都很响应,你可以尝试将你的连接代码包装在30秒后数据库调用超时的类中,但是在类中使用更短的超时并重试几次。这将使您的应用程序只需要一次调用即可完成,并允许内部连接时间在需要时进行故障切换。

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