我有一个 SSIS 包,它从 SQL Server 包配置表中设置一些变量数据。(选择“直接指定配置设置”选项)

当我使用开发包时指定的数据库连接时,这很有效。但是,当我在测试环境中的服务器(64 位)上运行它(作为代理作业或直接运行包)并且在连接管理器中指定新的连接字符串时,包仍然从数据库服务器读取设置我在开发中指定的。

所有其他连接都占用正确的连接字符串,似乎只是包配置从错误的位置读取。

有什么想法或者我做错了什么吗?

有帮助吗?

解决方案

我能够做到这一点的唯一方法是使用 Windows 环境变量。您可以在环境变量中指定连接字符串和用户首选项等内容,然后从 SSIS 任务中获取这些环境变量。

其他提示

我更喜欢在 SQL 客户端配置中使用服务器别名。这样,当您决定将包指向另一个 SQL Server 时,只需编辑别名以指向新服务器即可,无需在 SSIS 包中进行编辑。将包移动到实时服务器时,您需要添加别名,并且它可以工作。

当您的服务器命名约定非常痛苦时,这也很有帮助,别名可以是比实际计算机名称更具描述性的名称。

我实际上并没有完全理解你的问题,但我将我的连接设置存储在一个配置文件中,通常每个环境(如开发、生产等)都有一个配置文件。包在运行时从配置文件中读取连接设置。

当您创建调用 SSIS 包的作业并设置步骤时,会出现一个选项卡区域。默认选项卡是您设置包名称的位置,下一个选项卡是您可以设置配置文件的位置。每个包都有一个配置文件,并针对服务器(开发、测试、生产)进行更改。配置文件可以直接放在开发、测试和生产服务器上,然后在设置该作业时指向它们。

如果您使用 SQL Server 包配置,那么包的所有属性都将来自 SQL Server 表 - 请检查

目前的 SSIS 安全性非常糟糕。当我不在办公室时,没有人能够支持事情。该作业永远不会从配置文件中读取...我放弃了。仅当我在“数据源”选项卡中编辑字符串时它才有效。但是,如果您碰巧第二次进入该工作,密码就会丢失。糟糕的设计,绝对可怕。您可能会认为,当您在作业步骤中指定 xml 文件时,它会从那里读取已定义的连接字符串,但事实并非如此。这真的对其他人有用吗?

转到包属性并将部署设置为 True。这应该适用于你所做的事情。

我有同样的问题,并得到了同样的答案,即您无法编辑用于 SQL Server 中托管的包配置的连接字符串,除非您指定 SQL Server 连接字符串应位于环境变量中。

不幸的是,这在我的开发设置中不起作用,其中两个环境托管在同一台计算机上。我最终遵循了 Scott Coleman 的方法,详细信息参见 SQL Server 中心 [免费注册和一个好网站]。诀窍是您创建一个视图来将配置设置存储在一台中央服务器上,然后使用连接到它的计算机来确定哪个环境处于活动状态。

我使用了这种方法,但也使用连接到环境的用户来做出决定,因为我的测试和开发设置在同一个 SSIS 实例上运行,但以不同的用户名运行。Scott 在评论中建议应设置应用程序名称,但这不能在包执行作业步骤中更改,因此这不是一个选项。

我发现的另一个警告是,我必须在视图中添加“而不是”触发器来执行配置变量的插入、更新和删除。

我们希望将包配置保存在数据库表中,我们知道它与其他数据一起备份,并且我们知道在哪里可以找到它。只是一个偏好。

我发现为了让它工作,我可以使用环境变量配置来设置我正在从中读取包配置的连接管理器的连接字符串。(尽管我必须重新启动 SQL Server 代理才能找到新的环境变量。当我将其部署到生产时并不理想)

看起来当您将 SSIS 包作为计划任务中的一个步骤运行时,它按以下顺序运行:

  • 按照包配置管理器中出现的顺序加载每个包配置
  • 从计划作业的作业步骤属性中的数据源选项卡设置连接字符串
  • 开始运行包。

我本以为前两个是相反的,这样我就可以从计划的作业中为我的包配置设置数据源。这就是我希望其他人在维护包时寻找它的地方。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top