Cuando se borra una tabla, la base de datos no libera inmediatamente el espacio asociado con la tabla. La base de datos renombra la tabla y la coloca junto sus objetos asociados en el recycle bin, donde en caso de que se haya borrado por error, puede ser recuperada posteriormente. Esta opción se llama Flasback Drop y se utiliza la sentencia FLASBACK TABLE para restaurar la tabla.
El recycle bin es una tabla del diccionario de datos que contienen información sobre objetos borrados. Las tablas borradas y sus objetos asociados como índices, constrains y tablas anidadas no se borran y siguen ocupando espacio. Solo liberan el espacio si se purga la recycle bin.
Cada usuario puede consultar sus objetos en recycle bin utilizando el siguiente comando:
SELECT * FROM RECYCLEBIN;
Cuando se borra un tablespace y su contenido, los objetos del tablespace no se colocan en el recycle bin, lo mismo ocurre cuando se borra un usuario, un cluster, o un tipo todos los objetos dependientes de este último tampoco se colocan en el recycle bin.
Los nombre de objetos en el Recycle Bin
Cuando se borra una tabla esta y a todos sus objetos asociados se les otorga un nombre generado por el sistema, esto se hace para evitar los conflictos que se puedan producir cuando diferentes tablas tiene el mismo nombre, por ejemplo: Un usuario borra una tabla, la recrea con el mismo nombre y la vuelve a borrar. Dos usuarios tienen una tabla con el mismo nombre y ambos la borran El nombre generado por el sistema tendrá el siguiente formato: BIN$unique_id$version
Donde:
¦ unique_id es un identificador único de 26 caracteres.
¦ versión es un número de versión asignado por la base de datos
Habilitar y deshabilitar la Recycle Bin
Se realiza mediante el parámetro de inicialización recyclebin. Cuando el parámetro esta enable, las tablas borradas y sus objetos dependientes se colocan en el recycle bin. Cuando el recycle bin esta deshabilitado las tablas borradas y sus objetos dependientes no se colocan en el reycle bin, simplemente se borran, y se deben utilizar otros medios para recuperarlos. El recycle bin está habilitado por defecto.
Para deshabilitarlo:
ALTER SESSION SET recyclebin = OFF;
ALTER SYSTEM SET recyclebin = OFF;
Para habilitarlo:
ALTER SESSION SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = ON;
La habilitación y des habilitación de recycle bin con alter system o con alter session es inmediata. La des habilitación no implica que se purguen los objetos en el recycle bin.
Existen dos vistas de donde obtener información sobre los objetos en el recycle bin:
Una de los usos de estas vistas es identificar el nombre que la base de datos ha asignado a los objetos borrados, como se muestra en el siguiente ejemplo:
SELECT object_name, original_name FROM dba_recyclebin
WHERE owner = 'HR';
OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$yrMKlZaLMhfgNAgAIMenRA==$0 EMPLOYEES
Otro de los comandos que se puede utilizar
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
EMPLOYEES BIN$yrMKlZaVMhfgNAgAIMenRA==$0 TABLE 2003-10-27:14:00:19
Si se decide que no va restaurar los elementos que están situados en el reycle bin, puedes utilizar la sentencia purge para borrar todos los elementos y sus objetos asociados. Se necesitan los mismos privilegios que se utilizaron para borrar el objeto.
Cuando se utiliza el comando PURGE para borrar una taba, se puede utilizar el nombre que utiliza en en recycle bin o el nombre original de la tabla.
Para consultar los objetos que hay en la recycle bin: USER_RECYCLEBIN y DBA_RECYCLEBIN
Se pueden purgar todos los objetos de un tablespace específico o de un usuario y tablespace especifico:
PURGE TABLESPACE data;
PURGE TABLESPACE data USER scott;
Los usuarios pueden purgar sus objetos del recycle bin con el siguiente comando:
PURGE RECYCLEBIN;
Si tienes privilegios de SYSDBA se puede purgar toda la reyclebin utilizando
DBA_RECYCLEBIN, en vez de RECYCLEBIN en la sentencia anterior.
Restaurando tablas del Recycle Bin
Se utiliza FLASHBACK TABLE … TO BEFORE DROP para recuperar tablas, se puede especificar el nombre original de la tabla o el nombre de la recycle bin. Existe la opción RENAME TO para cambiar el nombre tabla en el momento que se recupera. El nombre del recycle bin se puede obtener de las vistas DBA_ o USER_RECYCLEBIN.
Para utilizar el comando FLASHBACK TABLE … TO BEFORE DROP se necesitan los mismos privilegios que para borrar una tabla.
Restaurar los objetos Dependientes.
Cuando se restaura una tabla del recycle bn, lo objetos dependietnes como los índices no recuperan sus nombres originales, si no que mantienes los que tenían en el recycle bin