如何为AWS RDS链接服务器启用分布式事务?

时间:2018-04-24 06:23:00

标签: sql-server amazon-web-services sql-server-2008 rds

我有一个SQL Server 2008 RDS实例,我在本地计算机SQL Server 2014上创建了一个链接服务器(AWSMSSQL)。

现在我创建了一个从本地机器数据库表中插入,更新和删除的触发器

animate()

当我在本地数据库表上更新时,使用代码

USE [test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].[ms_test] ON [dbo].[localservertable]
FOR INSERT, UPDATE, DELETE
AS
BEGIN
    declare @iddata int;
    declare @option int;

    select @iddata=i.[id] from inserted i;
    select @option=i.[option] from inserted i;          

    IF NOT EXISTS(SELECT * FROM inserted)
    BEGIN
        select @option=d.[option] from deleted d;
        DELETE FROM [AWSMSSQL].[test].[dbo].[localservertable] WHERE [option]=@option;
    END
    ELSE
    BEGIN
        IF NOT EXISTS(SELECT * FROM deleted)
        BEGIN
            INSERT INTO [AWSMSSQL].[test].[dbo].[localservertable] VALUES (@iddata,@option);
        END
        ELSE
        BEGIN
            UPDATE [AWSMSSQL].[test].[dbo].[localservertable] SET [option]=9 WHERE id=1;
        END 
    END
END;

显示错误

UPDATE [dbo].[localservertable]
   SET [option] = 5
 WHERE [iddata]=1

我发现这个link告诉我如何修改MSDTC的设置。但是在更改之后我重启了AWS RDS SERVER和本地机器。但是会存在同样的错误。帮助我摆脱这个错误

enter image description here

enter image description here

谢谢!

4 个答案:

答案 0 :(得分:1)

触发器隐式启用XACT_ABORT。此设置启用时出错将自动导致事务回滚(使用RAISERROR语句在代码中引发的错误除外)。

答案 1 :(得分:0)

目前看来,RDS不支持分布式事务。

答案 2 :(得分:0)

答案 3 :(得分:0)

RDS for SQL Server现在支持分布式事务。 here介绍了如何配置MSDTC的指南。完整的文档为here