Azure SQL和内部sql server上的分布式事务会导致错误

问题描述 投票:2回答:1

是否可以在本地SQL Server实例和Azure SQL数据库之间进行事务。

我有以下测试用例。

public class TransactionsTest
{
    [Fact]
    public void Test1()
    {
        var premisesDatabaseContext = new OnPremisesDatabaseContext();
        var azureSQLDatabaseContext = new AzureSQLDatabaseContext();

        using (TransactionScope scope = new TransactionScope())
        {
            premisesDatabaseContext.Database.Connection.Open();
            azureSQLDatabaseContext.Database.Connection.Open();

            scope.Complete();
        }
    }

    [Fact]
    public void Test2()
    {
        var premisesDatabaseContext = new OnPremisesDatabaseContext();
        var azureSQLDatabaseContext = new AzureSQLDatabaseContext();

        using (TransactionScope scope = new TransactionScope())
        {
            azureSQLDatabaseContext.Database.Connection.Open();
            premisesDatabaseContext.Database.Connection.Open();

            scope.Complete();
        }
    }
}

看起来很简单。但是当我打开第二个连接时,两个测试用例都会因为不同的错

这是错误的详细信息。

// TEST 1
System.Reflection.TargetInvocationException: 
Exception has been thrown by the target of an invocation. 
--->
System.NullReferenceException: Object reference not set to an instance of an object.
       at System.Transactions.Transaction.GetPromotedToken()

// TEST 2
System.Transactions.TransactionPromotionException:
There is a promotable enlistment for the transaction which has a PromoterType value that is not recognized by System.Transactions. 
1c742caf-6680-40ea-9c26-6b6846079764

我想知道是否有可能实现这一目标。如果不可能,有哪些替代方案?

sql-server azure-sql-database transactionscope msdtc
1个回答
2
投票

You can't

Azure sql数据库使用Elastic Transactions。虽然在内部服务器使用Microsoft Distributed Transaction Coordinator (MSDTC)

azure不支持MSDTC,根据弹性交易文档,

仅支持SQL DB中跨数据库的事务。 SQL DB之外的其他X / Open XA资源提供程序和数据库无法参与弹性数据库事务。这意味着弹性数据库事务无法跨越SQL Server和Azure SQL数据库。对于内部的分布式事务,继续使用MSDTC。

  • 在本地,SQL Server使用MSDTC,这在Azure SQL数据库中不可用。
  • Azure SQL数据库使用弹性事务,这不适用于本地SQL Server。

最简单的解决方案是将所有数据库移动到Azure或内部。

© www.soinside.com 2019 - 2024. All rights reserved.