Transaktionen (Azure Synapse Analytics und Microsoft Fabric)
Gilt für: Azure Synapse Analytics Platform System (PDW) Warehouse in Microsoft Fabric
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.
Start und Ende von Transaktionen hängen von der Einstellung AUTOCOMMIT, sowie den Anweisungen BEGIN TRANSACTION, COMMIT und ROLLBACK ab.
Die folgenden Arten von Transaktionen werden unterstützt:
Explizite Transaktionen beginnen mit der BEGIN TRANSACTION-Anweisung und enden mit der COMMIT- oder ROLLBACK-Anweisung.
Autocommit-Transaktionen werden automatisch innerhalb einer Sitzung initiiert und beginnen nicht mit der BEGIN TRANSACTION-Anweisung. Wenn die AUTOCOMMIT-Einstellung auf ON festgelegt ist, wird jede Anweisung in einer Transaktion ausgeführt, und es ist kein explizites COMMIT oder ROLLBACK notwendig. Wenn die AUTOCOMMIT-Einstellung auf OFF festgelegt ist, ist eine COMMIT- oder ROLLBACK-Anweisung erforderlich, um das Ergebnis der Transaktion zu bestimmen. AUTOCOMMIT-Transaktionen beginnen direkt nach einer COMMIT- oder ROLLBACK-Anweisung oder nach einer SET AUTOCOMMIT OFF-Anweisung.
Transact-SQL-Syntaxkonventionen
Hinweis
Weitere Informationen zu Transaktionen in Microsoft Fabric finden Sie unter Transaktionen in Microsoft Fabric.
Syntax
BEGIN TRANSACTION [;]
COMMIT [ TRAN | TRANSACTION | WORK ] [;]
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]
SET AUTOCOMMIT { ON | OFF } [;]
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]
Argumente
BEGIN TRANSACTION
Markiert den Startpunkt einer expliziten Transaktion.
COMMIT [ WORK ]
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 [ WORK ]
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.
SET AUTOCOMMIT { ON | OFF }
Bestimmt, wie Transaktionen gestartet und beendet werden können.
EIN
Jede Anweisung wird unter ihrer eigenen Transaktion ausgeführt, und keine explizite COMMIT- oder ROLLBACK-Anweisung ist erforderlich. Explizite Transaktionen sind zulässig, wenn AUTOCOMMIT auf ON festgelegt ist.
OFF
Azure Synapse Analytics und Microsoft Fabric initiieren automatisch eine Transaktion, wenn nicht bereits eine 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 ermitteln. Sobald eine Transaktion in diesem Betriebsmodus ein Commit oder Rollback ausführt, bleibt der Modus weiterhin OFF, und es wird eine neue Transaktion initialisiert. Explizite Transaktionen sind nicht zulässig, wenn AUTOCOMMIT auf OFF festgelegt ist.
Wenn Sie die AUTOCOMMIT-Einstellung innerhalb einer aktiven Transaktion verändern, wirkt sich die Einstellung nicht auf die laufende Transaktion aus und wird erst aktiv, wenn die Transaktion abgeschlossen ist.
Wenn AUTOCOMMIT auf ON festgelegt ist, hat das Ausführen einer anderen SET AUTOCOMMIT ON-Anweisung keine Auswirkung. Dementsprechend hat das Ausführen einer anderen SET AUTOCOMMIT OFF-Anweisung keine Auswirkung, wenn AUTOCOMMIT auf OFF festgelegt ist.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Diese Funktion aktiviert die gleichen Modi wie AUTOCOMMIT. Wenn SET IMPLICIT_TRANSACTIONS auf ON festgelegt ist, so wird für die Verbindung der implizite Transaktionsmodus festgelegt. Bei OFF wechselt die Verbindung wieder in den Autocommitmodus 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 werden und keine aktive Transaktion vorhanden ist, wird ein Fehler ausgelöst.
Wenn BEGIN TRANSACTION ausgeführt wird, während bereits eine Transaktion ausgeführt wird, wird ein Fehler ausgelöst. Dies kann auftreten, wenn BEGIN TRANSACTION nach einer erfolgreichen BEGIN TRANSACTION-Anweisung auftritt oder sich die Sitzung unter SET AUTOCOMMIT OFF befindet.
Wenn eine explizite Transaktion aufgrund eines anderen Fehlers als eines Anweisungsfehlers zur Laufzeit nicht erfolgreich beendet werden kann, führt die Datenbank-Engine automatisch ein Rollback der Transaktion aus und gibt alle Ressourcen frei, die von der Transaktion beansprucht wurden. Wenn z. B. die Netzwerkverbindung des Clients unterbrochen ist oder der Client sich von der Anwendung abmeldet, wird für alle Transaktionen dieser Verbindung, für die noch kein Commit ausgeführt wurde, ein Rollback ausgeführt, sobald das Netzwerk die Instanz über die Unterbrechung benachrichtigt.
Wenn in einem Batch ein Anwendungsfehler zur Laufzeit auftritt, verhalten sich Azure Synapse Analytics und Microsoft Fabric konsistent mit der Einstellung ON für XACT_ABORT von SQL Server, und für die gesamte Transaktion wird ein Rollback ausgeführt. Weitere Informationen zur XACT_ABORT-Einstellung finden Sie unter SET XACT_ABORT (Transact-SQL).
Allgemeine Hinweise
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 der Programmierer*innen, dass ein COMMIT nur zu einem Zeitpunkt ausgegeben wird, zu dem alle Daten, auf die die Transaktion verweist, logisch richtig 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 eine Sitzung z.B. eine explizite Transaktion startet oder AUTOCOMMIT auf OFF oder IMPLICIT_TRANSACTIONS auf ON festlegt ist, hat dies keine Auswirkung auf die Transaktionsmodi einer anderen Sitzung.
Einschränkungen
Nach der Ausgabe einer COMMIT-Anweisung kann kein Rollback für eine Transaktion ausgeführt werden, da die Datenänderungen zu einem dauerhaften Bestandteil der Datenbank geworden sind.
Die Befehle CREATE DATABASE (Azure Synapse Analytics) und DROP DATABASE (Transact-SQL) können nicht innerhalb einer expliziten Transaktion verwendet werden.
Azure Synapse Analytics und Microsoft Fabric besitzen keinen 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.
Beispiele:
A. Verwenden expliziter Transaktionen
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Ausführen eines Rollbacks für eine Transaktion
Im folgenden Beispiel werden die Auswirkungen des Rollbacks einer Transaktion veranschaulicht. In diesem Beispiel führt die ROLLBACK-Anweisung ein Rollback der INSERT-Anweisung aus, die erstellte Tabelle bleibt jedoch weiterhin vorhanden.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. AUTOCOMMIT-Einstellung
Im folgenden Beispiel wird die Einstellung AUTOCOMMIT auf ON
festgelegt.
SET AUTOCOMMIT ON;
Im folgenden Beispiel wird die Einstellung AUTOCOMMIT auf OFF
festgelegt.
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;