Condividi tramite


Gestione di transazioni (XMLA)

Ogni comando XML for Analysis (XMLA) inviato a un'istanza di Microsoft SQL Server SQL Server Analysis Services viene eseguito nel contesto di una transazione nella sessione implicita o esplicita corrente. Per gestire ognuna di queste transazioni, usare i comandi BeginTransaction, CommitTransaction e RollbackTransaction . che consentono di creare transazioni implicite o esplicite, modificare il conteggio dei riferimenti alla transazione nonché di avviare le transazioni ed eseguirne il commit e il rollback.

Transazioni implicite ed esplicite

Una transazione può essere implicita o esplicita, come descritto di seguito.

Transazione implicita
SQL Server Analysis Services crea una transazione implicita per un comando XMLA se il comando BeginTransaction non specifica l'inizio di una transazione. SQL Server Analysis Services esegue sempre il commit di una transazione implicita se il comando ha esito positivo e esegue il rollback di una transazione implicita se il comando ha esito negativo.

Transazione esplicita
SQL Server Analysis Services crea una transazione esplicita se il comando BeginTransaction inizia una transazione. Tuttavia, SQL Server Analysis Services esegue il commit di una transazione esplicita solo se viene inviato un comando CommitTransaction e esegue il rollback di una transazione esplicita se viene inviato un comando RollbackTransaction.

Inoltre, SQL Server Analysis Services esegue il rollback di transazioni implicite ed esplicite se la sessione corrente termina prima del completamento della transazione attiva.

Transazioni e conteggi dei riferimenti

SQL Server Analysis Services gestisce un numero di riferimenti delle transazioni per ogni sessione. Tuttavia, SQL Server Analysis Services non supporta le transazioni nidificate in tale sola transazione attiva viene mantenuta per sessione. Se nella sessione corrente non è presente una transazione attiva, il conteggio dei riferimenti alla transazione è impostato su zero.

In altre parole, ogni comando BeginTransaction incrementa il conteggio dei riferimenti per uno, mentre ogni comando CommitTransaction decrementa il conteggio dei riferimenti per uno. Se un comando CommitTransaction imposta il conteggio delle transazioni su zero, SQL Server Analysis Services esegue il commit della transazione.

Tuttavia, il comando RollbackTransaction esegue il rollback della transazione attiva indipendentemente dal valore corrente del conteggio dei riferimenti delle transazioni. In altre parole, un singolo comando RollbackTransaction esegue il rollback della transazione attiva, indipendentemente dal numero di comandi BeginTransaction o CommitTransaction inviati e imposta il conteggio dei riferimenti delle transazioni su zero.

Avvio di una transazione.

Il comando BeginTransaction avvia una transazione esplicita nella sessione corrente e incrementa il conteggio dei riferimenti delle transazioni per la sessione corrente per una. Tutti i comandi successivi vengono considerati all'interno della transazione attiva, fino a quando non vengono inviati comandi CommitTransaction sufficienti per eseguire il commit della transazione attiva o un singolo comando RollbackTransaction viene inviato per eseguire il rollback della transazione attiva.

Esecuzione del commit di una transazione

Il comando CommitTransaction esegue il commit dei risultati dei comandi eseguiti dopo l'esecuzione del comando BeginTransaction nella sessione corrente. Ogni comando CommitTransaction decrementa il conteggio dei riferimenti per le transazioni attive in una sessione. Se un comando CommitTransaction imposta il conteggio dei riferimenti su zero, SQL Server Analysis Services esegue il commit della transazione attiva. Se non esiste alcuna transazione attiva (in altre parole, il conteggio dei riferimenti delle transazioni per la sessione corrente è già impostato su zero), un comando CommitTransaction genera un errore.

Esecuzione del rollback di una transazione

Il comando RollbackTransaction esegue il rollback dei risultati dei comandi eseguiti dopo l'esecuzione del comando BeginTransaction nella sessione corrente. Il comando RollbackTransaction esegue il rollback della transazione attiva, indipendentemente dal conteggio dei riferimenti delle transazioni correnti e imposta il numero di riferimenti delle transazioni su zero. Se non esiste alcuna transazione attiva (in altre parole, il conteggio dei riferimenti delle transazioni per la sessione corrente è già impostato su zero), un comando RollbackTransaction genera un errore.

Vedere anche

Sviluppo con XMLA in Analysis Services