Delen via


Transacties (Azure Synapse Analytics)

van toepassing op:Azure Synapse AnalyticsAnalytics Platform System (PDW)

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.

Notitie

De SET AUTOCOMMIT opdracht wordt niet ondersteund in Microsoft Fabric Data Warehouse. Zie Transacties in Fabric Data Warehouse voor meer informatie over transacties, isolatie, gelijktijdigheid en consistentie in Microsoft Fabric Data Warehouse.

Het begin en einde van transacties zijn afhankelijk van de AUTOCOMMIT instelling en de , COMMITen ROLLBACK instructiesBEGIN TRANSACTION.

De volgende typen transacties worden ondersteund:

  • Expliciete transacties beginnen met de BEGIN TRANSACTION instructie en eindigen met de COMMIT of-instructie ROLLBACK .

  • Automatisch doorvoeren van transacties initiëren automatisch binnen een sessie en beginnen niet met de BEGIN TRANSACTION instructie.

    • Wanneer de AUTOCOMMIT instelling is ON, wordt elke instructie uitgevoerd in een transactie en is deze niet expliciet COMMIT of ROLLBACK noodzakelijk.
    • Wanneer de AUTOCOMMIT instelling is OFFingesteld, is een COMMIT of ROLLBACK instructie vereist om het resultaat van de transactie te bepalen. Automatische transacties beginnen direct na een COMMIT of ROLLBACK instructie of na een SET AUTOCOMMIT OFF instructie.

Transact-SQL syntaxisconventies

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 TRANen 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 TRANen ROLLBACK TRANSACTION.

AUTOCOMMIT INSTELLEN { AAN | UIT }

Bepaalt hoe transacties kunnen worden gestart en beëindigd.

Als u de AUTOCOMMIT instelling binnen een actieve transactie wijzigt, heeft de instelling wel invloed op de huidige transactie en wordt deze pas van kracht nadat de transactie is voltooid.

Als AUTOCOMMIT dat het is ON, heeft het uitvoeren van een andere SET AUTOCOMMIT ON instructie geen effect. Zo jaOFF, dan AUTOCOMMIT heeft het uitvoeren van een ander SET AUTOCOMMIT OFF geen effect.

OP

Elke instructie wordt uitgevoerd onder een eigen transactie en er is geen expliciete COMMIT instructie of ROLLBACK instructie nodig. Expliciete transacties zijn toegestaan wanneer AUTOCOMMIT dit is ON.

AF

Azure Synapse Analytics 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 zijn nodig om het resultaat van de transactie te bepalen. Zodra een transactie doorvoert of terugdraait onder deze bewerkingsmodus, blijft de modus behouden OFF, wordt er een nieuwe transactie gestart. Expliciete transacties zijn niet toegestaan wanneer AUTOCOMMIT dit is OFF.

SET IMPLICIT_TRANSACTIONS { ON | UIT }

Hiermee schakelt u dezelfde modi in als SET AUTOCOMMIT. Wanneer ON, SET IMPLICIT_TRANSACTIONS stelt u de verbinding in de impliciete transactiemodus in. Wanneer OFF, 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, wordt er een fout gegenereerd.

Als een BEGIN TRANSACTION transactie wordt uitgevoerd terwijl er al een transactie wordt uitgevoerd, wordt er een fout gegenereerd. Dit kan gebeuren als een BEGIN TRANSACTION gebeurtenis plaatsvindt na een geslaagde BEGIN TRANSACTION instructie of wanneer de sessie onder SET AUTOCOMMIT OFFis.

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 op de hoogte stelt.

Als er een runtime-instructiefout optreedt in een batch, gedraagt Azure Synapse Analytics zich consistent met SQL Server XACT_ABORT ingesteld ON en wordt de hele transactie teruggedraaid. Zie SET XACT_ABORT (Transact-SQL) voor meer informatie over de XACT_ABORT instelling.

Opmerkingen

Een sessie kan slechts één transactie tegelijk uitvoeren; opslagpunten en geneste transacties worden niet ondersteund.

Het is de verantwoordelijkheid van de programmeur om alleen op een punt uit te geven COMMIT wanneer 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 begint of instelt AUTOCOMMITOFFop , of instelt IMPLICIT_TRANSACTIONSONop , heeft dit geen effect op de transactiemodi van een andere sessie.

Beperkingen

U kunt een transactie niet terugdraaien nadat een COMMIT instructie is uitgegeven omdat de gegevenswijzigingen een permanent onderdeel van de database hebben gemaakt.

De opdrachten CREATE DATABASE en DROP DATABASE (Transact-SQL) kunnen niet worden gebruikt binnen een expliciete transactie.

Azure Synapse Analytics heeft 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 geopende transactie terugdraaien

In het volgende voorbeeld ziet u het effect van het terugdraaien van een transactie. In dit voorbeeld wordt de ROLLBACK instructie teruggedraaid INSERT , 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 AUTOCOMMIT instelling ingesteld op ON.

SET AUTOCOMMIT ON;  

In het volgende voorbeeld wordt de AUTOCOMMIT instelling 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;