SSIS 包由 sql 作业代理运行时失败

问题描述 投票:0回答:4

我在 etl 进程中运行 SSIS 包时遇到了麻烦。

有一个表,其中包含不同类型的 etl 步骤。即存储过程步骤、cmd(复制-移动文件)步骤、发送邮件、SSIS 步骤。

主存储过程根据步骤类型运行这些步骤并记录开始结束时间、错误等。该主存储过程是 由 sql server 作业触发。

当我安排此作业时,SSIS 步骤出现错误,如下所示;

错误:SSIS 错误代码 DTS_E_OLEDBERROR。 OLE DB 错误有 发生。错误代码:0x80040E4D。 OLE DB 记录可用。 来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E4D 描述:“用户‘server\user$’登录失败。”。

但是,当我手动运行此主程序(使用我的 Windows 用户登录)时,它运行成功。

我检查了使用代理帐户运行的情况,它对我不起作用。因为在 sql server 作业中,我运行主存储过程而不是 SSIS 包。

代理账户参考链接; https://www.mssqltips.com/sqlservertip/2163/running-a-ssis-package-from-sql-server-agent-using-a-proxy-account/

sql sql-server t-sql ssis
4个回答
3
投票

只要您与数据库的连接有效,它就应该可以工作。错误消息告诉您

server\user$
不是有效的登录。

如果 SSIS 包使用用户名和密码连接到数据库(i.e.,SQL 用户),那么应该直接设置/配置登录名以访问您的进程所在的服务器和数据库,当您下次运行该作业时,它应该能够成功执行该过程。

如果 SSIS 包使用 Windows 身份验证进行连接,则您需要使用代理来指定引用具有数据库访问权限的 Windows/Active Directory 帐户的凭据。在 SSMS 中:

  1. 服务器>>安全>>凭证
    • 创建新凭证
    • 给它起个名字
    • 指定有权执行您的过程的 Windows 帐户
  2. 服务器 >> SQL Server 代理 >> 代理 >> SSIS 包执行
    • 创建新代理
    • 选择您刚刚创建的凭证
    • 选择“SQL Server 集成服务包”子系统
  3. 服务器 >> SQL Server 代理 >> 作业 >> 您的作业 >> SSIS 作业步骤
    • 在“运行方式”字段中,选择您刚刚创建的代理

现在,当您开始工作时,您的 SSIS 包应该使用步骤 1 中设置的凭据中指定的 Windows 帐户连接到数据库,这应该能够成功执行存储的过程。


2
投票

你的SSIS包有密码吗?如果没有,请为其设置密码。然后编辑您的作业并在那里写入密码。


2
投票

如果您的 SSIS 包中有密码,请确保将 ProtectionLevel 设置为“EncryptSensitiveWithPassword”。如果您使用“EncryptSensitiveWithUserKey”,那么您将是唯一可以运行它的用户。


0
投票

在我的例子中,SQL 作业失败,因为 SSIS 包内的 OLE DB 连接管理器使用了错误的服务器登录方式,我必须将其从 SQL Server 身份验证更改为 Windows 身份验证。这修复了我的 SQL 代理作业中的错误。

© www.soinside.com 2019 - 2024. All rights reserved.