我试图构造TSQL查询,以替代提供的各种GUI工具。其中一个工具是Job Activity Monitor,它可以通过Object Explorer窗口访问。

我们当前的数据库环境包括一个具有3个节点(一个主副本和两个只读副本)的集群,以及位于集群旁边的一个独立的服务器。
为了简洁起见,我将调用节点N1、N2和N3以及独立的服务器S1。
最近,我们为服务器配置了Multi-Server Job Administration,使用S1作为MSX (主服务器)服务器,使用N1、N2和N3作为TSX (目标)服务器。
这意味着在集群节点上操作的SQL作业是从S1创建和管理的。
TSX服务器向MSX服务器报告其状态、结果等,该服务器可以使用所述Job Activity Monitor访问。从Job Activity Monitor中,可以通过选择View history来访问每个登记服务器(TSX)的作业历史记录:

把我们带到这个窗口:

这是我试图在MSX服务器上使用TSQL查询重新创建的信息。我希望看到所有登记的服务器的作业结果和历史记录,类似于GUI窗口显示的内容。
我尝试过挖掘与工作相关的表和msdb数据库的视图,但没有结果。MSX服务器上的msdb.dbo.sysjobhistory表不包含来自登记服务器的历史记录,我似乎找不到任何关于如何收集它的好文档。这些数据甚至可以通过TSQL访问吗?如有任何相关资料,敬请见谅。
发布于 2017-07-06 13:20:31
无论何时,只要您想查看什么SSMS正在运行,都可以在登录时启动事件探查器/扩展事件跟踪并进行筛选。
从MSX主服务器执行此操作,并查看多服务器的作业历史记录,您将获得以下查询:
SELECT null as instance_id,
sj.job_id,
job_name = sj.name,
null as step_id,
null as step_name,
null as sql_message_id,
null as sql_severity,
sjh.last_outcome_message as message,
sjh.last_run_outcome as run_status,
sjh.last_run_date as run_date,
sjh.last_run_time as run_time,
sjh.last_run_duration as run_duration,
null as operator_emailed,
null as operator_netsentname,
null as operator_paged,
null as retries_attempted,
sts.server_name as server
FROM msdb.dbo.sysjobservers sjh
JOIN msdb.dbo.systargetservers sts ON (sts.server_id = sjh.server_id)
JOIN msdb.dbo.sysjobs_view sj ON(sj.job_id = sjh.job_id)
WHERE sj.name = 'MULTI_SERVER_JOB_NAME'https://dba.stackexchange.com/questions/178159
复制相似问题