【问题标题】:Creating a connection string in an Indirect Environment Variable for SSIS在 SSIS 的间接环境变量中创建连接字符串
【发布时间】:2011-12-07 21:53:56
【问题描述】:

我一直在互联网上搜索这个问题的明确答案,但我一直找不到。

我们目前跨包启用 SQL 配置,将所有内容存储在数据库(开发或产品)中。执行包是一个棘手的过程,要弄清楚包映射到哪个配置,并且必须在测试期间更改它们。我的希望是我们可以使用环境变量来始终使用特定的连接字符串到我们要基于机器使用的特定 sql server 配置。

我已经看到了设置变量的方法,将连接字符串硬编码为环境变量,然后使用附加的 SQL 服务器配置来管理它。我还看到了使用 XML 操作连接字符串并从变量或包本身调用它的方法。

这两种解决方案都有效,而且很可能是可行的解决方案。 我真正想回答的问题是;是否可以通过环境变量开发整个SQL Server配置连接?就像将连接字符串与配置字符串组合在一起,以便一个环境变量直接连接到包配置?有没有人试过这个?作为解决问题的方法有意义吗?

【问题讨论】:

    标签: variables configuration ssis


    【解决方案1】:

    是的,我们已经这样做了,而且效果很好。每个包都有两个配置:第一个是环境变量,第二个是 SQL Server 表。环境变量是包含所有配置表的数据库的连接字符串,它应用于连接管理器。 SQL Server 配置使用该连接管理器连接到配置数据库并检索各个设置。

    因为配置是按顺序应用的,所以连接管理器的连接字符串是在 SQL Server 配置尝试使用它之前设置的。总结:

    1. 创建你的包
    2. 添加一个名为“配置数据库”或其他名称的连接管理器
    3. 将 SQL Server 配置添加到包中,使用“配置数据库”作为连接,并选择要存储在表中的设置
    4. 使用要用于“配置数据库”连接管理器的连接字符串创建环境变量,例如 SSIS_PKG_CONF
    5. 向包中添加环境变量配置,使用 SSIS_PKG_CONF 变量,并将其分配给“配置数据库”连接管理器的连接字符串

    现在当你运行包时,配置过程如下:

    1. 包处理环境变量配置
    2. 它将环境变量的值分配给“配置数据库”连接管理器的连接字符串
    3. 包处理 SQL Server 配置
    4. 它使用“配置数据库”连接管理器从数据库表中检索各个设置

    这对我们来说效果很好,因为我们可以将连接字符串更改为指向不同的源数据库进行配置,而无需更改包或启动器中的任何内容(即运行包的 SQL 代理作业或脚本)。还有其他方法可以做到这一点,有些人强烈认为 .dtsConfig 文件是更好的选择,但我们发现管理环境变量比管理配置文件更容易

    但归根结底,管理包配置是一种偏好,并且很大程度上取决于在您的环境中使用您已有的工具和实践会更容易。

    【讨论】:

    • 感谢 Pondlife,这实际上是我最初提出的解决方案,而且似乎也是最简单的。但是,在这种情况下,您必须使用两种配置,一种用于环境变量,一种用于 sql 配置。有没有办法将这两件事结合到一个环境变量中,以便通过一个配置完成整个连接?
    • 不,我们没有找到任何简单的方法来做到这一点。但另一方面,无论如何,我们很少更改包中的任何内容:一旦您创建了两个配置,然后您更改数据库表中的设置并使用环境变量选择配置。当然,如果你在配置中添加一个全新的设置,那么你必须编辑包,但显然没有办法。
    • 在阅读这篇文章之前,我最终采用了相同的两种配置方法来完成这项工作。我发现棘手的一件事是更新环境变量并通过作业或包执行读取新值的方法,而无需重新启动 sql 代理或登录/注销机器。这是需要考虑的事情,更多的是用于您的开发和 QA 环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多