1. 程式人生 > >運行SSIS包的幾種方式

運行SSIS包的幾種方式

方法 命令 步驟 存在 sch pwd lan olt 對象

很多程序員,不止.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中向數據倉庫中抽取數據,或者數據倉庫中其它的數據任務,當然還有園子裏的高手提到過的用它來實現監控任務。

運行SSIS包的幾種方式