Condividi tramite


Gestione di transazioni (XMLA)

Ogni comando XMLA (XML for Analysis) inviato a un'istanza di MicrosoftSQL ServerAnalysis Services viene eseguito nel contesto di una transazione nella sessione implicita o esplicita corrente. Per gestire ognuna di queste transazioni, vengono utilizzati 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'avvio di una transazione. Analysis Services esegue sempre il commit di una transazione implicita se il comando ha esito positivo, ma ne esegue il rollback se il comando ha esito negativo.

  • Transazione esplicita
    Analysis Services crea una transazione esplicita se il comando BeginTransaction avvia una transazione. Analysis Services tuttavia esegue il commit di una transazione esplicita solo se viene inviato un comando CommitTransaction e ne esegue il rollback se viene inviato 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 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 comando CommitTransaction imposta il conteggio relativo alla transazione 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 comando CommitTransaction 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.