以编程方式

时间:2017-08-30 13:14:01

标签: sql-server ssis

问题

我为ETL进程开发了一个SSIS包,我已成功部署到远程服务器。我有这个服务器的Windows和SQL登录,但不是管理员。这个ETL过程加载的数据是在每天早上(即我开始工作之前)在不同域上的不同机器上生成的,并且需要在数据生成过程之后尽快自动加载。

目前,我在SSMS中手动运行ETL程序包,并通过使用runas.exe启动SSMS来欺骗远程服务器上的Windows用户凭据来对此进行身份验证。目前这是好的,因为我们处于早期开发阶段,但这显然不是生产中可接受的解决方案。因此,我想自动化这个过程,因为a)数据对时间非常敏感,b)手动运行这个过程就是PITA。

我应该如何自动执行ETL包,以便:

  1. 数据可用后立即执行,

  2. 我不需要用户输入,例如输入密码?

  3. 尝试解决方案

    由于时间敏感性,无法按计划安排SQL Server代理作业。 (我的系统管理员似乎还没有启用/禁用SQL Server代理)

    继续使用runas.exe也不是一个选项,因为/netonly标志是必需的,而/savecred标志可以防止需要手动输入密码,相互排斥。

    sqlcmd.exe可以编写脚本以使用SQL用户和密码运行(我知道将密码放入纯文本中的错误做法),但随后运行调用SSIS包的存储过程失败,因为需要进行Windows身份验证运行包。

1 个答案:

答案 0 :(得分:0)

我强烈建议您请求使用SQL Agent并创建代理作业来运行该程序包。这种方式有很多优点:

  • 使用代理帐户进行本机Windows用户凭据管理
  • 您可以通过SSMS接口配置包/项目参数,连接管理器的特定值
  • 您可以使用SSIS 2012及更高版本的环境参考,并通过SSMS进行管理
  • 可以按计划启动作业,也可以从SQL命令手动启动作业。因此,您可以自动启动程序包。

简而言之 - 管理起来要容易得多,而且您没有透露运行程序包所需的用户凭据 - 您甚至可能不知道它。

替代方案 - 您可以尝试使用SysInternals工具中的PsExec。它允许在另一台计算机上启动程序,明确指定用户名和密码为psexec \\server -u user -p password ...。但是,我会选择反对它。