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
    Benutzerdefinierter Transaktionsname, mit dessen Hilfe die verteilte Transaktion innerhalb der MS DTC-Dienstprogramme nachverfolgt wird. transaction_name muss den Regeln für Bezeichner entsprechen und <= 32 Zeichen umfassen.

  • @tran\_name\_variable
    Der Name einer benutzerdefinierten Variablen, die einen Transaktionsnamen enthält. Mithilfe dieses Namens wird die verteilte Transaktion in den MS DTC-Dienstprogrammen 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 Snapshotisolation auf Transaktionsebene unterstützt keine verteilten Transaktionen. Weitere Informationen finden Sie unter Verwenden von auf Zeilenversionsverwaltung basierenden Isolationsstufen.

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 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 Database Engine (Datenbankmodul) 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, die von sp_configure remote proc trans angegeben wird, außer Kraft gesetzt 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 AdventureWorks-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 AdventureWorks;
GO
BEGIN DISTRIBUTED TRANSACTION;
-- Delete candidate from local instance.
DELETE AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
-- Delete candidate from remote instance.
DELETE RemoteServer.AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
COMMIT TRANSACTION;
GO