0

我是 SSIS 的新手,但是我正在尝试做一些我认为应该是 SSIS 非常简单的用例的事情,但我似乎找不到解决方案。

长话短说,我试图让两个 SSIS 环境(例如,DEV1 和 DEV2)在同一台 PC 上独立运行。有时我必须在同一时间框架内进行持续的开发工作和紧急错误修复。

出于这个原因,使用系统环境变量来保存数据库连接字符串之类的东西是行不通的,因为 DEV1 和 DEV2 指向他们自己的数据库,每个数据库都有自己的连接字符串(我不想手动设置环境变量因为这很容易出错)。

此外,另一个要求是我需要在我的 DEV1 和 DEV2 环境之间自由复制包,而不必编辑包来重置包变量等(例如,一些变量包含指向相应环境的数据文件/文件夹的路径)。

我们在开发环境中使用 SQL Server/BIDS 2008 R2...

我尝试过但没有成功的事情:

(1) XML 配置文件 - XML 文件的路径是硬编码的,所以当我将使用 XML 配置文件的包从 DEV1 复制到 DEV2 时,DEV1 XML 文件在 DEV2 环境中使用 - 不好!

(2) SQL Server 配置 - SQL Server 配置表的连接字符串也被硬编码到包中,所以再一次,将使用 DB 配置的包复制到其他环境会导致使用错误的配置 - 再次,不好!

(3) 我尝试使用带有 /CONFIG 和 /COMMAND 标志的批处理文件来为包变量赋值,结果发现在 2008 R2 中,设计时变量会覆盖命令行参数 - 令人困惑!

(4) 我什至尝试使用我想要使用的环境值创建一个平面文本文件,并尝试使用基本 C# 代码读取该文件,但除非我指定绝对路径,否则即使这样也行不通,这会破坏能够在环境之间复制包而无需编辑包变量值的目的。排除绝对路径会导致异常“System.IO.FileNotFoundException:找不到文件'C:\ Documents and Settings\\DBConfiguration.txt'” - 所以基本上,仍然难倒!

在过去的几个小时里我一直在做这个,所以我很有可能已经长出了方形眼睛并且很明显地缺失了。

当然,肯定有人设法让多个 SSIS 环境都指向自己的数据库,以便同时在同一台 PC 上运行

提前感谢,DJ

4

2 回答 2

1

当我在同一实例上托管开发和测试的环境中工作时,我们是这样解决它的。

我们使用了 SQL Server 配置。我们所有的包都有一个名为 SYSDBConnection 的用户变量。该变量的值是我们配置数据库的连接字符串。我们的包总是有一个用于配置和日志记录的 OLE DB 连接管理器 SYSDB。ConnectionStringSYSDB 上的属性是一个表达式,@[User::SYSDBConnection]其结果是我们所有配置数据的存储库都由该变量控制。

我们所有包的设计时值都指向开发实例。DEV 中的包通常从 BIDS 的上下文中运行,但只有在 SQL 代理中记录成功执行后才能迁移到 TEST。从 TEST 开始,包总是从 SQL 代理执行,我们将为变量提供运行时值SYSDBConnection

我们有一个很好的安全实践,即不为我们所有的 SQL Server 实例使用相同的服务帐户,因此 TEST 只能与 TEST 盒子范围内的其他服务器进行通信。它有助于识别未能使用配置或具有也需要迁移的新配置的软件包。在此过程中遇到了一些小问题,并且有很多抱怨,但我们从来没有遇到过这样的问题,即更改被推送到 prod 并且有人错过了配置并且突然开发数据在 prod 中。我听到的那个恐怖故事比我应该听到的还要多。

对于您的具体情况,您不是在寻找仅执行中断修复代码分支的 SQL 代理。有些东西坏了,你需要看看有什么问题并解决它。这种方法仍然适用于您。在 SSIS 项目的属性窗口中,在调试选项卡中,有一个可用的 CmdLineArguments 属性。在那里分配一个与您的测试环境相对应的值。近似于此的东西就足够了。

/set \Package.Variables[User::SYSDBConnection].Properties[Value];\"localhost\test"

在此处输入图像描述

我认为效果很好。

HLGEM 采用的一种方法是使用环境变量。相同的变量名称,但与特定用户(qa、stage 等)相关联。虽然它比我关心的用户管理更多,但我认为这是一种聪明的方法,并且在适当的情况下,我会使用它。

于 2013-02-02T22:30:05.227 回答
-2

我认为您的情况是这样的:您有一个正在生产和开发中的软件包。当您忙于增强 dev 版本时,需要调试和修复 prod 版本。为了重现错误,您需要将您的包指向产品数据库。

如果这是正确的,那么这是一个可以通过版本控制处理的分支和合并问题 - 通过 TFS(或其他一些版本控制工具)或手动处理。

不知道为什么您保留了硬编码并且没有更改使用表达式来创建连接字符串。

于 2013-02-02T13:49:05.560 回答