Sdílet prostřednictvím


ZAHÁJIT DISTRIBUOVANOU TRANSAKCI (Transact-SQL)

platí pro:SQL Serverazure SQL Managed Instance

Specifikuje začátek Transact-SQL distribuované transakce. Při použití SQL Serveru je distribuovaná transakce spravována Microsoft Distributed Transaction Coordinator (MS DTC).

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

transaction_name

Je uživatelsky definované jméno transakce používané ke sledování distribuované transakce v utilitách MS DTC. transaction_name musí odpovídat pravidlům identifikátorů a musí být <= 32 znaků.

@ tran_name_variable

Je název uživatelsky definované proměnné obsahující název transakce používaný ke sledování distribuované transakce v utilitách MS DTC. Proměnná musí být deklarována pomocí datového typu char, varchar, nchar nebo nvarchar .

Poznámky

Instancí SQL Server Database Engine, která vykonává příkaz BEGIN DISTRIBUTED TRANSACTION, je iniciátorem transakce a řídí dokončení transakce. Když je pro relaci vydán následující příkaz COMMIT TRANSACTION nebo ROLLBACK TRANSACTION, řídící instance požádá, aby MS DTC spravovalo dokončení distribuované transakce napříč všemi zúčastněnými instancemi.

Izolace snapshotů na úrovni transakcí nepodporuje distribuované transakce.

Hlavním způsobem, jakým jsou vzdálené instance databázového enginu zaznamenány v distribuované transakci, je, když relace již zapsaná v distribuované transakci vykoná distribuovaný dotaz odkazující na propojený server.

Například pokud je na ServerA vydán BEGIN DISTRIBUTED TRANSACTION, relace volá uloženou proceduru na ServerB a další uloženou proceduru na ServerC. Uložená procedura na ServerC vykoná distribuovaný dotaz proti ServerD a poté jsou všechny čtyři počítače zapojeny do distribuované transakce. Instance databázového enginu na ServerA je původní řídicí instancí pro transakci.

Relace zapojené do Transact-SQL distribuovaných transakcí nedostanou transakční objekt, který by mohly předat jiné relaci, aby se ta explicitně zařadila do distribuované transakce. Jediný způsob, jak se vzdálený server může zapojit do transakce, je být cílem distribuovaného dotazu nebo vzdáleného uloženého procedurálního volání.

Když je distribuovaný dotaz vykonán v lokální transakci, transakce je automaticky povýšena na distribuovanou transakci, pokud cílový zdroj dat OLE DB podporuje ITransactionLocal. Pokud cílový zdroj dat OLE DB nepodporuje ITransactionLocal, jsou v distribuovaném dotazu povoleny pouze operace pouze pro čtení.

Relace již zapsaná v distribuované transakci provádí vzdálené volání uložené procedury odkazující na vzdálený server.

Tato sp_configure remote proc trans možnost ovládá, zda volání vzdálených uložených procedur v lokální transakci automaticky způsobí, že místní transakce bude povýšena na distribuovanou transakci spravovanou MS DTC. Možnost SET na úrovni spojení REMOTE_PROC_TRANSACTIONS lze použít k přepsání výchozího nastavení instance stanoveného .sp_configure remote proc trans S touto volbou zapnutou vzdálená uložená procedura způsobí, že lokální transakce bude povýšena na distribuovanou transakci. Spojení, které vytváří transakci MS DTC, se stává iniciátorem transakce. Transakce COMMIT zahajuje MS DTC koordinovaný commit. Pokud je volba sp_configure remote proc trans zapnuta, vzdálené uložené procedury v lokálních transakcích jsou automaticky chráněny jako součást distribuovaných transakcí bez nutnosti přepisovat aplikace tak, aby vydaly přímo BEGIN DISTRIBUTED TRANSACTION místo BEGIN TRANSACTION.

Pro více informací o prostředí a procesu distribuovaných transakcí viz dokumentaci Microsoft Distributed Transaction Coordinator.

Povolení

Vyžaduje členství ve veřejné roli.

Examples

Tento příklad maže kandidáta z databáze AdventureWorks2025 jak na lokální instanci databázového enginu, tak na vzdáleném serveru. Jak lokální, tak vzdálené databáze transakci buď potvrzují, nebo zruší zpět.

Poznámka:

Pokud není MS DTC aktuálně nainstalováno na počítači, který běží instancí databázového enginu, tento příklad vyvolává chybovou zprávu. Pro více informací o instalaci MS DTC viz dokumentace 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

Další kroky