7 janvier 2015

Récupérer une table droppée sous Oracle

Oracle a repris depuis Oracle 10g le système de la "corbeille". Ainsi quand on droppe une tables c'est "pour de faux" - et l'espace n'est pas libéré ... Sauf à utiliser une option de purge. Pour visualiser le contenu de la corbeille :

SELECT * FROM RECYCLEBIN; 
ou SELECT * FROM USER_RECYCLEBIN;

La corbeille est propre à chaque schéma. En se connectant SYS la vue DBA_RECYCLEBIN permet de voir tous les objets dans la corbeille quelque soit le propriétaire.


Plus d'informations sur ce blog : http://www.lao-dba.com/article-25701902.html
... et sur la doc Oracle (PURGE, FLASHBACK).

Quelques exemples d'utilisation :
  • Pour nettoyer la corbeille :
PURGE TABLE HR.ZX8K;
PURGE TABLESPACE HRZX; 
PURGE RECYCLEBIN;
  • Pour restaurer une table :
FLASHBACK TABLE ZX8K TO BEFORE DROP RENAME TO ZX8K_OLD;


ATTENTION :
  • Un DROP USER ou DROP TABLESPACE, ne passent pas par la corbeille.
  • Les scripts de maintenance appelant la table User_Objects doivent prévoir une clause pour exclure les nom d'objets commencant par BIN$
  • Si vous restaurez une table depuis la corbeille il faut ensuite renommer les index, contraintes, recréer les contraintes d'intégrité référentielle,

A noter : cette fonctionnalité peut être désactivée au niveau de la base ou au niveau de la session :

ALTER SYSTEM SET RECYCLEBIN=OFF;
ALTER SESSION SET RECYCLEBIN=OFF;


PS : pensez à compléter vos traitements de nettoyage de la base avec la purge de la corbeille.

Aucun commentaire:

Enregistrer un commentaire