Каков наилучший способ выполнения пакета DTS MS SQL Server 2000 из триггера? - PullRequest
0 голосов
/ 31 октября 2008

Я оглянулся и нашел несколько идей о том, как это сделать, но не нашел лучшего способа. Одной из идей было использование sp_start_job для запуска задания агента SQL Server, которое запускает пакет DTS. Если это лучший способ сделать это, то следующий вопрос будет: «Как мне запланировать пакет DTS из задания и сделать его не повторяющимся?»

Спасибо, Тим

Ответы [ 3 ]

1 голос
/ 04 ноября 2008

Я бы не советовал связывать такую ​​функциональность с триггером. Триггеры должны быть быстрыми. Я не думаю, что есть какой-либо способ запустить пакет DTS, который будет настолько быстрым, как I хотел бы, чтобы был триггер. Если это резонирует с вами, то я бы предложил, чтобы ваш триггер просто вставлял строку в специальную таблицу, а затем выполнял задание, которое выполняется так часто, как вам нужно для вашей цели (каждую минуту? Каждые 10 секунд?), Которая отслеживает эту таблицу и запускает соответствующий пакет DTS по мере необходимости.

1 голос
/ 31 октября 2008

xp_cmdshell позволит вам выполнить dtsrun.

0 голосов
/ 14 ноября 2008

Вместо использования xp_cmdshell я сделал это:

При изменении определенного значения в таблице триггер использует msdb.sp_start_job для запуска задания. Это задание не должно выполняться по расписанию, только по инициативе пользователя. Я установил расписание работы на один раз, что сейчас в прошлом, и снял флажок с включенным.

Это задание имеет один шаг: DTSRun / ~ Z0xHEXENCRYPTEDVALUE. Пакет DTS копирует некоторые строки с этого сервера на другой сервер на другой платформе и в случае успеха сбрасывает значения в таблице с помощью триггера в следующий раз. Триггер проверяет значение таблицы перед вызовом sp_start_job, чтобы задание запускалось только при определенных условиях, а не каждый раз.

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

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

...