FirebirdSQL logo

ROLLBACK

affectation

Annulez la transaction.

Disponible en

DSQL, ESQL

Syntaxe
ROLLBACK [WORK] [TRANSACTION tr_name]
  [RETAIN [SNAPSHOT] | TO SAVEPOINT sp_name] [RELEASE];
Table 1. Paramètres de l’opérateur ROLLBACK
Paramètre Description

tr_name

Nom de la transaction. Disponible uniquement dans ESQL.

sp_name

Le nom du point de sauvegarde, disponible uniquement dans DSQL.

L’instruction ROLLBACK annule tous les changements de données de la base de données (ajouts, modifications, suppressions) effectués dans le contexte de cette transaction. L’instruction ROLLBACK ne provoque jamais d’erreurs. Si l’instruction RETAIN n’est pas spécifiée, elle libère toutes les ressources du serveur associées à l’exécution de cette transaction.

La clause optionnelle TRANSACTION spécifie le nom de la transaction. La clause TRANSACTION n’est disponible que dans Embedded SQL. Si la clause TRANSACTION n’est pas spécifiée, l’instruction ROLLBACK s’applique à la transaction par défaut.

Note

Les transactions nommées permettent à plusieurs transactions actives de s’exécuter simultanément dans la même application. Une variable du langage de base portant le même nom doit être déclarée et initialisée. En DSQL, cette restriction empêche la spécification dynamique des noms de transaction.

Le mot-clé facultatif WORK ne peut être utilisé que pour des raisons de compatibilité avec d’autres systèmes de gestion de bases de données relationnelles.

Le mot-clé RETAIN indique que toutes les actions de modification des données dans le contexte de cette transaction sont annulées et que la transaction elle-même continue d’être active, conservant son identifiant ainsi que l’état du curseur qu’elle avait avant que la transaction ne soit soft-committed. Ainsi, les ressources allouées à la transaction ne sont pas libérées.

Pour les niveaux d’isolation SNAPSHOT et SNAPSHOT TABLE STABILITY, l’état de la base de données reste tel qu’il était lorsque la transaction a été initialement lancée, mais dans le cas du niveau d’isolation READ COMMITTED, la base de données sera telle qu’elle était lorsque l’instruction ROLLBACK RETAIN a été exécutée. Si une transaction est annulée tout en conservant son contexte, il n’est pas nécessaire de réexécuter l’instruction SELECT pour récupérer les données de la table.

Voir aussi :

SET TRANSACTION, COMMIT.

ROLLBACK TO SAVEPOINT

La clause optionnelle TO SAVEPOINT de l’instruction ROLLBACK spécifie le nom du point de sauvegarde vers lequel le rollback se produit.Dans ce cas, toutes les modifications effectuées dans la transaction à partir du point de sauvegarde créé (SAVEPOINT) sont annulées.

L’opérateur ROLLBACK TO SAVEPOINT effectue les opérations suivantes :

  • Toutes les modifications de la base de données effectuées dans la transaction à partir du point de sauvegarde créé sont annulées. Les variables utilisateur définies avec RDB$SET_CONTEXT() restent inchangées ;

  • Tous les points de sauvegarde créés après le point de sauvegarde nommé sont détruits. Tous les points de sauvegarde antérieurs, comme le point de sauvegarde lui-même, sont conservés. Cela signifie qu’il est possible de revenir plusieurs fois au même point de sauvegarde ;

  • Tous les enregistrements verrouillés explicites et implicites du point de sauvegarde sont libérés. Les autres transactions qui ont précédemment demandé l’accès aux lignes verrouillées après le point de sauvegarde doivent continuer à attendre jusqu’à ce que la transaction soit validée ou annulée. D’autres transactions qui n’ont pas encore demandé l’accès à ces rangées peuvent demander et accéder immédiatement aux rangées déverrouillées.

Voir aussi :

SAVEPOINT.

SAVEPOINT

affectation

Création d’un point de sauvegarde.

Disponible en

DSQL

Syntaxe
SAVEPOINT sp_name
Table 1. Paramètres de l’opérateur SAVEPOINT
Paramètre Description

sp_name

Nom du point de sauvegarde, qui doit être unique dans la transaction.

L’instruction SAVEPOINT crée un point de sauvegarde compatible avec SQL:99 auquel les opérations de la base de données peuvent être ramenées ultérieurement sans annuler les actions effectuées depuis le début de la transaction. Les mécanismes de point de sauvegarde sont également connus sous le nom de transactions imbriquées.

Si un nom de point de sauvegarde existe déjà dans une transaction, le point de sauvegarde existant sera supprimé et un nouveau sera créé avec le même nom.

Pour annuler les modifications apportées au point de sauvegarde, on utilise l’opérateur ROLLBACK TO SAVEPOINT.

Note

Le mécanisme de point de sauvegarde interne peut utiliser de grandes quantités de mémoire, surtout si vous mettez à jour les mêmes enregistrements plusieurs fois dans la même transaction. Si un point de sauvegarde n’est plus nécessaire, mais que vous n’êtes pas encore prêt à terminer la transaction, vous pouvez le supprimer avec l’opérateur RELEASE SAVEPOINT, libérant ainsi des ressources.

Example 1. DSQL session utilisant des points de sauvegarde
CREATE TABLE TEST (ID INTEGER);
COMMIT;
INSERT INTO TEST VALUES (1);
COMMIT;
INSERT INTO TEST VALUES (2);
SAVEPOINT Y;
DELETE FROM TEST;
SELECT * FROM TEST; -- renvoie une chaîne vide
ROLLBACK TO Y;
SELECT * FROM TEST; -- renvoie deux lignes
ROLLBACK;
SELECT * FROM TEST; -- renvoie une seule ligne

RELEASE SAVEPOINT

affectation

Suppression d’un point de sauvegarde.

Disponible en

DSQL

Syntaxe
RELEASE SAVEPOINT sp_name [ONLY]
Table 1. Paramètres de l’opérateur RELEASE SAVEPOINT
Paramètre Description

sp_name

Le nom du point de sauvegarde.

L’instruction RELEASE SAVEPOINT supprime le point de sauvegarde nommé, libérant toutes les ressources associées. Par défaut, tous les points de sauvegarde créés après celui spécifié sont également supprimés. Si la clause ONLY est spécifiée, seul le point de sauvegarde portant le nom spécifié est supprimé.

Voir aussi :

SAVEPOINT.

Points de sauvegarde internes

Par défaut, le serveur utilise un point de sauvegarde automatique au niveau de la transaction pour annuler la transaction. Lorsque l’instruction ROLLBACK est exécutée, toutes les modifications apportées à la transaction sont annulées au point de sauvegarde du système, puis la transaction est approuvée.

Lorsque le nombre de modifications effectuées sous le point de sauvegarde au niveau de la transaction devient important (environ 50 000 enregistrements sont concernés), le serveur libère le point de sauvegarde système et utilise le mécanisme TIP pour annuler la transaction si nécessaire.

Tip

Si vous vous attendez à ce que le volume des changements dans une transaction soit important, vous pouvez définir l’option NO AUTO UNDO dans l’instruction SET TRANSACTION, ou — si vous utilisez l’API — définir l’indicateur TPB isc_tpb_no_auto_undo. Les deux options empêchent la création d’un point de transaction de niveau sauvegarde système.

Points de sauvegarde et PSQL

L’utilisation d’instructions de contrôle de transaction dans PSQL n’est pas autorisée car elle romprait l’atomicité de l’instruction appelant la procédure.Mais Firebird supporte l’appel et la gestion des exceptions dans PSQL, de sorte que les actions effectuées dans les procédures stockées et les triggers peuvent être annulées de manière sélective sans annuler complètement toutes les actions qu’ils contiennent.En interne, les points de sauvegarde automatique sont utilisés pour :

  • Annuler toutes les actions à l’intérieur du `BEGIN …​ END' où une exception se produit ;

  • Annuler toutes les actions effectuées dans une procédure stockée ou un déclencheur (ou, dans le cas d’une procédure stockée sélective, toutes les actions effectuées depuis la dernière instruction SUSPEND) si elles se terminent prématurément à cause d’une erreur ou d’une exception involontaire.

Chaque bloc de traitement des exceptions PSQL est également limité aux points de sauvegarde automatique du serveur.

Note

Le bouton "DEBUT …​ END` ne crée pas de point de sauvegarde automatique. Il est seulement créé dans les blocs qui ont un bloc WHEN pour gérer les exceptions ou les erreurs.