Skapa en distribuerad transaktion

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Important

SQL Server Native Client (SNAC) levereras inte med:

  • SQL Server 2022 (16.x) och senare versioner
  • SQL Server Management Studio 19 och senare versioner

SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.

Använd någon av följande drivrutiner för nya projekt:

För SQLNCLI som levereras som en komponent i SQL Server-databasmotorn (versioner 2012 till och med 2019), se det här Support Lifecycle-undantag.

En distribuerad transaktion kan skapas för olika Microsoft SQL-system på olika sätt.

ODBC-drivrutinen anropar MSDTC för SQL Server on-premises

Microsoft Distributed Transaction Coordinator (MSDTC) tillåter applikationer att utöka eller distribuera en transaktion över två eller fler instanser av SQL Server. Den distribuerade transaktionen fungerar även när de två instanserna är värdade på separata datorer.

MSDTC är installerat för Microsoft SQL Server lokalt, men finns inte tillgängligt för Microsoft Azure SQL Database-molntjänst.

MSDTC anropas av SQL Server Native Client-drivrutinen för Open Database Connectivity (ODBC), när ditt C++-program hanterar en distribuerad transaktion. Den inbyggda klientens ODBC-drivrutin har en transaktionshanterare som är kompatibel med Open Group Distributed Transaction Processing (DTP) XA-standarden. Denna efterlevnad krävs av MSDTC. Vanligtvis skickas alla transaktionshanteringskommandon via denna Native Client ODBC-drivrutin. Sekvensen är följande:

  1. Din C++ Native Client ODBC-applikation startar en transaktion genom att anropa SQLSetConnectAttr, med autocommit-läget avstängt.

  2. Applikationen uppdaterar viss data på SQL Server X på dator A.

  3. Applikationen uppdaterar viss data på SQL Server Y på dator B.

    • Om en uppdatering på SQL Server Y misslyckas rullas alla obundna uppdateringar på båda SQL Server-instanserna tillbaka.
  4. Slutligen avslutar applikationen transaktionen genom att anropa SQLEndTran (1), med antingen SQL_COMMIT eller SQL_ROLLBACK alternativ.

(1) MSDTC kan åberopas utan ODBC. I ett sådant fall blir MSDTC transaktionshanteraren och applikationen använder inte längre SQLEndTran.

Endast en distribuerad transaktion

Anta att din C++ Native Client ODBC-applikation registreras i en distribuerad transaktion. Därefter registrerar applikationen en andra distribuerad transaktion. I detta fall lämnar SQL Server Native Client ODBC-drivrutinen den ursprungliga distribuerade transaktionen och ansluter sig till den nya distribuerade transaktionen.

För mer information, se DTC Programmer's Reference.

C#-alternativ för SQL Database i molnet

MSDTC stöds inte för vare sig Azure SQL Database eller Azure Synapse Analytics.

Dock kan en distribuerad transaktion skapas för SQL Database genom att ditt C#-program använder .NET-klassen System.Transactions.TransactionScope.

Andra programmeringsspråk

Följande andra programmeringsspråk kanske inte erbjuder något stöd för distribuerade transaktioner med SQL Database-tjänsten:

  • Inbyggda C++ som använder ODBC-drivrutiner
  • Länkad server som använder Transact-SQL
  • JDBC-förare