如何处理某些服务器可能处于非活动状态的多个服务器的查询

时间:2012-12-18 14:08:18

标签: sql-server timeout

我有一个存储过程循环遍历服务器列表并查询其主DB。当其中一个服务器关闭时,存储过程查询超时。如何跳过查询任何非活动服务器,或者,如何捕获服务器超时并继续对剩余的活动服务器执行查询?我有一个带有IsActive列的Server表,但是当服务器关闭时,该值不会自动更改。目前,要查询的服务器列表基于表中的此IsActive列。另一种解决方案可能是找到一种方法在服务器出现故障时自动更改IsActive列,但我不知道如何去做。有什么想法吗?

编辑:我在SQL Server 2008中都是这样做的

1 个答案:

答案 0 :(得分:2)

从引擎内部(链接服务器)执行此操作。

来自外部流程的查询。使用connection timeout集并行启动查询。您的“查询”将立即获取所有信息,您只需要等待一次所有已关闭的服务器,大致是您设置的超时,而不是每次已关闭的服务器。我建议不要“测试”连接,因为尝试连接测试。如果您愿意迭代服务器并为每个服务器调用sp_testlinkedserver,那么最终会等待更多,因为测试仍然是序列化的,并且它们花费的时间与尝试相同连接(这是测试所做的,它试图连接)。

更好的解决方案是使用可靠的传输和异步消息传递,例如。 Service Broker。由于programmign模型是异步的,但是消息传递是可靠的,因此如果服务器关闭并不重要,您将在以后最终重新联机时获得您想要的结果。