BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)

Gilt für: SQL Server Azure SQL Managed Instance

Hiermit wird der Start einer verteilten Transact-SQL-Transaktion angegeben. Bei Verwendung von SQL Server wird die verteilte Transaktion vom Microsoft Distributed Transaction Coordinator (MS DTC) verwaltet.

  • Bei Azure SQL Managed Instance wird die verteilte Transaktion vom Dienst selbst und nicht von MS DTC verwaltet. Informationen zu verteilten Transaktionen in Azure SQL-Datenbank und Azure SQL Managed Instance finden Sie unter Verteilte Transaktionen über Clouddatenbanken.

Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

transaction_name

Der benutzerdefinierte Transaktionsname, unter dem die verteilte Transaktion in den MS DTC-Hilfsprogrammen nachverfolgt wird. transaction_name muss den Regeln für Bezeichner entsprechen, d.h. <= 32 Zeichen enthalten.

@tran_name_variable

Der Name einer benutzerdefinierten Variablen, die einen Transaktionsnamen enthält. Mithilfe dieses Namens wird die verteilte Transaktion in den MS DTC-Hilfsprogrammen nachverfolgt. Die Variable muss mit einem der folgenden Datentypen deklariert werden: char, varchar, nchar oder nvarchar.

Bemerkungen

Die Instanz von SQL Server-Datenbank-Engine, die die BEGIN DISTRIBUTED TRANSACTION-Anweisung ausführt, wird als Transaktionsurheber bezeichnet und steuert den Abschluss der Transaktion. Wenn im Anschluss eine COMMIT TRANSACTION- oder ROLLBACK TRANSACTION-Anweisung für die Sitzung ausgegeben wird, fordert die steuernde Instanz MS DTC auf, die Beendigung der verteilten Transaktion auf allen beteiligten Instanzen zu verwalten.

Die Momentaufnahmeisolation auf Transaktionsebene unterstützt keine verteilten Transaktionen.

Remoteinstanzen von Datenbank-Engine werden in erster Linie in eine verteilte Transaktion eingetragen, wenn eine bereits in der verteilten Transaktion eingetragene Sitzung eine verteilte Abfrage ausführt, die auf einen Verbindungsserver verweist.

Wenn BEGIN DISTRIBUTED TRANSACTION beispielsweise auf Server A ausgegeben wird, ruft die Sitzung eine gespeicherte Prozedur auf Server B und eine weitere gespeicherte Prozedur auf Server C auf. Die gespeicherte Prozedur auf Server C führt eine verteilte Abfrage für Server D aus. In diesem Fall sind alle vier Computer an der verteilten Transaktion beteiligt. Die Instanz von Datenbank-Engine auf Server A ist die ursprüngliche steuernde Instanz für die Transaktion.

Die Sitzungen, die an den verteilten Transact-SQL-Transaktionen beteiligt sind, erhalten kein Transaktionsobjekt, das sie an eine andere Sitzung weitergeben können, um explizit in die verteilte Transaktion eingetragen zu werden. Ein Remoteserver kann nur in die Transaktion eingetragen werden, wenn er das Ziel einer verteilten Abfrage oder eines Aufrufs einer remote gespeicherten Prozedur ist.

Bei Ausführung einer verteilten Abfrage in einer lokalen Transaktion wird diese automatisch zu einer verteilten Transaktion höher gestuft, wenn die OLE DB-Zieldatenquelle ITransactionLocal unterstützt. Unterstützt die OLE DB-Zieldatenquelle ITransactionLocal nicht, sind in der verteilten Abfrage nur Lesezugriffe zulässig.

Eine in die verteilte Transaktion bereits eingetragene Sitzung führt einen Aufruf einer remote gespeicherten Prozedur aus, die auf einen Remoteserver verweist.

Die Option sp_configure remote proc trans steuert, ob Aufrufe von remote gespeicherten Prozeduren in einer lokalen Transaktion automatisch bewirken, dass die lokale Transaktion zu einer verteilten Transaktion höher gestuft wird, die von MS DTC verwaltet wird. Mit der SET-Option REMOTE_PROC_TRANSACTIONS auf Verbindungsebene kann die Standardeinstellung der Instanz überschrieben werden, die von sp_configure remote proc trans angegeben wird. Wenn diese Option aktiviert ist, bewirkt der Aufruf einer remote gespeicherten Prozedur, dass eine lokale Transaktion zu einer verteilten Transaktion höher gestuft wird. Die Verbindung, die die MS DTC-Transaktion erstellt, wird Urheber der Transaktion. COMMIT TRANSACTION startet einen von MS DTC koordinierten Commit. Ist die Option sp_configure remote proc trans aktiviert, werden Aufrufe von remote gespeicherten Prozeduren in lokalen Transaktionen automatisch als Teil einer verteilten Transaktion geschützt, ohne dass Anwendungen derart neu geschrieben werden müssen, dass speziell BEGIN DISTRIBUTED TRANSACTION statt BEGIN TRANSACTION ausgegeben wird.

Weitere Informationen zur verteilten Transaktionsumgebung und zum verteilten Transaktionsprozess finden Sie in der Dokumentation zu Microsoft Distributed Transaction Coordinator.

Berechtigungen

Erfordert die Mitgliedschaft in der public-Rolle.

Beispiele

In diesem Beispiel wird ein Kandidat aus der AdventureWorks2022-Datenbank sowohl auf der lokalen Instanz der Datenbank-Engine als auch auf einer Instanz auf einem Remoteserver gelöscht. Für die Transaktion wird sowohl in der lokalen Datenbank als auch in der Remotedatenbank entweder ein Commit oder ein Rollback ausgeführt.

Hinweis

Wenn MS DTC derzeit nicht auf dem Computer installiert ist, auf dem die Instanz von Datenbank-Engine ausgeführt wird, erzeugt dieses Beispiel eine Fehlermeldung. Weitere Informationen zum Installieren von MS DTC finden Sie in der Dokumentation zu 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

Nächste Schritte