Gestione di transazioni (XMLA)

Ogni XML for Analysis (XMLA) inviato a un'istanza di viene eseguito nel contesto di una transazione Microsoft SQL Server Analysis Services 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
Analysis Services crea una transazione implicita per un comando XMLA se il comando BeginTransaction non specifica l'inizio di una transazione. Analysis Services esegue sempre il commit di una transazione implicita se il comando riesce e ne esegue il rollback se il comando non riesce.

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

Analysis Services inoltre esegue il rollback sia di transazioni implicite che di transazioni esplicite se la sessione corrente termina prima del completamento della transazione attiva.

Transazioni e conteggi dei riferimenti

In Analysis Services viene gestito un conteggio dei riferimenti alla transazione per ogni sessione. Analysis Services non supporta tuttavia transazioni nidificate poiché per ogni sessione viene gestita una sola transazione attiva. 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 di uno il conteggio dei riferimenti, mentre ogni comando CommitTransaction decrementa il conteggio dei riferimenti di uno. Se un comando CommitTransaction imposta il numero di transazioni su zero, 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 alla transazione. 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 alla transazione su zero.

Avvio di una transazione.

Il comando BeginTransaction avvia una transazione esplicita nella sessione corrente e incrementa di uno il conteggio dei riferimenti alla transazione per la sessione corrente. Tutti i comandi successivi vengono considerati all'interno della transazione attiva, fino a quando non viene inviato un numero sufficiente di comandi CommitTransaction per eseguire il commit della transazione attiva o non viene inviato un singolo comando RollbackTransaction 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, Analysis Services esegue il commit della transazione attiva. Se non è presente alcuna transazione attiva (in altre parole, il conteggio dei riferimenti alla transazione per la sessione corrente è già impostato su zero), un comando CommitTransaction restituisce 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 alla transazione corrente e imposta il conteggio dei riferimenti alla transazione su zero. Se non è presente alcuna transazione attiva (in altre parole, il conteggio dei riferimenti alla transazione per la sessione corrente è già impostato su zero), un comando RollbackTransaction restituisce un errore.

Vedere anche

Sviluppo con XMLA in Analysis Services