如何解决 SSIS Excel 连接管理器错误 0xC0209303?

Jua*_*lez 9 sql-server ssis

我创建了一个 SSIS 包,它将 Excel 文件导入到 SQL Server 表中。

当我在我的机器上本地运行 SSIS 包时,它运行没有任何问题,但是当我在计划包的服务器上运行它时,我收到以下错误(从我输出错误的文本文件到使用 SSIS 日志记录)。

经过研究,我能找到的唯一建议是将 Run64BitRuntime 属性设置为 false,我做了但仍然没有运气。我怀疑这是导致我错误的原因,因为错误没有指定任何关于 64 位的内容(就像我发现的文章中的情况一样)。

我还认为可能是服务器没有合适的 Excel 驱动程序,但我也不认为是这种情况,因为通常错误消息会说明驱动程序未注册。

我目前无权访问远程服务器。我只能将包上传到一个文件夹,然后它由应用程序运行,因此我能看到的唯一错误消息是我创建的文本错误日志中的内容。

在此处输入图片说明

错误代码 DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。对连接管理器“Envision”的 AcquireConnection 方法调用失败,错误代码为 0xC0209303。在此之前可能会发布错误消息,其中包含有关 AcquireConnection 方法调用失败原因的更多信息。

“Envision”是我的 excel 连接管理器的名称。

我使用表达式填充 Excel 文件路径和连接字符串。

连接字符串表达式如下所示:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+@[User::SourceFilePath] +";Extended Properties=\"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- manager-failed-with?forum=sqlintegrationservices

我也注意到 Microsoft.JET.OLEDB.4.0 驱动程序将尝试读取登录用户配置文件下的临时目录。

.

...我们使用较低级别的域帐户运行我们的 SQL 代理,并使用代理帐户运行我们的 SSIS 包。你是对的,因为 Procmon 也为我证实了这一点。我将代理帐户权限授予了配置文件的临时目录 (C:\Documents and Settings\SQLAgentDomainAccount\Local Settings\Temp) 并且它起作用了!

我没有使用 SQL Server 作业或代理帐户。该包由 Windows 帐户很可能通过命令行脚本简单地执行。

Windows 帐户可以访问该文件,但我不确定它是否可以访问它的“TEMP”文件夹(我从未在包中引用它,所以我不知道为什么它需要访问该文件夹) ...

Jua*_*lez 8

有 2 个问题阻止了程序包在服务器上运行。以下是我找到的两个问题和解决方案。

  1. 该包由默认使用 64 位 DTexec 实用程序的应用程序执行,但该包需要使用该实用程序的 32 位版本运行才能通过 Excel 连接管理器正确访问 Excel 文件。

    我创建了一个“包装器”SSIS 包,它使用调用 32 位(而不是 64 位)DTExec 实用程序的执行进程任务并传递打开原始包的命令。

    执行流程任务

  2. 我还需要安装 32 位版本的Microsoft Access Database Engine 2010 Redistributable

进一步阅读:

Microsoft.ACE.OLEDB.12.0 未注册(堆栈溢出)