2017-08-30 95 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 ...。但是,我會選擇反對它。