COMMIT Oracle SQL : valider vos transactions facilement

Découvrez la commande COMMIT en Oracle SQL : définition, syntaxe, exemples pratiques et erreurs à éviter pour valider vos transactions en base de données.

Illustration du tutoriel SQL Oracle : COMMIT Oracle SQL : valider vos transactions facilement

COMMIT Oracle SQL : tout savoir pour valider vos transactions

La commande COMMIT Oracle SQL est l’une des instructions les plus importantes du langage de contrôle des transactions (TCL). Elle permet de valider définitivement toutes les modifications apportées à la base de données depuis le début d’une transaction. Maîtriser le COMMIT Oracle SQL est indispensable pour garantir l’intégrité et la cohérence de vos données en environnement professionnel.

Publicité

Définition et utilisation du COMMIT Oracle SQL

Le COMMIT est une instruction SQL appartenant à la catégorie Transaction Control Language (TCL). Son rôle est simple mais fondamental : rendre permanentes toutes les modifications effectuées dans le cadre d’une transaction en cours. Une fois le COMMIT exécuté, les changements sont écrits de façon irréversible dans les fichiers de données d’Oracle et deviennent visibles pour les autres sessions utilisateurs.

En Oracle, une transaction débute implicitement dès qu’une instruction DML (INSERT, UPDATE, DELETE ou MERGE) est exécutée. Elle se termine soit par un COMMIT (validation), soit par un ROLLBACK (annulation). Jusqu’à ce que l’un de ces deux ordres soit émis, les données modifiées ne sont visibles que par la session courante.

Cas d’usage en entreprise

Le COMMIT est omniprésent dans les applications métier Oracle :

  • Systèmes bancaires : valider un virement entre deux comptes une fois les deux opérations (débit et crédit) réalisées avec succès.
  • Gestion des stocks : confirmer la mise à jour des quantités après réception d’une livraison.
  • Applications RH : valider l’insertion d’un nouvel employé après vérification de toutes les contraintes métier.
  • ETL et traitements batch : effectuer des COMMIT par lots (batch commit) pour éviter de saturer les segments d’annulation (UNDO).

Il est important de noter qu’en Oracle, les instructions DDL (CREATE, ALTER, DROP…) déclenchent un COMMIT automatique implicite avant et après leur exécution. Il convient d’en tenir compte dans vos scripts de migration.

Syntaxe du COMMIT Oracle SQL

La syntaxe de base du COMMIT Oracle est volontairement simple :

COMMIT;

Oracle propose également une syntaxe étendue avec des options supplémentaires :

COMMIT [WORK] [COMMENT 'texte_commentaire'] [WRITE [IMMEDIATE | BATCH] [WAIT | NOWAIT]];

Explication des paramètres

ParamètreDescriptionObligatoire
WORKMot-clé facultatif, retenu pour la compatibilité avec la norme SQL. Ne change pas le comportement.Non
COMMENT 'texte'Associe un commentaire à la transaction distribuée pour faciliter sa résolution en cas d’échec réseau.Non
WRITE IMMEDIATEForce l’écriture immédiate des informations de redo log avant le retour de la commande.Non
WRITE BATCHRegroupe les écritures redo pour de meilleures performances (OLAP, batch).Non
WAIT / NOWAITContrôle si la commande attend la confirmation de l’écriture dans les redo logs (WAIT) ou non (NOWAIT).Non

Dans la grande majorité des cas, la simple instruction COMMIT; suffit amplement pour un usage courant.

Publicité

Exemples pratiques de COMMIT en Oracle SQL

Exemple 1 – Insertion et validation d’un nouvel employé

Contexte métier : le service RH d’une entreprise doit intégrer un nouvel employé dans la table EMPLOYES. Après vérification des informations, on valide l’opération avec un COMMIT.

-- Début de la transaction : insertion d'un nouvel employé
INSERT INTO employes (id_employe, nom, prenom, salaire, date_embauche, id_departement)
VALUES (1042, 'DUPONT', 'Marie', 3500, SYSDATE, 10);

-- Vérification visuelle avant validation (optionnel)
SELECT * FROM employes WHERE id_employe = 1042;

-- Validation définitive de la transaction
-- Les données sont maintenant visibles par toutes les sessions
COMMIT;

Après le COMMIT, l’enregistrement de Marie Dupont est persisté définitivement. Un éventuel ROLLBACK ultérieur ne pourrait plus l’annuler.

Exemple 2 – Mise à jour en lot avec COMMIT fractionné (Batch Commit)

Contexte métier : dans le cadre d’un traitement batch de fin de mois, on applique une revalorisation salariale de 2 % à tous les employés d’un département. Pour éviter de saturer les segments UNDO sur une grande volumétrie, on utilise un COMMIT dans une boucle PL/SQL.

-- Traitement de revalorisation salariale avec commit par lots
DECLARE
  v_compteur NUMBER := 0;
BEGIN
  FOR emp IN (
    SELECT id_employe
    FROM employes
    WHERE id_departement = 10
  ) LOOP
    -- Mise à jour du salaire de chaque employé
    UPDATE employes
    SET salaire = salaire * 1.02
    WHERE id_employe = emp.id_employe;

    v_compteur := v_compteur + 1;

    -- Commit tous les 100 enregistrements pour limiter la pression sur UNDO
    IF MOD(v_compteur, 100) = 0 THEN
      COMMIT;
    END IF;
  END LOOP;

  -- Commit final pour valider les derniers enregistrements restants
  COMMIT;

  DBMS_OUTPUT.PUT_LINE('Revalorisation terminée. ' || v_compteur || ' employés mis à jour.');
END;
/

Cette technique de COMMIT par lots est une bonne pratique incontournable pour les traitements Oracle à forte volumétrie.

Erreurs courantes avec COMMIT Oracle SQL

Erreur : oublier le COMMIT après des instructions DML dans un script

Problème : Un développeur exécute un script contenant plusieurs instructions INSERT ou UPDATE dans SQL*Plus ou SQL Developer, puis ferme sa session sans émettre de COMMIT. En Oracle, la transaction est alors automatiquement annulée (ROLLBACK implicite à la déconnexion). Les données semblent avoir été insérées pendant la session, mais disparaissent à la reconnexion.

-- Script problématique sans COMMIT
INSERT INTO produits (id_produit, libelle, prix) VALUES (501, 'Clavier mécanique', 89.99);
INSERT INTO produits (id_produit, libelle, prix) VALUES (502, 'Souris ergonomique', 49.99);
-- Session fermée ici → ROLLBACK implicite → données perdues !

Solution : Toujours terminer explicitement vos scripts DML par un COMMIT; ou configurer votre outil (SQL Developer, Toad) pour afficher un avertissement de transaction en cours avant la fermeture.

INSERT INTO produits (id_produit, libelle, prix) VALUES (501, 'Clavier mécanique', 89.99);
INSERT INTO produits (id_produit, libelle, prix) VALUES (502, 'Souris ergonomique', 49.99);
-- Validation explicite : les données sont maintenant persistées
COMMIT;

Attention : À l’inverse, un COMMIT trop précoce, effectué avant la fin d’une séquence d’opérations interdépendantes, peut laisser la base dans un état incohérent impossible à annuler.

Résumé du COMMIT Oracle SQL

Point cléDétail
Catégorie SQLTCL – Transaction Control Language
RôleValider définitivement les modifications d’une transaction
PortéeToutes les instructions DML depuis le dernier COMMIT ou ROLLBACK
Effet sur les verrousLibère tous les verrous de lignes et de tables posés par la transaction
VisibilitéLes données deviennent visibles par toutes les autres sessions
COMMIT impliciteDéclenché automatiquement avant et après toute instruction DDL
RéversibilitéIrréversible — impossible d’annuler après COMMIT

Deux bonnes pratiques Oracle indispensables

  1. Ne jamais placer un COMMIT dans une boucle sans contrôle de volumétrie. Utilisez systématiquement un compteur pour effectuer des commits par lots (tous les 500 ou 1000 enregistrements) afin de préserver les performances et la stabilité des segments UNDO.
  2. Délimiter clairement les unités de travail logiques. Un COMMIT doit intervenir uniquement lorsque l’ensemble des opérations constituant une action métier cohérente est entièrement terminé et vérifié (principe d’atomicité ACID).

Aller plus loin sur les transactions Oracle SQL

Pour approfondir votre maîtrise des transactions en Oracle, nous vous recommandons de consulter les cours suivants disponibles sur courssql.com :

  • ROLLBACK Oracle SQL : apprenez à annuler une transaction en cours et à utiliser les points de sauvegarde pour un contrôle fin de vos annulations.
  • SAVEPOINT Oracle SQL : découvrez comment poser des points de reprise intermédiaires dans une longue transaction pour n’annuler qu’une partie des modifications.
  • Gestion des transactions Oracle SQL : comprendre le modèle ACID d’Oracle, les niveaux d’isolation, la gestion des verrous et la cohérence en lecture multi-version (MVCC).
Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité