昨天我工作了一整天,试图消除 XML 配置文件中错误连接字符串的影响。我检查了每个包,删除了有问题的连接管理器并使用正确的服务器名称重新添加它。每次我这样做时,我都会通过删除它来显式更新配置,然后使用覆盖选项重新添加它。但后来我犯了一个可怕的错误,拉出了父包,它使用了不同的 xml 配置,这将连接管理器再次更新为错误的服务器名称。
我将配置从父包中取出,并再次开始修复子包。修复了子包后,我从其现在 xml 配置免费的父包中调用了其中一个包。看到它再次连接到错误的服务器,我感到非常震惊和失望。
怎么会发生这种事?
我还通过 Wordpad++ 注意到配置文件已更新。我的假设是,当父级的配置更新连接管理器时,SSIS自动更新现在更正的配置文件并再次打破它。
当SSIS的组件发生变化时,它真的会自动更新配置文件吗?真的是这样双向的吗?如果是这样,那它的行为就完全令人困惑了——就像打乒乓球,或者把手指放在堤坝上。我正准备建议我们永远不要使用 XML 配置!
UPDATE:我错了。请参阅下面我的评论。
因此,我认为您对 SSIS 中的配置如何工作存在一个(可能是两个)基本误解。
使连接管理器可配置的标准过程是:
- 创建连接管理器,将其指向 BIDS 中的本地/开发连接。
- 为连接管理器的 ConnectionString、ServerName 和 DatabaseName 属性创建一项配置。 (如果是文件则添加filePath等)
- 在后续包中,只需创建相同的连接管理器,添加配置,将其指向现有配置文件,然后选择“重用现有...”(不是“覆盖”,这会丢弃您在步骤 2 中所做的所有工作。)
- 将包部署到服务器,并将 XML 文件部署到服务器上的同一本地位置。
- 修改服务器上的 XML 文件以指向该服务器的正确数据库连接(开发、登台、生产等)
- 当您在该服务器上运行该包时,它将在运行时使用该 XML 文件,并在运行时使用该服务器各自的数据库。
- 完全可选:我们实际上为每个数据源使用一个 XML 文件并显式命名连接管理器。这意味着我们可以通过连接管理器的命名约定“保证”所有需要使用某个数据库的包都访问完全相同的数据库。我们将这些数据源存储在项目级别,只需从数据源创建新连接,然后添加具有匹配名称“重用现有”的配置,单击“确定”,一切就完成了。
因此,您的一个误解是删除连接管理器。配置文件不会“更新”连接管理器。设置连接管理器的属性在设计时是您在 BIDS 中双击它时看到的任何内容。这些被硬编码到包中(查看代码并亲自查看),并且只能在连接管理器编辑器本身中进行更改。因此,不存在所谓的“错误”连接管理器,也没有必要删除它 - 只要当您在编辑器中测试连接时获得“成功”时,该连接管理器就可以正常运行。
您的第二个误解是配置文件的工作原理。配置文件仅替换包中的属性执行有自己的价值观在运行时。它根本不会修改包。相反,SSIS 包本身永远不会修改配置文件。这只能在 BIDS 流程之外使用文本编辑器来完成or通过 BIDS 配置编辑器 - 我相信这就是发生的事情。
我无法通过您提供的一般时间表来准确判断,但是您使用“覆盖”选项表明您基本上允许最后发生的任何配置编辑“赢得”设置所有文件将使用的值的特权对于该特定连接。
无论如何,我会(正如您可能猜到的那样)完全推荐使用 XML 配置,因为它们现在(或者曾经是,我认为!)非常简单,并且在我看来是多层 SSIS 环境的最简单的部署选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)