2016-12-08 9 views
0

У меня есть ситуация, когда у меня есть 1 пакет (пакет A), который занимает около 3 минут для завершения, и еще один пакет (пакет B), который занимает около 4 минут. Мне нужен пакет A для запуска каждые 5 минут через задание и пакет B для запуска каждые 15 минут. Однако пакет B может работать только после завершения пакета A.Планирование работы SQL Server 2012

Пример

5- Пакет работает

10- Пакет работает

15- пробегов Пакет A, а затем пакет B

20- Пакет работает

25- Пакет A работает

30- Пакет A работает, а затем пакет B

Есть ли способ запланировать рабочие места в соответствии с требованиями выше?

Настоятельно оцените вашу помощь. Заранее спасибо!

+0

Запланируйте первое задание как пакет A для запуска в 5/10/20/25/35/40/50/55 и запишите второе задание с двумя шагами: пакет a и пакет b для запуска в 0/15/30/45 и заставить его перемещаться только в пакет b/step 2, как только пакет a/step 1 будет успешным. – dfundako

+0

Или изменить пакет 'A' для запуска пакета' B', поскольку это последний шаг, когда это необходимо. – HABO

+0

'A' начинается в 02:15 и длится 3 минуты. 'B' начинается сразу после того, как' A' заканчивается в 02:18. 'A' снова начинается в 02:20, а' B' все еще работает, но 'B' рад работать до 02:22 вместе с буквой' A'. Правильно? – HABO

ответ

0

для пакета B я бы просто положить в логике, чтобы проверить, если Пакет был остановлен

сценарий ожидания будет

WHILE EXISTS (
SELECT 
    * 
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 = 'package A') 
BEGIN 
WAITFOR DELAY '00:00:30'; 
END 

Это будет проверять каждые 30 секунд, если Пакет был остановлен.

В качестве альтернативы вы создаете таблицу, которая будет отслеживать статус работы и иметь A для записи, чтобы отслеживать состояние.

+0

Любая идея о том, как выглядит скрипт для таблицы для отслеживания статуса? – Mutai

+0

да создать таблицу dbo.tracking (job_status, JOB_TITLE, job_id, – user3658750

+0

'создать таблицу dbo.tracking ( job_id IDENTITY (1,1) , JOB_TITLE VARCHAR (30) , job_status бит , job_time_start DateTime , job_time_end Дата и время) --at начала вашу работу вы бы установить статус 1 и в конце установите его в 0 - в начале вашей работы б вы могли бы сделать следующее ПОКА СУЩЕСТВУЕТ ( SELECT * ОТ слежения WHERE job_id = 1 и job_status = 1) BEGIN WAITFOR DELAY '00: 00: 30 '; END ' – user3658750