2

我正在使用 SSIS 内置事务。场景如下

同一服务器上有两个数据库,我需要合并它们(插入/更新)我正在使用 SQL 合并子句来这样做。主表很少,每个表都有几个子表。合并语句首先在主表上运行,然后我有子表的 ExecuteSQL 任务。子表 ExecuteSQL 并行运行。

执行此操作时,我在并行运行的 ExecuteSQL 任务之一上获取连接失败并且任务失败。无法弄清楚是什么原因。

RetainSameConnection 设置为 false,如果我将其设置为 True,则会出现“事务上下文正在被另一个会话使用”错误。

据我了解,我不需要 RetainSameConnection = True 因为它仅在基于本地 TSQL 的事务中需要。DTC 已启用且正在工作。

并非我的包中的所有任务都失败了,这表明它通过在并行任务上以某种方式失败而成功地获得了连接。

4

1 回答 1

0

“无法获取连接”消息几乎总是由于您有一个任务在正确设置连接之前验证连接。

在大多数 SSIS 项目中,您的连接都绑定到本地数据库以用于开发目的。然后,您可以使用表达式、变量、脚本任务或类似的东西在运行时设置真正的连接。

当一个包开始执行时,每个将“DelayValidation”属性设置为“False”(默认值!)的组件都会在执行任何任务之前尝试连接到数据源,这意味着它将尝试连接到在更新其属性之前在开发环境中设置的数据库...

于 2013-02-22T20:00:13.823 回答