Transactions (Azure Synapse Analytics et Microsoft Fabric)

S’applique à :Azure Synapse AnalyticsAnalytics Platform System (PDW)Entrepôt dans Microsoft Fabric

Une transaction est un groupe d’une ou plusieurs instructions de base de données entièrement validées ou restaurées. Chaque transaction est atomique, cohérente, isolée et durable (ACID). Si la transaction réussit, toutes les instructions qu’elle contient sont validées. Si la transaction échoue, autrement dit si au moins une des instructions du groupe échoue, la totalité du groupe est restauré.

Le début et la fin des transactions varient selon le paramètre AUTOCOMMIT et les instructions BEGIN TRANSACTION, COMMIT et ROLLBACK.

Les types de transactions suivants sont pris en charge :

  • Les transactions explicites commencent avec l’instruction BEGIN TRANSACTION et se terminent avec l’instruction COMMIT ou ROLLBACK.

  • Les transactions de validation automatique se lancent automatiquement au sein d’une session et ne commencent pas par l’instruction BEGIN TRANSACTION. Quand le paramètre AUTOCOMMIT a la valeur ON, chaque instruction s’exécute dans une transaction et aucune instruction COMMIT ou ROLLBACK explicite n’est nécessaire. Lorsque le paramètre AUTOCOMMIT a la valeur OFF, une instruction COMMIT ou ROLLBACK est nécessaire pour déterminer le résultat de la transaction. Les transactions validées automatiquement commencent immédiatement après une instruction COMMIT ou ROLLBACK, ou bien après une instruction SET AUTOCOMMIT OFF.

Conventions de la syntaxe Transact-SQL

Notes

Pour plus d’informations sur les transactions dans Microsoft Fabric, consultez Transactions dans Microsoft Fabric.

Syntaxe

BEGIN TRANSACTION [;]  
COMMIT [ TRAN | TRANSACTION | WORK ] [;]  
ROLLBACK [ TRAN | TRANSACTION | WORK ] [;]  
SET AUTOCOMMIT { ON | OFF } [;]  
SET IMPLICIT_TRANSACTIONS { ON | OFF } [;]  

Arguments

BEGIN TRANSACTION
Indique le point de départ d’une transaction explicite.

COMMIT [ WORK ]
Marque la fin d’une transaction explicite ou de validation automatique. Cette instruction a pour effet de valider définitivement les modifications apportées à la transaction dans la base de données. L’instruction COMMIT est identique à COMMIT WORK, COMMIT TRAN et COMMIT TRANSACTION.

ROLLBACK [ WORK ]
Restaure une transaction au début de cette transaction. Aucune modification apportée à la transaction n’est validée dans la base de données. L’instruction ROLLBACK est identique à ROLLBACK WORK, ROLLBACK TRAN et ROLLBACK TRANSACTION.

SET AUTOCOMMIT { ON | OFF }
Détermine la façon dont les transactions peuvent commencer et se terminer.

ACTIVÉ
Chaque instruction s’exécute sous sa propre transaction et aucune instruction COMMIT ou ROLLBACK explicite n’est nécessaire. Les transactions explicites sont autorisées quand AUTOCOMMIT a la valeur ON.

OFF
Azure Synapse Analytics et Microsoft Fabric lancent automatiquement une transaction quand aucune transaction n’est déjà en cours. Toutes les instructions suivantes sont exécutées dans le cadre de la transaction et une instruction COMMIT ou ROLLBACK est nécessaire pour déterminer le résultat de la transaction. Dès qu’une transaction est validée ou restaurée sous ce mode de fonctionnement, le mode garde la valeur OFF et une nouvelle transaction est lancée. Les transactions explicites ne sont pas autorisées quand AUTOCOMMIT a la valeur OFF.

Si le paramètre AUTOCOMMIT est modifié pendant une transaction active, il n’affecte pas cette transaction car il ne prend pas effet tant qu’elle n’est pas terminée.

Si AUTOCOMMIT a la valeur ON, l’exécution d’une autre instruction SET AUTOCOMMIT ON n’a aucun effet. De même, si AUTOCOMMIT a la valeur OFF, l’exécution d’une autre instruction SET AUTOCOMMIT OFF n’a aucun effet.

SET IMPLICIT_TRANSACTIONS { ON | OFF }
Cette instruction active ou désactive les mêmes modes que l’instruction SET AUTOCOMMIT. Si sa valeur est ON, SET IMPLICIT_TRANSACTIONS met la connexion en mode de transaction implicite. Si la valeur est OFF, la connexion est remise en mode de validation automatique. Pour plus d’informations, consultez SET IMPLICIT_TRANSACTIONS (Transact-SQL).

Autorisations

Aucune autorisation spécifique n’est nécessaire pour exécuter les instructions relatives aux transactions. En revanche, des autorisations sont nécessaires pour exécuter les instructions au sein de la transaction.

Gestion des erreurs

Si des instructions COMMIT ou ROLLBACK sont exécutées alors qu’il n’existe aucune transaction active, une erreur est générée.

Si une instruction BEGIN TRANSACTION est exécutée alors qu’une transaction est déjà en cours, une erreur est générée. Ce cas de figure peut se produire si une instruction BEGIN TRANSACTION se produit après une instruction BEGIN TRANSACTION réussie ou quand la session est en mode SET AUTOCOMMIT OFF.

Si une erreur autre qu’une erreur d’instruction au moment de l’exécution entrave le bon déroulement d’une transaction explicite, le moteur de base de données la restaure automatiquement et libère toutes les ressources bloquées par la transaction. Par exemple, si la connexion réseau du client est interrompue ou que le client se déconnecte de l’application, toutes les transactions non validées pendant la connexion sont restaurées quand le réseau notifie l’instance de l’interruption.

Si une erreur d’instruction au moment de l’exécution se produit dans un lot, le comportement d’Azure Synapse Analytics et de Microsoft Fabric est conforme à SQL ServerXACT_ABORT dont la valeur est ON et toute la transaction est restaurée. Pour plus d’informations sur le paramètre XACT_ABORT, consultez SET XACT_ABORT (Transact-SQL).

Remarques d'ordre général

Une session ne peut exécuter qu’une seule transaction à un moment donné ; les points de sauvegarde et les transactions imbriquées ne sont pas pris en charge.

Il incombe aux programmeurs d’émettre une instruction COMMIT seulement à un moment où toutes les données référencées par la transaction sont logiquement correctes.

Quand une session est arrêtée avant la fin d’une transaction, cette dernière est restaurée.

Les modes de transaction sont gérés session par session. Par exemple, si une session commence une transaction explicite ou affecte à AUTOCOMMIT la valeur OFF, ou bien affecte à IMPLICIT_TRANSACTIONS la valeur ON, cela n’a aucun effet sur les modes de transaction de toute autre session.

Limitations et restrictions

Il n’est plus possible de restaurer une transaction après l’émission d’une instruction COMMIT, car les modifications de données ont été définitivement enregistrées dans la base de données.

Les commandes CREATE DATABASE (Azure Synapse Analytics) et DROP DATABASE (Transact-SQL) ne peuvent pas être utilisées dans une transaction explicite.

Azure Synapse Analytics et Microsoft Fabric n’ont pas de mécanisme de partage des transactions. Cela implique qu’à tout moment, une seule session peut travailler sur une même transaction dans le système.

Comportement de verrouillage

Le verrouillage garantit l’intégrité des transactions et gère la cohérence des bases de données quand plusieurs utilisateurs accèdent simultanément aux données. Le verrouillage est utilisé à la fois par les transactions implicites et explicites. Chaque transaction demande des verrous de différents types sur les ressources, comme les tables ou les bases de données dont elle dépend.

Tous les verrous se trouvent au niveau de la table ou au-dessus. Les verrous demandés empêchent les autres transactions d'apporter aux ressources des modifications susceptibles de nuire à la transaction. Chaque transaction libère ses verrous quand elle ne dépend plus des ressources verrouillées ; les transactions explicites conservent les verrous jusqu’à la fin de la transaction, une fois que celle-ci est validée ou restaurée.

Exemples :

R. Utilisation d’une transaction explicite

BEGIN TRANSACTION;  
DELETE FROM HumanResources.JobCandidate  
    WHERE JobCandidateID = 13;  
COMMIT;  

B. Restauration d’une transaction

L’exemple suivant montre l’effet de la restauration d’une transaction. Dans cet exemple, l’instruction ROLLBACK restaure l’instruction INSERT, mais la table créée continue d’exister.

CREATE TABLE ValueTable (id INT);  
BEGIN TRANSACTION;  
       INSERT INTO ValueTable VALUES(1);  
       INSERT INTO ValueTable VALUES(2);  
ROLLBACK;  

C. Définition du paramètre AUTOCOMMIT

L’exemple suivant affecte au paramètre AUTOCOMMIT la valeur ON.

SET AUTOCOMMIT ON;  

L’exemple suivant affecte au paramètre AUTOCOMMIT la valeur OFF.

SET AUTOCOMMIT OFF;  

D. Utilisation d’une transaction implicite à plusieurs instructions

SET AUTOCOMMIT OFF;  
CREATE TABLE ValueTable (id INT);  
INSERT INTO ValueTable VALUES(1);  
INSERT INTO ValueTable VALUES(2);  
COMMIT;  

Étapes suivantes