我正在尝试找出一种方法来监视多个SQL Server上的SQL作业并将详细信息添加到Web表单中。我已经使用App Pools,Services和Tasks完成了这项工作,但现在我也需要监控工作。我有一个网格,我创建的网格存储工作名称,运行时间,运行日期,状态等等。
我发现了这个问题:
How to monitor SQL Server Agent Job info in C#
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以使此查询有效?如果我需要在投票之前添加更多信息,请告诉我。
答案 0 :(得分:0)
对不起家伙我有一段时间没有检查过这个。我的查询无效,因为我试图在不同域中的两台服务器上查询sys作业。
我必须链接服务器才能从两个服务器的sys作业中获取数据,并以一种形式显示数据。