我已经构建了一个脚本/代理作业,它每 10 分钟轮询一次我们的链接服务器,以确保它们在线。现在,当一个人离线时,它会生成一封电子邮件并通知我。见下文:
现在,现在它只使用通过/失败。我想做的是,当服务器之间的通信离线时,不仅要生成它离线,还要生成原因。类似于您在测试链接服务器并且它处于脱机状态时从 SSMS 获得的读数:
这可能吗?我已经搜索了可能帮助我完成此任务的任何其他详细参数,但找不到任何参数。这些信息是在 SSMS 中生成的,所以我相信有某种方法可以得到它,我只是不确定如何。
像往常一样感谢伙计们!
已更新 必须为此添加一些系统特定的功能以及我自己已经构建的 SQL,但错误报告是在线的。适用于我们的 SQL 服务器和 iSeries/400 环境。这是它现在吐出的内容:
再次感谢您对此提供的所有帮助。可能必须将其发布到 SSC,以便其他人可以使用它。
与链接的答案一样,您应该可以使用
TRY/CATCH
; 另一个答案的问题(没有双关语)是,因为链接服务器的名称是在编译时验证的,如果测试失败,批处理不会执行。因此,您可以将链接服务器测试放在动态 SQL 中:这应该允许您捕获各种错误,包括:
如果
@srv
未填充:如果
@srv
不是定义的链接服务器:如果
@srv
在创建链接服务器时连接失败:如果连接
@srv1
超时(例如服务器离线) - 这是使用本地链接服务器,因此使用命名管道或 TCP/IP 时文本可能会有所不同:(使用 TCP/IP,Kin 说错误消息是:
如果
@srv
未配置数据访问:如果链接服务器配置了错误的用户名/密码(或通过了当前凭据但失败):
EXECUTE AS
如果您尝试在特定凭据下测试链接服务器,也可以开始批处理。如果链接服务器的测试成功,您可以在
TRY
块内继续执行其他操作,例如OPENQUERY
使用 4 部分名称的查询等,并且应该有大量其他错误可以捕获并详细报告。 ..亚伦完美地回答了你的问题。我只是添加了我为在我的环境中测试而编写的完整脚本。
下面是脚本:
下面是输出: