【问题标题】:Why is my SQL Server job using an SSIS package failing but that same SSIS package is running successfully in Visual Studio?为什么我使用 SSIS 包的 SQL Server 作业失败,但相同的 SSIS 包在 Visual Studio 中成功运行?
【发布时间】:2023-03-30 09:50:01
【问题描述】:

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

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

Microsoft (R) SQL Server 执行包实用程序版本 12.0.5000.0,适用于 64 位版权所有 (C) Microsoft Corporation。版权所有。开始时间:下午 4:44:00 错误:2017-10-12 16:44:00.59 代码:0xC0016016 来源:ExpExcel 描述:无法解密受保护的 XML 节点“DTS:Password”,错误为 0x8009000B“密钥无效,无法用于指定状态。”。您可能无权访问此信息。当存在加密错误时会发生此错误。验证正确的密钥是否可用。结束错误错误:2017-10-12 16:44:00.68 代码:0xC0209303 源:ExpExcel 连接管理器“DestinationConnectionExcel”描述:请求的 OLE DB 提供程序 Microsoft.Jet.OLEDB.4.0 未注册。如果未安装 64 位驱动程序,请在 32 位模式下运行该软件包。错误代码:0x00000000。 OLE DB 记录可用。来源:“Microsoft OLE DB 服务组件”Hresult:0x80040154 描述:“类未注册”。结束错误错误:2017-10-12 16:44:00.68 代码:0xC00291EC 源:删除表 SQL 任务 1 执行 SQL 任务描述:无法获取连接“DestinationConnectionExcel”。连接可能未正确配置,或者您可能对此连接没有正确的权限。结束错误错误:2017-10-12 16:44:00.68 代码:0xC0209303 源:ExpExcel 连接管理器“DestinationConnectionExcel”描述:请求的 OLE DB 提供程序 Microsoft.Jet.OLEDB.4.0 未注册。如果未安装 64 位驱动程序,请在 32 位模式下运行该软件包。错误代码:0x00000000。 OLE DB 记录可用。来源:“Microsoft OLE DB 服务组件”Hresult:0x80040154 描述:“类未注册”。结束错误错误:2017-10-12 16:44:00.68 代码:0xC00291EC 来源:准备 SQL 任务 1 执行 SQL 任务描述:无法获取连接“DestinationConnectionExcel”。连接可能未正确配置,或者您可能对此连接没有正确的权限。结束错误 DTExec:包执行返回 DTSER_FAILURE (1)。开始时间:下午 4:44:00 结束时间:下午 4:44:00 经过时间:0.219 秒。包执行失败。步骤失败。,00:00:00,0,0,,,,0

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

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

【问题讨论】:

  • 这是一个常见问题。包裹的保护等级是多少? SQL 代理在哪个用户下运行?你连接到什么样的数据库?如果是 SQL Server,您可以使用 Windows 身份验证吗? mssqltips.com/sqlservertip/2091/…
  • 运行 SQL 代理的用户与其他运行良好的 SQL 作业的用户相同。我正在使用 SQL Server 身份验证,数据库只是一个 SQL Server 数据库。
  • 比较包装上的保护等级。这可能是用户密钥。
  • 好的,谢谢。我也会对此进行调查并报告。

标签: sql-server ssis sql-job


【解决方案1】:

您需要在 SQL 作业代理步骤中启用 32 位 - 如果这不起作用,您需要为 EXCEL 安装 OLDB ACE 驱动程序

驱动链接:

Microsoft ACE Driver

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

如何在SQL Job Agent on step中设置32bit on step

【讨论】:

  • 感谢您提供解决方案。现在不在办公室,所以我无法检查这些问题。我会尽快调查并报告。
  • 您有关于如何在 SQL 作业代理步骤上启用 32 位的任何链接吗?我遇到过这篇文章,但我不知道其中提到的步骤是否也与 SQL Server 2012 有关:support.microsoft.com/en-in/help/934653/…
  • 很好发现 - 这里有两个单独的问题。保护等级和32位excel驱动
  • @user3115933 刚刚更新了有关如何设置 32 位运行模式的图片。
  • @plaidDK 你成功了!我更改了保护级别并选中了 32 位运行时复选框,它就像一个魅力。
【解决方案2】:

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

【讨论】:

  • 谢谢。我使用密码更改了保护级别,并完全按照您所说的进行。作业仍然失败并收到相同的错误消息。
猜你喜欢
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
相关资源
最近更新 更多