我正在使用SSIS内置事务。场景如下
Same Server上有两个数据库,我需要合并它们(INSERT / UPDATE) 我正在使用SQL Merge Clause这样做。主表很少,每个都有几个子表。合并语句首先在主表上运行,然后我有子表的ExecuteSQL任务。子表ExecuteSQL并行运行。
执行此操作时,我无法获取连接,并且在并行运行的ExecuteSQL任务之一上任务失败。无法弄清楚是什么原因。
RetainSameConnection设置为false,如果我将其设置为True,则表示“其他会话正在使用”事务上下文“错误。
据我所知,我不需要RetainSameConnection = True,因为它只在基于本地TSQL的事务中需要。 DTC已启用并正常工作。
并非所有任务都在我的包中失败,这表明它在并行任务上以某种方式失败地获取连接。
答案 0 :(得分:0)
“无法获取连接”消息几乎总是由于您有一项任务在正确设置之前验证连接。
在大多数SSIS项目中,您的连接都绑定到本地数据库以进行开发。然后,您可以使用表达式,变量,脚本任务或类似的东西来设置运行时的实际连接。
当一个包开始执行时,每个“DelayValidation”属性设置为“False”(默认值!)的组件都会在执行任务之前尝试连接数据源,这意味着它会尝试连接到您在开发环境中设置的数据库,然后再更新它的属性......