Запуск пакета служб SSIS с использованием dtexec

Я запускаю пакет служб SSIS, используя dtexec. Пакет нормально работает в BIDS на моей системе. Когда я создаю задание агента сервера SQL для запуска пакета по расписанию. Шаг выполнения пакета запланирован как задача T-SQL, а не как пакет SSIS). Работа не сообщает об ошибке, но она даже не создает выходной файл Excel @ мой желаемый пункт назначения на сервере.

Кроме того, когда я отдельно запускаю команду в командной оболочке, она возвращает мне ошибки, показанные ниже. Периодически он также будет возвращать ошибки в задаче FileSystem, которую я использую для копирования файлов, говоря, что источник или место назначения не существует!! Когда в BIDS у меня работают одинаковые значения переменных, почему не удается выполнить задание SQL?

Started:  7:33:27 PM
Error: 2012-10-26 19:33:27.60
   Code: 0xC0016016
   Source:
   Description: Failed to decrypt protected XML node "DTS:Password" with error 0
x8009000B "Key not valid for use in specified state.". You may not be authorized
to access this information. This error occurs when there is a cryptographic err
or. Verify that the correct key is available.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC00F9304
   Source: GICSReport Connection manager "Excel Connection Manager"
   Description: SSIS Error Code DTS_E_OLEDB_EXCEL_NOT_SUPPORTED: The Excel Conne
ction Manager is not supported in the 64-bit version of SSIS, as no OLE DB provi
der is available.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC020801C
   Source: Data Flow Task Excel Destination [22]
   Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAG
ER.  The AcquireConnection method call to the connection manager "Excel Connecti
on Manager" failed with error code 0xC00F9304.  There may be error messages post
ed before this with more information on why the AcquireConnection method call fa
iled.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC0047017
   Source: Data Flow Task SSIS.Pipeline
   Description: component "Excel Destination" (22) failed validation and returne
d error code 0xC020801C.
End Error
Error: 2012-10-26 19:33:27.78
   Code: 0xC004700C
   Source: Data Flow Task SSIS.Pipeline
   Description: One or more component failed validation.
End Error
Error: 2012-10-26 19:33:27.79
   Code: 0xC0024107
   Source: Data Flow Task
   Description: There were errors during task validation.
End Error
DTExec: The package execution returned DTSER_FAILURE (1).
Started:  7:33:27 PM
Finished: 7:33:27 PM
Elapsed:  0.343 seconds

Пожалуйста, помогите!:) .... Должен ли я добавить все переменные, менеджеры соединений и все в мой файл конфигурации? В настоящее время я добавил только некоторые ppty-значения переменных и диспетчеров соединений, но ни одна комбинация не работает эффективно.

2 ответа

Первая ошибка, на которую я бы обратил внимание: "Диспетчер соединений Excel не поддерживается в 64-разрядной версии служб SSIS, так как поставщик OLE DB недоступен".

Стандартные драйверы Excel существуют только в 32-битном адресном пространстве. BIDS/SSDT - это 32-битное приложение, поэтому исходники и пункты назначения Excel работают отлично. Однако, когда вы запускаете их из командной строки / агента SQL, вам необходимо явно использовать 32-битную версию программы DTEXEC.

Шаг 1 будет гарантировать, что вы можете запустить пакет из командной строки на сервере, на котором агент выполняет от своего имени. Предполагая, что ваш SQL Server установлен в обычном месте, вам, вероятно, доступен один из следующих DTEXEC.exe

C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
c:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe
C:\Program Files\Microsoft SQL Server\120\DTS\Binn\DTExec.exe
C:\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn\DTExec.exe
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\DTExec.exe
C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\DTExec.exe

Вы захотите использовать версию (x86). Будущие читатели, если вы используете 32-версию Windows (возможно, Windows 2003), первые 3 будут единственными доступными вам опциями. Как указывалось в сообщении об ошибке Вивека, он выполняет пакет служб SSIS в 64-битном режиме.

dtexec предоставляет ключ командной строки /X86, позволяющий беспрепятственно использовать один и тот же исполняемый файл для 32- и 64-разрядных операций. ВРАНЬЕ! Документация вызывает это, но кто читает документацию?

Эта опция используется только агентом SQL Server. Эта опция игнорируется, если вы запускаете утилиту dtexec в командной строке.

Итак, вам нужно будет запустить ваш пакет, указав явный путь

C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe /file C:\folder\GICSReport.dtsx

Я вижу "Не удалось расшифровать защищенный узел XML" в ваших выходных данных, и вы также заявляете, что используете файлы конфигурации, так что вы, скорее всего, можете изменить свой PackageProtectionLevel со стандартного EncryptSensitiveWithUserKey на DontSaveSensitive. Эта функция существует для предотвращения случайного раскрытия конфиденциальных данных (паролей), но, поскольку вы уже обрабатываете это с помощью файлов конфигурации, это не должно быть проблемой.... Это может быть ошибкой одного из других уровней защиты пакетов, когда я думаю об этом.

В любом случае, попробуйте сначала запустить из 32-битного исполняемого файла. Если это не сработает, попробуйте изменить уровень защиты пакета, как указано. Если какой-либо из них заставляет пакет работать должным образом, попробуйте запустить ту же команду из агента SQL.

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

Вот решение, если вы пытаетесь запустить пакет служб SSIS с dtexec из транзакционного SQL, который содержит импорт Excel.

  1. Создайте пакетный файл, который содержит следующий код.

    cd C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ DTS \ Binn \ DTEXEC.exe / DE "пароль" /F "C:\mySSISfolder\package.dtsx"

  2. Создайте ярлык, указывающий на ваш командный файл, установите properties\advanced по ярлыку для запуска от имени администратора.

  3. из вашей процедуры транзакции SQL выполните следующую команду

    exec xp_cmdshell 'C:\myfolder\runssis_sc.lnk'

Другие вопросы по тегам