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 包。
只要您与数据库的连接有效,它就应该可以工作。错误消息告诉您 server\user$
不是有效的登录。
如果 SSIS 包使用用户名和密码(即,SQL 用户)连接到数据库,那么应该直接进行设置/ 配置登录以访问您的 proc 所在的服务器和数据库,并且当您下一个 运行 作业时它应该能够成功执行该 proc。
如果 SSIS 包使用 Windows 身份验证连接,那么您将需要使用指定凭据的代理,该凭据引用具有数据库访问权限的 Windows / Active Directory 帐户。在 SSMS 中:
- 服务器 >> 安全 >> 凭据
- 创建新凭证
- 给它起个名字
- 指定一个 windows 有权执行您的程序的帐户
- 服务器 >> SQL 服务器代理 >> 代理 >> SSIS 包执行
- 创建一个新代理
- select 您刚刚创建的凭据
- Select“SQL 服务器集成服务包”子系统
- 服务器 >> SQL 服务器代理 >> 作业 >> 您的作业 >> SSIS 作业步骤
- 在“运行 as”字段中,选择您刚刚创建的代理
现在,当您开始作业时,您的 SSIS 程序包应该使用在步骤 1 中设置的凭据中指定的 windows 帐户连接到数据库,这应该能够成功执行存储的过程
你的SSIS包有密码吗?如果没有,请为其设置密码。然后编辑您的作业并在那里写密码。
如果您的 SSIS 程序包中有密码,请确保 ProtectionLevel 设置为“EncryptSensitiveWithPassword”。如果您使用“EncryptSensitiveWithUserKey”,那么您将是唯一可以 运行 它的用户。
我在 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 包。
只要您与数据库的连接有效,它就应该可以工作。错误消息告诉您 server\user$
不是有效的登录。
如果 SSIS 包使用用户名和密码(即,SQL 用户)连接到数据库,那么应该直接进行设置/ 配置登录以访问您的 proc 所在的服务器和数据库,并且当您下一个 运行 作业时它应该能够成功执行该 proc。
如果 SSIS 包使用 Windows 身份验证连接,那么您将需要使用指定凭据的代理,该凭据引用具有数据库访问权限的 Windows / Active Directory 帐户。在 SSMS 中:
- 服务器 >> 安全 >> 凭据
- 创建新凭证
- 给它起个名字
- 指定一个 windows 有权执行您的程序的帐户
- 服务器 >> SQL 服务器代理 >> 代理 >> SSIS 包执行
- 创建一个新代理
- select 您刚刚创建的凭据
- Select“SQL 服务器集成服务包”子系统
- 服务器 >> SQL 服务器代理 >> 作业 >> 您的作业 >> SSIS 作业步骤
- 在“运行 as”字段中,选择您刚刚创建的代理
现在,当您开始作业时,您的 SSIS 程序包应该使用在步骤 1 中设置的凭据中指定的 windows 帐户连接到数据库,这应该能够成功执行存储的过程
你的SSIS包有密码吗?如果没有,请为其设置密码。然后编辑您的作业并在那里写密码。
如果您的 SSIS 程序包中有密码,请确保 ProtectionLevel 设置为“EncryptSensitiveWithPassword”。如果您使用“EncryptSensitiveWithUserKey”,那么您将是唯一可以 运行 它的用户。