Как лучше всего запустить пакет MS SQL Server 2000 DTS из триггера?

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

Спасибо, Тим


person Bratch    schedule 30.10.2008    source источник


Ответы (3)


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

person ConcernedOfTunbridgeWells    schedule 31.10.2008

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

person sliderhouserules    schedule 04.11.2008

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

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

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

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

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

person Bratch    schedule 13.11.2008