Transazioni (Azure Synapse Analytics e Microsoft Fabric)

Si applica a: Azure Synapse Analytics Analytics Platform System (PDW) Warehouse in Microsoft Fabric

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.

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 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. Le transazioni autocommit iniziano immediatamente dopo un'istruzione COMMIT o ROLLBACK o dopo un'istruzione SET AUTOCOMMIT OFF.

Convenzioni relative alla sintassi Transact-SQL

Nota

Per altre informazioni sulle transazioni in Microsoft Fabric, vedere Transazioni in Microsoft Fabric.

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.

In...
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 e Microsoft Fabric avviano automaticamente una transazione quando una transazione non è già in corso. 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 una transazione esegue il commit o il rollback in questa modalità di operazione, la modalità rimane DISATTIVATa, viene avviata 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 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 un errore diverso da un'istruzione di runtime impedisce il completamento corretto di una transazione esplicita, il motore daabase 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 e Microsoft Fabric si comportano in modo coerente con SQL ServerXACT_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 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 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 e Microsoft Fabric non hanno 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. 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;  

Passaggi successivi