我是SSIS的新手,但是我正在尝试做一些我认为应该是SSIS的简单用例,但我似乎无法找到解决方案。
简而言之,我试图让两个SSIS环境(例如,DEV1和DEV2)在同一台PC上独立运行 。有时我必须在同一时间范围内进行持续的开发工作和紧急错误修复。
由于这个原因,使用系统环境变量来保存类似于数据库连接字符串的东西将不起作用,因为DEV1和DEV2指向他们自己的数据库,每个数据库都有自己的连接字符串(我不想手动保持设置环境变量,因为这很容易出错。)
另外,另一个要求是我需要在DEV1和DEV2环境之间自由复制包,而不必编辑包以重置包变量等(例如,一些变量保存指向数据文件/文件夹的路径相应的环境)。
我们正在使用SQL Server / BIDS 2008 R2进行开发环境......
我尝试过但未能奏效的事情:
(1)XML Config文件 - XML文件的路径是硬编码的,因此当我将使用XML配置文件从DEV1复制到DEV2的包时,DEV1 XML文件在DEV2环境中使用 - 不是很好! / p>
(2)SQL Server配置 - SQL Server配置表的连接字符串也硬编码到包中,因此,将使用数据库配置的包复制到其他环境会导致使用错误的配置 - 再次,不好!
(3)我尝试使用带有/ CONFIG和/ COMMAND标志的批处理文件为包变量赋值,但发现在2008 R2中,设计时变量覆盖命令行参数 - 令人困惑!
(4)我甚至尝试使用我想要使用的环境值创建一个平面文本文件,并尝试使用基本的C#代码读取文件,但即使这样做也行不通,除非我指定一个绝对路径,这违背了能够在环境之间复制包而无需编辑包变量值的目的。排除绝对路径会导致异常“System.IO.FileNotFoundException:找不到文件'C:\ Documents and Settings \\ DBConfiguration.txt'” - 所以基本上,仍然难倒!
过去几个小时我一直在这里,所以很可能我已经开发了方形眼睛,而且我很容易错过。
当然,必须有人设法让多个SSIS环境,每个环境都指向自己的数据库,同时在同一台PC上运行?
提前致谢, DJ
答案 0 :(得分:1)
当我在一个托管开发和测试同一个实例的环境中工作时,我们就是如何解决它的。
我们使用了SQL Server配置。我们所有的包都有一个名为SYSDBConnection的用户变量。该变量的值是我们的配置数据库的连接字符串。我们的包总是有一个OLE DB连接管理器,SYSDB,用于配置和日志记录。 SYSDB上的ConnectionString
属性是一个评估为@[User::SYSDBConnection]
的表达式。这样做的结果是所有配置数据的存储库都由该一个变量控制。
我们所有软件包的设计时值都指向了dev实例。 DEV中的包通常从BIDS的上下文运行,但在从SQL Agent中记录成功执行之前无法迁移到TEST。从TEST开始,始终从SQL代理执行包,其中我们将为变量SYSDBConnection
提供运行时值。
我们在那里没有对所有SQL Server实例使用相同的服务帐户进行了良好的安全实践,因此TEST只能与TEST框架中的其他服务器进行通信。它有助于识别无法使用配置的软件包或者还需要迁移的新配置。一路上都有打嗝而且抱怨很多,但我们从来没有遇到过这样的问题,即变更被推向了刺激,有人错过了一个配置,突然发现了数据。我听到的恐怖故事比我应该多。
对于您的特定情况,您不是在寻找仅执行代码的break-fix分支的SQL Agent。有些东西坏了,你需要看看有什么不妥之处并解决它。这种方法仍然适合您。在SSIS项目的属性窗口的“调试”选项卡中,有一个CmdLineArguments属性可用。在那里分配一个与您的测试环境相对应的值。接近这一点就足够了。
/set \Package.Variables[User::SYSDBConnection].Properties[Value];\"localhost\test"
我觉得它运作良好。
HLGEM采用的方法是environment variables。相同的变量名称,但与特定用户(qa,stage等)相关联。虽然它比我想要处理的用户管理更多,但我认为这是一种聪明的方法,并且在适当的情况下,我会使用它。
答案 1 :(得分:-2)
我认为你的情况是这样的:你有一个既在生产又在开发中的包。当您忙于增强开发版本时,需要调试和修复prod版本。为了重现这些错误,您需要将包指向prod数据库。
如果这是正确的,那么这是一个分支和合并类型的问题,可以通过版本控制来处理 - 通过TFS(或其他一些版本控制工具)或手动。
不确定为什么要保留硬编码而不进行更改以使用表达式来创建连接字符串。