FirebirdSQL logo

Dans Firebird, tout se fait par transactions. Une transaction est l’unité logique de travail d’un groupe isolé d’opérations séquentielles de la base de données. Les modifications des données restent réversibles jusqu’à ce que l’application cliente envoie une instruction `COMMIT' au serveur.

Firebird dispose d’un petit nombre d’instructions SQL qui peuvent être utilisées par les applications clientes pour lancer, contrôler, confirmer ou annuler des transactions, mais cela suffit pour toutes les tâches liées à la base de données :

SET TRANSACTION

définir les paramètres de l’opération et la lancer ;

COMMIT

l’achèvement de la transaction et l’enregistrement des modifications ;

ROLLBACK

les changements intervenus dans la transaction sont annulés ;

SAVEPOINT

définir un point de sauvegarde pour annuler partiellement les modifications, si nécessaire ;

RELEASE SAVEPOINT

en supprimant le point de sauvegarde.

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").

Nom de la transaction

La clause optionnelle NAME spécifie le nom de la transaction. La clause NAME n’est disponible qu’en Embedded SQL. Si aucune clause NAME n’est spécifiée, l’instruction SET TRANSACTION s’applique à la transaction par défaut. Les transactions nommées permettent d’exécuter plusieurs transactions actives simultanément dans la même application. Une variable du langage de base du même nom doit être déclarée et initialisée. En DSQL, cette limitation empêche la spécification dynamique des noms de transaction.