Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Important
Klient natywny SQL Servera (SNAC) nie jest dostarczany z:
- SQL Server 2022 (16.x) i nowsze wersje
- SQL Server Management Studio 19 i nowsze wersje
Program SQL Server Native Client (SQLNCLI lub SQLNCLI11) oraz starszy dostawca microsoft OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku tworzenia nowych aplikacji.
W przypadku nowych projektów użyj jednego z następujących sterowników:
- Sterownik ODBC firmy Microsoft dla programu SQL Server
- Sterownik OLE DB firmy Microsoft dla programu SQL Server
W przypadku programu SQLNCLI dostarczanego jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), proszę sprawdzić wyjątek cyklu wsparcia .
Rozproszona transakcja może być tworzona dla różnych systemów SQL Microsoft na różne sposoby.
Sterownik ODBC wywołuje MSDTC dla SQL Server lokalnie
Microsoft Distributed Transaction Coordinator (MSDTC) pozwala aplikacjom rozszerzać lub rozprowadzać transakcję na dwie lub więcej instancji SQL Server. Rozproszona transakcja działa nawet wtedy, gdy obie instancje są hostowane na oddzielnych komputerach.
MSDTC jest zainstalowany dla Microsoft SQL Server lokalnie, ale nie jest dostępny dla Azure SQL Database usługi chmurowej Microsoft.
MSDTC jest wywoływany przez sterownik SQL Server Native Client for Open Database Connectivity (ODBC), gdy Twój program C++ zarządza rozproszoną transakcją. Sterownik ODBC dla natywnego klienta posiada menedżera transakcji zgodnego ze standardem Open Group Distributed Transaction Processing (DTP) XA. To spełnienie jest wymagane przez MSDTC. Zazwyczaj wszystkie polecenia zarządzania transakcjami są wysyłane przez ten natywny sterownik ODBC dla klienta. Sekwencja jest następująca:
Twoja aplikacja C++ Native Client ODBC rozpoczyna transakcję, wywołując SQLSetConnectAttr, z wyłączonym trybem autocommit.
Aplikacja aktualizuje niektóre dane na SQL Server X na komputerze A.
Aplikacja aktualizuje część danych na SQL Server Y na komputerze B.
- Jeśli aktualizacja SQL Server Y nie zawie, wszystkie niezatwierdzone aktualizacje obu instancji SQL Server są cofane.
Na koniec aplikacja kończy transakcję, wywołując SQLEndTran (1), z opcją SQL_COMMIT lub SQL_ROLLBACK.
(1) MSDTC może być uruchamiane bez ODBC. W takim przypadku MSDTC staje się menedżerem transakcji, a aplikacja przestaje używać SQLEndTran.
Tylko jedna transakcja rozproszona
Załóżmy, że Twoja aplikacja C++ Native Client ODBC jest wpisana w transakcję rozproszoną. Następnie aplikacja rejestruje się w drugiej transakcji rozproszonej. W takim przypadku sterownik ODBC natywnego klienta SQL Server opuszcza oryginalną transakcję rozproszoną i rejestruje się w nowej.
Więcej informacji można znaleźć w sekcji DTC Programmer's Reference.
Alternatywa dla bazy danych SQL w chmurze w C#
MSDTC nie jest obsługiwany ani dla Azure SQL Database, ani Azure Synapse Analytics.
Jednak rozproszoną transakcję można utworzyć dla SQL Database, używając w programie C# klasy .NET System.Transactions.TransactionScope.
Inne języki programowania
Następujące inne języki programowania mogą nie wspierać rozproszonych transakcji z usługą SQL Database (SQL Database Service):
- Natywne C++ wykorzystujące sterowniki ODBC
- Serwer połączony z użyciem Transact-SQL
- Sterowniki JDBC