Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Остановка и перезапуск джоба в автоматическом режиме.  [new]
dermama
Member

Откуда:
Сообщений: 224
Коллеги, добрый день.
Ситуация следующая.
Необходимо реализовать процесс остановки джоба(запускает процедуру) после его запуска, в случае, если произойдет событие,(добавиться новая дата в таблицу) и тут же перезапускать его заново. После остановки и перезапука может появиться новая дата в таблице и процесс должен быть повторен. Так до тех пор, пока появление новых дат не прекратиться окончательно.

Можно это как то реализовать, посредством триггера, к примеру, или есть другие варианты?

Была задумка по ID Джоба (нашел его процедурой msdb.dbo.sp_help_job) сделать таблицу с флагами - 1 - джоб работает, 0 - джоб не работает.
Возможно, вы можете предложить другие варианты.
Заранее благодарен.
20 авг 19, 12:46    [21953340]     Ответить | Цитировать Сообщить модератору
 Re: Остановка и перезапуск джоба в автоматическом режиме.  [new]
andy st
Member

Откуда:
Сообщений: 796
dermama,
1. дождаться наступления события "..пока появление новых дат не прекратиться окончательно."
2. запустить джоб
?
20 авг 19, 12:54    [21953351]     Ответить | Цитировать Сообщить модератору
 Re: Остановка и перезапуск джоба в автоматическом режиме.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33366
Блог
dermama,

положите ваш функционал проверок сразу в джоб
20 авг 19, 13:04    [21953365]     Ответить | Цитировать Сообщить модератору
 Re: Остановка и перезапуск джоба в автоматическом режиме.  [new]
dermama
Member

Откуда:
Сообщений: 224
andy st,

иногда добавление новых дат может происходить утром, но в основном днем - поэтому и требуется автоматизация.
20 авг 19, 13:51    [21953440]     Ответить | Цитировать Сообщить модератору
 Re: Остановка и перезапуск джоба в автоматическом режиме.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
dermama
Возможно, вы можете предложить другие варианты.

Зависит от того, из чего состоит процедура. Если основное время занимает один большой запрос - то насколько целесообразно его прерывание?

Если есть много равномерных по времени кусков кода или цикл - то можно между ними (или в цикл) добавить проверку наличия новых записей с момента запуска, если новая запись обнаружена - кидать ошибку, в настройках джоба по ошибке сделать повторный запуск.
20 авг 19, 14:41    [21953491]     Ответить | Цитировать Сообщить модератору
 Re: Остановка и перезапуск джоба в автоматическом режиме.  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1220
не зная логики чего тоже сложно угадать

но вот допустим если внутненность логики не тяжелая
можно просто зациклить жоб - каждые 10 минут
если там что есть - он сделает
если нет - то и все
это прокатывает допустим
в догрузке данных по
SELECT top 1000
но конечно не всегда

PS
стопнуть жоб не проблема - из другого жоба
проверил статус и стопнул если что
вот кусок не мой - но РАБОЧИЙ
а вот что получится в результате стопа того жоба - знать может только автор.
Мне вот самому интересно если там открыто скажем 3 транзакции - по идее они должны корректно откатиться ??

DECLARE job_id CURSOR
FOR
SELECT      job.job_id
FROM      msdb.dbo.sysjobs_view job
JOIN
    msdb.dbo.sysjobactivity activity
	ON     job.job_id = activity.job_id
JOIN
    msdb.dbo.syssessions sess
	ON     sess.session_id = activity.session_id
JOIN
(
    SELECT
        MAX( agent_start_date ) AS max_agent_start_date
    FROM
        msdb.dbo.syssessions
) sess_max
ON
    sess.agent_start_date = sess_max.max_agent_start_date
WHERE 
    run_requested_date IS NOT NULL AND 
    stop_execution_date IS NULL 
	AND    job.name IN (N'job1', N'job12')

OPEN job_id

DECLARE @Job_id UNIQUEIDENTIFIER

FETCH FROM job_id INTO @Job_id
WHILE @@FETCH_STATUS = 0
BEGIN
	
	EXEC dbo.sp_stop_job @job_id = @Job_id
	
FETCH FROM job_id INTO @Job_id
END
CLOSE job_id
DEALLOCATE job_id
21 авг 19, 15:24    [21954529]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить