Mostrando entradas con la etiqueta drop table. Mostrar todas las entradas
Mostrando entradas con la etiqueta drop table. Mostrar todas las entradas

jueves, 20 de noviembre de 2014

¿Porqué Tuve Que Borrar Esta Tabla Dos Veces?

Hallé este ejemplo en un sitio inglés y decidí traducirlo para los hispanohablantes. Lo he probado en Oracle 9.2 y Oracle 11.2 lo que quiere decir que la versión no sea demasiado importante. Un usuario que se llama Fred se conecta a una base de datos: 

SQL> conn fred/bloggs
Connected.
SQL>

Tiene solamente una sesión y no hay nadie más en la base de datos:

SQL> select username from v$session
  2  where username is not null
  3  /
 
USERNAME
------------------------------
FRED

SQL>

... y su usuario es vacio:

SQL> select count(*) from user_objects
  2  /
 
  COUNT(*)
----------
         0
 
SQL>

Fred crea una tabla, ejecuta unos comandos de SQL y intenta a borrar la tabla. Cuando lo hace por primera vez, ve dos errores que no te he mostrado:

SQL> drop table tab1
  2  /
drop table tab1
*
ERROR at line 1:
ORA-?????
ORA-?????
 
SQL>

Cuando lo hace por segunda vez, no hay problemas:

SQL> drop table tab1
  2  /
 
Table dropped.
 
SQL>

Yo necesito saber:
  1.  ¿Cómo fue creada la tabla?
  2. ¿Cuáles fueron los comandos de SQL?
  3. ¿Cuáles errores ha visto Fred?
Si sabes las respuestas puedes ponerlas en un comentario bajo estas líneas.

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