2017-08-30 44 views
0

问题

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

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

我应该怎样着手自动化ETL包的执行使得:

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

  2. 无需用户输入从我需要例如输入密码?

尝试的解决方案

安排上日程的SQL Server代理作业是不是一种选择,因为时间的灵敏度。 (另外我的系统似乎还没有启用/禁用SQL Server代理)

继续使用runas.exe是不是一种选择或者作为/netonly标志,这是必需的,而/savecred标志,这将避免对需要手动输入密码,是互斥的。

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

+0

如果时间敏感性不是问题(而不是),您可以让您的DBA启用代理吗?因为这是正确的解决方案。 –

回答

0

我强烈建议您询问可用的SQL代理并创建代理作业以运行该程序包。这种方式有很多优点:

  • 本地Windows用户凭据与代理管理账户
  • ,可以配置SSMS接口
  • 可以使用的环境引用的包/工程参数的具体数值,连接管理器SSIS 2012及以上版本,并通过SSMS进行管理
  • 作业可按计划启动或从SQL命令手动启动。因此,您可以自动启动软件包。

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

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