Partager via


Gestion des transactions (XMLA)

Chaque commande XML for Analysis (XMLA) envoyée à une instance de Microsoft SQL Server 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
SQL Server Analysis Services crée une transaction implicite pour une commande XMLA si la commande BeginTransaction ne spécifie pas le début d’une transaction. SQL Server 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
SQL Server Analysis Services crée une transaction explicite si la commande BeginTransaction démarre d’une transaction. Toutefois, SQL Server Analysis Services valide uniquement une transaction explicite si une commande CommitTransaction est envoyée et restaure une transaction explicite si une commande RollbackTransaction est envoyée.

En outre, SQL Server 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

SQL Server Analysis Services conserve un nombre de références de transaction pour chaque session. Toutefois, SQL Server Analysis Services ne prend pas en charge les transactions imbriquées dans le fait qu’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 par un, tandis que chaque commande CommitTransaction décrémente le nombre de références par un. Si une commande CommitTransaction définit le nombre de transactions sur zéro, SQL Server Analysis Services valide la transaction.

Toutefois, la commande RollbackTransaction restaure la transaction active, quelle que soit la valeur actuelle du nombre de références de transaction. En d’autres termes, une seule commande RollbackTransaction restaure la transaction active, quel que soit le nombre de commandes BeginTransaction ou de commandes CommitTransaction envoyées, et définit le nombre de références de transaction sur zéro.

Lancement d'une transaction

La commande BeginTransaction commence une transaction explicite sur la session active et incrémente le nombre de références de transaction pour la session active d’une part. Toutes les commandes suivantes sont considérées comme faisant partie de la transaction active, jusqu’à ce que les commandes CommitTransaction suffisantes soient envoyées pour valider la transaction active ou qu’une seule commande RollbackTransaction soit envoyée pour restaurer la transaction active.

Validation d'une transaction

La commande CommitTransaction valide les résultats des commandes exécutées après l’exécution de la commande BeginTransaction sur la session active. Chaque commande CommitTransaction décrémente le nombre de références pour les transactions actives sur une session. Si une commande CommitTransaction définit le nombre de références sur zéro, SQL Server Analysis Services valide la transaction active. S’il n’existe aucune transaction active (en d’autres termes, le nombre de références de transaction pour la session active est déjà défini sur zéro), une commande CommitTransaction génère une erreur.

Annulation d'une transaction

La commande RollbackTransaction restaure les résultats des commandes exécutées après l’exécution de la commande BeginTransaction sur la session active. La commande RollbackTransaction restaure 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 sur zéro. S’il n’existe aucune transaction active (en d’autres termes, le nombre de références de transaction pour la session active est déjà défini sur zéro), une commande RollbackTransaction génère une erreur.

Voir aussi

Développement avec XMLA dans Analysis Services