https://www.cnblogs.com/JasonLiao/p/SSISJob.html
簡介
在之前博客中,講述瞭如何實現SSIS的項目部署以及利用SSIS的參數與環境加速部署,參見 微軟 BI 系列隨筆 - SSIS 基礎 - 參數與環境。文章末尾提到了將SSIS部署到SQL Job。本文將講述如何利用SQL Job來規劃SSIS包的運行任務。
關於SQL Job
SQL Server Agent是一個任務規劃器和警報管理器,在實際應用和環境下,可以將那些週期性的活動定義成一個任務,而讓其在SQL Server Agent 的幫助下自動運行。
準備工作
首先來回顧一下,在之前的博文SSIS 項目部署模型和微軟 BI 系列隨筆 - SSIS 基礎 - 參數與環境中,我們將一個SSIS項目部署到了SSISDB目錄,並對其進行了環境參數的配置。下圖是完成上述步驟之後的結構圖
創建SQL Job
右擊上圖的Jobs,選擇"New Job",系統將打開Job創建窗口。
基本信息
基本信息頁主要是Job的名字,擁有者,類別以及描述。
添加步驟
接下來就是爲Job添加步驟了,這裏我們需要給出步驟的名稱,選擇類型和執行的賬戶。
在上圖的第一步中我們選擇類型爲SQL Server Integration Services Package,表示這個步驟是基於SSIS包的。
第二步中我們選擇執行賬戶,這裏選擇的是SQL Server Agent Account,他是SQL Server的一個內建賬戶,如果你有其他的賬戶的話也可以使用。但是要注意他的權限問題,比如這個SQL Server Agent Account就沒有對一般磁盤文件夾的讀寫權限,如果你的包有文件讀寫的話,就需要在文件夾上給這個賬戶讀寫權限。
第三布是選擇包所在的服務器以及具體的包的位置。
第四步是配置,參數可以使用之前配置的環境變量,這樣就和前面的SSISDB目錄裏面的環境變量對應上了。
點擊OK保存步驟。
設置執行計劃
設置計劃的類型,執行週期以及起始時間。這一步比較簡單。
接下來設置警報,通知以及目標。如果你在包中設置了針對錯誤和警報的處理,創建了郵件通知任務,就不要另外單獨設置了,使用系統默認的就可以了。如果需要這些信息的話,就自己去配置一下。
點擊OK,好了,任務創建完成。可以看到我們的新Job出現在Jobs目錄下面了。
腳本研究
生成這個Job的腳本來看看:
/****** Object: Step [CoposOrderProcessing] Script Date: 8/28/2015 10:32:02 AM ******/ EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'CoposOrderProcessing', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'SSIS', @command=N'/ISSERVER "\"\SSISDB\EDCSSISProcessing\EDCSSISProcessing\CoposOrderProcessing.dtsx\"" /SERVER "\"PRCSGI12071D\MSSQLSERVER12\"" /ENVREFERENCE 1 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E', @database_name=N'master', @flags=0
在上面的代碼中,重點看@command的內容。
/ISSERVER "\"\SSISDB\EDCSSISProcessing\EDCSSISProcessing\CoposOrderProcessing.dtsx\"" --指定執行一個部署在SSIS上的包. /SERVER "\"PRCSGI12071D\MSSQLSERVER12\"" --指定從那個服務器獲取那個包 /ENVREFERENCE 1 --指定包運行時使用的環境變量 /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 --logging記錄級別 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True --同步運行的,意思是如果這個實例在運行,那麼就不能重複執行 /CALLERINFO SQLAGENT --這個任務是要SQL Agent來調用的 /REPORTING E --只有錯誤信息會被報告
看來一切都在這裏了啊。所有的包信息,環境變量,執行參數都在這一句command裏面說的明明白白。
好了,執行一下吧,看看是不是和在SSISDB裏面執行是一個效果,看看我們的[internal].[executable_statistics]表是不是記錄了運行的信息了呢。
總結
本文詳細講解了如何使用SQL Agent規劃SSIS包的執行工作,通過結合SSIS參數和環境變量,實現了他們之間的無縫結合,極大的方便了部署工作。