如何使用其他数据库连接进行程序包配置?
我有一个SSIS包,它可以从SQL Server包配置表中设置一些变量数据。 (选择"直接指定配置设置"选项)
当我使用开发软件包时指定的数据库连接时,此方法效果很好。但是,当我在测试环境中的服务器(64位)上运行它(作为代理作业或者直接运行程序包)并且在连接管理器中指定新的连接字符串时,程序包仍会从数据库服务器读取设置我在开发中指定的。
所有其他连接占用正确的连接字符串,似乎只是从错误的位置读取的程序包配置。
有什么想法或者我做错什么了吗?
解决方案
回答
我能够做到这一点的唯一方法是使用Windows环境变量。我们可以在环境变量中指定诸如连接字符串和用户首选项之类的内容,然后从SSIS任务中选择这些环境变量。
回答
我更喜欢在" SQL客户端配置"中使用服务器别名。这样,当我们决定将程序包指向另一个SQL Server时,就像编辑别名以指向新服务器一样简单,而无需在SSIS程序包中进行任何编辑。将程序包移至实时服务器时,我们需要添加别名,并且该别名有效。
当我们对服务器有一个痛苦的命名约定时,这也有帮助,别名可以是比实际计算机名称更具描述性的名称。
回答
我实际上并没有完全理解问题,但是我将连接设置存储在一个配置文件中,通常是针对每个环境(例如开发,生产等)的配置文件。程序包在运行时会从配置文件中读取连接设置。
回答
我们想将包配置保存在数据库表中,我们知道它已与其他数据一起备份,并且知道在哪里可以找到它。只是一个偏爱。
我发现要使其正常工作,我可以使用环境变量配置来设置我要从中读取程序包配置的连接管理器的连接字符串。 (尽管我必须先重新启动SQL Server代理才能找到新的环境变量。将其部署到生产环境中并不理想)
当我们在计划任务中运行SSIS程序包时,它看起来像按以下顺序工作:
- 按照在包配置管理器中出现的顺序加载每个包配置
- 在计划作业的"作业步骤"属性的"数据源"选项卡中设置连接字符串
- 开始运行程序包。
我本来希望前两个是相反的方式,以便可以从计划作业中为我的程序包配置设置数据源。那就是我希望其他人在维护程序包时会寻找它的地方。
回答
创建作业以调用SSIS程序包并进行设置时,将有一个选项卡式区域。默认选项卡是我们设置软件包名称的位置,下一个选项卡是我们可以设置配置文件的位置。每个软件包都有一个配置文件,并针对服务器进行更改(开发,测试,生产)。可以将配置文件直接放在开发,测试和生产服务器上,然后在设置该作业时指向它们。
回答
SSIS的安全性是可怕的。我不在办公室时,没人能支持东西。这项工作从未从配置文件中读取...我放弃了。它仅在我在"数据源"选项卡中编辑字符串时才有效。但是,如果我们碰巧第二次上班,密码就会丢失。糟糕的设计,绝对可怕。我们可能会认为,当在作业步骤中指定xml文件时,它将从定义的位置读取连接字符串,但没有读取。这真的对其他人有用吗?
回答
转到程序包属性,并将部署设置为True。这应该为我们所做的工作。
回答
我有相同的问题,并且得到相同的答案,即我们不能编辑用于SQL Server中托管的程序包配置的连接字符串,除非我们指定SQL Server连接字符串应在环境变量中。
不幸的是,这在我的开发设置中不起作用,因为在同一机器上托管两个环境。我最终遵循了Scott Coleman的方法,该方法在SQL Server Central [免费注册和一个不错的站点]中进行了详细介绍。诀窍是,我们创建一个视图以将配置设置存储在一个中央服务器上,然后使用与其连接的计算机确定哪个环境处于活动状态。
我使用了这种方法,但是也使用了连接到环境的用户来确定,因为我的测试和开发设置在相同的SSIS实例上运行,但是使用不同的用户名。 Scott在注释中建议应设置应用程序名称,但这不能在包执行作业步骤中更改,因此这不是一个选择。
我发现的另一个警告是,我必须在视图中添加"代替"触发器来对配置变量进行插入,更新和删除。
回答
如果我们使用的是SQL Server程序包配置,则程序包的所有属性都将来自SQL Server表。请检查