Condividi tramite


Transazioni (Azure Synapse Analytics)

Si applica a:Azure Synapse AnalyticsPiattaforma di strumenti analitici (PDW)

Una transazione è un gruppo di una o più istruzioni di database di cui è stato interamente eseguito il commit o il rollback. Ogni transazione è atomica, coerente, isolata e duratura, dotata cioè delle cosiddette proprietà ACID. Se la transazione ha esito positivo, viene eseguito il commit di tutte le istruzioni al suo interno. Se la transazione ha esito negativo, ovvero se almeno una delle istruzioni del gruppo non riesce, viene eseguito il rollback dell'intero gruppo.

Nota

Il SET AUTOCOMMIT comando non è supportato in Microsoft Fabric Data Warehouse. Per altre informazioni su transazioni, isolamento, concorrenza e coerenza in Microsoft Fabric Data Warehouse, vedere invece Transazioni in Fabric Data Warehouse.

L'inizio e la fine delle transazioni dipendono dall'impostazione AUTOCOMMIT e dalle BEGIN TRANSACTIONistruzioni , COMMITe ROLLBACK .

Sono supportati i tipi di transazioni seguenti:

  • Le transazioni esplicite iniziano con l'istruzione BEGIN TRANSACTION e terminano con l'istruzione COMMIT o ROLLBACK .

  • Le transazioni con commit automatico vengono avviate automaticamente all'interno di una sessione e non iniziano con l'istruzione BEGIN TRANSACTION .

    • Quando l'impostazione AUTOCOMMIT è ON, ogni istruzione viene eseguita in una transazione e non è necessario o ROLLBACK esplicitoCOMMIT.
    • Quando l'impostazione AUTOCOMMIT è OFF, è necessaria un'istruzione COMMIT o ROLLBACK per determinare il risultato della transazione. Le transazioni di commit automatico iniziano immediatamente dopo un'istruzione COMMIT o ROLLBACK o dopo un'istruzione SET AUTOCOMMIT OFF .

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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

Argomenti

INIZIO TRANSAZIONE

Contrassegna il punto di inizio di una transazione esplicita.

COMMIT [ WORK ]

Contrassegna la fine di una transazione esplicita o con commit automatico. Con questa istruzione viene eseguito il commit permanente nel database delle modifiche apportate alla transazione. L'istruzione COMMIT è identica a COMMIT WORK, COMMIT TRANe COMMIT TRANSACTION.

ROLLBACK [ WORK ]

Esegue il rollback di una transazione fino all'inizio della transazione stessa. Nel database non viene eseguito il commit di alcuna modifica alla transazione. L'istruzione ROLLBACK è identica a ROLLBACK WORK, ROLLBACK TRANe ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | OFF }

Determina la modalità di inizio e di fine delle transazioni.

Se si modifica l'impostazione AUTOCOMMIT all'interno di una transazione attiva, l'impostazione influisce sulla transazione corrente e non diventa effettiva fino al completamento della transazione.

Se AUTOCOMMIT è ON, l'esecuzione di un'altra SET AUTOCOMMIT ON istruzione non ha alcun effetto. Analogamente, se AUTOCOMMIT è OFF, l'esecuzione di un altro SET AUTOCOMMIT OFF non ha alcun effetto.

In...

Ogni istruzione viene eseguita nella propria transazione e non è necessaria alcuna istruzione o ROLLBACK esplicitaCOMMIT. Le transazioni esplicite sono consentite quando AUTOCOMMIT è ON.

OFF

Azure Synapse Analytics avvia automaticamente una transazione quando una transazione non è già in corso. Tutte le istruzioni successive vengono eseguite come parte della transazione e un COMMIT oggetto o ROLLBACK è necessario per determinare il risultato della transazione. Non appena una transazione esegue il commit o il rollback in questa modalità di operazione, la modalità rimane OFF, viene avviata una nuova transazione. Le transazioni esplicite non sono consentite quando AUTOCOMMIT è OFF.

SET IMPLICIT_TRANSACTIONS { ON | OFF }

In questo modo vengono attivate o disattivate le stesse modalità di SET AUTOCOMMIT. Quando ON, SET IMPLICIT_TRANSACTIONS imposta la connessione in modalità di transazione implicita. Quando OFF, restituisce la connessione alla modalità autocommit. Per altre informazioni, vedere SET IMPLICIT_TRANSACTIONS (Transact-SQL).

Autorizzazioni

Per eseguire le istruzioni correlate alle transazioni non sono necessarie autorizzazioni specifiche. Le autorizzazioni sono necessarie per eseguire le istruzioni all'interno della transazione.

Gestione degli errori

Se COMMIT o ROLLBACK vengono eseguiti e non è presente alcuna transazione attiva, viene generato un errore.

Se un BEGIN TRANSACTION oggetto viene eseguito mentre è già in corso una transazione, viene generato un errore. Ciò può verificarsi se si verifica un'istruzione BEGIN TRANSACTION dopo un'istruzione riuscita BEGIN TRANSACTION o quando la sessione è in SET AUTOCOMMIT OFF.

Se un errore diverso da un'istruzione di runtime impedisce il completamento corretto di una transazione esplicita, il motore di database esegue automaticamente il rollback della transazione e libera tutte le risorse contenute nella transazione. Ad esempio, se la connessione di rete del client è interrotta o il client si disconnette dall'applicazione, viene eseguito il rollback di eventuali transazioni di cui non è stato eseguito il commit per la connessione quando la rete invia una notifica all'istanza dell'interruzione.

Se si verifica un errore di istruzione di runtime in un batch, Azure Synapse Analytics si comporta in modo coerente con SQL Server XACT_ABORT impostato su ON e viene eseguito il rollback dell'intera transazione. Per altre informazioni sull'impostazione XACT_ABORT , vedere SET XACT_ABORT (Transact-SQL).

Osservazioni:

In un momento specifico, una sessione può eseguire solo una transazione. I punti di salvataggio e le transazioni annidate non sono supportati.

È responsabilità del programmatore rilasciare COMMIT solo in un punto in cui tutti i dati a cui fa riferimento la transazione sono logicamente corretti.

Se una sessione viene terminata prima del completamento di una transazione, viene eseguito il rollback della transazione stessa.

Le modalità di transazione vengono gestite a livello di sessione. Ad esempio, se una sessione inizia una transazione esplicita o imposta AUTOCOMMITOFFsu o imposta IMPLICIT_TRANSACTIONSONsu , non ha alcun effetto sulle modalità di transazione di qualsiasi altra sessione.

Limitazioni

Non è possibile eseguire il rollback di una transazione dopo l'emissione di un'istruzione COMMIT perché le modifiche ai dati sono state apportate a una parte permanente del database.

I comandi CREATE DATABASE e DROP DATABASE (Transact-SQL) non possono essere usati all'interno di una transazione esplicita.

Azure Synapse Analytics non dispone di un meccanismo di condivisione delle transazioni. Ciò comporta il fatto che in qualsiasi momento solo una sessione può eseguire operazioni per una transazione nel sistema.

Comportamento di blocco

Il blocco garantisce l'integrità delle transazioni e mantiene la coerenza dei database quando più utenti accedono contemporaneamente ai dati. Il blocco viene usato sia dalle transazioni implicite che dalle transazioni esplicite. Ogni transazione richiede blocchi di tipo diverso per le risorse, ad esempio per le tabelle o i database di quali dipende.

Tutti i blocchi di sono a livello di tabella o superiore. I blocchi impediscono alle altre transazioni di modificare le risorse in modo tale da creare problemi alla transazione che richiede il blocco. Ogni transazione rilascia i propri blocchi quando non ha più una dipendenza dalle risorse bloccate. Le transazioni esplicite mantengono blocchi finché la transazione non viene completata tramite commit o rollback.

Esempi

R. Usare una transazione esplicita

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

B. Eseguire il rollback di una transazione aperta

Nell'esempio seguente viene illustrato l'effetto del rollback di una transazione. In questo esempio l'istruzione esegue il ROLLBACK rollback dell'istruzione INSERT , ma la tabella creata continuerà a esistere.

CREATE TABLE ValueTable (id INT);  

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

C. Impostare AUTOCOMMIT

Nell'esempio seguente l'impostazione AUTOCOMMIT viene impostata su ON.

SET AUTOCOMMIT ON;  

Nell'esempio seguente l'impostazione AUTOCOMMIT viene impostata su OFF.

SET AUTOCOMMIT OFF;  

D. Usare una transazione implicita con più istruzioni

SET AUTOCOMMIT OFF;  

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

COMMIT;