Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Si applica a:Azure Synapse Analytics
Piattaforma 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 TRANSACTIONe terminano con l'istruzioneCOMMIToROLLBACK.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 oROLLBACKesplicitoCOMMIT. - Quando l'impostazione
AUTOCOMMITèOFF, è necessaria un'istruzioneCOMMIToROLLBACKper determinare il risultato della transazione. Le transazioni di commit automatico iniziano immediatamente dopo un'istruzioneCOMMIToROLLBACKo dopo un'istruzioneSET AUTOCOMMIT OFF.
- Quando l'impostazione
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;