如何为多个服务器创建SQL作业网格

本文关键字:创建 SQL 作业 网格 服务器 | 更新日期: 2023-09-27 18:08:56

我正试图找出一种方法来监控多个SQL服务器上的SQL作业,并将详细信息添加到web表单。我已经在应用程序池、服务和任务中做到了这一点,但现在我也需要监控工作。我创建了一个网格,用于存储作业名称、运行时间、运行日期、状态等信息。

我发现了这个问题:

如何在c#中监视SQL Server Agent Job信息

string sqlJobQuery = "select j.job_id, j.name, j.enabled, jh.run_status," +
" js.last_outcome_message, jh.run_date, jh.step_name, jh.run_time" +
" from sysjobs j left join sysjobhistory jh on (j.job_id = jh.job_id)" +
" left join sysjobservers js on (j.job_id = js.job_id)" +
" where jh.run_date = (select Max(run_date) from sysjobhistory)" +
" and jh.run_time = (select Max(run_time) from sysjobhistory)";

他的查询看起来不错,但我需要加入一个表从我的数据库(dbo.Monitor),其中包括一个服务器IP,所以我可以监控多个服务器。我尝试在多个地方添加LEFT JOIN Monitor.dbo.SQLJobs,但它从不工作。下面是我正在运行的查询:

@serverIP       nvarchar(20),
@JobID          nvarchar(100)
SELECT Monitor.dbo.SQLJobs.ServerIP, msdb.dbo.sysjobs.job_id, msdb.dbo.sysjobs.name, 
msdb.dbo.sysjobhistory.run_date, msdb.dbo.sysjobhistory.run_time, msdb.dbo.sysjobhistory.run_status, msdb.dbo.sysjobhistory.step_name
FROM msdb.dbo.sysjobs LEFT JOIN msdb.dbo.sysjobhistory
ON (msdb.dbo.sysjobs.job_id = msdb.dbo.sysjobhistory.job_id)
WHERE Monitor.dbo.SQLJobs.ServerIP = @serverIP
AND msdb.dbo.sysjobs.job_id = @JobID
AND msdb.dbo.sysjobhistory.run_date = (SELECT MAX(run_date) FROM msdb.dbo.sysjobhistory)
AND msdb.dbo.sysjobhistory.run_time = (SELECT MAX(run_time) FROM msdb.dbo.sysjobhistory)
AND msdb.dbo.sysjobhistory.step_name <> '(Job outcome)'

我可以在哪里添加另一个JOIN以使此查询工作?如果我需要添加更多的信息,请告诉我,然后再投票给我。

如何为多个服务器创建SQL作业网格

对不起,我有一段时间没有检查这个了。我的查询将无法工作,因为我试图在不同域的两台服务器上查询sys作业。

我必须连接服务器,以便从两个服务器的sys作业中获取数据,并以一种形式显示数据。

http://msdn.microsoft.com/en-us/library/ff772782.aspx