Les suppressions de table, ne sont plus désormais physiques et défintives, mais mettent simplement l’objet à la corbeille (RECYCLE BIN). Tant que cette dernière n’est pas vidée, il est possible de récupérer l’objet supprimé.
Des infos dans le dictionnaire…
Les informations concernant la corbeille peuvent être consultées dans le dictionnaire :
SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
————- ————— ———– ———
T1 BIN$EkKm2r93vZfgQKjAhw1XeA==$0 TABLE 2006-04-25:15:51:52
ou via les tables USER_RECYCLEBIN et DBA_RECYCLEBIN.
exemple
SQL> select original_name nom, object_name “nom interne”,
operation, createtime “date création “,
droptime “date suppression “, can_undrop “récupérable ? “, can_purge “purgeable ?”
FROM user_recyclebin
NOM NOM INTERNE OPERATION date création date suppression récupérable? purgeable?
— —————————— ——— ——————- ——————- ———— ———-
T1 BIN$Ejia7J3wZRXgQKjAhw0prg==$0 DROP 2006-04-25:15:10:17 2006-04-25:15:10:22 YES YES
T2 BIN$Ejia7J3vZRXgQKjAhw0prg==$0 DROP 2006-04-25:15:09:30 2006-04-25:15:09:35 YES YES
note : les colonnes CREATETIME et DROPTIME sont des…VARCHAR (?)
exemples de récupération
SQL> FLASHBACK TABLE T2 TO BEFORE DROP
SQL> FLASHBACK TABLE “BIN$Ejia7J3vZRXgQKjAhw0prg==$0″ TO BEFORE DROP
note : on peut donc également utiliser le nom interne ET CE QUEL QUE SOIT LA COMMANDE SQL !
Il est conseillé de l’encadrer par des guillemets pour masquer les caractères spéciaux
Une table T1 peut avoir été supprimée plusieurs fois, et apparaître plusieurs fois dans la corbeille.
Pour éviter toute ambiguité, il faut vérifier le contenu de la poubelle avant récupération
et utiliser le nom interne le cas échéant plutot que le nom logique.
exemple
SQL> create table t1 (n integer);
SQL> drop table t1;
SQL> create table t1(new_n integer);
SQL> drop table t1;
et dans la corbeille on a :
NOM nom interne OPERATION date création date suppression
T1 BIN$EkKm2r92vZfgQKjAhw1XeA==$0 DROP 2006-04-25:15:51:14 2006-04-25:15:51:28
T1 BIN$EkKm2r93vZfgQKjAhw1XeA==$0 DROP 2006-04-25:15:51:44 2006-04-25:15:51:52
SQL> desc “BIN$EkKm2r93vZfgQKjAhw1XeA==$0″
Name Type
NEW_N NUMBER(38)
SQL> –c’est bien celle que je veux recuperer…dont acte
SQL> FLASHBACK TABLE “BIN$EkKm2r93vZfgQKjAhw1XeA==$0″ TO BEFORE DROP;
Suppression permanente
On peut supprimer une table de la corbeille avec la commande ‘PURGE’ :
SQL> PURGE TABLE T3
ou indirectement en utilisant des commandes affectant le tablespace utilisateur :
SQL> PURGE TABLESPACE users;
– purge tous les objets du tablespace
SQL> PURGE TABLESPACE users USER scott;
–purge tous les objets de SCOTT du tablespace USERS
ou vider en une fois la poubelle utilisateur ou la poubelle générale :
SQL> PURGE recyclebin;
SQL> PURGE dba_recyclebin;
Eviter la poubelle
On peut également supprimer physiquement et directement une table, en évitant de la conserver dans la corbeille donc, avec l’option ‘PURGE’ de la commande ‘DROP TABLE’
SQL> DROP TABLE T5 PURGE
Ou invalider l’utilisation de la poubelle de manière transversale,
grace au paramètre d’initialisation ‘RECYCLEBIN’
SQL> show parameter recyclebin
NAME TYPE VALUE
recyclebin string ON
SQL> ALTER SYSTEM SET recyclebin = OFF;
System Altered
SQL> show parameter recyclebin
NAME TYPE VALUE
recyclebin string OFF