Сбой пакета служб SSIS после перехода на 64-разрядную версию
У нас есть серия пакетов служб интеграции SQL Server, которые копируют данные из нескольких баз данных MS Access в базу данных SQL Server 2008. Существует один родительский пакет, который вызывает различные подпакеты, и этот родительский пакет инициируется пользователем, который запускает файл.bat, который выполняет пакет следующим образом:
dtexec /f "\\networkshare\package.dtsx" /CHECKPOINTING OFF /REPORTING EWCDI
Это работало хорошо в течение нескольких лет. Наш ИТ-отдел начал модернизацию наших 32-битных рабочих станций Windows XP до 64-битной Windows 7, и с тех пор, как они обновили рабочие станции этих пользователей, пакет вышел из строя, выдав ошибку
-1071607037,0x, код ошибки служб SSIS DTS_E_OLEDB_NOPROVIDER_64BIT_ERROR. Запрашиваемый поставщик OLE DB MICROSOFT.JET.OLEDB.4.0 не зарегистрирован - возможно, 64-разрядный поставщик недоступен. Код ошибки: 0x00000000. Доступна запись OLE DB. Источник: "Компоненты службы Microsoft OLE DB". Результат: 0x80040154 Описание: "Класс не зарегистрирован".
Моя рабочая станция еще не была обновлена с Windows XP, и я все еще могу запускать пакеты, но моя способность отложить обновление заканчивается, и мне нужно найти решение как можно скорее. Я нашел много статей и сообщений, связанных с этим, в моих попытках решить проблему. Среди вещей, которые я пробовал:
- Убедившись, что на пользователях установлены Client Tools и Business Intelligence Development Studio, а путь указан правильно, измените содержимое.bat-файла, указав ссылку "C:\Program Files (x86)\Microsoft SQL Server\100\DTS". \Binn\dtexec.exe”в надежде, что будет использован 32-битный провайдер JET
- Исследовал настройку Run64BitRuntime, но, похоже, она действует только во время отладки и не поможет мне
- Исследовал добавление флага /X86 в командной строке, но, согласно статье MSDN о dtexec, это действует, только если агент SQL Server выполняет задачу
- Последнее, что я попытался, это установить распространяемый Microsoft Access Database Engine 2010 и изменить строку подключения с "Provider=Microsoft.Jet.OLEDB.4.0;" to "Provider=Microsoft.ACE.OLEDB.12.0;". Я не могу оторваться от земли с этим. Если я пытаюсь создать новое соединение в BIDS и установить для провайдера значение "Поставщик OLE DB для СУБД Microsoft Office 12.0" и проверить соединение, я получаю сообщение об ошибке "Не удалось проверить соединение из-за ошибки при инициализации провайдера. Неуказанная ошибка",
Я просто в растерянности из-за того, что еще я могу попробовать и искать какую-либо помощь вообще, даже если он пробует то, что я уже пробовал, возможно, я настроил что-то не так, пытаясь их изначально, не уверен.
Любая помощь будет безмерно признательна!
3 ответа
В задании агента SQL или при простом выполнении пакета есть вкладка "Параметры выполнения", вы можете выбрать опцию "Использовать 32-разрядную среду выполнения"
Я смог запустить его успешно, изменив настройки отладки на странице свойств проекта. Свойство, которое нужно изменить, - Run64BitRuntime -> установите значение false.
По умолчанию SQL Server помещает 64-разрядную версию DTEXEC в путь. 32-разрядная версия должна быть расположена где-нибудь как C:\Program Files(x86)\Microsoft SQL Server\100\DTS\Binn и должна вызываться напрямую. У меня была такая же проблема с драйверами ACE и файлами Excel.
Смотрите это для получения дополнительной информации.