0

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

编辑:我在 SQL Server 2008 中做这一切

4

1 回答 1

2

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

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

一个更好的解决方案是使用可靠的传输和异步消息传递,例如。服务经纪人。由于 programmign 模型是异步的,但消息传递是可靠的,因此无论服务器是否关闭,您都会在稍后重新上线时获得您想要的结果。

于 2012-12-18T14:17:22.280 回答