为什么我的 SQL 服务器作业使用 SSIS 包失败,但同一个 SSIS 包 运行 在 Visual Studio 中成功?

Why is my SQL Server job using an SSIS package failing but that same SSIS package is running successfully in Visual Studio?

我使用 SSIS Import and Export Wizard 在 Visual Studio 中创建了一个 SSIS 包,当我在那里 运行 它时,它 运行 成功了。基本上,SSIS 包 运行 是对我的 SQL 服务器数据库的 sql 查询,并将结果导出到 Excel 文件中。

我已将该包打包到 SQL 服务器作业中,并在特定时间将其安排到 运行。我注意到它失败了,日志文件显示以下错误消息:

Microsoft (R) SQL 适用于 64 位版权所有 (C) Microsoft Corporation 的服务器执行包实用程序版本 12.0.5000.0。版权所有。开始:4:44:00 PM 错误:2017-10-12 16:44:00.59 代码:0xC0016016 来源:ExpExcel 描述:无法解密受保护的 XML 节点 "DTS:Password"错误 0x8009000B "Key not valid for use in specified state."。您可能无权访问此信息。当存在密码错误时会发生此错误。验证正确的密钥是否可用。结束错误 Error: 2017-10-12 16:44:00.68 Code: 0xC0209303 Source: ExpExcel Connection manager "DestinationConnectionExcel" Description: The requested OLE DB provider Microsoft.Jet.OLEDB.4.0 is not挂号的。如果未安装 64 位驱动程序 运行 32 位模式下的程序包。错误代码:0x00000000。 OLE DB 记录可用。来源:"Microsoft OLE DB Service Components" Hresult:0x80040154 描述:"Class not registered"。结束错误Error: 2017-10-12 16:44:00.68 Code: 0xC00291EC Source: Drop table(s) SQL Task 1 Execute SQL Task Description: Failed to acquire connection "DestinationConnectionExcel"。连接可能未正确配置,或者您可能没有对此连接的正确权限。结束错误 Error: 2017-10-12 16:44:00.68 Code: 0xC0209303 Source: ExpExcel Connection manager "DestinationConnectionExcel" Description: The requested OLE DB provider Microsoft.Jet.OLEDB.4.0 is not挂号的。如果未安装 64 位驱动程序 运行 32 位模式下的程序包。错误代码:0x00000000。 OLE DB 记录可用。来源:"Microsoft OLE DB Service Components" Hresult:0x80040154 描述:"Class not registered"。结束错误 错误:2017-10-12 16:44:00.68 代码:0xC00291EC 来源:准备 SQL 任务 1 执行 SQL 任务描述:无法获取连接 "DestinationConnectionExcel"。连接可能未正确配置,或者您可能没有对此连接的正确权限。结束错误 DTExec:程序包执行返回 DTSER_FAILURE (1)。开始时间:4:44:00 PM 完成时间:4:44:00 PM 经过时间:0.219 秒。包执行失败。该步骤失败。,00:00:00,0,0,0

我很难弄清楚如何调试这些错误并找到解决方案。如果我的 SSIS 包 运行 在 Visual Studio 中正常运行(与 SQL 服务器安装在同一台机器上),那么为什么它作为 SQL 服务器作业失败了?

我还必须补充一点,那台机器上没有安装 Microsoft Office。这可能是原因吗?

当您创建包时,它可能设置了用户密钥保护级别。这意味着任何敏感信息(密码)都会使用您的用户密钥进行加密。推而广之,这意味着只有您才能真正 open/run 包裹。你最好的选择(在我看来需要最少的努力)是用密码加密包,然后你可以在创建你的 SQL 代理作业时指定该密码。

您需要在 SQL 作业代理步骤中启用 32 位 - 如果这不起作用,您需要为 EXCEL

安装 OLDB ACE Driver

Driver link:

Microsoft ACE Driver

正如其他人指出的那样。您的项目保护级别需要与包保护级别相同。您可以在包和项目的属性下更改它。

如何在 SQL 步骤中设置 32 位作业代理