0

複数のSQLServerでSQLジョブを監視し、詳細をWebフォームに追加する方法を見つけようとしています。これをアプリプール、サービス、およびタスクで実行しましたが、ジョブも監視する必要があります。ジョブ名、実行時間、実行日、ステータスなどを保存するために作成したグリッドがあります。

私はこの質問を見つけました:

C#でSQLServerエージェントのジョブ情報を監視する方法

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)";

彼のクエリは良さそうですが、複数のサーバーを監視できるように、サーバーIPを含むデータベース(dbo.Monitor)からもう1つのテーブルを結合する必要があります。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をどこに追加できますか?反対票を投じる前に、さらに情報を追加する必要がある場合はお知らせください。

4

1 に答える 1

0

申し訳ありませんが、私はしばらくこれをチェックしていませんでした。異なるドメインの 2 つのサーバーで sys ジョブをクエリしようとしているため、クエリが機能しません。

両方のサーバーから sys ジョブからデータを取得し、データを 1 つの形式で表示するには、サーバーをリンクする必要がありました。

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

于 2012-03-01T22:01:34.247 に答える