【问题标题】:Distributed transaction error?分布式事务错误?
【发布时间】:2011-10-23 09:58:48
【问题描述】:

在存储过程中,我使用以下语句。但是当我运行存储过程时它会抛出分布式事务错误。

Declare @res int
    Declare @mes as varchar(100)

    DECLARE  @Result TABLE (
result INT,
mesage VARCHAR(100))

    Insert @Result (result, mesage)         
            Exec [MySpeNet].[dbo].[GetMemberShipStatus]'3319994'
    select @res = result, @mes = mesage from @Result

例外:

      Msg 7391, Level 16, State 2, Procedure GetMemberShipStatus, Line 19
    The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" 
for linked server "ASPQA" was unable to begin a distributed transaction.

有没有其他方法可以在不创建临时表的情况下存储结果和消息?

【问题讨论】:

  • Microsoft Distributed Transaction Coordinator 服务是否正在运行?

标签: sql sql-server-2005 tsql


【解决方案1】:

这对我有用:

在 SQL Server Management Studio 中,展开服务器对象,然后是链接服务器,然后右键单击相关链接服务器并选择“属性”。选择“服务器选项”页面,并确保“启用分布式事务提升”设置为“假”

或者你可以使用T-SQL

USE master;
EXEC sp_serveroption '<<your linked server name>>', 'remote proc transaction promotion', 'false';

【讨论】:

    【解决方案2】:

    启用选项

    • 允许远程客户端
    • 允许出站

    在组件服务中本地 DTC 属性的安全选项卡上。

    • 转到运行,输入 comexp.msc。
    • 双击“控制台根目录”。
    • 双击“组件服务”。
    • 双击“计算机”。
    • 双击“我的电脑”。
    • 双击“分布式事务协调器”。
    • 右键单击“分布式事务协调器”下的“本地 DTC”,然后单击属性。
    • 点击“安全”标签。
    • 在“允许远程客户端”和“允许出站”复选框上打勾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 2011-05-11
      • 2012-02-21
      • 2012-12-23
      • 2012-08-31
      • 2011-12-13
      • 2011-02-03
      相关资源
      最近更新 更多