Использование sp_add_jobstep в задании для добавления шага к этому заданию на самом деле не запускает добавленный шаг? - PullRequest
0 голосов
/ 23 января 2019

В качестве теста я создал работу в 2 этапа. Первый шаг добавляет новый шаг задания в качестве шага 2, добавленный шаг ждет в течение 10 секунд, а затем выходит из отчета об успешном выполнении задания. Следующий шаг генерирует ошибку, но после добавления нового шага его никогда не следует запускать.

Что касается истории заданий, то на самом деле происходит то, что новый шаг задания успешно добавляется как шаг 2, а имя шага 2 - это имя добавленного шага, но шаг 2 генерирует ошибку, которую должен сделать шаг 3 при этом. точка, даже если шаг 3 никогда не должен выполняться.

По сути, он работает так, как будто шаг 2 отсутствует. В истории заданий шаг 2 называется правильным именем шага, но выполняемый код фактически является шагом 3.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Отвечая на мой собственный вопрос на случай, если у кого-то будет похожая ситуация с моим.

Другие пользователи предложили выдать ошибку, которая определенно будет работать, однако в моей базе данных все ошибки на запланированных заданиях регистрируются и проверяются.Причина, по которой я хочу остановить работу, заключается в том, что я хотел бы избежать запуска заданий в праздничные дни, поэтому создание ошибки может привести к ненужному пересмотру.

Для меня сработало создание хранимой процедуры, которая проверяет, является ли онапраздник.Если это не выходной, работа продолжается как обычно.Если это выходной, задание будет использовать msdb.dbo.sp_stop_job, чтобы остановить задание без ошибки.Некоторые из этих заданий выполняются ежемесячно, поэтому я также использовал sp_add_schedule и sp_attach_schedule для создания и прикрепления однократного прогона на следующий день.

0 голосов
/ 23 января 2019

Я думаю, что есть путаница в том, как на самом деле работает работа.

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

Итак, когда вы изначально вызываете задание, оно выполнит именно то, что у вас есть:

  • Шаг 1: создайте новый шаг 2
  • Шаг 2: сгенерировать ошибку

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

Что касается путаницы с именами - история заданий не записывается до тех пор, пока процесс не будет завершен, и она регистрирует информацию, используя INT step_id, а не уникальный идентификатор для шага, поэтому вы видите новое имя шага при просмотре история, даже если основная логика, которая была выполнена, взята из вашего первоначального шага 2. Вероятно, следует обратиться к MS, чтобы переключиться на использование UID, чтобы избежать этих случаев.

...