Está en la página 1de 5

La Papelera de Reciclaje de Oracle10g

Fecha de creacin: lunes 24 de Octubre de 2005. Versin: 1.0. Pruebas realizadas en Oracle10g Release 1 sobre Windows XP Professional 32 bits.

Este documento ha sido elaborado por Infor Consult Soluciones, SL (http://www.inforconsult.com.es). Queda prohibida la edicin o modificacin de este documento sin permiso de su autor. Se permite, sin embargo, imprimir y ceder este documento a terceros siempre que el contenido se mantenga ntegro y se haga mencin expresa a su autor.

LA PAPELERA DE RECICLAJE DE ORACLE

La papelera de reciclaje de Oracle10g: Recycle Bin


Explicacin
A partir de Oracle10g se incorpora esta nueva funcionalidad, denominada FLASHBACK DROP, que se viene a unir a las dems caractersticas que conforman el captulo de las funcionalidades FLASHBACK. La idea es la misma que tiene Windows con su papelera de reciclaje, es decir, disponer de una ubicacin donde colocar los objetos borrados con el fin de poder recuperarlos despus. Por supuesto, todo esto se hace de forma transparente al usuario. En realidad, lo que hace Oracle es renombrar el objeto borrado y todos los objetos dependientes, tales como vistas, triggers, ndices, constraints etc., usando el prefijo BIN$. Como slo se produce un renombrado, los objetos siguen existiendo y ocupando espacio en los tablespaces en los que lo hacan, hasta que el usuario o el administrador usen el comando PURGE o sea requerido espacio en ese tablespace para acomodar una nueva extensin (por esto ltimo, se dice que FLASHBACK DROP no es intrusivo ya que si el espacio consumido por la papelera es necesario se libera automticamente). Cuando se borra un tablespace sus objetos no son pasados a la papelera. Por el contrario, son borrados definitivamente y los objetos de la papelera que residieran en ese tablespace son borrados inmediatamente. Lo mismo ocurre cuando se borra un usuario.

Examinando la Papelera de Reciclaje


La vista RECYCLEBIN es en realidad un sinnimo que apunta a la vista USER_RECYCLEBIN que su vez apunta a la tabla SYS.RECYCLEBIN$. Por tanto, es equivalente RECYCLEBIN a USER_RECYCLEBIN. La estructura de esta vista es: Nombre Nulo? Tipo ----------------- -------- -----------OBJECT_NAME NOT NULL VARCHAR2(30) ORIGINAL_NAME VARCHAR2(32) OPERATION VARCHAR2(9) TYPE VARCHAR2(25) TS_NAME VARCHAR2(30) CREATETIME VARCHAR2(19) DROPTIME VARCHAR2(19) DROPSCN NUMBER CAN_PURGE VARCHAR2(3) RELATED NOT NULL NUMBER BASE_OBJECT NOT NULL NUMBER PURGE_OBJECT NOT NULL NUMBER SPACE NUMBER Cada vez que un objeto es borrado con el comando DROP se crea una entrada nueva en esta vista que tiene el nombre nuevo dado al objeto, prefijado por BIN$, su nombre original, el tablespace en el que reside, la fecha y hora de eliminacin, el espacio que ocupa, etc. Los objetos borrados que residen en la papelera pueden ser consultados con las mismas restricciones que tenan antes de ser borrados. Para consultarlos hay que usar el nombre nuevo que le asigna Oracle entrecomillndolo. Para recuperar un objeto borrado se puede usar el comando FLASHBACK TABLE.

Este documento ha sido elaborado por Infor Consult Soluciones, SL (http://www.inforconsult.com.es). Queda prohibida la edicin o modificacin de este documento sin permiso de su autor. Se permite, sin embargo, imprimir y ceder este documento a terceros siempre que el contenido se mantenga ntegro y se haga mencin expresa a su autor.

LA PAPELERA DE RECICLAJE DE ORACLE

Comando PURGE
La eliminacin de los objetos residentes en la papelera se puede hacer manualmente a travs de este comando. Solo podrn borrar los objetos de la papelera los propietarios, aquellos con permiso SYSDBA o DROP ANY. Las variantes que existen son:

COMANDO
PURGE TABLE nombre_tabla;

EXPLICACIN
Elimina la tabla indicada de la papelera. El nombre de la tabla puede ser el nombre original o el renombrado. Elimina el ndice indicado de la papelera. El nombre del ndice es el nombre original y no el renombrado. Elimina todos los objetos (del usuario que lanza la orden) de la papelera. Elimina todos los objetos (de todos los usuarios) de la papelera. Solo un SYSDBA puede lanzar este comando. Elimina todos los objetos (del usuario) de la papelera que residan en el tablespace indicado. Elimina todos los objetos de la papelera que residan en el tablespace indicado y pertenezcan el usuario indicado.

PURGE INDEX nombre_ndice;

PURGE RECYCLEBIN;

PURGE DBA_RECYCLEBIN;

PURGE TABLESPACE nombre_tablespace; PURGE TABLESPACE nombre_tablespace USERS nombre_usuario;

Pasando por alto la Papelera de Reciclaje


Existen dos modos para evitar que el objeto borrado pase a la papelera: 1. En Oracle10g R1 es el parmetro _recyclebin del fichero init<SID>.ora. ste es un parmetro oculto, por eso empieza por el carcter subrayado "_", que por omisin est a TRUE. Asignndole FALSE hacemos que Oracle10g no use la papelera y elimine el objeto definitivamente, como en anteriores versiones. En Oracle10g R2 se usa el parmetro recyclebin, ste ya no oculto, cuyos valores son ON y OFF siendo ON el valor por omisin. 2. Usando la clusula PURGE del comando DROP. Con esta opcin conseguimos el mismo efecto pero hay que indicarlo en cada comando DROP que usemos.

Restaurando una tabla desde la Papelera de Reciclaje


Si se pretende restaurar una tabla borrada que persista en la papelera se puede conseguir de varias formas: una puede ser haciendo un CREATE TABLE AS SELECT, otra puede ser creado la tabla manualmente mediante CREATE TABLE y despus rellenarla usando INSERT AS SELECT. Y por ltimo tenemos la opcin de usar FLASHBACK TABLE.
Este documento ha sido elaborado por Infor Consult Soluciones, SL (http://www.inforconsult.com.es). Queda prohibida la edicin o modificacin de este documento sin permiso de su autor. Se permite, sin embargo, imprimir y ceder este documento a terceros siempre que el contenido se mantenga ntegro y se haga mencin expresa a su autor.

LA PAPELERA DE RECICLAJE DE ORACLE

En el ltimo caso se usa el comando FLASHBACK TABLE nombre_tabla TO BEFORE DROP [RENAME TO nuevo_nombre_tabla]. El nombre de la tabla especificado puede ser el nombre original o el nombre dado por Oracle10g al ubicarla en la papelera. Si existe ms de una tabla en la papelera con el mismo nombre original, este comando restaurara la borrada ms recientemente. Para indicar una tabla concreta hay que usar el nombre originado por Oracle. Por ltimo, se puede indicar el nuevo nombre que tendr la tabla despus de ser recuperada.

Ejemplo completo
Oracle10g Release 1. Creamos una tabla cualquiera llama T1: SQL> create table t1 (c number(1)) tablespace users; Tabla creada. Comprobamos si existe alguna tabla borrada en la papelera: SQL> select * from recyclebin; ninguna fila seleccionada Borramos la tabla T1: SQL> drop table t1; Tabla borrada. Comprobamos que la tabla est ahora en la papelera: SQL> select object_name, original_name from recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ -------------------------------BIN$ACEfotX6TRqgiRnY6LN6nQ==$0 T1 Volvemos a crear de nuevo la tabla T1 comprobando que la borr de verdad: SQL> create table t1 (c number(1)) tablespace users; Tabla creada. La volvemos a borrar: SQL> drop table t1; Tabla borrada. Comprobamos que ahora estn las dos tablas en la papelera: SQL> select object_name, original_name from recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ ------------BIN$ACEfotX6TRqgiRnY6LN6nQ==$0 T1 BIN$ZdHqVQ+nS0OJsW83y8BEoQ==$0 T1 Intentamos acceder a alguna de las tablas borradas en seleccin e insercin:
Este documento ha sido elaborado por Infor Consult Soluciones, SL (http://www.inforconsult.com.es). Queda prohibida la edicin o modificacin de este documento sin permiso de su autor. Se permite, sin embargo, imprimir y ceder este documento a terceros siempre que el contenido se mantenga ntegro y se haga mencin expresa a su autor.

-- o SHOW RECYCLEBIN;

LA PAPELERA DE RECICLAJE DE ORACLE

SQL> select * from "BIN$ZdHqVQ+nS0OJsW83y8BEoQ==$0"; ninguna fila seleccionada SQL> insert into "BIN$ZdHqVQ+nS0OJsW83y8BEoQ==$0" values (1); insert into "BIN$ZdHqVQ+nS0OJsW83y8BEoQ==$0" values (1) * ERROR en lnea 1: ORA-38301: no se puede realizar DDL/DML en objetos de la papelera de reciclaje Borramos la tabla T1 (borra la T1 ms antigua): SQL> purge table t1; Tabla depurada. SQL> select object_name, original_name from recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ ------------BIN$ZdHqVQ+nS0OJsW83y8BEoQ==$0 T1 Volvemos a crear la tabla T1: SQL> create table t1 (c number(1)) tablespace users; Tabla creada. Ahora la borramos sin dejarla ir a la papelera de reciclaje y lo comprobamos: SQL> drop table t1 PURGE; Tabla creada. SQL> select object_name, original_name from recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ ------------BIN$ZdHqVQ+nS0OJsW83y8BEoQ==$0 T1 Ahora la borramos sin dejarla ir a la papelera de reciclaje y lo comprobamos: SQL> drop table t1 PURGE; Tabla creada. SQL> select object_name, original_name from recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ ------------BIN$ZdHqVQ+nS0OJsW83y8BEoQ==$0 T1 Por ltimo, restauramos la tabla T1 desde la papelera de reciclaje (si existiese ya una tabla con el nombre T1 obtendramos el error ORA-38312: el nombre original lo ha utilizado un objeto existente). En este caso usaramos la clusula vista anteriormente RENAME TO nuevo_nombre: SQL> flashback table T1 to before drop; Flashback terminado. SQL> select object_name, original_name from recyclebin; ninguna fila seleccionada

Este documento ha sido elaborado por Infor Consult Soluciones, SL (http://www.inforconsult.com.es). Queda prohibida la edicin o modificacin de este documento sin permiso de su autor. Se permite, sin embargo, imprimir y ceder este documento a terceros siempre que el contenido se mantenga ntegro y se haga mencin expresa a su autor.