Почему происходит сбой подключения ODBC при запуске загрузки служб SSIS в Visual Studio, но не при запуске того же пакета с помощью служебной программы выполнения пакета

Я работаю над загрузкой пакета Data Mart в SSIS 2012. При попытке выполнить пакет в Visual Studio я получаю эту ошибку:

"Ошибка вызова метода AcquireConnection для диспетчера соединений Data Warehouse.ssusr с кодом ошибки 0xC0014009".

Когда я проверяю подключение хранилища данных диспетчера подключений, я вижу, что оно прошло.

Когда я выполняю пакет за пределами Visual Studio с помощью утилиты выполнения пакета, пакет запускается.

Я не понимаю, что происходит.

Пакет также отказывается запускаться с использованием расписания заданий SQL Server, если это имеет какое-либо отношение к чему-либо.

2 ответа

Решение

Делая некоторые предположения здесь, но я собираюсь предположить, что это проблема 32 против 64 бит. Чтобы проверить, попробуйте эти две команды из командной строки (Windows Key, R, cmd.exe или Пуск, Выполнить, cmd.exe)

"C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\dtexec.exe" /file C:\myPackage.dtsx
"C:\Program Files\Microsoft SQL Server\110\DTS\Binn\dtexec.exe" /file C:\myPackage.dtsx

Первый запускает ваш пакет в 32-битном режиме, а второй запускает его в 64-битном режиме. Это будет иметь значение, так как ваши драйверы и все созданные вами DSN будут видны только в 32/64 битном мире.

Исправление SSDT

После того, как вы определили, какая вам нужна, вероятно, 32-битная версия, вам нужно убедиться, что ваш проект использует подходящее время выполнения. Щелкните правой кнопкой мыши свой проект и выберите "Свойства", а затем перейдите на вкладку "Отладка" в разделе "Свойства конфигурации".

Вкладка отладки, Run64BitRuntime

После инвертирования значения Run64BitRuntime я предполагаю, что ваш пакет будет работать изнутри SSDT.

Исправление агента SQL

Вам нужно будет отредактировать существующее задание агента SQL, чтобы изменить степень битности шага задания. Это будет на вкладке "Конфигурация", а затем на вкладке "Дополнительно". Проверьте / снимите флажок 32-разрядной среды выполнения.

Агент 32-битная вкладка

Ложь и обман

Наблюдательные люди могут увидеть, что dtexec предлагает /X86 вариант. Не верь этому. Единственный способ получить правильную битность - это явно вызвать правильный dtexec.exe. В документации даже сказано столько, но никто не читает документацию.

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

Сначала я попытался обновить старую строку подключения диспетчера соединений из-за обновления имени сервера.

Не делай этого.

Я создал новый диспетчер соединений с обновленной строкой подключения и повторно развернул свое решение после изменения источника диспетчера соединений для любых модулей/задач, использующих старый диспетчер соединений.

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