0

我刚刚开始学习 SSIS 包,如果我的查询的答案对您来说很明显,请耐心等待 :-)

我有一个 SSIS 包,需要安装在不同的环境中,如 DEV/SYSTEST/DTE/LIVE。请注意,每个环境中的 SQL Server 连接字符串都不同 - 因此需要不同的配置文件。

我想部署它的方式是

  • 为不同的环境创建单独的包配置文件
  • 创建一个环境变量“MyPackageConfigPath”来保存配置文件的路径。
  • 使用带有 /ConfigFile 开关的 DtExec 命令运行包

我的问题:

  • 这是在不同环境中部署 SSIS 包的好方法吗?
  • 在这种情况下执行包的任何其他更好的方法?

谢谢!

4

3 回答 3

1

假设 2005-2008 R2 或 2012 使用 Package Deployment Model,您的配置选项是

  1. 父包
  2. 注册表值
  3. 环境变量
  4. 命令行分配
  5. XML 文件
  6. 数据库表

您通常可以将它们分组为单值配置 (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 有一个相当聪明的方法,即在多实例环境中使用具有本地环境变量的不同服务帐户您可以向下滚动以查看我在多实例机器上的方法。

我涵盖配置的各种答案

于 2012-07-11T20:02:51.373 回答
0

最好的答案是适合您情况的答案。不是非常有帮助,但是,你有它。我不明白为什么您的解决方案不起作用。

有些地方对在生产机器上添加环境变量有点挑剔。如果你能做到这一点,没有问题。如果没有,您能否将配置文件放在每台机器上的同一位置并硬编码该位置?另外,在部署时无需担心这一点。

于 2012-07-03T15:00:58.893 回答
0

我不喜欢摆弄环境变量,而且我发现在包配置中使用“SQL Server”配置元素更容易。它在您选择的数据库中创建预定义结构的配置表。该数据库甚至可能是服务器“localhost”上的“config123”。我就是做这个的。然后,我将该配置数据库保存在本地开发机器和服务器上,但配置条目的值不同。这意味着该软件包在我开发时使用我的本地配置设置,并在由服务器运行时自动使用生产服务器配置。:-)

我们还将包保存在 msdb 中(DeploymentManifests 由 Visual Studio 创建,没什么大不了的)并让 SQL Server 代理定期运行这些包。这使得部署更改变得非常容易。只需将更新的包部署到 msdb 中即可。

于 2012-07-04T08:25:04.137 回答