FirebirdSQL logo

SET TRANSACTION

affectation

Définit les paramètres de la transaction et la lance.

Disponible en

DSQL, ESQL

Syntaxe
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 ...]
Table 1. Paramètres de l’opérateur SET TRANSACTION
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.

Paramètres de la transaction

Les principales caractéristiques d’une transaction sont :

  • Mode d’accès aux données (READ WRITE, READ ONLY) ;

  • Mode de résolution du verrouillage (WAIT, NO WAIT) avec possibilité de spécification supplémentaire de LOCK TIMEOUT ;

  • niveau d’isolation (READ COMMITTED, SNAPSHOT, SNAPSHOT TABLE STABILITY) ;

  • un moyen de réserver ou de libérer des tables (la proposition "RESERVING").