我为ETL进程开发了一个SSIS包,我已成功部署到远程服务器。我有这个服务器的Windows和SQL登录,但不是管理员。这个ETL过程加载的数据是在每天早上(即我开始工作之前)在不同域上的不同机器上生成的,并且需要在数据生成过程之后尽快自动加载。
目前,我在SSMS中手动运行ETL程序包,并通过使用runas.exe
启动SSMS来欺骗远程服务器上的Windows用户凭据来对此进行身份验证。目前这是好的,因为我们处于早期开发阶段,但这显然不是生产中可接受的解决方案。因此,我想自动化这个过程,因为a)数据对时间非常敏感,b)手动运行这个过程就是PITA。
我应该如何自动执行ETL包,以便:
数据可用后立即执行,
我不需要用户输入,例如输入密码?
由于时间敏感性,无法按计划安排SQL Server代理作业。 (我的系统管理员似乎还没有启用/禁用SQL Server代理)
继续使用runas.exe
也不是一个选项,因为/netonly
标志是必需的,而/savecred
标志可以防止需要手动输入密码,相互排斥。
sqlcmd.exe
可以编写脚本以使用SQL用户和密码运行(我知道将密码放入纯文本中的错误做法),但随后运行调用SSIS包的存储过程失败,因为需要进行Windows身份验证运行包。
答案 0 :(得分:0)
我强烈建议您请求使用SQL Agent并创建代理作业来运行该程序包。这种方式有很多优点:
简而言之 - 管理起来要容易得多,而且您没有透露运行程序包所需的用户凭据 - 您甚至可能不知道它。
替代方案 - 您可以尝试使用SysInternals工具中的PsExec。它允许在另一台计算机上启动程序,明确指定用户名和密码为psexec \\server -u user -p password ...
。但是,我会选择反对它。