Почему происходит сбой подключения 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 я предполагаю, что ваш пакет будет работать изнутри SSDT.
Исправление агента SQL
Вам нужно будет отредактировать существующее задание агента SQL, чтобы изменить степень битности шага задания. Это будет на вкладке "Конфигурация", а затем на вкладке "Дополнительно". Проверьте / снимите флажок 32-разрядной среды выполнения.
Ложь и обман
Наблюдательные люди могут увидеть, что dtexec предлагает /X86
вариант. Не верь этому. Единственный способ получить правильную битность - это явно вызвать правильный dtexec.exe. В документации даже сказано столько, но никто не читает документацию.
Эта опция используется только агентом SQL Server. Эта опция игнорируется, если вы запускаете утилиту dtexec в командной строке.
Сначала я попытался обновить старую строку подключения диспетчера соединений из-за обновления имени сервера.
Не делай этого.
Я создал новый диспетчер соединений с обновленной строкой подключения и повторно развернул свое решение после изменения источника диспетчера соединений для любых модулей/задач, использующих старый диспетчер соединений.