2011-09-19 22 views
0

我想找出一种方法来监视多个SQL Server上的SQL作业,并将详细信息添加到Web窗体。我已经通过App Pools,Services和Tasks完成了这项工作,但现在我还需要监控工作。我有我创建存储像作业名称,运行时间,运行日期,状态等如何为多个服务器创建一个SQL作业网格?

事情一格,我发现这个问题:

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

请问您可以与我们分享您的解决方案吗? – 2011-09-26 08:26:19

+0

我不知道是否有人对解决方案感兴趣,但我已经弄明白了。 – Matt

+0

如果你已经知道了,请马上发布解决方案 –

回答

0

对不起,我有一段时间没有检查过。我的查询不起作用,因为我试图查询不同域中两台服务器上的sys作业。

我必须链接服务器才能从两台服务器的sys作业中获取数据并以一种形式显示数据。

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

相关问题