假设 2005-2008 R2 或 2012 使用 Package Deployment Model,您的配置选项是
- 父包
- 注册表值
- 环境变量
- 命令行分配
- XML 文件
- 数据库表
您通常可以将它们分组为单值配置 (1-4) 和多值配置 (5-6)。所有这些都有利有弊,但我发现将数据库表作为我的主要配置存储库是我的最佳体验。我所有的值都存储在给定环境中,因此每个环境(开发、测试、负载、阶段、产品)服务器都有一个专用目录,其中包含一个用于配置的表(以及日志记录和其他 ETL 特定的东西)
表法
如果你不喜欢我的桌子,你可以自己创建或让 BIDS/SSDT 来做。
CREATE TABLE dbo.SSISConfig
(
id identity(1,1) NOT NULL PRIMARY KEY
, ConfigurationFilter nvarchar(150) NOT NULL -- Package Name
, ConfiguredValue nvarchar(255) NULL -- Value of setting, such as a connection string
, PackagePath nvarchar(255) NOT NULL -- Target within SSIS package where value is written
, ConfiguredValueType nvarchar(20) NOT NULL -- Data type such as String, Int32, or DateTime
)
DEV 服务器上的示例如下所示
id | ConfigurationFilter| ConfiguredValue | PackagePath | ConfiguredValueType
100 | Default.2005.Sales | Data Source=DEV;Initial Catalog=SALESDEVDB;Provider=SQLNCLI.1;Integrated Security=SSPI; | \Package.Connections[SLSDB].Properties[ConnectionString] | String
生产中的同一行看起来像
id | ConfigurationFilter| ConfiguredValue | PackagePath | ConfiguredValueType
123 | Default.2005.Sales | Data Source=PROD;Initial Catalog=SALESPRODB;Provider=SQLNCLI.1;Integrated Security=SSPI; | \Package.Connections[SLSDB].Properties[ConnectionString] | String
我们有配置部署脚本,将部署到的服务器考虑在内以处理数据库和服务器名称更改,因此只需维护一个脚本。我发现 XML 文件在这种情况下更难保持同步(废话,我们忘记更新生产的配置文件并且我们提取了错误的数据)。
诀窍
正如您在第二个项目符号中所指出的那样,实现这项工作的技巧是您需要某种机制来告诉 SSIS 使用一组不同的配置。如果您没有多实例机器,那么我发现使用环境变量是一种很好的方法。每个执行包的服务器定义一次,你就完成了。如果您在多实例环境中工作,那么情况就会变得更加棘手。
我虽然 HLGEM 有一个相当聪明的方法,即在多实例环境中使用具有本地环境变量的不同服务帐户。您可以向下滚动以查看我在多实例机器上的方法。
我涵盖配置的各种答案