SET TRANSACTION
Définit les paramètres de la transaction et la lance.
DSQL, ESQL
SET TRANSACTION [NAME tr_name] [<tr_option> ...] <tr_option> ::= READ {ONLY | WRITE} | [NO] WAIT | [ISOLATION LEVEL] <isolation level> | NO AUTO UNDO | RESTART REQUESTS | IGNORE LIMBO | LOCK TIMEOUT seconds | AUTO COMMIT | RESERVING <tables> | USING <dbhandles> <isolation level> ::= SNAPSHOT [TABLE [STABILITY]] | SNAPSHOT AT NUMBER snapshot_number | READ COMMITTED [{[NO] RECORD_VERSION | READ CONSISTENCY}] <tables> ::= <table_spec> [, <table_spec> ...] <table_spec> ::= tablename [, tablename ...] [FOR [SHARED | PROTECTED] {READ | WRITE}] <dbhandles> ::= dbhandle [, dbhandle ...]
Paramètre | Description |
---|---|
tr_name |
Nom de la transaction. Disponible uniquement dans ESQL. |
seconds |
Temps d’attente de l’opérateur (relevé) en secondes lorsqu’un conflit se produit. |
tables |
Liste des tables à réserver. |
dbhandles |
Une liste des bases de données auxquelles la base de données peut accéder. Disponible uniquement dans ESQL. |
table_spec |
Spécification des tables de réservation. |
tablename |
Le nom de la table à réserver.. |
dbhandle |
Le gestionnaire de base de données auquel la transaction peut accéder. Disponible uniquement dans ESQL. |
snapshot number |
Le numéro d’instantané d’une autre transaction dont les données d’instantané de la base de données doivent être partagées avec la nouvelle transaction. |
L’instruction SET TRANSACTION
définit les paramètres de la transaction et la démarre. La transaction n’est démarrée que par les applications clientes, pas par le serveur (à l’exception des transactions hors ligne et de certains threads/processus du système en arrière-plan comme le balayage).
Chaque application client peut lancer un nombre arbitraire de transactions simultanées. En fait, il existe une limite au nombre total de transactions exécutées dans toutes les applications client travaillant avec une base de données particulière depuis la dernière restauration de la base de données à partir d’une sauvegarde ou depuis la création initiale de la base de données. Ce nombre est de 248 -1, soit ~ 2,8 x 1014 transactions. Dans les tables API et MON$, le numéro de transaction est un nombre à 64 bits.
Toutes les phrases de l’instruction SET TRANSACTION
sont facultatives. Si aucune phrase n’est spécifiée dans l’instruction de début d’exécution de la transaction, celle-ci est supposée démarrer avec les valeurs par défaut de toutes les caractéristiques (mode d’accès, mode de résolution des verrouillages et niveau d’isolation).
Par défaut, la transaction est lancée avec les caractéristiques suivantes.
SET TRANSACTION
READ WRITE
WAIT ISOLATION LEVEL SNAPSHOT;
Lorsqu’une transaction côté client est lancée (explicitement ou par défaut), le serveur transmet un descripteur de transaction (un nombre entier) au client. Côté serveur, les transactions se voient attribuer un numéro séquentiel. Ce numéro peut être obtenu avec les outils SQL en utilisant la variable contextuelle CURRENT_TRANSACTION
.