Administrar transacciones (XMLA)
Cada XML for Analysis (XMLA) enviado a una instancia de Microsoft SQL Server Analysis Services se ejecuta en el contexto de una transacción en la sesión implícita o explícita actual. Para administrar cada una de estas transacciones, use los comandos BeginTransaction, CommitTransaction y RollbackTransaction . Mediante estos comandos puede crear transacciones implícitas o explícitas, cambiar el recuento de referencias de transacción, así como iniciar, confirmar o revertir transacciones.
Transacciones implícitas y explícitas
Una transacción es implícita o explícita:
Transacción implícita
Analysis Services crea una transacción implícita para un comando XMLA si el comando BeginTransaction no especifica el inicio de una transacción. Analysis Services confirma siempre una transacción implícita si el comando se realiza correctamente y revierte una transacción implícita si se produce un error en el comando.
Transacción explícita
Analysis Services crea una transacción explícita si el comando BeginTransaction inicia una transacción. Sin embargo, Analysis Services solo confirma una transacción explícita si se envía un comando CommitTransaction y revierte una transacción explícita si se envía un comando RollbackTransaction .
Además, Analysis Services revierte las transacciones implícitas y explícitas si la sesión actual finaliza antes de que se complete la transacción activa.
Transacciones y recuentos de referencias
Analysis Services mantiene un recuento de referencias de transacción para cada sesión. Sin embargo, Analysis Services no admite transacciones anidadas, ya que solo se mantiene una transacción activa por sesión. Si la sesión actual no tiene una transacción activa, el recuento de referencias de transacción se establece en cero.
En otras palabras, cada comando BeginTransaction incrementa el recuento de referencias en uno, mientras que cada comando CommitTransaction disminuye el recuento de referencias en uno. Si un comando CommitTransaction establece el recuento de transacciones en cero, Analysis Services la transacción.
Sin embargo, el comando RollbackTransaction revierte la transacción activa independientemente del valor actual del recuento de referencias de transacción. En otras palabras, un único comando RollbackTransaction revierte la transacción activa, independientemente de cuántos comandos BeginTransaction o CommitTransaction se enviaron, y establece el recuento de referencias de transacción en cero.
Iniciar una transacción
El comando BeginTransaction inicia una transacción explícita en la sesión actual e incrementa el recuento de referencias de transacción para la sesión actual en uno. Se considera que todos los comandos posteriores están dentro de la transacción activa, hasta que se envían suficientes comandos CommitTransaction para confirmar la transacción activa o se envía un único comando RollbackTransaction para revertir la transacción activa.
Confirmar una transacción
El comando CommitTransaction confirma los resultados de los comandos que se ejecutan después de ejecutar el comando BeginTransaction en la sesión actual. Cada comando CommitTransaction disminuye el recuento de referencias para las transacciones activas en una sesión. Si un comando CommitTransaction establece el recuento de referencias en cero, Analysis Services la transacción activa. Si no hay ninguna transacción activa (es decir, el recuento de referencias de transacción para la sesión actual ya está establecido en cero), un comando CommitTransaction produce un error.
Revertir una transacción
El comando RollbackTransaction revierte los resultados de los comandos que se ejecutan después de ejecutar el comando BeginTransaction en la sesión actual. El comando RollbackTransaction revierte la transacción activa, independientemente del recuento de referencias de transacción actual, y establece el recuento de referencias de transacción en cero. Si no hay ninguna transacción activa (es decir, el recuento de referencias de transacción para la sesión actual ya está establecido en cero), un comando RollbackTransaction produce un error.