[SQL][SSIS]小試專案專案部署模式( Project Deployment Model ) 和參數 ( Parameter )使用
在 SQL Server 2012 的 SSIS 上有個新功能,就是專案部署模式,此方式不像以往是把 Package 放在 MSDB 或者是目錄上,透過 DTEXEC 去呼叫執行。而是在資料庫上另外建立一個 SSISDB,並且可以直接利用 Stored Procedure 去啟動和使用,並且可以利用指定環境變數,方便傳入不同的參數去呼叫 SSIS 封裝,讓使用起來更為方便。為了讓自己更清楚相關命令和順序,因此做個簡單的範例來測試一下。
首先我們要建立一個專門給專案部署模式的資料庫,但並不是直接在資料庫上自己任意建立一個就可以了,必須在物件總管內選擇資料庫的 Instance 下的「Integration Services 目錄」,按下滑鼠右鍵選擇「建立目錄」
此部分要注意一下,如果您的資料庫 Instance 上是預設沒有啟用 CLR 整合的狀況下,那開啟建立目錄的時候一定要勾選「啟用 CLR 整合」,這是一個必要的條件,否則後續的動作都沒有辦法進行。而建立的目錄資料庫名稱一定是 SSISDB,這部分也沒有辦法更改。剩下要填入的就是這個資料庫的加密密碼,就填入一個您覺得合適的密碼就可以了。設定好之後按下確定應該 5~10 秒就可以建立完成了。
既然前置工作完成了,那麼我們就可以啟動 SSDT ( SQL Server Data Tools ) 來建立一個封裝測試看看,選擇「檔案」→「新增」→「專案」
建立出一個空的封裝之後,可以透過方案總管看到有 Project params,這個算是 SSIS 2012 很重要的一個新功能,可以設定給專案使用 Project Parameter;亦或者是在單一封裝內所使用的 Package Parameter。在 Project params 上按下滑鼠右鍵,選擇「開啟」
在這裡我們先建立一個 PrjParam1 的參數,有個選項「區分」翻譯的還蠻特別的,查了一下原來是 Sensitive 的意思,或許改翻譯成機敏或者是敏感可能會比較容易了解。
設定好之後,那麼我們在控制流程上用一個「指令碼工作」來做測試,並且設定 ReadOnlyVariables 為前面所建立的參數 $Project::PrjParam1
在 Main 裡面加入一行程式,把傳入的參數給顯示出來
public void Main() { // TODO: Add your code here MessageBox.Show(Dts.Variables["$Project::PrjParam1"].Value.ToString()); Dts.TaskResult = (int)ScriptResults.Success; }
做好測試的封裝之後,那麼我們就可以把他專案部署到 SQL Server 上面,我們在原本的專案上面按下滑鼠右鍵,選擇「專案部署」,透過 Deploy Wziard 來進行專案部署
選擇要放置的主機和目錄
部屬完成後,我們就可以在 Integration Services 目錄下看到剛剛所專案部署完成的專案和封裝了。此時我們在「環境」上按下滑鼠右鍵,分別建立環境 A 和 環境 B
並且針對這兩個環境下選擇「屬性」,都建立有相同的變數名稱 SetParameter1,但兩個環境下所設定的值都不要相同
到這裡大部分的設定都完成了,回顧前面的設定,我們已經建立好封裝要使用 Project Parameter,也部屬到 SSISDB 上面,並且設定好有兩組的環境,讓這兩組的環境都有相同的變數名稱,但給允不同的變數值,因此接下來我們就要設定這個專案,可以跟這兩個環境建立關聯,並且把環境變數 SetParameter1 對應到專案上面的 PrjParam1 的參數上,因此我們在專案 MyTest 上,按下滑鼠右鍵選擇「設定」,
我們先選擇「參考」,在這個部分用「加入」分別把 "環境A" 和 "環境B" 給加入,看起來會像是這個樣子,設定好之後我們就可以回到「參考」
選擇 "PrjParam1" 右邊的按鈕
此時將原本的使用封裝中的預設值選項更改為「使用環境變數」 "SetParameter1" ,按下確定後就建立好關聯了。
那麼接下來我們就執行看看,是否會按照我們指定不同的環境而顯示出不同的訊息囉。此時我們在封裝 Package.dtsx 上面按下滑鼠右鍵選擇「執行」,勾選下方的「環境」,先挑選 ".\環境A" 來做測試
按下確定之後,就會顯示出以下的訊息,而非原本封裝的預設值了。
後記
從上面的整個步驟做一遍下來之後,也讓自己對於 Project Parameter 和 Enviroment Variant也比較清楚了一些,也發覺到 SSIS 到 2012 做了不少的改變,讓一些以往很讓人詬病的問題和困擾,還記得之前在 2005 的時候,為了要想辦法解決參數傳遞的問題,還有封裝之間如何傳遞參數,甚至為了能讓所開發的應用程式可以呼叫 SSIS,從現在看起來當時實在走了太多冤枉路,而在目前的版本中也透過這些改善讓 SSIS 變得更方便使用了,看來要再多花點時間把其他相關的功能也再測試看看,或許還有其他不錯的功能和新發現。