Transazioni (Azure Synapse Analytics)

Si applica a: sìAzure Synapse Analytics sìParallel Data Warehouse

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.

L'inizio e la fine delle transazioni dipendono dell'impostazione AUTOCOMMIT e dalle istruzioni BEGIN TRANSACTION, COMMIT e ROLLBACK. Azure Synapse Analytics supporta 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 iniziano automaticamente all'interno di una sessione e non iniziano con l'istruzione BEGIN TRANSACTION. Se l'impostazione AUTOCOMMIT corrisponde a ON, ogni istruzione viene eseguita in una transazione e non è necessaria un'istruzione COMMIT o ROLLBACK esplicita. Se l'impostazione AUTOCOMMIT corrisponde a OFF, è necessaria un'istruzione COMMIT o ROLLBACK per determinare il risultato della transazione. In Azure Synapse Analytics, le transazioni con commit automatico iniziano immediatamente dopo un'istruzione COMMIT o ROLLBACK oppure dopo un'istruzione SET AUTOCOMMIT OFF.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL (Transact-SQL)

Sintassi

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

Argomenti

BEGIN TRANSACTION
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 alle istruzioni COMMIT WORK, COMMIT TRAN e 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 alle istruzioni ROLLBACK WORK, ROLLBACK TRAN e ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | OFF }
Determina la modalità di inizio e di fine delle transazioni.

ON
Ogni istruzione viene eseguita in una transazione specifica. Non è necessaria un'istruzione COMMIT o ROLLBACK esplicita. Se AUTOCOMMIT corrisponde a ON, le transazioni esplicite sono consentite.

OFF
Azure Synapse Analytics avvia automaticamente una transazione, se non ne è in corso alcuna. Tutte le istruzioni successive vengono eseguite nell'ambito della transazione ed è necessaria un'istruzione COMMIT o ROLLBACK per determinare il risultato della transazione. Non appena viene eseguito il commit o il rollback di una transazione in questa modalità operativa, la modalità rimane impostata su OFF e Azure Synapse Analytics avvia una nuova transazione. Se AUTOCOMMIT corrisponde a OFF, le transazioni esplicite non sono consentite.

Se si modifica l'impostazione AUTOCOMMIT all'interno di una transazione attiva, l'impostazione influisce sulla transazione corrente e ha effetto solo dopo il completamento della transazione.

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

SET IMPLICIT_TRANSACTIONS { ON | OFF }
Attiva e disattiva le stesse modalità di SET AUTOCOMMIT. Quando è impostata su ON, l'opzione SET IMPLICIT_TRANSACTIONS imposta per la connessione la modalità di transazione implicita. Quando è impostata su OFF, ripristina la modalità di transazione con commit automatico. 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 si eseguono istruzioni COMMIT o ROLLBACK e non è presente alcuna transazione attiva, viene generato un errore.

Se si esegue un'istruzione BEGIN TRANSACTION mentre è già in corso una transazione, viene generato un errore. Ciò può verificarsi se un'istruzione BEGIN TRANSACTION si verifica dopo un'istruzione BEGIN TRANSACTION con esito positivo o se la sessione è in modalità SET AUTOCOMMIT OFF.

Se una transazione esplicita non viene eseguita correttamente a causa di un errore non correlato all'esecuzione di un'istruzione, Azure Synapse Analytics esegue automaticamente il rollback della transazione e libera tutte le risorse usate dalla transazione stessa. Se ad esempio viene interrotta la connessione di rete tra il client e un'istanza di Azure Synapse Analytics o se il client si disconnette dall'applicazione, quando la rete notifica l'interruzione all'istanza viene eseguito il rollback di tutte le transazioni della connessione di cui non è ancora stato eseguito il commit.

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

Osservazioni generali

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

È compito del programmatore di SQL eseguire l'istruzione COMMIT solo quando tutti i dati a cui la transazione fa riferimento 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. Se, ad esempio, una sessione inizia una transazione esplicita oppure imposta AUTOCOMMIT su OFF o IMPLICIT_TRANSACTIONS su ON, non ha alcun effetto sulle modalità delle transazioni di qualsiasi altra sessione.

Limitazioni e restrizioni

Non è possibile eseguire il rollback di una transazione dopo l'esecuzione di un'istruzione COMMIT. Le modifiche dei dati del database, infatti, sono diventate permanenti.

Non è possibile usare i comandi CREATE DATABASE (Azure Synapse Analytics) e DROP DATABASE (Transact-SQL) all'interno di una transazione esplicita.

Azure Synapse Analytics non ha 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

Per garantire l'integrità delle transazioni e mantenere la coerenza dei database se più utenti accedono simultaneamente ai dati, Azure Synapse Analytics usa la funzionalità di blocco. 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 Azure Synapse Analytics 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: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

R. Uso di una transazione esplicita

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

B. Rollback di una transazione

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

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

C. Impostazione di AUTOCOMMIT

L'esempio seguente imposta AUTOCOMMIT su ON.

SET AUTOCOMMIT ON;  

L'esempio seguente imposta AUTOCOMMIT su OFF.

SET AUTOCOMMIT OFF;  

D. Uso di una transazione implicita con istruzioni multiple

SET AUTOCOMMIT OFF;  
CREATE TABLE ValueTable (id INT);  
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  
COMMIT;  

Vedere anche

SET IMPLICIT_TRANSACTIONS (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
@@TRANCOUNT (Transact-SQL)