1

何が起こっているのかわかりませんか?ジョブが午後 11 時 50 分に実行を停止したにもかかわらず、まだメールが届きます。これは、昨夜の午後 7 時に開始されたことを考えると、明らかに 7 時間未満です。何らかの理由で、昨日はテストで機能しましたが、今日はそうではありません..何かアイデアはありますか???

SELECT *
FROM msdb..sysjobactivity aj
JOIN msdb..sysjobs sj on sj.job_id = aj.job_id
WHERE DATEDIFF(HOUR,aj.start_execution_date,GetDate())> 7
AND aj.start_execution_date IS NOT NULL 
AND sj.name = 'Nightly_Job'
and not exists ( -- make sure this is the most recent run 
select 1 
from msdb..sysjobactivity new 
where new.job_id = aj.job_id 
and new.start_execution_date > aj.start_execution_date)
if @@ROWCOUNT > 0
BEGIN
USE msdb
            EXEC sp_send_dbmail
                @profile_name = 'DB_Mail',
                @recipients = 'xxx@yyy.com',
                @subject = 'T-SQL Query Result',
                @body = 'The Nightly_Job has been running 7 
4

1 に答える 1

2

クエリの問題は、ジョブが開始されてからどれくらいの時間が経過したかだけをチェックすることです...ジョブがいつ完了したかは考慮されません。

7時間以内にジョブの他の実行がない場合、クエリを最新の実行に制限するチェックは、以前に完了したジョブを除外しません...クエリは、7時間以上前に開始されたジョブを返します。ただし、この場合は4時間以内に完了します。

完了したジョブを除外するようにクエリを修正するには、次のようにクエリを変更します。

SELECT *
FROM 
    msdb..sysjobactivity aj
    JOIN msdb..sysjobs sj on sj.job_id = aj.job_id
WHERE 
    DATEDIFF(HOUR, aj.start_execution_date, 
            ISNULL(aj.stop_execution_date, GetDate()) )> 7 
    AND sj.name = 'Nightly_Job'
    AND NOT EXISTS ( -- make sure this is the most recent run 
        SELECT 1 
        FROM msdb..sysjobactivity new 
        WHERE new.job_id = aj.job_id 
        AND new.start_execution_date > aj.start_execution_date)
于 2012-08-01T15:36:57.843 に答える