2014年1月5日 星期日

動態封裝

有時候為了便方將封裝在不同環境下執行(例如開發、測試和產品等不同環境),這時就必須採用動態方式來設計SSIS封裝。 動態封裝指的就是不用開啟或變更封裝內容,就能夠直接變更執行封裝要使用的設定值。 要達到這樣子的目的,除了原本就有的 Package Configuration 功能外, 在 SQL 2012 中也新引入了 Parameter 和 peoject-level Connection Manager 觀念來達到這樣子的效果。

下面幾個主題,都與動態封裝有關。

Connection Managers and Parameters

「連線」與「參數」的設定,都可以分成「專案層級」和「封裝層級」。 其中,「封裝層級連線」設定,是之前就有的設定,而「參數」和「封裝層級連線」都是 SQL 2012 新加入的功能。 這二個功能都必需使用「專案部署模型」才可以使用。功能如下:

  • 參數:可讓您在封裝執行時,將值指派給封裝內的屬性。
  • 專案層級的連線管理:可讓專案中的所有封裝共用相同的連線設定。

專案層級連線(Project-Level Connection Managers)

在專案樹狀目錄下,有個連接管理員,在這裡建立的連接,就會是專案層級(project-level)。

如果是在設計工作區下方的連接管理員中建立的連接,預設就是封裝層級(package-level)。

You can also convert an existing package-level connection to a project-level connection.

參數(Parameters)

過去,在封裝中,若希望某個屬性值可以依環境不同而不同,大都必須使用「封裝組態」來實現。 現在(SQL2012),則可以使用「參數」,輕鬆的來達到這個效果。

  • 參數可讓您在封裝執行時,將值指派給封裝內的屬性。
  • 當屬性要套用參數時,一次只能套用一個參數值。但不同的屬性可以用時套用到同一個參數。
  • 參數值是唯讀的,所以在封裝執行期間,參數值是不可以變更的。
  • 參數資料可設定成 Sensitive(即參數編輯窗格中的「區分」屬性),它們就會被加密後再儲入 catalog 。
  • 封裝執行時,參數值是無法變更的。

參數層級

參數的層級也是可以區分成專案層級封裝層級

專案層級參數

專案層級參數由專案底下的 Project.params 節點開啟。

封裝層級參數

封裝層級參數由封裝中的[參數]頁籤開啟。

參數預設值

每個參數可以有三個不同類型的值:

  • 設計值(Design default value):This value assigned when the project is created in SQL Server Data Tools (SSDT), persists with the project.
  • 伺服器值(Server default value):This value assigned during project deployment and persists in the SSIS catalog.
  • 執行值(Execution value):This value that is assigned in reference to a specific instance of package execution.

建置組態 (Build Configurations)

「專案部署」是 SSIS 2012 新加入的功能,因為這個功能,讓很多的設定都變的更方便。 例如,對開發者而言,常常必須同時面對不同的環境,如開發,測試,產品等不同的環境。 因此你可以使用 Configuration Manager 針對不同的環境設定不同的「建置組態 (Build Configurations)」。

每個建置組態,在建置(build)的時候,都會產生一個可用來部署的檔案(.ispac),裡面除了包含封裝資訊之外,還有參數或連接等相關設定。

如何建立「建置組態」

1. 開啟「組態管理員( Configuration Manager )」

要建立或修改「建置組態」,都必需透過「組態管理員( Configuration Manager )」。 你可以點選方案總管中的專案名稱,再由右鍵選單中,點選[屬性]以開啟「屬性頁」視窗。

「屬性頁」視窗

上圖中,當你點選「屬性頁」的「組態屬性」中的項目時,就可以點選「組態管理員」按鈕,以開啟「組態管理員」視窗。

2. 新增組態

在「使用中的方案組態」下拉清單中,點選「新增...」項目。

輸入新的方案組態名稱。

3. 設定專案的組態

最後,你就可以依據實際的需求,設定這個專案要使用哪一個「建置組態」。

如何利用「建置組態」

如果你的封裝中有使用參數,你可以在參數視窗中,將這些參數值繫結到組態檔。 那麼當你需要在不同的環境中使用不同的參數值時,就可以直接變換使用的組態檔,而不用直接變更參數值。

屬性運算式(Property Expressions)

由以上說明知道,在不同的組態檔中可以指定不同的參數值。 那麼一些 connection manager 或者 control flow task 的設定也就可以動態化了。

若要將 Connection 或 Task 設定為動態,也就是設定值是在執行階段才決定, 就必需使用封裝的「屬性運算式」(Property Expression),因為屬性運算式可以將參數值套用在屬性之中。

下面二個方法,都可以開起設定「屬性運算式」的視窗:

1. 在元件的屬性視窗中,點選[Expression]屬性旁的(...)按鈕,就會開起「屬性運算式編輯器」視窗。

2. 在工作或連接的編輯器視窗中,先點選[運算式]頁籤,就可以看到相同的[Expression]屬性設定。

例如:下圖中,我們設定一個連接管理 ConnectionString 屬性,它會由參數 ConnString 來決定。

所以你只要先將參數加入至組態,然後對不同組態給與不同設定值即可。

設定 SQL Agent job 使用環境變數

為了需求,我們有時會在封裝中加入參數,若這個參數同時有多個封裝都會使用到,就必須將參數設定成專案層級。 當專案部署到 SSIS Server 之後,為了方便,你可能使用環境變數指派給這個參數

以上情節是很常遇到的例子,如果你要在 SQL Agent 中建立一個自動執行的作業,並完成以上功能,大至的步驟如下:

1. 建立環境

在[環境]節點上,新增一個環境,取名為[測試環境A]。

2. 建立環境變數

開啟[測試環境A]的屬性視窗,新增一個環境變數,取為名[msg]。

3. 設定專案參數參考環境變數

3.1 在 SSIS 專案上,開啟[設定]視窗。

3.2 在[參考]頁籤中,設定該專案將參考[測試環境A]這個環境

3.3 在[參數]頁籤中,設定專案參數 mgs 的值來自於[測試環境A]中的環境變數 msg 。

4. 設定 SQL Agent job 使用環境變數

在步驟中的[組態設定]頁籤中,勾選要使用的(環境]。

Package Configurations

封裝組態(Package Configurations)是 SSIS 2012 之前就有的功能, 主要功能就是希望變數值或設定值不要在設計階段就寫死,而能夠在執行時,透過組態資訊中的設定值再來決定。

設計封裝組態(Package Configuration)

轉換成「封裝部署模型(Package Deployment Mode)」

在 SQL 2012 中,SSIS 專案預設會使用「專案部署模型」,如果要使用封裝組態,則必需先確定專案是否使用「封裝部署模型」,你可以在專案的右鍵選單中找到轉換功能。 不過,若是專案中已存在任何的 project-level 的參數或連接設定,將無法進行轉換。

執行「封裝組態組合管理(Package Configuration Organizer)」

每一個封裝預設上都是停用組態檔的,你可以使用「封裝組態組合管理」來啟用與建立「封裝組態」。

1. 你可以在SSIS選單中找到[封裝組態]功能,它會開啟「封裝組態組合管理」。(如果SSIS選單中沒看到[封裝組態],請先點一下package的設計頁面)

2. 設定「啟用封裝組態」

3. 封裝組態是透過「封裝組態精靈」來設定

設定組態類型(Configuration Type)

在設定封裝組態精靈的設定過程中,有個步驟必需設定「組態類型」,它是用來決定要將組態設定值儲存在什麼裝置。

設定匯出屬性

這個步驟用來指定要記錄在組態中的項目。

完成組態設定

給定組態名稱,完成設定。

組態的共用與排列順序

一個組態設定可以設定成共用,讓多個封裝一同時用,以減少相同資訊的維護。

一個封裝也可以設定多個組態,並定義他們的使用的先後順序。 相同的屬性設定,在後面組態檔中的設定會蓋過前面的組態檔。

封裝部署

不管是舊版或新版的封裝,你都還可以採用封裝部署模型,將封裝部署到 Integration Service 伺服器的檔案系統,或者儲存至 SQL Server 執行個體上的 MSDB 資料庫。

封裝部署處理有四個步驟:

1. 建立封裝組態

這步驟是選擇性的,若不使用就不用建立

更多相關內容請參考 MSDN:建立封裝組態

2. 建立封裝部署公用程式

「建立封裝部署公用程式」就是透過「建置(build)」,產生部署封裝所需的檔案。

不過在建置之前,你必須先將 [CreateDeploymentUtility] 選項設為 True。

建置結束,你可以在輸出視窗中,看到建置結果。

最後,你可以在指定的輸出路徑中,查看建置完成的檔案。

更多相關內容請參考 MSDN:建立封裝部署公用程式

3. 複製封裝檔案

這步驟主要就是將步驟2建置的檔案複製到 SSIS 目標電腦。

4. 封裝安裝

要安裝 package ,你必須在 SSIS 目標電腦上,執行 [封裝安裝精靈],就可以將 package 安裝到 Integration Service 伺服器上的檔案系統或 SQL Server 的執行個體。。

更多相關內容請參考 MSDN:封裝安裝

沒有留言:

張貼留言