Partager via


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.

Voir aussi

Développement avec XMLA dans Analysis Services