Как я могу решить SSIS Excel Connection Manager Ошибка 0xC0209303?

9

Я создал пакет служб SSIS, который импортирует файл Excel в таблицу SQL Server.

Пакет служб SSIS запускается без каких-либо проблем, когда я запускаю его локально на своем компьютере, но когда я запускаю его на сервере, на котором будет запланирован пакет, я получаю сообщение об ошибке ниже (из текстового файла я выводю ошибки с использованием ведения журнала служб SSIS).

После исследования единственные рекомендации, которые я смог найти, - установить для свойства Run64BitRuntime значение false, что я и сделал, но все же не повезло. Я сомневаюсь, что именно это и является причиной моей ошибки, потому что ошибка не указывает ничего относительно 64-битного (как было в статьях, которые я нашел).

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

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

введите описание изображения здесь

Код ошибки DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. Вызов метода AcquireConnection для диспетчера соединений «Envision» завершился ошибкой с кодом ошибки 0xC0209303. До этого могут быть сообщения об ошибках с дополнительной информацией о том, почему произошел сбой вызова метода AcquireConnection.

«Envision» - это имя моего менеджера соединений с Excel.

Я заполняю путь к файлу Excel и строку подключения, используя выражения.

Выражение строки подключения выглядит так:

"Provider = Microsoft.ACE.OLEDB.12.0; Источник данных =" + @ [User :: SourceFilePath] + "; Расширенные свойства = \" EXCEL 12.0 XML; HDR = YES \ ";"

Пакет SSIS выполняется именем пользователя / учетной записью Windows. Я думаю, что это может быть учетная запись веб-служб. (BDS_sprtIIS)

У кого-нибудь есть какие-либо решения или предложения относительно того, как решить эту проблему пакета, работающего только на моем локальном компьютере, но не на фактическом сервере, на котором пакет будет развернут?

Я нашел ответ ниже на другом форуме, может ли это быть причиной моих проблем? Они в основном говорят, что диспетчер соединений Excel пытается получить доступ к временной папке пользователя по какой-то причине, и если у него нет доступа к этой папке, то произойдет сбой:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/da77919c-0161-4eb5-bf89-7107d839435a/the-acquireconnection-method-call-to-the-connection-manager-excel-connection- менеджер-неудавшийся с? форумом = sqlintegrationservices

Я также заметил, что драйвер Microsoft.JET.OLEDB.4.0 попытается прочитать временный каталог под профилем вошедшего в систему пользователя.

,

... Мы запускаем наших агентов SQL с использованием учетной записи домена более низкого уровня и запускаем наши пакеты служб SSIS с использованием учетной записи-посредника. Вы правы, поскольку Procmon подтвердил это и для меня. Я дал права учетной записи прокси-сервера на временный каталог профиля (C: \ Documents and Settings \ SQLAgentDomainAccount \ Local Settings \ Temp), и это сработало!

Я не использую использование заданий SQL Server или учетных записей прокси. Пакет просто выполняется учетной записью Windows, скорее всего, через скрипт командной строки.

Учетная запись Windows имеет доступ к файлу, но я не уверен, имеет ли он доступ к папке «TEMP» (на которую я никогда не ссылаюсь в пакете, поэтому я не знаю, зачем ему нужен доступ к этой папке) ...

Хуан Велес
источник

Ответы:

8

Было 2 проблемы, которые мешали запуску пакета на сервере. Ниже приведены 2 проблемы и решения, которые я нашел.

  1. Пакет выполняется приложением, которое по умолчанию использует 64-битную утилиту DTexec, но пакет должен быть запущен с использованием 32-битной версии утилиты, чтобы иметь возможность правильно обращаться к файлу Excel через диспетчер соединений Excel.

    Я создал «упаковочный» пакет служб SSIS, в котором используется задача «Выполнение процесса», которая вызывает 32-разрядную (вместо 64-разрядной) утилиту DTExec и передает команду, чтобы открыть исходный пакет.

    Выполнить задачу процесса

  2. Мне также нужно было установить 32-разрядную версию Microsoft Access Database Engine 2010 Redistributable .

Дальнейшее чтение:

Microsoft.ACE.OLEDB.12.0 не зарегистрирован (переполнение стека)

Хуан Велес
источник
2

Установка 32-битного Access Engine и работа в 32-битном режиме работали для меня!

Arun
источник