Freigeben über


BEGIN DISTRIBUTED TRANSACTION (Transact-SQL)

Gibt den Anfang einer verteilten Transact-SQL-Transaktion an, die von Microsoft Distributed Transaction Coordinator (MS DTC) verwaltet wird.

Themenlink (Symbol) 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 und <= 32 Zeichen sein.

  • @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.

Hinweise

Die Instanz von SQL Server Database Engine (Datenbankmodul), 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 Database Engine (Datenbankmodul) 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 ServerA ausgegeben wird, ruft die Sitzung eine gespeicherte Prozedur auf ServerB und eine weitere gespeicherte Prozedur auf ServerC auf. Die gespeicherte Prozedur auf ServerC führt eine verteilte Abfrage für ServerD aus. In diesem Fall sind alle vier Computer an der verteilten Transaktion beteiligt. Die Instanz von Database Engine (Datenbankmodul) auf ServerA 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, die von sp_configure Remote Proc Trans angegeben wird, überschrieben werden. 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 AdventureWorks2012-Datenbank sowohl auf der lokalen Instanz von Database Engine (Datenbankmodul) 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.

HinweisHinweis

Wenn MS DTC derzeit nicht auf dem Computer installiert ist, auf dem die Instanz von Database Engine (Datenbankmodul) 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 AdventureWorks2012;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks2012.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks2012.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO

Siehe auch

Verweis

BEGIN TRANSACTION (Transact-SQL)

COMMIT TRANSACTION (Transact-SQL)

COMMIT WORK (Transact-SQL)

ROLLBACK TRANSACTION (Transact-SQL)

ROLLBACK WORK (Transact-SQL)

SAVE TRANSACTION (Transact-SQL)