Transacties (Azure Synapse Analytics en Microsoft Fabric)
van toepassing op:Azure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse in Microsoft Fabric
Een transactie is een groep van een of meer database-instructies die volledig zijn doorgevoerd of volledig zijn teruggedraaid. Elke transactie is atomisch, consistent, geïsoleerd en duurzaam (ACID). Als de transactie slaagt, worden alle instructies hierin vastgelegd. Als de transactie mislukt, mislukt dat ten minste één van de instructies in de groep, wordt de hele groep teruggedraaid.
Het begin en einde van transacties zijn afhankelijk van de instelling AUTOCOMMIT en de instructies BEGIN TRANSACTION, COMMIT en ROLLBACK.
De volgende typen transacties worden ondersteund:
Expliciete transacties beginnen met de instructie BEGIN TRANSACTION en eindigen met de instructie COMMIT of ROLLBACK.
transacties automatisch doorvoeren automatisch binnen een sessie initiëren en niet beginnen met de INSTRUCTIE BEGIN TRANSACTION. Wanneer de instelling AUTOCOMMIT is ingeschakeld, wordt elke instructie uitgevoerd in een transactie en is er geen expliciete COMMIT of ROLLBACK nodig. Wanneer de instelling AUTOCOMMIT uit is, is een COMMIT- of ROLLBACK-instructie vereist om het resultaat van de transactie te bepalen. Autocommit-transacties beginnen direct na een COMMIT- of ROLLBACK-instructie, of na een SET AUTOCOMMIT OFF-instructie.
Transact-SQL syntaxisconventies
Notitie
Zie Transacties in Microsoft Fabricvoor meer informatie over transacties in Microsoft Fabric.
Syntaxis
BEGIN TRANSACTION [;]
COMMIT [ TRAN | TRANSACTION | WORK ] [;]
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]
SET AUTOCOMMIT { ON | OFF } [;]
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]
Argumenten
TRANSACTIE STARTEN
Markeert het beginpunt van een expliciete transactie.
DOORVOEREN [ WERK ]
Hiermee wordt het einde van een expliciete of automatische transactie gemarkeerd. Deze instructie zorgt ervoor dat de wijzigingen in de transactie permanent worden doorgevoerd in de database. De instructie COMMIT is identiek aan COMMIT WORK, COMMIT TRAN en COMMIT TRANSACTION.
TERUGDRAAIEN [ WERK ]
Hiermee wordt een transactie teruggedraaid naar het begin van de transactie. Er worden geen wijzigingen voor de transactie doorgevoerd in de database. De instructie ROLLBACK is identiek aan ROLLBACK WORK, ROLLBACK TRAN en ROLLBACK TRANSACTION.
AUTOCOMMIT { INSTELLEN OP | UIT }
Bepaalt hoe transacties kunnen worden gestart en beëindigd.
OP
Elke instructie wordt uitgevoerd onder een eigen transactie en er is geen expliciete COMMIT- of ROLLBACK-instructie nodig. Expliciete transacties zijn toegestaan wanneer AUTOCOMMIT is ingeschakeld.
AF
Azure Synapse Analytics en Microsoft Fabric initieert automatisch een transactie wanneer er nog geen transactie wordt uitgevoerd. Eventuele volgende instructies worden uitgevoerd als onderdeel van de transactie en een COMMIT of ROLLBACK is nodig om het resultaat van de transactie te bepalen. Zodra een transactie doorvoert of terugdraait onder deze bewerkingsmodus, blijft de modus UIT, wordt er een nieuwe transactie gestart. Expliciete transacties zijn niet toegestaan wanneer AUTOCOMMIT is uitgeschakeld.
Als u de AUTOCOMMIT-instelling binnen een actieve transactie wijzigt, heeft de instelling wel invloed op de huidige transactie en wordt deze pas van invloed als de transactie is voltooid.
Als AUTOCOMMIT is ingeschakeld, heeft het uitvoeren van een andere SET AUTOCOMMIT ON-instructie geen effect. Als AUTOCOMMIT is UITGESCHAKELD, heeft het uitvoeren van een andere SET AUTOCOMMIT OFF geen effect.
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Hiermee schakelt u dezelfde modi in als SET AUTOCOMMIT. Wanneer AAN, stelt SET IMPLICIT_TRANSACTIONS de verbinding in in de impliciete transactiemodus. Wanneer uit, wordt de verbinding met de autotoewijzingsmodus geretourneerd. Zie SET IMPLICIT_TRANSACTIONS (Transact-SQL)voor meer informatie.
Machtigingen
Er zijn geen specifieke machtigingen vereist om de transactiegerelateerde instructies uit te voeren. Machtigingen zijn vereist om de instructies in de transactie uit te voeren.
Foutafhandeling
Als COMMIT of ROLLBACK worden uitgevoerd en er geen actieve transactie is, treedt er een fout op.
Als een BEGIN TRANSACTION wordt uitgevoerd terwijl er al een transactie wordt uitgevoerd, wordt er een fout gegenereerd. Dit kan gebeuren als een BEGIN-TRANSACTIE plaatsvindt na een geslaagde BEGIN TRANSACTION-instructie of wanneer de sessie onder AUTOCOMMIT INSTELLEN VALT.
Als een andere fout dan een runtime-instructiefout voorkomt dat een expliciete transactie is voltooid, wordt de transactie automatisch teruggedraaid door de database-engine en worden alle resources die door de transactie worden bewaard, vrijgemaakt. Als de netwerkverbinding van de client bijvoorbeeld is verbroken of de client zich afmeldt bij de toepassing, worden eventuele niet-doorgevoerde transacties voor de verbinding teruggedraaid wanneer het netwerk het exemplaar van de onderbreking meldt.
Als er een runtime-instructiefout optreedt in een batch, gedragen Azure Synapse Analytics en Microsoft Fabric zich consistent met SQL ServerXACT_ABORT ingesteld op ON en wordt de hele transactie teruggedraaid. Zie SET XACT_ABORT (Transact-SQL)voor meer informatie over de XACT_ABORT-instelling.
Algemene opmerkingen
Een sessie kan slechts één transactie tegelijk uitvoeren; opslagpunten en geneste transacties worden niet ondersteund.
Het is de verantwoordelijkheid van de programmeur om COMMIT alleen uit te geven op een moment waarop alle gegevens waarnaar wordt verwezen door de transactie logisch correct zijn.
Wanneer een sessie wordt beëindigd voordat een transactie is voltooid, wordt de transactie teruggedraaid.
Transactiemodi worden beheerd op sessieniveau. Als een sessie bijvoorbeeld een expliciete transactie start of AUTOCOMMIT instelt op UIT of IMPLICIT_TRANSACTIONS instelt op AAN, heeft deze geen invloed op de transactiemodi van een andere sessie.
Beperkingen en beperkingen
U kunt een transactie niet terugdraaien nadat een COMMIT-instructie is uitgegeven omdat de gegevenswijzigingen een permanent onderdeel van de database zijn gemaakt.
De CREATE DATABASE (Azure Synapse Analytics) en DROP DATABASE (Transact-SQL) opdrachten kunnen niet worden gebruikt binnen een expliciete transactie.
Azure Synapse Analytics en Microsoft Fabric hebben geen mechanisme voor het delen van transacties. Dit impliceert dat op een bepaald moment slechts één sessie kan werken aan elke transactie in het systeem.
Vergrendelingsgedrag
Vergrendelen zorgt voor de integriteit van transacties en onderhoudt de consistentie van databases wanneer meerdere gebruikers tegelijkertijd toegang hebben tot gegevens. Vergrendeling wordt gebruikt door zowel impliciete als expliciete transacties. Elke transactie vraagt om vergrendelingen van verschillende typen op de resources, zoals tabellen of databases waarvan de transactie afhankelijk is.
Alle vergrendelingen zijn tabelniveau of hoger. De vergrendelingen blokkeren dat andere transacties de resources op een manier wijzigen die problemen zou veroorzaken voor de transactie die de vergrendeling aanvraagt. Elke transactie maakt de vergrendelingen vrij wanneer deze geen afhankelijkheid meer heeft van de vergrendelde resources; expliciete transacties behouden vergrendelingen totdat de transactie is voltooid wanneer deze wordt doorgevoerd of teruggedraaid.
Voorbeelden:
Een. Een expliciete transactie gebruiken
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. Een transactie terugdraaien
In het volgende voorbeeld ziet u het effect van het terugdraaien van een transactie. In dit voorbeeld wordt met de instructie TERUGDRAAIEN de INSERT-instructie teruggedraaid, maar de gemaakte tabel blijft bestaan.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. AUTOCOMMIT instellen
In het volgende voorbeeld wordt de instelling AUTOCOMMIT ingesteld op ON
.
SET AUTOCOMMIT ON;
In het volgende voorbeeld wordt de instelling AUTOCOMMIT ingesteld op OFF
.
SET AUTOCOMMIT OFF;
D. Een impliciete transactie met meerdere instructies gebruiken
SET AUTOCOMMIT OFF;
CREATE TABLE ValueTable (id INT);
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
COMMIT;