Gestion des transactions (XMLA)
Chaque commande XML for Analysis (XMLA) envoyée à un instance de Microsoft SQL Server Analysis Services s’exécute dans le contexte d’une transaction sur la session implicite ou explicite actuelle. Pour gérer chacune de ces transactions, vous utilisez les commandes BeginTransaction, CommitTransaction et RollbackTransaction . En utilisant ces commandes, vous pouvez créer des transactions implicites ou explicites, modifier le nombre de références de transaction, ainsi que les transactions de démarrage, de validation ou d'annulation.
Transactions implicites et explicites
Une transaction est soit implicite, soit explicite :
Transaction implicite
Analysis Services crée une transaction implicite pour une commande XMLA si la BeginTransaction
commande ne spécifie pas le début d’une transaction. Analysis Services valide toujours une transaction implicite si la commande réussit et restaure une transaction implicite en cas d’échec de la commande.
Transaction explicite
Analysis Services crée une transaction explicite si la BeginTransaction
commande démarre une transaction. Toutefois, Analysis Services valide uniquement une transaction explicite si une CommitTransaction
commande est envoyée et restaure une transaction explicite si une RollbackTransaction
commande est envoyée.
En outre, Analysis Services restaure les transactions implicites et explicites si la session active se termine avant la fin de la transaction active.
Transactions et nombres de référence
Analysis Services gère un nombre de références de transaction pour chaque session. Toutefois, Analysis Services ne prend pas en charge les transactions imbriquées, car une seule transaction active est conservée par session. Si aucune transaction n'est active dans la session active, le nombre de références de transaction est défini à zéro.
En d'autres termes, chaque commande BeginTransaction
incrémente le nombre de références d'une unité, et chaque commande CommitTransaction
décrémente le nombre de références d'une unité. Si une CommitTransaction
commande définit le nombre de transactions sur zéro, Analysis Services valide la transaction.
Cependant, la commande RollbackTransaction
annule la transaction active quelle que soit la valeur actuelle du nombre de références de transaction. Autrement dit, une seule commande RollbackTransaction
permet d'annuler la transaction active, quel que soit le nombre de commandes BeginTransaction
ou CommitTransaction
qui ont été envoyées, et définit le nombre de références de transaction à zéro.
Lancement d'une transaction
La commande BeginTransaction
lance une transaction explicite sur la session active et incrémente le nombre de référence de transactions correspondant d'une unité. Toutes les commandes suivantes sont considérées comme faisant partie de la transaction active, jusqu'à ce qu'un nombre suffisant de commandes CommitTransaction
soit envoyé pour valider la transaction active ou qu'une commande unique RollbackTransaction
soit envoyée pour annuler la transaction active.
Validation d'une transaction
La commande CommitTransaction
valide les résultats des commandes exécutées après que la commande BeginTransaction
a été exécutée sur la session active. Chaque commande CommitTransaction
décrémente le nombre de référence pour les transactions actives d'une session. Si une CommitTransaction
commande définit le nombre de références sur zéro, Analysis Services valide la transaction active. En l'absence de toute transaction active (en d'autres termes, le nombre de référence de transactions pour la session active est déjà défini à zéro), une commande CommitTransaction
provoque une erreur.
Annulation d'une transaction
La commande RollbackTransaction
annule les résultats des commandes exécutées après que la commande BeginTransaction
a été exécutée sur la session active. La commande RollbackTransaction
annule la transaction active, quel que soit le nombre de références de transaction actuel, et définit le nombre de références de transaction à zéro. En l'absence de toute transaction active (en d'autres termes, le nombre de référence de transactions pour la session active est déjà défini à zéro), une commande RollbackTransaction
provoque une erreur.