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

SSIS package fails when runs by sql job agent

我在 etl 进程中遇到 运行ning SSIS 包的问题。

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

一个主存储过程 运行 根据步骤的类型和记录开始结束时间、错误等来执行这些步骤。这个主存储过程是 由 sql 服务器作业触发。

当我安排这个作业时,SSIS 步骤出现以下错误;

Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E4D. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E4D Description: "Login failed for user 'server\user$'.".

然而,当我手动 运行 这个主要程序时(使用我的 windows 用户登录),它 运行 成功了。

我检查了这个 运行 代理帐户,它对我不起作用。因为在 sql 服务器作业中,我 运行 我的主要存储过程不是 SSIS 包。

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

只要您与数据库的连接有效,它就应该可以工作。错误消息告诉您 server\user$ 不是有效的登录。

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

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

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

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

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

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