powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Job с несколькими schedule
20 сообщений из 20, страница 1 из 1
Job с несколькими schedule
    #39889002
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас работает job с двумя schedule. Schedule1 на заданное время суток, schedule2- повторяющийся через небольшое время. В зависимости от schedule, по которому запустился job, в одном его шаге немного меняется логика. Другие шаги одинаковы. Конечно, вызов по повторяющемуся schedule2 может запоздать, тогда schedule1 будет проигнорирован. Но за счёт разнесения времени вызовов это пока работает. Теперь нужно добавить schedule0. Разнесение времени уже не поможет, т.к. длительность выполнения по этому schedule0 заранее не определена. Job должен выполняться строго последовательно, т.е. одновременный запуск не требуется. Как можно решить задачу в SQL Agent?

Не предлагать:
Пересоздание job

Ручное управление следующим schedule через "once time"

Зацикливание job с эмуляцией schedule

SSIS

CLR

Разнесение в несколько job тоже нежелательно, т.к. разнородных шагов может быть много и дублировать их не хочется.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889026
1C Developer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно завести таблицу-семафор в которой фиксировать время старта/остановки заданий.

При старте всех заданий проверять первым шагом состояние таблицы.

Подумать что делать если какое-либо задание "повиснет"...

Другой вариант пересмотреть логику исполнения - переделав все в одно задание.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889059
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown
Теперь нужно добавить schedule0. Разнесение времени уже не поможет, т.к. длительность выполнения по этому schedule0 заранее не определена. Job должен выполняться строго последовательно, т.е. одновременный запуск не требуется. Как можно решить задачу в SQL Agent?
Прочитал 3 раза, не понял, в чёт тут подвох?
Для решения задачи нужно просто добавить schedule0.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889085
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown,

Запускайте джоб каждые 5 минут. На первом шаге проверяйте условие по своей логике -- надо запускаться или нет и с какими параметрами. Если надо запускаться сохраняйте куда-то свои параметры и переходите не следующие шаги, где эти параметры читайте и используйте. Если причины для запуска нет, то тормозитесь.

Вообще в SSIS пакете у вас будет больше маневра. В том числе параллельность.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889096
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown
Сейчас работает job с двумя schedule. Schedule1 на заданное время суток, schedule2- повторяющийся через небольшое время. В зависимости от schedule, по которому запустился job, в одном его шаге немного меняется логика. Другие шаги одинаковы. Конечно, вызов по повторяющемуся schedule2 может запоздать, тогда schedule1 будет проигнорирован. Но за счёт разнесения времени вызовов это пока работает. Теперь нужно добавить schedule0. Разнесение времени уже не поможет, т.к. длительность выполнения по этому schedule0 заранее не определена. Job должен выполняться строго последовательно, т.е. одновременный запуск не требуется. Как можно решить задачу в SQL Agent?

Не предлагать:
Пересоздание job

Ручное управление следующим schedule через "once time"

Зацикливание job с эмуляцией schedule

SSIS

CLR

Разнесение в несколько job тоже нежелательно, т.к. разнородных шагов может быть много и дублировать их не хочется.


Навязчивый бред.

Нафига фсе эти чудеса с Schedule1-2-3?
1. Одно расписание.
2. Внутри проверять не "чем запущено", а "когда запущено".
3. И фсе.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889100
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Прочитал 3 раза, не понял, в чёт тут подвох?
Для решения задачи нужно просто добавить schedule0.
Возможно, я не очень ясно написал. По schedule0 job может выполняться долго и не успеет завершиться к заданному началу schedule1.

Нужно так: schedule0 в заданное время0, schedule1 всегда после schedule0, но не ранее времени1(позже можно), schedule2 регулярно в остальное время.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889109
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Нафига фсе эти чудеса с Schedule1-2-3?
1. Одно расписание.
2. Внутри проверять не "чем запущено", а "когда запущено".
3. И фсе.
Когда будут запущены schedule1 и schedule2 неизвестно, т.к. и schedule0 будет работать заранее неизвестное время. Не хочется делать отдельную таблицу, что schedule0 и schedule1 отработали по одному разу в указанные сутки. Любой вызов job может длиться неопределённое время, в т.ч. и по schedule2.

schedule0 запустить не ранее 0

schedule1 запустить не ранее 1, но позже отработавшего 0

schedule2 запускать во всё остальное время
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889114
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin
сохраняйте куда-то свои параметры и переходите не следующие шаги, где эти параметры читайте и используйте.
Хотел использовать для этого результат xp_sqlagent_enum_jobs и msdb..sysschedules без дополнительных таблиц.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889117
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown,

можно использовать sp_getaplock для выполнения взаимоисключающих бизнес-процессов. И разные джобы.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889121
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
можно использовать sp_getaplock для выполнения взаимоисключающих бизнес-процессов. И разные джобы.
Благодарю, надо подумать.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889172
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown
aleks222
Нафига фсе эти чудеса с Schedule1-2-3?
1. Одно расписание.
2. Внутри проверять не "чем запущено", а "когда запущено".
3. И фсе.
Когда будут запущены schedule1 и schedule2 неизвестно, т.к. и schedule0 будет работать заранее неизвестное время. Не хочется делать отдельную таблицу, что schedule0 и schedule1 отработали по одному разу в указанные сутки. Любой вызов job может длиться неопределённое время, в т.ч. и по schedule2.

schedule0 запустить не ранее 0

schedule1 запустить не ранее 1, но позже отработавшего 0

schedule2 запускать во всё остальное время


Вам бы в управдомы переквалифицироваться.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889350
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используйте в тексте джоба макроопределения '$(ESCAPE_SQUOTE(STRTDT))', '$(ESCAPE_SQUOTE(STRTTM))'
Они выдают дату и время запуска джоба.
Вот эта статья может пригодиться:
https://www.mssqltips.com/sqlservertip/5731/how-to-pass-data-between-sql-server-agent-job-steps/
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889355
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Используйте в тексте джоба макроопределения '$(ESCAPE_SQUOTE(STRTDT))', '$(ESCAPE_SQUOTE(STRTTM))'
Они выдают дату и время запуска джоба.
Это можно и из msdb.dbo.sysjobactivity получить, только у ТС задача не просто запускать разные ветки в зависимости от шедурера, но и:
tunknown
По schedule0 job может выполняться долго и не успеет завершиться к заданному началу schedule1.

Нужно так: schedule0 в заданное время0, schedule1 всегда после schedule0, но не ранее времени1(позже можно), schedule2 регулярно в остальное время.
tunknown
Когда будут запущены schedule1 и schedule2 неизвестно, т.к. и schedule0 будет работать заранее неизвестное время. Не хочется делать отдельную таблицу, что schedule0 и schedule1 отработали по одному разу в указанные сутки. Любой вызов job может длиться неопределённое время, в т.ч. и по schedule2.

schedule0 запустить не ранее 0

schedule1 запустить не ранее 1, но позже отработавшего 0

schedule2 запускать во всё остальное время


Это всё напоминает вечный поиск начинающими программистами "универсального кода"

Типа, "Зачем делать разные процедуры с SELECT ... для разных таблиц, лучше сделать процедуру типа SELECT @ColumnNames from @tableName"
Или каждый MSSQL программист сразу пытается сделать "универсальный триггер логирования".

И тут похоже - я, конечно, не знаю бизнес-задачи, но подозреваю, что её можно реализовать более просто, и используя джобы и шедулеры по назначению (а не как ТС, который хочет использовать шедулер как джоб).
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889413
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
не знаю бизнес-задачи, но подозреваю, что её можно реализовать более просто, и используя джобы и шедулеры по назначению (а не как ТС, который хочет использовать шедулер как джоб).

да собственно уже сказали - запуск каждые 5 минут, первым шагом проверка "что мы тут щас делать будем и по какой логике"
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889414
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Это можно и из msdb.dbo.sysjobactivity получить, только у ТС задача не просто запускать разные ветки в зависимости от шедурера
Запускать чуть разные. Отсюда и желание универсальности.

alexeyvg
Это всё напоминает вечный поиск начинающими программистами "универсального кода"
Верно.

alexeyvg
Или каждый MSSQL программист сразу пытается сделать "универсальный триггер логирования".
Done
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889436
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarikNavy
alexeyvg
не знаю бизнес-задачи, но подозреваю, что её можно реализовать более просто, и используя джобы и шедулеры по назначению (а не как ТС, который хочет использовать шедулер как джоб).

да собственно уже сказали - запуск каждые 5 минут, первым шагом проверка "что мы тут щас делать будем и по какой логике"
Не, это не бизнес-задача. Это какой бизнесмен-нефтяник, или маркетолог-ритэйлер, скажет, "а вот мне нужно, что бы пятый шаг джоба запускался по шедуреру №3"???

tunknown
alexeyvgИли каждый MSSQL программист сразу пытается сделать "универсальный триггер логирования".
Done Чутьё меня не подвело!
Ничего, с приходом опыта триггеры логирования будут переписаны, как и джобы :-)

tunknown
alexeyvgЭто можно и из msdb.dbo.sysjobactivity получить, только у ТС задача не просто запускать разные ветки в зависимости от шедурера
Запускать чуть разные. Отсюда и желание универсальности.Это часто очень правильно, лечше, чем копи-паст, но у вас уж больно запутанный подход.

Нужно как то ближе к бизнес-процессам, и менее универсально.

Задача инъекции функциональности джобов в шедулер, "в общем виде", слишком сложна, и стоимость такого решения будет завышенной для бизнеса, то есть его ценность только в интересе разработчика. Стоимость - включая расходы на трудовые ресурсы для эксплуатации решения.

А вот решить какую то бизнес задачу, не делая копи-паст джоба, намного проще.

Например, если джоб делает бакапы логов раз в полчаса, а один раз в сутки (в 3 ночи) он должен сделать ещё и полный бакап, то это решается проверкой в шаг полного бакапа пары условий (время больше 3х ночи, и в эти сутки ещё не было полного бакапа)
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889443
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown,

Убираете из основного задания все расписания.
Делаете задания-запускатели. По одному на каждое расписание.

Каждый запускатель сначала пытается получить эксклюзивный applock уровня сессии на общий ресурс.
Если не удалось, то запускатель завершается.
Иначе получает эксклюзивный applock уровня сессии на свой индивидуальный ресурс, запускает основное задание и ждет его завершения.

Основное задание в месте ветвления функцией applock_test проверяет может ли получить блокировку на индивидуальные ресурсы запускатель. Если не мождет - значит было запущено этим запускателем.
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889465
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
tunknown,

Убираете из основного задания все расписания.
Делаете задания-запускатели. По одному на каждое расписание.

Каждый запускатель сначала пытается получить эксклюзивный applock уровня сессии на общий ресурс.
Если не удалось, то запускатель завершается.
Иначе получает эксклюзивный applock уровня сессии на свой индивидуальный ресурс, запускает основное задание и ждет его завершения.

Основное задание в месте ветвления функцией applock_test проверяет может ли получить блокировку на индивидуальные ресурсы запускатель. Если не мождет - значит было запущено этим запускателем.


И зачем этот геморрой в свете декларации

tunknown
Job должен выполняться строго последовательно, т.е. одновременный запуск не требуется.


?
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39889467
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

Глазки протри (с)
...
Рейтинг: 0 / 0
Job с несколькими schedule
    #39891239
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Убираете из основного задания все расписания.
Делаете задания-запускатели. По одному на каждое расписание.
Благодарю.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Job с несколькими schedule
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]