Mostrando entradas con la etiqueta to before drop. Mostrar todas las entradas
Mostrando entradas con la etiqueta to before drop. Mostrar todas las entradas

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>

sábado, 18 de mayo de 2013

La Papelera de Reciclaje no Guarda Tablas del Tablespace SYSTEM

Oracle introdujo la papelera de reclicaje en la versión 10. Este ejemplo muestra que Oracle no pone tablas del tablespace SYSTEM en la papelera de reciclaje tras borrarlas. Lo probé en Oracle 11.2.0.2.7. Para empezar, creé una tabla en el tablespace USERS:

SQL> conn / as sysdba
Connected.
SQL> alter session set nls_language = 'SPANISH'
  2  /
 
Sesion modificada.
 
SQL> create table tab1
  2  (col1 number)
  3  tablespace users
  4  /
 
Tabla creada.

SQL>

Luego borré la tabla, comprobé que podía verla en la papelera de reclicaje y la restauré: 

SQL> drop table tab1
  2  /
 
Tabla borrada.
 
SQL> select original_name from recyclebin
  2  /
 
ORIGINAL_NAME
--------------------------------
TAB1
 
SQL> flashback table tab1 to before drop
  2  /
 
Flashback terminado.
 
SQL> desc tab1
Nombre                     ?Nulo?   Tipo
-------------------------- -------- ------------------
COL1                                NUMBER

SQL>

Entonces hice la misma cosa otra vez pero creé la tabla en el tablespace SYSTEM:

SQL> create table tab2
  2  (col1 number)
  3  tablespace system
  4  /
 
Tabla creada.
 
SQL> drop table tab2
  2  /
 
Tabla borrada.

SQL>

Esta vez, cuando busqué la tabla en la papelera de reclicaje, no estaba allí:
 
SQL> select original_name from recyclebin
  2  /
 
ninguna fila seleccionada

SQL>

... y cuando intenté a restaurar la tabla, no podía hacerlo:
 
SQL> flashback table tab2 to before drop
  2  /
flashback table tab2 to before drop
*
ERROR en linea 1:
ORA-38305: el objeto no esta en la papelera de
reciclaje