Убедиться, что задания выполняются в главной (или другой, не входящей в группу доступности) базе данных.
Перед выполнением провести предварительную проверку с помощью логики if/else.
Инкапсулировать логику пакетного задания в хранимую процедуру, помещенную в целевую базу данных.
Убедиться в том, что задание завершается процедурой синхронизации на всех серверах, участвующих в топологии соответствующей группы доступности AlwaysOn.
За
Простота. Применить конструкцию if/else в качестве «оболочки» для решения вопроса о том, следует ли выполнять логику, довольно просто. Более того, когда вы передаете исполнение в целевую базу данных с помощью хранимой процедуры, вам не приходится сталкиваться с негативными явлениями, описанными в предыдущей статье.
Хранимые процедуры в качестве контейнеров логических конструкций. Я сторонник помещения логики пакетных заданий в хранимые процедуры и выполнения инструкции Ехес в SQL Server Agent Job Steps. В этом случае вам не нужно пытаться помещать всю логику и код в поле Command шага задания. Иначе говоря, преимущество использования сочетания конструкции if/else с хранимой процедурой состоит в том, что задача решается достаточно просто.
Против
Синхронизация. В сущности, необходимость синхронизации как таковая не является аргументом против: ведь детали задания должны быть синхронизированы на всех серверах вне зависимости от того, какого подхода вы придерживаетесь. Но я решил упомянуть здесь это обстоятельство для полноты картины.
Пакеты SSIS. Это главный аргумент против рассматриваемого подхода (использования динамического выявления внутри самих шагов задания), он состоит в том, что реализовать логику if/else внутри пакета выполнения SSIS (SSIS Package Execution) далеко не так просто. Возьмем задание агента SQL Server, которое должно выполнить шаг задания типа SQL Server Integration Services Package. Строго говоря, возможности внедрить в «инструкции по выполнению» такого задания проверку вида if/else не существует.
Планы по обслуживанию. Планы по обслуживанию сами по себе представляют отдельную тему, и я рассмотрю ее в одной из следующих статей. Помимо того что эти планы в некотором отношении не выдерживают никакой критики, у них имеется (в контексте нашей темы) один серьезный недостаток: в конечном счете они являются не более чем обыкновенными пакетами SSIS. Однако существует довольно простой способ внедрять в них логику if/else (когда речь идет об обычных пакетах SSIS, задача решается не так просто).
Комментарии