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