sql - SSIS 序列容器事务选项

标签 sql sql-server ssis

我有一个非常简单的 SSIS 包,只是数据导入和执行 SQL 任务。如果包的任何部分失败,我想回滚所有内容,因此我将这些任务放入序列容器中,并将序列容器 TransactionOption 属性设置为“必需”,并将 FailPackageonFailure 属性设置为“True”。当我针对本地数据库时,这工作得很好。但是,当我尝试将 OLE DB 连接更改为远程服务器时,上述属性设置会导致包挂起并最终失败,并显示“无法获取连接”消息。我在网上看到过对此问题的类似描述,但建议始终检查连接。但是我知道连接很好,因为当我将 TransactionOption 属性更改回默认的“支持”时,包运行良好。

有谁知道为什么会发生这种情况?我假设它与我尝试连接的服务器上的不同设置有关。如果包的任何部分失败,是否有人知道确保完全回滚的不同方法。

感谢您的阅读

最佳答案

您需要使用分布式事务协调器。

分布式事务协调器 (DTC) 服务协调更新两个或多个事务保护资源(例如数据库、消息队列、文件系统等)的事务。这些受事务保护的资源可能位于一台计算机上,也可能分布在许多联网计算机上。

因为您尝试在服务器之间建立事务,所以需要一个服务来协调 SQL Server 服务。 Here是一篇关于如何做到这一点的文章。

确保启动并配置服务,并在 Windows 防火墙中为服务器之间的服务创建异常(exception)。

请参阅这篇有关交易的文章以了解更多信息:http://www.mssqltips.com/tip.asp?tip=1585

此外,您可能需要更多地了解 MSDTC 与 SSIS 的工作原理,才能解决您的问题。

关于sql - SSIS 序列容器事务选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14463497/

相关文章:

c# - 在不知道主键的情况下插入多个表

sql - MySQL:在多个表上进行多列连接

java - JDBC(微软SQL服务器): No suitable driver found for url

sql - 需要 SQL Server 查询帮助,新手

sql - 从Excel到sql表的非结构化分组数据

sql-server - 批量插入 fmt 文本限定符

mysql - CURDATE 给出错误

SQL SELECT 多列 INTO 多变量

c# - 是否有将 T-SQL 存储过程转换为 C# 的工具?

sql-server - 排序转换在 SSIS 中花费了大量时间。有没有一种方法可以在不使用排序转换的情况下删除重复项?