首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当两个事务正在执行时,DTC不工作

当两个事务正在执行时,DTC不工作
EN

Stack Overflow用户
提问于 2017-11-08 16:33:33
回答 1查看 211关注 0票数 1

我正在SQL Server2008上工作,并且正在尝试执行一个存储过程,该存储过程更新一个表并在链接服务器上执行另一个存储过程。

关键是它在没有更新的情况下工作,就像这样:

Server1上的test_DTC

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[test_DTC] 
@UserId int,
@Status tinyint
AS
BEGIN

    EXEC [Server2].[Database].[dbo].[test_DTC];

END

GO

Server2上的test_DTC

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[test_DTC] 

AS
BEGIN

    PRINT 'Done'

END

GO

在Server1上执行:

代码语言:javascript
复制
EXEC [test_DTC]

结果:

代码语言:javascript
复制
Done

但是当我在Server1过程中包含更新时,它失败了。

Server1上的test_DTC

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[test_DTC] 
@UserId int,
@Status tinyint
AS
BEGIN

    UPDATE 
       Users
    SET 
       Status=@Status
    WHERE 
       UserId=@UserId;

    EXEC [Server2].[Database].[dbo].[test_DTC];

END

GO

Server2上的test_DTC

代码语言:javascript
复制
CREATE PROCEDURE [dbo].[test_DTC] 

AS
BEGIN

    PRINT 'Done'

END

GO

在Server1上执行:

代码语言:javascript
复制
EXEC [test_DTC]

结果

代码语言:javascript
复制
Provider OLE DB "SQLNCLI10" from linked server "[Server2]" returned message "The transaction has already been implicitly or explicitly committed". Msg 7391, Level16, State 2, Procedure [Server2].[Database].[dbo].[test_DTC], Line 19

The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "Server2" was unable to begin a distributed transaction.

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2017-11-08 16:36:12

我已经找到了一个解决方案,那就是MSDN Blog

上面写着

的原因是,当事务从一台计算机传播到另一台计算机时,它们包括它们的计算机名/DNS名。当它到达另一台计算机时,它将使用此名称尝试与发起方计算机通信。如果此通信失败,则分布式事务将无法在系统中工作。

微软已经在同一个平台上提供了Detailed Article

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47174883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档