miércoles, 25 de septiembre de 2013

DROP TABLE ... PURGE

Si tienes una base de datos con papelera de reciclaje, y borras una tabla que no esté en el tablespace SYSTEM, esta tabla permanece en la papelera de reciclaje. Entonces se puede restaurar la tabla de allí.

Si esto no te gusta y quieres borrar una tabla completamente, se puede hacerlo con DROP TABLE ... PURGE. Aquí está un ejemplo que probé en Oracle 11.2.0.2.7:

Antes de empezar, verifiqué que mi base de datos empleaba la papelera de reclicaje:

SQL> select value from v$parameter
  2  where name = 'recyclebin'
  3  /
 
VALUE
----------
on
 
SQL>

Creé una tabla en el tablespace USERS

SQL> create table tab1
  2  (col1 number)
  3  tablespace users
  4  /
 
Tabla creada.
 
SQL>

Borré la tabla y verifiqué que estaba en la papelera de reciclaje después: 

SQL> drop table tab1
  2  /
 
Tabla borrada.
 
SQL> select original_name from recyclebin
  2  /
 
ORIGINAL_NAME
--------------------------------
TAB1

SQL>

Restauré la tabla: 

SQL> flashback table tab1 to before drop
  2  /
 
Flashback terminado.
 
SQL> desc tab1
Nombre                     ?Nulo?   Tipo
-------------------------- -------- ------------------
COL1                                NUMBER
 
SQL>

Borré la tabla por segunda vez con el comando DROP TABLE ... PURGE

SQL> drop table tab1 purge
  2  /
 
Tabla borrada.
 
SQL>

Esta vez la tabla no estaba en la papelera de reciclaje:

SQL> select original_name from recyclebin
  2  /
 
ninguna fila seleccionada
 
SQL>

Así cuando intenté a restaurar la tabla, tenía el error siguiente: 

SQL> flashback table tab1 to before drop
  2  /
flashback table tab1 to before drop
*
ERROR en linea 1:
ORA-38305: el objeto no esta en la papelera de
reciclaje
 
SQL>

1 comentario: