我在 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 包。
只要您与数据库的连接有效,它就应该可以工作。错误消息告诉您
server\user$
不是有效的登录。
如果 SSIS 包使用用户名和密码连接到数据库(i.e.,SQL 用户),那么应该直接设置/配置登录名以访问您的进程所在的服务器和数据库,当您下次运行该作业时,它应该能够成功执行该过程。
如果 SSIS 包使用 Windows 身份验证进行连接,则您需要使用代理来指定引用具有数据库访问权限的 Windows/Active Directory 帐户的凭据。在 SSMS 中:
现在,当您开始工作时,您的 SSIS 包应该使用步骤 1 中设置的凭据中指定的 Windows 帐户连接到数据库,这应该能够成功执行存储的过程。
你的SSIS包有密码吗?如果没有,请为其设置密码。然后编辑您的作业并在那里写入密码。
如果您的 SSIS 包中有密码,请确保将 ProtectionLevel 设置为“EncryptSensitiveWithPassword”。如果您使用“EncryptSensitiveWithUserKey”,那么您将是唯一可以运行它的用户。
在我的例子中,SQL 作业失败,因为 SSIS 包内的 OLE DB 连接管理器使用了错误的服务器登录方式,我必须将其从 SQL Server 身份验证更改为 Windows 身份验证。这修复了我的 SQL 代理作业中的错误。