(1 .)
我有一个序列容器。它有4个不同的执行sql任务和4个不同的DFT,其中数据插入到不同的表中。我希望在包失败时实现带有MSDTC服务或不包含MSDTC服务的事务,也就是说,在任何DFT失败或执行SQL任务时,每个数据都应该回滚。如何实施?当我试图使用MSDTC服务实现时,我会得到"OLEDB连接“错误,如果没有MSDTC,数据将被插入,最后一个执行Sql任务将被回滚。如何在2017年实现这一目标?
第二条)
当我尝试不使用MSDTC时,将RetainSameConnection属性设置为ServerConnection,并为ServerConnection和commit再执行两个执行sql任务。我在事件处理程序中遇到了一个问题,即无法将错误记录到不同的表中。当试图操作时,回滚或事件处理程序都可以工作。一旦发生错误,控件将转到事件处理程序,然后回滚事件处理程序中的每一件事情,包括任务。
(3.)
序列容器用于并行执行任务。因此,在4次失败中,特定的任务只有被回滚的特定任务rest SQL任务才是将数据插入到表中。
预先多谢!
发布于 2018-11-01 18:52:03
我使用的一个选项(没有MSDTC)是将您的OLEDB对角配置为RetainSameConnection=True (通过属性窗口)
然后在序列容器之前开始一个事务&之后提交(所有这些都共享相同的OLEDB连接)。
工作非常好&很容易实现。
发布于 2018-11-05 05:40:08
根据我的场景:我使用了一个序列容器(它包含不同的DFT和任务),并且又执行了3次执行sql任务:
第一开始事务T1(在序列容器之前)
第二次提交事务T1(在序列容器之后)
第三个Rollback事务T1(在序列容器之后)优先级为failure,即只有当序列容器失败时,包含rollback操作的执行Sql任务才会执行。
备注:我试图以这种方式回滚,但是只插入了当前的执行sql任务--也就是离它最近的是回滚数据。那么解决办法是什么呢?在同一个执行sql任务中,我截断了插入行的表。因此,当序列容器失败时,执行sql任务将截断相应表中的所有数据。(回滚事务T1 go截断表Table_name1 go截断表table_name3)
*重要:*要使上述操作正常工作,请确保连接管理器属性**RetainSameConnection设置为True,默认情况下为false。
现在,为了将错误记录到用户定义的表中,我们使用了事件handler.So,场景是,当序列容器失败时,所有内容都回滚,包括事件处理程序中执行sql任务中使用的表。那么解决办法是什么呢?
当您不使用SSIS事务属性时,默认情况下,每个任务的属性都设置为支持。事件处理程序中的Execute sql任务也具有与支持的相同的属性,因此它遵循相同的transaction.To,使事件处理程序正确地工作,更改执行Sql的连接,即接受不同的连接,并将其设置为NotSupported。因此,它将不遵循相同的事务,当发生任何错误时,它将将错误记录到表中。
注意:我们使用序列容器并行执行tasks.What,如果?错误发生在序列容器内的任何一个任务和任务不允许顺序容器到fail.In --在这种情况下,连接所有的任务serially.Yes,这对序列容器没有任何意义。我找到了这样的解决方案。
希望它对所有人都有帮助!-)
https://stackoverflow.com/questions/53107466
复制相似问题