在商業智能解決方案中,SSIS工程有兩種部署模式:工程部署(project deployment)和包部署(package deployment),默認是工程部署模式,在Package的管理上,工程部署模式是當前主流的部署模式,比包部署的更容易管理,也更容易對package進行調試和故障排除,而包部署模式是傳統的部署模式在包部署模式中。在包部署模式中,SSIS引擎支持包配置(Package Configuration)功能,用戶能夠在Package運行時動態修改屬性值。包配置是配置項的集合,每一個配置項(configuration item)是一個屬性/值對(property/value pair)。用戶向包配置中增加配置項,Package在運行時從包配置中獲取屬性值,對Package的執行進行編程控制,特別在批量管理Package的場景中,比如,批量修改Package的某一個公共變量的值,切換Package的測試和產品環境等,包配置十分有用。
一般情況下,包配置信息存儲在SQL Server數據庫中,用戶能夠配置的Package對象共有四種,分別是:
- Connection Managers:Package的鏈接管理器(connection managers);
- Executables:package 的可執行組件;
- Propertites:package的properties;
- Variables:package的variables;
以上四種Package對象,都能夠被參數化配置,這是SSIS能夠把其屬性值存儲在包配置中,並能夠在執行時應用屬性的配置值的基礎。
在執行Package時,SSIS Package首先讀取包配置信息,將包配置中的屬性值應用到Package中,然后執行package的可執行組件(executables);修改包配置中屬性的值,將動態改變Package的執行上下文,例如,測試環境和產品環境的切換,修改鏈接管理器(Connection Manager)的連接字符串的值,使package將運行結果同步到測試環境中;在測試環境中package運行無誤后,再將其部署到Production 環境中,如果使用包配置管理鏈接管理器的鏈接字符串,那么只需要修改包配置中Connection Manager的連接字符串的值,而不需要對Package做任何修改。
一,切換到包部署模式
SSIS Project默認的部署模式是Project Deployment Model,在解決方案的工程列表中選中工程,右擊彈出快捷菜單,點擊“Convert to Package Deployment Model”,將Project的部署模式轉換為包部署模式。
切換到包部署模式之后,Project名稱之后顯示模式名稱:(package deployment model)
二,設計Package
向Package中添加一個變量(VarCode)和一個Execute SQL Task組件,在Task組件中執行如下的TSQL語句腳本,“?”代表參數,映射到變量(VarCode),把變量的值插入到指定的表中
insert into dbo.dt_test values(1,?,'a')
1,配置Task組件執行的TSQL語句
2,配置Task組件的參數映射
三,啟用包配置
1,打開包配置向導
點擊SSIS 菜單,選擇“package configurations”,或者在Package的“Control Flow”面板的空白處右擊,彈出快捷菜單,選中“package configurations",都能打開包配置向導。
2,啟用包配置
勾選“Enable package configurations”復選框,為當前Package啟用包配置功能
3,添加包配置
在”Package Configurations Organizer“中,點擊Add按鈕,在配置類型(Configuration Type)列表中選擇SQL Server ,這意味着,Package使用SQL Server數據庫來存儲包配置的信息,同時,Package從SQL Server數據庫中讀取配置項信息。
為了存儲包配置信息,必須設置SQL Server數據庫及配置表,選中“specify configuration settings directly”,指定SQL Server類型的配置設置:鏈接(Connection),配置表(Configuration table)和配置過濾器(Configuration Filter)。
4,配置表(Configuration Table)
在Package執行時,如果指定SQL Server數據庫中沒有配置表,那么Package會自動創建配置表,默認情況下,SSIS用於創建配置表的腳本是:
CREATE TABLE [dbo].[SSIS Configurations] ( ConfigurationFilter NVARCHAR(255) NOT NULL, ConfiguredValue NVARCHAR(255) NULL, PackagePath NVARCHAR(255) NOT NULL, ConfiguredValueType NVARCHAR(20) NOT NULL )
配置表各個字段的含義是:
- ConfigurationFilter: 用於唯一標識配置集的過濾器,每一個配置集都是屬性/值對(property/values pair)的集合,每個Package只能設置一個ConfigurationFilter,擁有相同的ConfigurationFilter的Packages,其配置集相同,共享相同的配置信息;
- ConfigurationValue:配置屬性的值,用於更新配置屬性值;
- PackagePath:配置屬性的路徑,包含配置屬性及其路徑信息,例如, "\Package.Variables[User::VarCode].Properties[Values]"
- ConfiguredValueType:配置屬性的數據類型;
設置配置表的鏈接和配置集過濾器(Configuration filter):
- Connection:用於設置訪問configuration table的鏈接;
- Configuration Table:指定配置表的名字(table name);
- Configuration filter:當多個Package共用一個Configuration Table時,需要為每個Package 設置 configuration filter,如果 filter 相同,表明package使用相同的配置數據;如果某些Package有特殊的配置信息,可以為其設置不同的filter。
四,設置配置項(configuration item)
將變量VarCode的值配置到包配置中,這意味着,把變量VarCode的值存儲在[dbo].[SSIS Configurations]中,Package在執行時讀取這個值,並把讀取到的值作為變量VarCode的值,供Task組件使用。
五,查看配置信息
當配置類型為SQL Server時,包配置信息存儲在SQL Server 數據庫中,默認的配置表名是[dbo].[SSIS Configurations]
select * from [dbo].[SSIS Configurations]
六,執行package,查看執行的結果
1,使用默認值執行Package,查看Task組件執行的結果
2,修改[dbo].[SSIS Configurations]中的ConfiguredValue,再次運行package,查看Task組件執行的結果
update [dbo].[SSIS Configurations] set ConfiguredValue=2 where ConfigurationFilter='configuration_parameter_value'
推薦文檔: