Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
Сейчас работает job с двумя schedule. Schedule1 на заданное время суток, schedule2- повторяющийся через небольшое время. В зависимости от schedule, по которому запустился job, в одном его шаге немного меняется логика. Другие шаги одинаковы. Конечно, вызов по повторяющемуся schedule2 может запоздать, тогда schedule1 будет проигнорирован. Но за счёт разнесения времени вызовов это пока работает. Теперь нужно добавить schedule0. Разнесение времени уже не поможет, т.к. длительность выполнения по этому schedule0 заранее не определена. Job должен выполняться строго последовательно, т.е. одновременный запуск не требуется. Как можно решить задачу в SQL Agent? Не предлагать: Пересоздание job Ручное управление следующим schedule через "once time" Зацикливание job с эмуляцией schedule SSIS CLR Разнесение в несколько job тоже нежелательно, т.к. разнородных шагов может быть много и дублировать их не хочется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 12:30 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
Можно завести таблицу-семафор в которой фиксировать время старта/остановки заданий. При старте всех заданий проверять первым шагом состояние таблицы. Подумать что делать если какое-либо задание "повиснет"... Другой вариант пересмотреть логику исполнения - переделав все в одно задание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 13:00 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
tunknown Теперь нужно добавить schedule0. Разнесение времени уже не поможет, т.к. длительность выполнения по этому schedule0 заранее не определена. Job должен выполняться строго последовательно, т.е. одновременный запуск не требуется. Как можно решить задачу в SQL Agent? Для решения задачи нужно просто добавить schedule0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 13:28 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
tunknown, Запускайте джоб каждые 5 минут. На первом шаге проверяйте условие по своей логике -- надо запускаться или нет и с какими параметрами. Если надо запускаться сохраняйте куда-то свои параметры и переходите не следующие шаги, где эти параметры читайте и используйте. Если причины для запуска нет, то тормозитесь. Вообще в SSIS пакете у вас будет больше маневра. В том числе параллельность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 13:49 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
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. И фсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 14:03 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
alexeyvg Прочитал 3 раза, не понял, в чёт тут подвох? Для решения задачи нужно просто добавить schedule0. Нужно так: schedule0 в заданное время0, schedule1 всегда после schedule0, но не ранее времени1(позже можно), schedule2 регулярно в остальное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 14:08 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
aleks222 Нафига фсе эти чудеса с Schedule1-2-3? 1. Одно расписание. 2. Внутри проверять не "чем запущено", а "когда запущено". 3. И фсе. schedule0 запустить не ранее 0 schedule1 запустить не ранее 1, но позже отработавшего 0 schedule2 запускать во всё остальное время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 14:17 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
a_voronin сохраняйте куда-то свои параметры и переходите не следующие шаги, где эти параметры читайте и используйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 14:19 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
tunknown, можно использовать sp_getaplock для выполнения взаимоисключающих бизнес-процессов. И разные джобы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 14:24 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов можно использовать sp_getaplock для выполнения взаимоисключающих бизнес-процессов. И разные джобы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 14:28 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
tunknown aleks222 Нафига фсе эти чудеса с Schedule1-2-3? 1. Одно расписание. 2. Внутри проверять не "чем запущено", а "когда запущено". 3. И фсе. schedule0 запустить не ранее 0 schedule1 запустить не ранее 1, но позже отработавшего 0 schedule2 запускать во всё остальное время Вам бы в управдомы переквалифицироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2019, 15:54 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
Используйте в тексте джоба макроопределения '$(ESCAPE_SQUOTE(STRTDT))', '$(ESCAPE_SQUOTE(STRTTM))' Они выдают дату и время запуска джоба. Вот эта статья может пригодиться: https://www.mssqltips.com/sqlservertip/5731/how-to-pass-data-between-sql-server-agent-job-steps/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 08:14 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
uaggster Используйте в тексте джоба макроопределения '$(ESCAPE_SQUOTE(STRTDT))', '$(ESCAPE_SQUOTE(STRTTM))' Они выдают дату и время запуска джоба. 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 программист сразу пытается сделать "универсальный триггер логирования". И тут похоже - я, конечно, не знаю бизнес-задачи, но подозреваю, что её можно реализовать более просто, и используя джобы и шедулеры по назначению (а не как ТС, который хочет использовать шедулер как джоб). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 08:35 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
alexeyvg не знаю бизнес-задачи, но подозреваю, что её можно реализовать более просто, и используя джобы и шедулеры по назначению (а не как ТС, который хочет использовать шедулер как джоб). да собственно уже сказали - запуск каждые 5 минут, первым шагом проверка "что мы тут щас делать будем и по какой логике" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 10:26 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
alexeyvg Это можно и из msdb.dbo.sysjobactivity получить, только у ТС задача не просто запускать разные ветки в зависимости от шедурера alexeyvg Это всё напоминает вечный поиск начинающими программистами "универсального кода" alexeyvg Или каждый MSSQL программист сразу пытается сделать "универсальный триггер логирования". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 10:28 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
StarikNavy alexeyvg не знаю бизнес-задачи, но подозреваю, что её можно реализовать более просто, и используя джобы и шедулеры по назначению (а не как ТС, который хочет использовать шедулер как джоб). да собственно уже сказали - запуск каждые 5 минут, первым шагом проверка "что мы тут щас делать будем и по какой логике" tunknown alexeyvgИли каждый MSSQL программист сразу пытается сделать "универсальный триггер логирования". Ничего, с приходом опыта триггеры логирования будут переписаны, как и джобы :-) tunknown alexeyvgЭто можно и из msdb.dbo.sysjobactivity получить, только у ТС задача не просто запускать разные ветки в зависимости от шедурера Нужно как то ближе к бизнес-процессам, и менее универсально. Задача инъекции функциональности джобов в шедулер, "в общем виде", слишком сложна, и стоимость такого решения будет завышенной для бизнеса, то есть его ценность только в интересе разработчика. Стоимость - включая расходы на трудовые ресурсы для эксплуатации решения. А вот решить какую то бизнес задачу, не делая копи-паст джоба, намного проще. Например, если джоб делает бакапы логов раз в полчаса, а один раз в сутки (в 3 ночи) он должен сделать ещё и полный бакап, то это решается проверкой в шаг полного бакапа пары условий (время больше 3х ночи, и в эти сутки ещё не было полного бакапа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 11:12 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
tunknown, Убираете из основного задания все расписания. Делаете задания-запускатели. По одному на каждое расписание. Каждый запускатель сначала пытается получить эксклюзивный applock уровня сессии на общий ресурс. Если не удалось, то запускатель завершается. Иначе получает эксклюзивный applock уровня сессии на свой индивидуальный ресурс, запускает основное задание и ждет его завершения. Основное задание в месте ветвления функцией applock_test проверяет может ли получить блокировку на индивидуальные ресурсы запускатель. Если не мождет - значит было запущено этим запускателем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 11:26 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
invm tunknown, Убираете из основного задания все расписания. Делаете задания-запускатели. По одному на каждое расписание. Каждый запускатель сначала пытается получить эксклюзивный applock уровня сессии на общий ресурс. Если не удалось, то запускатель завершается. Иначе получает эксклюзивный applock уровня сессии на свой индивидуальный ресурс, запускает основное задание и ждет его завершения. Основное задание в месте ветвления функцией applock_test проверяет может ли получить блокировку на индивидуальные ресурсы запускатель. Если не мождет - значит было запущено этим запускателем. И зачем этот геморрой в свете декларации tunknown Job должен выполняться строго последовательно, т.е. одновременный запуск не требуется. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 11:49 |
|
||
|
Job с несколькими schedule
|
|||
|---|---|---|---|
|
#18+
aleks222, Глазки протри (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2019, 11:54 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39889114&tid=1686921]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 462ms |

| 0 / 0 |
