很多程序員,不止.net程序員都有可能會用到SSIS包來處理一些數據流程上的任務。可以說SSIS作為BI下的一個ETL工具,方便易學,而且功能也確實很強大。於是開發OLTP的同事總會到我們這邊尋求技術上的支持,更多的時候會問我,當一個SSIS包開發完成之后,都有哪幾種方式可以讓它運行起來。一直以來我都想把這個問題總結下來,今天在MSSQLTIPS網站上看老外寫了一個現成的總結,於是加上自己的理解,簡略的對其進行了翻譯,並且加以補充。
如果大家對這篇文章的原文感興趣,可以參考老外原文地址鏈接:
http://www.mssqltips.com/sqlservertip/1775/different-ways-to-execute-a-sql-server-ssis-package/
方式一: 在BIDS里直接跑。
這個BIDS指的就是SQL Server Business Intelligence Development Studio,對於.net開發者來說它就是Visual Studio。以下是老外文章中的步驟:
首先,包設計完成之后,右鍵解決方案瀏覽器,選擇屬性。
在包配置界面中,Build旁邊的OutputPath選擇包被Build之后的存放路徑,確認后點擊OK結束配置。
然后在解決方案管理器中,右鍵點擊要運行的包,選擇Set as StartUp Object。
最后,在解決方案管理器中再次右鍵要運行的包,選擇Execute Package。
以上是老外文章中提到的四個步驟,個人感覺設置Build目錄這塊有些多余。設置Startup Object,主要考慮到一個項目下如果有很多包的時候,當你點擊運行的時候,運行哪一個包。當然我們平時最多的時候還是直接到最后一步,就是直接右鍵要運行的包然后直接選擇運行包。
這種方法是開發和運行SSIS包最基本的方式,尤其是在開發和調試以及測試包運行的時候,比如可以看一個數據流任務中某一個步驟在運行時所傳遞的數據。
方法二:使用DTEXEC.EXE命令行工具。
DTEXEC.EXE位於SQL Server的安裝目錄下,通過這個命令可以指定dtsx包文件來運行包或者運行已經部署到SQL Server中的包,比如通過如下命令:
DTEXEC.EXE /F "C:\BulkInsert\BulkInsertTask.dtsx"
這種命令行的方式給批處理以及Powershell 下進行調用就方便了很多。
方法三:使用DTEXECUI.EXE工具。
方法二使用的是命令行工具的方式,這里將要介紹的是帶圖形界面的方式。
首先,在命令行中輸入命令DTEXECUI.EXE。
在彈出的界面中指定想要運行的包就可以了。
其實這個界面就是在SQL Server Management Studio的Intergration Services中執行包一樣的界面。
方法四:使用SQL Server作業。
這個方法是執行SSIS包最常見的方法。在Management Studio下連接數據引擎,然后在Agent下找到Jobs建立作業。
借助作業里的Schedule,可以讓SSIS包在一個指定的周期里進行運行。
在作業的步驟里,可以指定步驟為SSIS包類型,然后指定SSIS包所在的位置。
方法五:c#調用數據包。
這個是老外原文沒有提到的方法,在這里補充上。
這種方法首先需要引入對應的dll組件:Microsoft.SqlServer.DTSRuntimeWrap.dll
然后引入命名空間:using DtsRunTime = Microsoft.SqlServer.Dts.Runtime.Wrapper;
實例化如下對象:
DtsRunTime.Application dtsApplication = new DtsRunTime.Application();
之后,可以調用實例化對象對應的方法來運行包,比如保存在本地的包文件:
DtsRunTime.IDTSPackage90 package = dtsApplication.LoadPackage(@"c:\abc.dtsx", true, null);
或者部署到SSIS里的包:
DtsRunTime.IDTSPackage90 package = dtsApplication.LoadFromSQLServer(PACAAGENAME, SEVERNAME, SQLUSER, SQLPWD, true, null);
最后無論以哪種方式調用的包,都通過如下方法來接收結果:
DtsRunTime.DTSExecResult result = package.Execute();
最后的幾點補充:
留意方法四,在任務里調用包的方法可以衍生到方法五里的另外一種實現,比如通過SQL語句來啟動一個Job:
EXEC msdb.dbo.sp_start_job N'JOBNAME'
方法五經過在實際測試中,對版本和權限可能會出現各種問題,所以這種方法四的衍生方法相對更容易實現些。
無論以哪一種方式運行SSIS包,都需要SSIS安裝在對應的機器上。也就是說,你把開發好的包拿到一台沒有安裝SSIS機器上想要運行是行不通的。另外就是通過程序調用的方式雖然是需要SSIS的支持,但是SSIS服務沒有必要運行。
所以在很多商業智能項目中,通常借助SSIS包來定期從OLTP中向數據倉庫中抽取數據,或者數據倉庫中其它的數據任務,當然還有園子里的高手提到過的用它來實現監控任務。
---------------------------------------------------------------
aspnetx的BI筆記系列索引: