
null
—
Flashback Drop Oracle : Récupérer une Table Supprimée Facilement
Le Flashback Drop Oracle est une fonctionnalité puissante qui permet de restaurer une table supprimée accidentellement via la commande DROP TABLE. Grâce à la corbeille Oracle (Recycle Bin), les objets supprimés ne sont pas immédiatement détruits mais conservés temporairement. Le Flashback Drop Oracle devient ainsi un filet de sécurité indispensable pour les administrateurs et développeurs en entreprise.
🧪 Envie de pratiquer ? Exécutez les exemples de cet article dans notre SQL Playground gratuit — aucun logiciel à installer.
Définition et utilisation du Flashback Drop Oracle
Introduit avec Oracle Database 10g, le Flashback Drop repose sur le mécanisme de la Recycle Bin (corbeille). Lorsqu’une table est supprimée avec DROP TABLE, Oracle ne la détruit pas physiquement immédiatement : il la renomme avec un identifiant système et la conserve dans la corbeille, tant que l’espace tablespace le permet.
Cas d’usage en entreprise
- Erreur humaine : Un développeur supprime par mégarde une table de production au lieu de l’environnement de test.
- Rollback rapide : Besoin de revenir à l’état précédent sans restaurer une sauvegarde complète (RMAN), ce qui économise un temps précieux.
- Audit et conformité : Vérifier qu’une table supprimée peut être récupérée avant d’archiver définitivement les données.
- Environnements Agile/DevOps : Lors de déploiements fréquents, les erreurs de script DDL peuvent être corrigées rapidement.
⚠️ Important : Le Flashback Drop fonctionne uniquement si la Recycle Bin est activée (RECYCLEBIN = ON) et si la table n’a pas été supprimée avec la clause PURGE. Les tables appartenant au tablespace SYSTEM ne passent pas par la corbeille.
Syntaxe du Flashback Drop Oracle
La commande de restauration utilise l’instruction FLASHBACK TABLE combinée à la clause TO BEFORE DROP.
-- Syntaxe de base
FLASHBACK TABLE nom_table TO BEFORE DROP;
-- Syntaxe avec renommage de la table restaurée
FLASHBACK TABLE nom_table TO BEFORE DROP RENAME TO nouveau_nom;
-- Restauration depuis la corbeille via le nom système Oracle
FLASHBACK TABLE "BIN$xxxxxxxxxxxxxxxxxxxxxx==$0" TO BEFORE DROP RENAME TO nom_table;
Explication des paramètres
| Paramètre | Description |
|---|---|
nom_table | Nom original de la table à restaurer (tel qu’il était avant la suppression) |
TO BEFORE DROP | Clause obligatoire indiquant de récupérer la version avant la suppression |
RENAME TO nouveau_nom | Optionnel — renomme la table lors de la restauration pour éviter un conflit de nom |
"BIN$..." | Nom système attribué par Oracle dans la corbeille (visible via USER_RECYCLEBIN) |
Commandes utiles pour la Recycle Bin
-- Afficher le contenu de la corbeille de l'utilisateur courant
SELECT object_name, original_name, type, droptime
FROM USER_RECYCLEBIN;
-- Afficher la corbeille complète (DBA uniquement)
SELECT owner, object_name, original_name, type, droptime
FROM DBA_RECYCLEBIN;
-- Vider entièrement la corbeille
PURGE RECYCLEBIN;
-- Supprimer une table SANS passer par la corbeille
DROP TABLE nom_table PURGE;
Exemples pratiques de Flashback Drop Oracle
Exemple 1 — Restauration simple d’une table clients
Contexte métier : Un développeur d’une application CRM supprime accidentellement la table CLIENTS en environnement de production pendant un script de maintenance.
-- Étape 1 : Simulation de la suppression accidentelle
DROP TABLE clients;
-- Étape 2 : Vérifier que la table est bien dans la corbeille
SELECT object_name, original_name, type, droptime
FROM USER_RECYCLEBIN
WHERE original_name = 'CLIENTS';
-- Résultat attendu :
-- OBJECT_NAME ORIGINAL_NAME TYPE DROPTIME
-- BIN$abc123xyz456==$0 CLIENTS TABLE 2024-11-15:10:32:00
-- Étape 3 : Restaurer la table avec Flashback Drop
FLASHBACK TABLE clients TO BEFORE DROP;
-- Étape 4 : Vérifier la restauration
SELECT COUNT(*) FROM clients;
-- La table et toutes ses données sont de nouveau accessibles !
✅ Les index, contraintes et triggers associés à la table sont également restaurés depuis la corbeille dans la mesure du possible.
Exemple 2 — Restauration avec conflit de nom et renommage
Contexte métier : Une table COMMANDES a été supprimée, puis une nouvelle table du même nom a été recréée. On souhaite récupérer l’ancienne version en lui donnant un nouveau nom pour analyse.
-- Étape 1 : La table COMMANDES a été supprimée puis recréée
-- Une nouvelle table COMMANDES existe déjà en base
-- Étape 2 : Consulter la corbeille pour trouver l'ancienne table
SELECT object_name, original_name, droptime
FROM USER_RECYCLEBIN
WHERE original_name = 'COMMANDES'
ORDER BY droptime DESC;
-- Résultat :
-- OBJECT_NAME ORIGINAL_NAME DROPTIME
-- BIN$def789ghi012==$0 COMMANDES 2024-11-14:08:15:00
-- Étape 3 : Restaurer l'ancienne table avec un nouveau nom
-- pour éviter le conflit avec la table existante
FLASHBACK TABLE "BIN$def789ghi012==$0"
TO BEFORE DROP
RENAME TO commandes_archive_nov2024;
-- Étape 4 : Comparer les données entre les deux versions
SELECT COUNT(*) FROM commandes; -- Nouvelle table
SELECT COUNT(*) FROM commandes_archive_nov2024; -- Ancienne table restaurée
✅ Cette approche est particulièrement utile pour comparer deux versions d’une table ou récupérer des données manquantes sans écraser la version actuelle.
Erreurs courantes avec le Flashback Drop Oracle
Erreur : ORA-38305 – Object not in RECYCLE BIN
Message d’erreur :
FLASHBACK TABLE commandes TO BEFORE DROP;
-- ORA-38305: object not in RECYCLE BIN
Causes possibles :
- La table a été supprimée avec la clause
PURGE:DROP TABLE commandes PURGE; - La Recycle Bin était désactivée au moment du
DROP(RECYCLEBIN = OFF) - La corbeille a été vidée manuellement (
PURGE RECYCLEBIN) ou automatiquement par manque d’espace - La table appartenait au tablespace
SYSTEM
Solution : Vérifiez d’abord le contenu de la corbeille avec SELECT * FROM USER_RECYCLEBIN;. Si la table n’y figure pas, le seul recours est une restauration via une sauvegarde RMAN ou un export Data Pump. Pour prévenir ce problème, assurez-vous que le paramètre RECYCLEBIN est bien activé avec la commande :
-- Vérifier le statut de la Recycle Bin
SHOW PARAMETER recyclebin;
-- Activer la Recycle Bin au niveau session
ALTER SESSION SET recyclebin = ON;
-- Activer la Recycle Bin au niveau système (DBA requis)
ALTER SYSTEM SET recyclebin = ON;
Résumé du Flashback Drop Oracle
| Point clé | Détail |
|---|---|
| Disponibilité | Oracle Database 10g et versions ultérieures |
| Commande principale | FLASHBACK TABLE nom TO BEFORE DROP; |
| Condition requise | Recycle Bin activée, table non supprimée avec PURGE |
| Vue de consultation | USER_RECYCLEBIN / DBA_RECYCLEBIN |
| Conflit de nom | Utiliser RENAME TO lors de la restauration |
| Objets restaurés | Table + index + contraintes + triggers (si présents dans la corbeille) |
| Limitation | Ne fonctionne pas sur le tablespace SYSTEM |
Bonnes pratiques Oracle
- Ne jamais utiliser
DROP TABLE ... PURGEen production sans une sauvegarde préalable vérifiée. La clausePURGEcontourne définitivement la corbeille et rend toute récupération via Flashback Drop impossible. - Surveiller régulièrement le contenu de
USER_RECYCLEBINet purger les objets obsolètes de manière contrôlée (PURGE TABLE ancien_objet;), plutôt que de laisser Oracle vider la corbeille automatiquement par manque d’espace, ce qui pourrait supprimer des objets potentiellement récupérables.
Aller plus loin sur Oracle Flashback et la récupération de données
Pour approfondir vos compétences sur les fonctionnalités de récupération et de gestion du temps dans Oracle, découvrez ces cours complémentaires sur courssql.com :
- Flashback Query Oracle — Apprenez à interroger les données telles qu’elles existaient à un instant précis dans le passé grâce à la clause
AS OF TIMESTAMP. - Flashback Table Oracle — Découvrez comment restaurer le contenu d’une table à un état antérieur sans supprimer et recréer l’objet, en utilisant les données de l’Undo Tablespace.
- Recycle Bin Oracle — Maîtrisez la gestion complète de la corbeille Oracle : activation, consultation, purge sélective et comportement en cas de manque d’espace tablespace.
Sur le même thème
- CREATE TABLE Oracle : Guide Complet avec Exemples SQL
- ALTER TABLE Oracle : modifier une table SQL facilement
- CONSTRAINT Oracle : Guide complet des contraintes SQL
- INDEX Oracle SQL : Optimiser les performances des requêtes
- VIEW Oracle SQL : Créer et Gérer des Vues SQL
- SYNONYM Oracle : Alias d’Objets SQL Expliqué
