【问题标题】:The Microsoft Distributed Transaction Coordinator (MS DTC) has cancelled the distributed transactionMicrosoft 分布式事务协调器 (MS DTC) 已取消分布式事务
【发布时间】:2012-07-16 22:53:43
【问题描述】:

背景: 我们有一个在 .NET framework 2.0 下开发的网站,它使用了一个用 Sql Server 2005 创建的数据库。我们还有一个在 .NET framework 4.0 下开发的网站,这个网站使用了一个用 Sql Server 2008 创建的数据库。我们链接两个数据库(从 Sql Server 2005 到 Sql Server 2008)创建“Sql Server 2005 数据库上的链接服务器”。

场景: 当我们在 Sql Server 2005 中托管的数据库上创建记录时,我们有以下事务序列: 将记录插入到 Sql Server 2005 数据库中托管的表中。 此插入在插入后执行触发器。 在触发器内部,我们执行一个存储过程(托管在 Sql Server 2008 数据库中),这个存储过程是使用“链接服务器”执行的。 此存储过程执行插入到托管在 Sql Server 2008 数据库中的表中。 如果我们使用 Sql Server Management Studio 2005 手动执行插入到托管在 Sql Server 2005 数据库中的表中,一切都会很好地执行,但是如果我们尝试使用网站的 UI (.NET 2005) 创建记录,我们会得到这个错误:

当前事务无法提交,也无法支持写入日志文件的操作。回滚事务。 Microsoft 分布式事务协调器 (MS DTC) 已取消分布式事务。

有人知道发生了什么吗?

【问题讨论】:

    标签: sql-server-2008 sql-server-2005 .net-2.0 asp.net-2.0 linked-server


    【解决方案1】:

    我确实发现在触发器中执行此类代码非常冒险。我会考虑删除触发器并创建执行所述操作的过程。

    为了正确测试所有内容,您应该在两台服务器上的一个事务中调用 DML 操作,或者您应该通过调用“begin distributed tran”显式地开始分布式事务。如果您只是在其他服务器上更新某些内容(仅 1 个操作),则您没有使用分布式事务并且测试不正确。

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2010-10-26
      相关资源
      最近更新 更多