2

我昨天工作了一整天,试图消除我的 XML 配置文件中不正确的连接字符串的影响。我浏览了每个包,删除了错误的连接管理器并使用正确的服务器名称重新添加它。每次我这样做时,我都会通过删除它来明确更新配置,然后使用覆盖选项重新添加它。但后来我犯了一个可怕的错误,即拉起父包,它使用了不同的 xml 配置,它再次将连接管理器更新为错误的服务器名称。

我将配置从父包中提取出来并再次开始修复子包。修复了子包后,我从其现在的 xml 配置免费父级中调用了其中一个。看到它再次连接错误的服务器,我感到非常震惊和失望。

这怎么可能发生?

我还通过 wordpad++ 注意到配置文件已更新。我的假设是,当父级的配置更新连接管理器时,SSIS会自动更新现在更正的配置文件并再次破坏它。

当 SSIS 的组件发生变化时,它真的会自动更新配置文件吗?真的是双向的吗?如果是这样,它的行为完全令人困惑——比如乒乓球,或者把手指放在堤坝里。我准备建议我们永远不要使用 XML 配置!!

4

1 回答 1

0

更新:我错了。请参阅下面的评论。

所以我认为你对 SSIS 中的配置如何工作有一个(可能有两个)基本的误解。

使连接管理器可配置的标准过程是:

  1. 创建连接管理器,将其指向您在 BIDS 中的本地/开发连接。
  2. 为连接管理器的 ConnectionString、ServerName 和 DatabaseName 属性创建一个配置。(如果是文件,添加filePath等)
  3. 在随后的包中,只需创建相同的连接管理器,添加配置,将其指向您现有的配置文件,然后选择“Reuse Existing ...”(而不是“Overwrite”,这会丢弃您在步骤 2 中所做的所有工作。 )
  4. 将包部署到服务器,并将 XML 文件部署到服务器上的同一本地位置。
  5. 修改服务器上的 XML 文件以指向该服务器的正确数据库连接(开发、登台、生产等)
  6. 当您在该服务器上运行包时,它将在运行时使用该 XML 文件,并在运行时使用服务器各自的数据库。
  7. 完全可选:我们实际上为每个数据源使用一个 XML 文件并明确命名连接管理器。这意味着我们可以通过连接管理器的命名约定“保证”我们所有需要使用某个数据库的包都访问完全相同的数据库。我们将这些数据源存储在项目级别,然后从数据源创建新连接,然后添加具有匹配名称的配置,“重用现有”,点击确定,一切就绪。

所以你有一个误解是删除连接管理器。配置文件不会“更新”连接管理器。连接管理器的属性是在设计时设置的,并且是您在 BIDS 中双击它时看到的任何内容。这些被硬编码到包中(查看代码并自己查看)并且只能在连接管理器编辑器本身中进行更改。因此,没有“故障”连接管理器之类的东西,删除它也没有任何意义——只要在编辑器中测试连接时获得“成功”,该连接管理器就可以使用。

您的第二个误解是配置文件是如何工作的。配置文件只是在运行时用自己的值替换包执行中的属性。它根本不修改包。相反,SSIS 包本身永远不会修改配置文件。这只能使用 BIDS 流程之外的文本编辑器通过 BIDS 配置编辑器来完成 - 我相信这是发生的。

我无法通过您提供的一般时间表来准确判断,但您使用“覆盖”选项表明您基本上允许最后发生的任何配置编辑“赢得”设置所有文件将使用的值的特权对于那个特定的连接。

无论如何,我会(正如您可能猜到的那样)完全推荐使用 XML 配置,因为它们(或者曾经是,我认为!)非常简单,并且在我看来是多层 SSIS 环境最简单的部署选项。

于 2013-01-27T06:56:40.373 回答