Megosztás a következőn keresztül:


ELOSZTOTT TRANZAKCIÓ INDÍTÁSA (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

Megadja egy Transact-SQL elosztott tranzakció kezdetét. SQL Server használatakor az elosztott tranzakciót a Microsoft Distributed Transaction Coordinator (MS DTC) kezeli.

  • Azure SQL Managed Instance esetén a elosztott tranzakciót maga a szolgáltatás kezeli, nem az MS DTC. Az Azure SQL Database és Azure SQL Managed Instance distributed tranzakcióiról információért lásd: Distributed transactions across cloud databases.

Transact-SQL szintaxis konvenciók

Szemantika

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

Arguments

transaction_name

Egy felhasználó által definiált tranzakciónév, amelyet az MS DTC segédeszközein belüli elosztott tranzakció nyomon követésére használnak. transaction_name meg kell felelniük az azonosítók szabályainak, és = 32 karakternek kell lennie <.

@ tran_name_variable

Egy felhasználó által definiált változó neve, amely tranzakció nevet tartalmaz, amelyet az MS DTC segédeszközeiben található elosztott tranzakció nyomon követésére használnak. A változót karakter, varchar, nchar vagy nvarchar adattípussal kell deklarálni.

Megjegyzések

Az SQL Server Database Engine példánya, amely a BEGIN DISTRIBUTED TRANSACTION utasítást hajtja végre, a tranzakció indítója, és szabályozza a tranzakció befejezését. Amikor a következő COMMIT TRANSACTION vagy ROLLBACK TRANSACTION utasítást adnak ki az ülésre, a vezérlő példány azt kéri, hogy az MS DTC kezelje az elosztott tranzakció teljesítését az összes érintett példányban.

A tranzakciós szintű snapshot izolálás nem támogatja az elosztott tranzakciókat.

Az adatbázis motorjának távoli példányait az elosztott tranzakcióba bevonva az elsődleges mód, ha egy már bejegyzett ülés egy elosztott lekérdezést hajt végre, amely egy összekapcsolt szerverre hivatkozik.

Például, ha a BEGIN DISTRIBUTED TRANSACTION a ServerA-n van kiadva, a szekció egy tárolt eljárást hív a ServerB-n, egy másik tárolt eljárást a ServerC-en. A ServerC-ben tárolt eljárás egy elosztott lekérdezést hajt végre a ServerD ellen, majd mind a négy számítógép részt vesz az elosztott tranzakcióban. A ServerA-n található Database Engine példánya a tranzakció eredeti irányító példánya.

A Transact-SQL elosztott tranzakciókban részt vevő ülések nem kapnak olyan tranzakciós objektumot, amelyet átadhatnának egy másik ülésnek, hogy az explicit módon bekapcsolódjon a megosztott tranzakcióba. Egy távoli szerver csak úgy csatlakozhat a tranzakcióba, ha egy elosztott lekérdezés vagy távoli tárolt eljáráshívás célpontja lesz.

Amikor egy elosztott lekérdezést hajtanak végre egy helyi tranzakcióban, a tranzakció automatikusan elosztott tranzakcióvá lép elő, ha a cél OLE DB adatforrás támogatja az ITransactionLocal-t. Ha a cél OLE DB adatforrás nem támogatja az ITransactionLocal-t, akkor az elosztott lekérdezésben csak olvasható műveletek engedélyezettek.

Egy már bejegyzett ülés a megosztott tranzakcióban távoli tárolt eljáráshívást hajt végre, amely egy távoli szerverre hivatkozik.

Az sp_configure remote proc trans opció szabályozza, hogy a helyi tranzakcióban a távolról tárolt eljárásokra történő hívások automatikusan előléptetnek-e a helyi tranzakciót egy MS DTC által kezelt elosztott tranzakcióvá. A kapcsolati szintű SET opció REMOTE_PROC_TRANSACTIONS használható felülírni az általa létrehozott sp_configure remote proc transpéldány alapértelmezett értékét. Ha ez az opció bekapcsolva, egy távoli tárolt eljáráshívás helyi tranzakciót előléptet, amely elosztott tranzakcióvá válik. Az a kapcsolat, amely létrehozza az MS DTC tranzakciót, válik a tranzakció indítójává. A COMMIT TRANSACTION elindít egy MS DTC koordinált commit. Ha az sp_configure remote proc trans opció BEKAPCSOLVA, a helyi tranzakciókban tárolt eljáráshívások automatikusan védve vannak az elosztott tranzakciók részeként anélkül, hogy az alkalmazásokat újra kellene írni, hogy kifejezetten a BEGIN TRANSACTION helyett BEGIN DISTRIBUTED TRANSACTION adják ki.

További információért az elosztott tranzakciós környezetről és folyamatról lásd a Microsoft Distributed Transaction Coordinator dokumentációját.

Permissions

A nyilvános szerepkörhöz tagságra van szükség.

Példák

Ez a példa törli a jelöltet, amely az AdventureWorks2025 adatbázisból mind a helyi Database Engine példányon, mind egy távoli szerveren található. Mind a helyi, mind a távoli adatbázisok vagy kötelezik el a tranzakciót, vagy visszavonják a tranzakciót.

Megjegyzés:

Hacsak nem telepítve az MS DTC jelenleg azon a számítógépen, amely az adatbázis motorját futtatja, ez a példa hibaüzenetet eredményez. További információért az MS DTC telepítéséről lásd a Microsoft Distributed Transaction Coordinator dokumentációját.

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

Következő lépések