Condividi tramite


Gestione di transazioni (XMLA)

Ogni comando XML for Analysis (XMLA) inviato a un'istanza di Microsoft 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
Analysis Services crea una transazione implicita per un comando XMLA se il BeginTransaction comando non specifica l'inizio di una transazione. Analysis Services esegue sempre il commit di una transazione implicita se il comando ha esito positivo ed esegue il rollback di una transazione implicita in caso di errore del comando.

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

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

Transazioni e conteggi dei riferimenti

Analysis Services gestisce un conteggio dei riferimenti alle transazioni per ogni sessione. Tuttavia, Analysis Services non supporta le transazioni annidate in quanto viene mantenuta una sola transazione attiva per sessione. Se nella sessione corrente non è presente una transazione attiva, il conteggio dei riferimenti alla transazione è impostato su zero.

In altri termini, ogni comando BeginTransaction incrementa il conteggio dei riferimenti di uno, mentre ogni comando CommitTransaction decrementa il conteggio dei riferimenti sempre di uno. Se un CommitTransaction comando imposta il conteggio delle transazioni su zero, Analysis Services esegue il commit della transazione.

Il comando RollbackTransaction esegue tuttavia il rollback della transazione attiva indipendentemente dal valore corrente del conteggio dei riferimenti alla transazione. In altri termini, un unico 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 unico comando RollbackTransaction per eseguirne il rollback.

Esecuzione del commit di una transazione

Il comando CommitTransaction esegue il commit dei risultati di comandi eseguiti dopo che il comando BeginTransaction è stato eseguito nella sessione corrente. Ogni comando CommitTransaction decrementa il conteggio dei riferimenti per le transazioni attive in una sessione. Se un CommitTransaction comando imposta il conteggio dei riferimenti su zero, Analysis Services esegue il commit della transazione attiva. Se non è presente alcuna transazione attiva, ovvero se 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 di comandi eseguiti dopo che il comando BeginTransaction è stato eseguito nella sessione corrente. Il comando RollbackTransaction esegue il rollback della transazione attiva indipendentemente dal valore corrente del conteggio dei riferimenti alla transazione e imposta tale conteggio su zero. Se non è presente alcuna transazione attiva, ovvero se 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