Freigeben über


Transaktionen (Azure Synapse Analytics)

Gilt für:Azure Synapse AnalyticsAnalytics Platform System (PDW)

Eine Transaktion ist eine Gruppe von mindestens einer Datenbankanweisung, für die als Ganzes entweder ein Commit oder ein Rollback ausgeführt wird. Alle Transaktionen sind unteilbar, konsistent, isoliert und von Dauer (atomic, consistent, isolated, durable: ACID). Wenn die Transaktion erfolgreich ist, wird für alle Anweisungen darin ein Commit ausgeführt. Wenn die Transaktion fehlschlägt, d.h. bei mindestens einer Anweisung in der Gruppe ein Fehler auftritt, wird für die gesamte Gruppe ein Rollback ausgeführt.

Hinweis

Der SET AUTOCOMMIT Befehl wird in Microsoft Fabric Data Warehouse nicht unterstützt. Weitere Informationen zu Transaktionen, Isolation, Parallelität und Konsistenz in Microsoft Fabric Data Warehouse finden Sie stattdessen unter Transaktionen in Fabric Data Warehouse.

Der Anfang und das Ende der Transaktionen hängen von der Einstellung und den AUTOCOMMITBEGIN TRANSACTIONAnweisungen COMMITab ROLLBACK .

Die folgenden Arten von Transaktionen werden unterstützt:

  • Explizite Transaktionen beginnen mit der BEGIN TRANSACTION Anweisung und enden mit der COMMIT Oder-Anweisung ROLLBACK .

  • Transaktionen mit automatischem Commit werden automatisch innerhalb einer Sitzung initiiert und beginnen nicht mit der BEGIN TRANSACTION Anweisung.

    • Wenn die AUTOCOMMIT Einstellung lautet ON, wird jede Anweisung in einer Transaktion ausgeführt, und es ist keine explizite COMMIT oder ROLLBACK erforderliche Anweisung erforderlich.
    • Wenn die AUTOCOMMIT Einstellung lautetOFF, ist eine oder ROLLBACK eine COMMIT Anweisung erforderlich, um das Ergebnis der Transaktion zu bestimmen. AutoCommit-Transaktionen beginnen unmittelbar nach einer COMMIT Oder-Anweisung ROLLBACK oder nach einer SET AUTOCOMMIT OFF Anweisung.

Transact-SQL-Syntaxkonventionen

Syntax

BEGIN TRANSACTION [;]  
COMMIT [ TRAN | TRANSACTION | WORK ] [;]  
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]  
SET AUTOCOMMIT { ON | OFF } [;]  
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]  

Argumente

TRANSAKTION BEGINNEN

Markiert den Startpunkt einer expliziten Transaktion.

COMMIT [ ARBEIT ]

Markiert das Ende einer expliziten oder AUTOCOMMIT-Transaktion. Diese Anweisung bewirkt, dass die Änderungen in der Transaktion endgültig an die Datenbank übergeben werden. Die Anweisung COMMIT ist identisch mit COMMIT WORK, COMMIT TRAN, und COMMIT TRANSACTION.

ROLLBACK [ ARBEIT ]

Führt für eine Transaktion einen Rollback zum Anfang der Transaktion aus. Es werden keine Änderungen der Transaktion an die Datenbank übergeben. Die Anweisung ROLLBACK ist identisch mit ROLLBACK WORK, ROLLBACK TRAN, und ROLLBACK TRANSACTION.

AUTOCOMMIT { ON | FESTLEGEN OFF }

Bestimmt, wie Transaktionen gestartet und beendet werden können.

Wenn Sie die AUTOCOMMIT Einstellung innerhalb einer aktiven Transaktion ändern, wirkt sich die Einstellung auf die aktuelle Transaktion aus und wird erst wirksam, wenn die Transaktion abgeschlossen ist.

Wenn AUTOCOMMIT dies der Grund ist, hat ONdie Ausführung einer anderen SET AUTOCOMMIT ON Anweisung keine Auswirkung. Ebenso AUTOCOMMITOFFhat die Ausführung einer anderen SET AUTOCOMMIT OFF Ausführung keine Auswirkung.

EIN

Jede Anweisung wird unter einer eigenen Transaktion ausgeführt, und es ist keine explizite COMMIT oder ROLLBACK Anweisung erforderlich. Explizite Transaktionen sind zulässig, wenn AUTOCOMMIT dies der Wert ist ON.

OFF

Azure Synapse Analytics initiiert automatisch eine Transaktion, wenn eine Transaktion noch nicht ausgeführt wird. Alle nachfolgenden Anweisungen werden als Teil der Transaktion ausgeführt und ein COMMIT oder ROLLBACK ist erforderlich, um das Ergebnis der Transaktion zu bestimmen. Sobald eine Transaktion einen Commit unter diesem Vorgangsmodus vorschlägt oder zurückgesetzt wird, bleibt OFFder Modus , eine neue Transaktion wird initiiert. Explizite Transaktionen sind nicht zulässig, wenn AUTOCOMMIT dies der Wert ist OFF.

SET IMPLICIT_TRANSACTIONS { ON | OFF }

Dadurch werden die gleichen Modi wie SET AUTOCOMMIT. Wenn ON, SET IMPLICIT_TRANSACTIONS legt die Verbindung in den impliziten Transaktionsmodus fest. Wenn OFF, gibt sie die Verbindung mit dem AutoCommit-Modus zurück. Weitere Informationen finden Sie unter SET IMPLICIT_TRANSACTIONS (Transact-SQL).

Berechtigungen

Es sind keine speziellen Berechtigungen erforderlich, um die transaktionsbezogenen Anweisungen auszuführen. Berechtigungen sind erforderlich, um die Anweisungen innerhalb der Transaktion auszuführen.

Fehlerbehandlung

Wenn COMMIT oder ROLLBACK ausgeführt wird und keine aktive Transaktion vorhanden ist, wird ein Fehler ausgelöst.

Wenn eine BEGIN TRANSACTION Transaktion ausgeführt wird, während eine Transaktion bereits ausgeführt wird, wird ein Fehler ausgelöst. Dies kann auftreten, wenn nach BEGIN TRANSACTION einer erfolgreichen BEGIN TRANSACTION Anweisung oder wenn die Sitzung unter SET AUTOCOMMIT OFFist.

Wenn ein anderer Fehler als ein Laufzeitausweisungsfehler den erfolgreichen Abschluss einer expliziten Transaktion verhindert, setzt das Datenbankmodul die Transaktion automatisch zurück und gibt alle Ressourcen frei, die von der Transaktion gehalten werden. Wenn beispielsweise die Netzwerkverbindung des Clients unterbrochen ist oder sich der Client von der Anwendung abmeldet, werden alle nicht ausgeschriebenen Transaktionen für die Verbindung zurückgesetzt, wenn das Netzwerk die Instanz des Umbruchs benachrichtigt.

Wenn ein Laufzeit-Anweisungsfehler in einem Batch auftritt, verhält sich Azure Synapse Analytics konsistent mit SQL Server XACT_ABORT , ON und die gesamte Transaktion wird zurückgesetzt. Weitere Informationen zur XACT_ABORT Einstellung finden Sie unter SET XACT_ABORT (Transact-SQL).

Bemerkungen

Eine Sitzung kann jeweils nur eine Transaktion zu einem bestimmten Zeitpunkt ausführen. Sicherungspunkte und geschachtelte Transaktionen werden nicht unterstützt.

Es liegt in der Verantwortung des Programmierers, nur an einem Punkt zu stellen COMMIT , an dem alle daten, auf die von der Transaktion verwiesen wird, logisch korrekt sind.

Wenn eine Sitzung beendet wird, bevor eine Transaktion abgeschlossen ist, wird für die Transaktion ein Rollback ausgeführt.

Die Transaktionsmodi werden auf der Sitzungsebene verwaltet. Wenn z. B. eine Sitzung eine explizite Transaktion beginnt oder auf diese festgelegt AUTOCOMMITOFFist IMPLICIT_TRANSACTIONSON, hat sie keine Auswirkungen auf die Transaktionsmodi einer anderen Sitzung.

Einschränkungen

Sie können ein Rollback einer Transaktion nicht ausführen, nachdem eine COMMIT Anweisung ausgestellt wurde, da die Datenänderungen dauerhaft teil der Datenbank vorgenommen wurden.

Die Befehle CREATE DATABASE und DROP DATABASE (Transact-SQL) können nicht innerhalb einer expliziten Transaktion verwendet werden.

Azure Synapse Analytics verfügt nicht über einen Mechanismus für die Transaktionsfreigabe. Das bedeutet, dass zu einem bestimmten Zeitpunkt nur eine Sitzung an einer Transaktion im System arbeiten kann.

Sperrverhalten

Sperren stellen die Integrität von Transaktionen sicher und sorgen für die Konsistenz der Datenbanken, wenn mehrere Benutzer*innen gleichzeitig auf Daten zugreifen. Sperren werden sowohl von impliziten als auch von expliziten Transaktionen verwendet. Jede Transaktion fordert Sperren verschiedener Typen für die Ressourcen, z.B. Tabellen oder Datenbanken an, von denen die Transaktion abhängt.

Alle Sperren sind auf Ebene der Tabelle oder höher festgelegt. Diese Sperren verhindern, dass die Ressourcen durch andere Transaktionen in einer Weise geändert werden, die zu Problemen für die Transaktion führen würde, die die Sperre angefordert hat. Jede Transaktion hebt ihre Sperren wieder auf, wenn sie nicht mehr über eine Abhängigkeit von den gesperrten Ressourcen verfügt. Explizite Transaktionen behalten Sperren bis zum Abschluss der Transaktion bei, wenn für diese entweder ein Commit oder ein Rollback ausgeführt wird.

Examples

A. Verwenden einer expliziten Transaktion

BEGIN TRANSACTION;  
       DELETE FROM HumanResources.JobCandidate  
       WHERE JobCandidateID = 13;
COMMIT;  

B. Zurücksetzen einer geöffneten Transaktion

Im folgenden Beispiel werden die Auswirkungen des Rollbacks einer Transaktion veranschaulicht. In diesem Beispiel wird die ROLLBACK Anweisung zurückgesetzt INSERT , aber die erstellte Tabelle ist weiterhin vorhanden.

CREATE TABLE ValueTable (id INT);  

BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;  

C. AutoCOMMIT festlegen

Im folgenden Beispiel wird die AUTOCOMMIT Einstellung auf ON.

SET AUTOCOMMIT ON;  

Im folgenden Beispiel wird die AUTOCOMMIT Einstellung auf OFF.

SET AUTOCOMMIT OFF;  

D: Verwenden einer impliziten Transaktion mit mehreren Anweisungen

SET AUTOCOMMIT OFF;  

CREATE TABLE ValueTable (id INT);  
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  

COMMIT;