Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Specificeert het begin van een Transact-SQL gedistribueerde transactie. Bij gebruik van SQL Server wordt de gedistribueerde transactie beheerd door Microsoft Distributed Transaction Coordinator (MS DTC).
- In het geval van Azure SQL Managed Instance wordt de gedistribueerde transactie beheerd door de service zelf en niet door MS DTC. Voor informatie over gedistribueerde transacties in Azure SQL Database en Azure SQL Managed Instance, zie Gedistribueerde transacties over clouddatabases.
Transact-SQL syntaxis-conventies
Syntaxis
BEGIN DISTRIBUTED { TRAN | TRANSACTION }
[ transaction_name | @tran_name_variable ]
[ ; ]
Arguments
transaction_name
Is een door de gebruiker gedefinieerde transactienaam die wordt gebruikt om de gedistribueerde transactie binnen MS DTC-hulpprogramma's te volgen. transaction_name moet voldoen aan de regels voor identificaties en moet = 32 tekens zijn <.
@ tran_name_variable
Is de naam van een door de gebruiker gedefinieerde variabele met een transactienaam die wordt gebruikt om de gedistribueerde transactie binnen MS DTC-hulpprogramma's te volgen. De variabele moet worden gedeclareerd met een gegevenstype char, varchar, nchar of nvarchar .
Opmerkingen
De instantie van de SQL Server Database Engine die de BEGIN DISTRIBUTED TRANSACTION-instructie uitvoert, is de transactie-originator en regelt de voltooiing van de transactie. Wanneer een volgende COMMIT TRANSACTION- of ROLLBACK TRANSACTION-instructie voor de sessie wordt uitgegeven, vraagt de controlerende instantie dat MS DTC de voltooiing van de gedistribueerde transactie beheert voor alle betrokken instanties.
Transactie-niveau snapshotisolatie ondersteunt geen gedistribueerde transacties.
De belangrijkste manier waarop externe instanties van de Database Engine worden opgenomen in een gedistribueerde transactie, is wanneer een sessie die al in de gedistribueerde transactie is opgenomen een gedistribueerde query uitvoert die verwijst naar een gekoppelde server.
Als bijvoorbeeld BEGIN DISTRIBUTED TRANSACTION wordt uitgevoerd op ServerA, roept de sessie een opgeslagen procedure op ServerB aan en een andere opgeslagen procedure op ServerC. De opgeslagen procedure op ServerC voert een gedistribueerde query uit tegen ServerD, waarna alle vier de computers betrokken zijn bij de gedistribueerde transactie. De instantie van de Database Engine op ServerA is de oorspronkelijke controlerende instantie voor de transactie.
De sessies die betrokken zijn bij Transact-SQL gedistribueerde transacties krijgen geen transactieobject dat ze aan een andere sessie kunnen doorgeven om expliciet in de gedistribueerde transactie te worden opgenomen. De enige manier waarop een externe server zich bij de transactie kan aanmelden, is door het doelwit te zijn van een gedistribueerde query of een remote stored procedure-aanroep.
Wanneer een gedistribueerde query wordt uitgevoerd in een lokale transactie, wordt de transactie automatisch gepromoveerd tot een gedistribueerde transactie als de doel-OLE DB-databron ITransactionLocal ondersteunt. Als de doel-OLE DB-databron ITransactionLocal niet ondersteunt, zijn alleen alleen-lezen bewerkingen toegestaan in de gedistribueerde query.
Een sessie die al is opgenomen in de gedistribueerde transactie voert een remote stored procedure-aanroep uit die verwijst naar een externe server.
De sp_configure remote proc trans optie bepaalt of aanroepen naar remote stored procedures in een lokale transactie automatisch de lokale transactie promoveren naar een gedistribueerde transactie beheerd door MS DTC. De verbindingsniveau SET-optie REMOTE_PROC_TRANSACTIONS kan worden gebruikt om de standaard van sp_configure remote proc transde instantie te overschrijven. Met deze optie ingeschakeld, zorgt een remote stored procedure-aanroep ervoor dat een lokale transactie wordt gepromoveerd tot een gedistribueerde transactie. De verbinding die de MS DTC-transactie aanmaakt, wordt de oorspronkelijke instantie van de transactie. COMMIT TRANSACTION initieert een MS DTC-gecoördineerde commit. Als de sp_configure remote proc trans optie AAN is, worden remote stored procedure-aanroepen in lokale transacties automatisch beschermd als onderdeel van gedistribueerde transacties zonder dat applicaties specifiek worden herschreven om BEGIN DISTRIBUTED TRANSACTION uit te voeren in plaats van BEGIN TRANSACTION.
Voor meer informatie over de gedistribueerde transactieomgeving en het proces, zie de documentatie van Microsoft Distributed Transaction Coordinator.
Permissions
Vereist lidmaatschap van de openbare rol.
Voorbeelden
Dit voorbeeld verwijdert een kandidaat uit de AdventureWorks2025-database, zowel op de lokale instantie van de Database Engine als op een instantie op een externe server. Zowel de lokale als de externe database zullen de transactie committen of terugrollen.
Opmerking
Tenzij MS DTC momenteel is geïnstalleerd op de computer die de instantie van de Database Engine draait, geeft dit voorbeeld een foutmelding. Voor meer informatie over het installeren van MS DTC, zie de documentatie van de 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