Gerenciando transações (XMLA)
Todos os comandos XMLA (XML for Analysis) enviados a uma instância do Microsoft SQL Server Analysis Services são executados no contexto de uma transação na sessão implícita ou explícita atual. Para gerenciar cada uma dessas transações, use os comandos BeginTransaction, CommitTransaction e RollbackTransaction. Ao usar esses comandos, você poderá criar transações implícitas ou explícitas, alterar a contagem de referência de transação, além de iniciar, confirmar ou reverter transações.
Transações implícitas e explícitas
Uma transação é implícita ou explícita:
Transação implícita
O Analysis Services criará uma transação implícita para um comando XMLA se o comando BeginTransaction não especificar o início de uma transação. O Analysis Services sempre confirmará uma transação implícita caso o comando tenha êxito e a reverterá caso o comando falhe.Transação explícita
O Analysis Services criará uma transação explícita se o comando BeginTransaction iniciar uma transação. No entanto, o Analysis Services também confirmará uma transação explícita se um comando CommitTransaction for enviado e reverterá uma transação explícita se um comando RollbackTransaction for enviado.
Além disso, o Analysis Services reverterá transações implícitas e explícitas se a sessão atual terminar antes da conclusão da transação ativa.
Transações e contagens de referência
O Analysis Services mantém uma contagem de referência de transação para cada sessão. No entanto, o Analysis Services não dá suporte a transações aninhadas já que somente uma transação ativa é mantida por sessão. Se a sessão atual não tiver uma transação ativa, a contagem de referência de transação será definida como zero.
Em outras palavras, cada comando BeginTransaction incrementa a contagem de referência em um, enquanto cada comando CommitTransaction diminui a contagem de referência em um. Se um comando CommitTransaction definir a contagem de transação como zero, o Analysis Services confirmará a transação.
No entanto, o comando RollbackTransaction reverte a transação ativa a despeito do valor atual da contagem de referência de transação. Em outras palavras, um único comando RollbackTransaction reverte a transação ativa, não importando quantos comandos BeginTransaction ou comandos CommitTransaction tenham sido enviados e define a contagem de referência de transação como zero.
Iniciando uma transação
O comando BeginTransaction inicia uma transação explícita na sessão atual e incrementa a contagem de referência de transação para a sessão atual em um. Todos os comandos subseqüentes serão considerados como da transação ativa, até que comandos CommitTransaction suficientes sejam enviados para a confirmação da transação ativa ou até que um único comando RollbackTransaction seja enviado para reverter a transação ativa.
Confirmando uma transação
O comando CommitTransaction comando confirma os resultados de comandos executados após a execução do comando BeginTransaction na sessão atual. Cada comando CommitTransaction diminui a contagem de referência para transações ativas em uma sessão. Se um comando CommitTransaction definir a contagem de referência como zero, o Analysis Services confirmará a transação ativa. Se não houver transação ativa (em outras palavras, se a contagem de referência de transação da sessão atual já tiver sido definida como zero), um comando CommitTransaction resultará em um erro.
Revertendo uma transação
O comando RollbackTransaction comando reverte os resultados de comandos executados após a execução do comando BeginTransaction na sessão atual. O comando RollbackTransaction reverte a transação ativa, a despeito da contagem de referência de transação atual, e define a contagem de referência de transação como zero. Se não houver transação ativa (em outras palavras, se a contagem de referência de transação da sessão atual já tiver sido definida como zero), um comando RollbackTransaction resultará em um erro.