
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.
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ètre | Description | Obligatoire |
|---|---|---|
WORK | Mot-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 IMMEDIATE | Force l’écriture immédiate des informations de redo log avant le retour de la commande. | Non |
WRITE BATCH | Regroupe les écritures redo pour de meilleures performances (OLAP, batch). | Non |
WAIT / NOWAIT | Contrô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.
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 SQL | TCL – Transaction Control Language |
| Rôle | Valider définitivement les modifications d’une transaction |
| Portée | Toutes les instructions DML depuis le dernier COMMIT ou ROLLBACK |
| Effet sur les verrous | Libè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 implicite | Déclenché automatiquement avant et après toute instruction DDL |
| Réversibilité | Irréversible — impossible d’annuler après COMMIT |
Deux bonnes pratiques Oracle indispensables
- 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.
- 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).
