2012-05-31 3 views
6

Я создал пакет SSIS в SQL Server Business Intelligence Development Studio. Пакет отлично работает, если я запустил его, поэтому я развернул пакет.Как выполнить пакет SSIS, установленный в SQL Server в триггере

Затем я использовал мастер установки пакета и установил его на локальном SQL Server 2005.

Теперь я хочу использовать его в моем триггере.

Я знаю, как выполнить пакет из файла, но как его выполнить, когда он установлен в SQL Server?

спасибо.

+3

Честно говоря: я не думаю, что это хорошая идея для начала. Триггер должен быть очень скудным и средним - писать запись в таблицу или что-то в этом роде. Не более. Триггер никогда не должен вызывать длительную обработку - как пакет SSIS ... вы должны отделить это от выполнения триггера. –

+0

что мне нужно сделать, это написать файл на каждую вставленную строку. Я пошел с xp_cmdshell, но люди советуют мне не использовать его. Поэтому я написал пакет SSID и установил его на MSSQL. Все, что мне нужно сделать, это выполнить его, когда строка вставлена ​​в определенную таблицу, и я не знаю другого решения, а затем триггера. – no9

+0

Вам нужно записать записи в файл по мере их появления или будет ли приемлема некоторая задержка между вставкой и протоколированием в файл? – Mithrandir

ответ

7

Как я упоминал ранее: я бы не поставил такую ​​задачу в триггер. Поскольку вы не можете контролировать, когда и сколько раз срабатывает триггер, все триггеры должны быть очень короткими с точки зрения времени выполнения. Do не положить долговременную обработку в триггер!

Мой подход был бы:

  1. триггер записывает запись в таблицу («работу» таблицы или что вы хотите назвать его)

  2. задания (например, SQL Agent Работа), который запускается, например, каждые 5 минут. или независимо от того, что читает эту таблицу, и, если необходимо, записывает файл.

Это отделяет триггерный код от более длительного процесса фактического написания файла.

В противном случае производительность системы будет серьезно пострадали в плохом смысле этого потенциально очень давно работает триггер ....

+0

Благодарим за информацию. SSIS настроен на создание только одного файла. Ans триггер также вызывает только этот пакет SSIS. Поэтому он должен работать быстро, поскольку в файле это только одна запись. Но вы правы ... мне нужно сделать это правильно. – no9

1

Существует способ выполнить SSIS-пакеты из T-SQL, но я думаю, что это довольно небезопасный. Это включает в себя параметр «xp_cmdshell» и использование dtexec. Но это определенно не для использования в триггере! В любом случае, как отметил marc_s в своем комментарии, триггер должен быть очень скудным. Поскольку это часть транзакции команды запуска, любая продолжительная операция, особенно пакет SSIS, значительно замедлит вашу базу данных.

+0

Митрандир, пожалуйста, прочитайте мой комментарий к marc_s anwser. Любое предположение было бы самым оправданным. – no9

1

Я бы разломил это на отдельные этапы. Требование к файлу может быть там, но считайте это: пока каждая строка генерирует файл, действительно ли это разрыватель транзакций, если для создания файла требуется, возможно, пять или десять минут? И неужели это хуже, чем удары, которые вы увидите из запуска пакета SSIS из триггера?

Итак:

Шаг 1: триггер просто вставляет строку в другую таблицу с информацией, необходимой для создаваемого файла.
Шаг 2: измените свой SSIS-пакет, чтобы получить дополнительный ранний шаг, который опросает эту таблицу для любых новых записей, создает файлы по мере необходимости, а затем отмечает завершенные записи (или полностью удаляет их, но лично мне нравятся контрольные журналы).
Шаг 3: добавьте запланированное задание на сервер, который запускает этот пакет SSIS каждые 5 минут.

Если вы не хотите изменять свой SSIS-пакет, вместо этого вы можете создать хранимую процедуру, которая будет опробовать таблицу и выполнить пакет, и запланировать это в задании. Главное - уйти от идеи уволить пакет прямо с триггера.

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

+0

Thnak вам за информацию. Я буду держать вопрос открытым, как только я подтвержу все этапы (в случае возникновения каких-либо проблем). Еще раз спасибо. – no9

1

просто дополняет все другие ответы, вы должны окончательно не делать этого. Идея marc_s вставлять данные в таблицу и иметь работу каждые X минут - это лучший apporach, на мой взгляд.

PS1: Here является ссылкой о том, как позвонить в пакет из SP

PS2: Ansering вашего другого questiom, чтобы вызвать пакет, хранящийся на SQl с помощью DTExec, просто замените /FILE на /SQL

dtexec /sql "\YourPackage" 
Смежные вопросы