Flashback Drop Oracle : Récupérer une Table Supprimée

Découvrez le Flashback Drop Oracle : définition, syntaxe et exemples pratiques pour restaurer une table supprimée par erreur grâce à la Corbeille Oracle.

Illustration du tutoriel SQL Oracle : Flashback Drop Oracle : Récupérer une Table Supprimée

null

Publicité

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ètreDescription
nom_tableNom original de la table à restaurer (tel qu’il était avant la suppression)
TO BEFORE DROPClause obligatoire indiquant de récupérer la version avant la suppression
RENAME TO nouveau_nomOptionnel — 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.

Publicité

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 principaleFLASHBACK TABLE nom TO BEFORE DROP;
Condition requiseRecycle Bin activée, table non supprimée avec PURGE
Vue de consultationUSER_RECYCLEBIN / DBA_RECYCLEBIN
Conflit de nomUtiliser RENAME TO lors de la restauration
Objets restaurésTable + index + contraintes + triggers (si présents dans la corbeille)
LimitationNe fonctionne pas sur le tablespace SYSTEM

Bonnes pratiques Oracle

  1. Ne jamais utiliser DROP TABLE ... PURGE en production sans une sauvegarde préalable vérifiée. La clause PURGE contourne définitivement la corbeille et rend toute récupération via Flashback Drop impossible.
  2. Surveiller régulièrement le contenu de USER_RECYCLEBIN et 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

Un nouveau tutoriel SQL par semaine

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

Publicité

Laisser un commentaire

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

Publicité