SSIS - 连接管理器的最佳实践 - 由参数组成?

SSIS - best practices for connection managers -- compose out of parameters?

我在 Pentaho PDI 上工作了很多,所以一些明显的事情突然出现在我面前。

从现在开始我会打电话给连接管理员"CMs"。

很明显,项目 CM > 包 CM,用于可扩展性/可重用性。确实需要包级 CM 的情况确实很少见。

但我想知道另一个最佳实践。每个项目 CM 本身是否应该由变量组成? (或者我猜的参数)。

具体说说吧。有特定的数据库来源。让我们调用其中两个使用 Finance2000 和 ETL_Log_db。这些具有特定的连接字符串(密码、来源等)。

现在,如果您有 50 个从 Finance2000 提取的包,并且还使用 ETL_Log_db...那么...如果数据库发生变化会怎样? (主机、名称、用户、密码?)

假设现在是 Finance3000。

好吧,我猜你可以进入 Finance2000 并更改来源、规格甚至名称本身 --- 一切都应该正常,对吧?

或者您应该简单地构建一个名为 "FinanceX" 或其他名称的项目级数据库,并使其由参数组成,以便连接字符串类似于 @Source + @credentials + @whatever?

或者这只是多余的?

我可以看到参数方法的一个好处是您可以在运行期间甚至在包本身内即时更改 "logging database",而不是仅在运行时传递参数。我认为。我不知道。我还没有大量的 SSIS 经验。

我会分享我的经验。

我最近在工作中有类似的经历,我们的 2 个主要数据库名称已更改,但我没有遇到任何问题,也没有按计划停机。

我们使用的模型不是最好的,但是出于这个原因以及其他原因,使用起来非常舒适。我们使用 BAT 文件将命名参数传递到一个 "Master" 作业中,并且基本上取决于 2 个参数,该作业在备用 Database/Host.

上运行

我们使用的模型是,在每个KTR/KJB中我们使用一个变量${host}和${dbname},这些参数是随每个BAT文件传递的。因此,当我们不得不更改主机和数据库的名称时,只需在 NotePad++ 中进行简单的“替换所有文本匹配”即可完成,修复了 2.000 多个 BAT 文件,并且没有停机。

为客户端连接和日志记录连接的 Host/DB 名称设置一个变量可以让您在事情发生根本性变化时具有这种灵活性。

您也可以将 kettle.properties 文件用于日志记录连接。

从 2012 版开始,SSIS 具有 SSIS 目录数据库。您可以在一个项目中创建所有 50 个包,并且所有这些包共享相同的项目连接管理器。
然后将此项目部署到 SSIS 目录中;项目自动公开带有 CM 前缀的连接管理器参数。 CM 参数是连接管理器定义的一部分。

在 SSIS 目录中,您可以创建所谓的环境。在环境中,您使用名称和数据类型定义变量,并存储其值。
然后 - 最有趣的部分 - 您可以将环境与上传的项目相关联。这允许您将项目参数与环境变量绑定。

在包执行时 - 您必须在指定连接字符串时指定要使用的环境。是的,您可以在目录中有多个环境,并在启动包时选择。
很酷,不是吗?
此外,密码是加密存储的,因此 none 可以复制它。这些环境变量的值可以由不了解 SSIS 包的支持工程师配置。
MS Docs.

中有关 SSIS 目录和环境的更多信息