2011-09-19 49 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