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.