Udostępnij za pomocą


ROZPOCZNIJ TRANSAKCJĘ ROZPROSZONĄ (Transact-SQL)

Dotyczy:SQL ServerAzure SQL Managed Instance

Określa rozpoczęcie Transact-SQL rozproszonej transakcji. Podczas korzystania z SQL Server rozproszona transakcja jest zarządzana przez Microsoft Distributed Transaction Coordinator (MS DTC).

  • W przypadku Azure SQL Managed Instance, rozproszona transakcja jest zarządzana przez samą usługę, a nie przez MS DTC. Aby uzyskać informacje o transakcjach rozproszonych w Azure SQL Database i Azure SQL Managed Instance, zobacz Rozproszone transakcje w chmurowych bazach danych.

Transact-SQL konwencje składni

Składnia

BEGIN DISTRIBUTED { TRAN | TRANSACTION }
     [ transaction_name | @tran_name_variable ]
[ ; ]

Arguments

transaction_name

To nazwa transakcji zdefiniowana przez użytkownika i używana do śledzenia rozproszonej transakcji w narzędziach MS DTC. transaction_name musi być zgodny z zasadami dla identyfikatorów i musi mieć <= 32 znaki.

@ tran_name_variable

To nazwa zmiennej zdefiniowanej przez użytkownika zawierającej nazwę transakcji używanej do śledzenia rozproszonej transakcji w narzędziach MS DTC. Zmienna musi być zadeklarowana przy użyciu typu danych char, varchar, nchar lub nvarchar .

Uwagi

Instancja silnika bazy danych SQL Server wykonująca polecenie BEGIN DISTRIBUTED TRANSACTION jest inicjatorem transakcji i kontroluje zakończenie transakcji. Gdy kolejne wydanie polecenia COMMIT TRANSACTION lub ROLLBACK TRANSACTION zostanie wydane dla sesji, instancja kontrolująca prosi MS DTC o zarządzanie zakończeniem rozproszonej transakcji we wszystkich zaangażowanych instancjach.

Izolacja migawek na poziomie transakcji nie obsługuje transakcji rozproszonych.

Głównym sposobem rejestrowania zdalnych instancji silnika bazy danych w rozproszonej transakcji jest sytuacja, gdy sesja już zarejestrowana w tej transakcji wykonuje rozproszone zapytanie odnoszące się do połączonego serwera.

Na przykład, jeśli na ServerA zostanie wydana BEGIN DISTRIBUTED TRANSACTION, SESJA WYWOŁUJE PROCEDURĘ PRZECHOWYWANĄ NA SERWERZE B oraz inną procedurę na serwerze C. Procedura przechowywana w ServerC wykonuje rozproszone zapytanie przeciwko ServerD, a następnie wszystkie cztery komputery biorą udział w transakcji rozproszonej. Instancja silnika bazy danych na ServerA jest instancją sterującą dla transakcji.

Sesje zaangażowane w Transact-SQL rozproszone transakcje nie otrzymują obiektu transakcji, który mogłyby przekazać innej sesji, aby ta mogła się jawnie włączyć do transakcji rozproszonej. Jedynym sposobem, aby zdalny serwer mógł zarejestrować się w transakcji, jest bycie celem rozproszonego zapytania lub zdalnego wywołania procedury przechowywanej.

Gdy zapytanie rozproszone zostanie wykonane w transakcji lokalnej, transakcja jest automatycznie promowana do transakcji rozproszonej, jeśli docelowe źródło danych OLE DB obsługuje ITransactionLocal. Jeśli docelowe źródło danych OLE DB nie obsługuje ITransactionLocal, w rozproszonym zapytaniu dozwolone są tylko operacje tylko do odczytu.

Sesja już zarejestrowana w rozproszonej transakcji wykonuje zdalne wywołanie procedury przechowywanej odwołującej się do zdalnego serwera.

Opcja ta sp_configure remote proc trans kontroluje, czy wywołania zdalnych procedur przechowywanych w transakcji lokalnej automatycznie powodują, że transakcja lokalna zostanie awansowana do transakcji rozproszonej zarządzanej przez MS DTC. Opcja SET na poziomie połączenia REMOTE_PROC_TRANSACTIONS może być użyta do nadpisania domyślnej instancji ustanowionej przez sp_configure remote proc trans. Po ustawieniu tej opcji zdalne wywołanie procedury przechowywanej powoduje promowanie lokalnej transakcji do transakcji rozproszonej. Połączenie, które tworzy transakcję MS DTC, staje się inicjatorem transakcji. COMMIT TRANSACTION inicjuje skoordynowany commit MS DTC. Jeśli sp_configure remote proc trans opcja jest włączona, zdalne wywołania procedur przechowywanych w transakcjach lokalnych są automatycznie chronione jako część transakcji rozproszonych bez konieczności przepisywania aplikacji, które wydają konkretnie BEGIN DISTRIBUTED TRANSACTION zamiast BEGIN TRANSACTION.

Aby uzyskać więcej informacji o środowisku i procesie transakcji rozproszonych, zobacz dokumentację Microsoft Distributed Transaction Coordinator.

Permissions

Wymaga członkostwa w roli publicznej.

Przykłady

Ten przykład usuwa kandydata z bazy danych AdventureWorks2025 zarówno na lokalnej instancji silnika bazy danych, jak i na zdalnym serwerze. Zarówno lokalna, jak i zdalna baza danych albo zatwierdzą, albo cofną transakcję.

Uwaga / Notatka

Jeśli MS DTC nie jest obecnie zainstalowane na komputerze uruchamiającym instancję Silnika Bazy Danych, ten przykład generuje komunikat o błędzie. Więcej informacji o instalacji MS DTC można znaleźć w dokumentacji Microsoft Distributed Transaction Coordinator.

USE AdventureWorks2022;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks2022.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks2022.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO

Dalsze kroki