Задание обычно завершается через час. Но иногда это занимает больше времени или застревает. Есть ли способ настроить уведомление в SQL Server Agent, если задание не завершится через 1 час?Есть ли механизм в агенте SQL Server, который может отправлять уведомления о предупреждении, если задание не завершается временем отсечки?
0
A
ответ
2
SQL агент сервера по умолчанию не имеют такой mechanism..create еще одну работу, которая начинается после того, как один час от работы STARTTIME, который вы хотите отслеживать и задания SYS запрос для завершенного статуса
1
Единственное решение, которое я могу на этом этапе, создав другое задание монитора и вызовите следующий запрос в нем для своей работы, если разница между временем начала и временем останова более 60 минут, то вы уведомляете об электронной почте.
SELECT
j.job_id AS 'JobId',
name AS 'JobName',
start_execution_date AS 'StartTime',
stop_execution_date AS 'StopTime',
avgruntimeonsucceed,
DATEDIFF(s,start_execution_date,GETDATE()) AS 'CurrentRunTime',
CASE WHEN stop_execution_date IS NULL THEN
DATEDIFF(ss,start_execution_date,stop_execution_date) ELSE 0 END 'ActualRunTime',
CASE
WHEN stop_execution_date IS NULL THEN 'JobRunning'
WHEN DATEDIFF(ss,start_execution_date,stop_execution_date)
> (AvgRunTimeOnSucceed + AvgRunTimeOnSucceed * .05) THEN 'LongRunning-History'
ELSE 'NormalRunning-History'
END 'JobRun',
CASE
WHEN stop_execution_date IS NULL THEN
CASE WHEN DATEDIFF(ss,start_execution_date,GETDATE())
> (AvgRunTimeOnSucceed + AvgRunTimeOnSucceed * .05) THEN 'LongRunning-NOW'
ELSE 'NormalRunning-NOW'
END
ELSE 'JobAlreadyDone'
END AS 'JobRunning'
FROM msdb.dbo.sysjobactivity ja
INNER JOIN msdb.dbo.sysjobs j ON ja.job_id = j.job_id
INNER JOIN (
SELECT job_id,
AVG
((run_duration/10000 * 3600) + ((run_duration%10000)/100*60) + (run_duration%10000)%100)
+
STDEV
((run_duration/10000 * 3600) + ((run_duration%10000)/100*60) + (run_duration%10000)%100) AS 'AvgRuntimeOnSucceed'
FROM msdb.dbo.sysjobhistory
WHERE step_id = 0 AND run_status = 1
GROUP BY job_id) art
ON j.job_id = art.job_id
WHERE
(stop_execution_date IS NULL) OR
(DATEDIFF(ss,start_execution_date,stop_execution_date) > 60
AND
CAST(LEFT(start_execution_date,11) AS DATETIME) = CAST(LEFT(GETDATE(),11) AS DATETIME))
ORDER BY start_execution_date DESC