12

У меня только что запланированное задание SQL Server выполнялось дольше, чем обычно, и я действительно мог сделать это, установив тайм-аут, чтобы остановить его через определенный промежуток времени.Тайм-аут работы агента SQL Server

Возможно, я немного ослеп, но я не могу найти способ установить тайм-аут для работы. Кто-нибудь знает, как это сделать?

Thanks

+1

+1 Там нет видимого свойства «тайма-аута» в редакторе заданий. Меня интересует то, что люди придумали. – Tomalak

+0

Я думаю, вам нужно добавить параметр типа WAITFOR в SQL. –

ответ

10

Мы делаем что-то вроде кода ниже, как часть подсистемы обработки задания ночной - это гораздо сложнее, чем это на самом деле в реальности; например, мы обрабатываем несколько взаимозависимых комплектов рабочих мест, а также прочитать в именах заданий и значении таймаута из таблиц конфигурации - но это захватывает мысль:

DECLARE @JobToRun NVARCHAR(128) = 'My Agent Job' 
DECLARE @dtStart DATETIME = GETDATE(), @dtCurr DATETIME 
DECLARE @ExecutionStatus INT, @LastRunOutcome INT, @MaxTimeExceeded BIT = 0 
DECLARE @TimeoutMinutes INT = 180 

EXEC msdb.dbo.sp_start_job @JobToRun 
SET @dtCurr = GETDATE() 
WHILE 1=1 
BEGIN 
    WAITFOR DELAY '00:00:10' 
    SELECT @ExecutionStatus=current_execution_status, @LastRunOutcome=last_run_outcome 
    FROM OPENQUERY(LocalServer, 'set fmtonly off; exec msdb.dbo.sp_help_job') where [name] = @JobToRun 
    IF @ExecutionStatus <> 4 
    BEGIN -- job is running or finishing (not idle) 
     SET @dtCurr=GETDATE() 
     IF DATEDIFF(mi, @dtStart, @dtCurr) > @TimeoutMinutes 
     BEGIN 
      EXEC msdb.dbo.sp_stop_job @[email protected]     
      -- could log info, raise error, send email etc here 
     END 
     ELSE 
     BEGIN 
      CONTINUE 
     END 
    END 
    IF @LastRunOutcome = 1 -- the job just finished with success flag 
    BEGIN 
     -- job succeeded, do whatever is needed here 
     print 'job succeeded'         
    END 

END 
2

Что это за работа? Возможно, вам захочется рассмотреть вопрос о сдаче всей работы в TSQL-скрипт в цикле While. Очевидно, что условием проверки является разность во времени между текущим временем и временем начала работы.

Радж

+0

С этой конкретной работой я мог разбить ее ... Я просто надеялся, что может быть «правильное» решение. Спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^