【问题标题】:SSIS package fails when runs by sql job agent由 sql 作业代理运行时 SSIS 包失败
【发布时间】:2020-06-24 16:05:45
【问题描述】:

我无法在我的 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 tsql ssis


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 比尔,感谢您的重播。我在源连接上使用了 windows 用户,在目标连接上使用了 sql 用户。我也在源连接上将 windows 用户更改为 sql 用户。然后我的 sql 代理运行成功。当我在源上使用 windows 用户时,我认为代理想要使用 windows auth 登录。并失败。现在一切都很好。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多