Cuidado al borrar un tablespace en Oracle

Hola a todos, hoy os vamos a contar una curiosidad que nos ha ocurrido en un cliente y que, aunque puede parecer lógico, enfrascados en el día a día se nos puede pasar y podemos provocar errores que nos pueden hacer perder mucho tiempo hasta que lo solucionamos. Aunque en concepto no sea muy complicado para cualquiera que estemos acostumbrados a trabajar con BBDD. Ocurre cuando queremos borrar un tablespace en Oracle.

Cuidado al borrar un tablespace en Oracle

Tablespaces por defecto

Todo usuario en una base de datos Oracle tiene asignado desde el momento de su creación un tablespace donde por defecto se van a crear los objetos, como tablas e índices. Si cuando se crean estos objetos no se especifica un tablespace concreto.

Este tablespace por defecto al usuario se le asigna de dos formas:

  • Se le puede asignar en el comando de creación de un usuario:
CREATE USER admindb
IDENTIFIED BY admindb
DEFAULT TABLESPACE tbs_datos_admin
TEMPORARY TABLESPACE TEMP
PROFILE default;
  • Si no se asigna en el comando de creación, se le asigna el tablespace por defecto de la BBDD, que se puede encontrar en la vista del catálogo database_properties:
SQL> select * from database_properties
 2   where property_name='DEFAULT_PERMANENT_TABLESPACE';

PROPERTY_NAME                  PROPERTY_VALUE                 DESCRIPTION
------------------------------ ------------------------------ ----------------------------------------
DEFAULT_PERMANENT_TABLESPACE   USERS                          Name of default permanent tablespace

Borrar un tablespace por defecto

Cuando se quiere borrar un tablespace en Oracle, el motor no comprueba si hay usuarios que lo tienen asignado como tablespace por defecto, con lo que se puede borrar sin ningún problema, teniendo en cuenta las restricciones habituales de borrado de tablespaces.

SQL> select username, account_status, default_tablespace, temporary_tablespace
 2   from dba_users
 3   where username='ADMINDB';

USERNAME                       ACCOUNT_STATUS                   DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ -------------------------------- ------------------------------ ------------------------------
ADMINDB                        OPEN                             TBS_DATOS_ADMIN                TEMP

Se borra con la sentencia DROP TABLESPACE

SQL> DROP TABLESPACE tbs_datos_admin INCLUDING CONTENTS AND DATAFILES;

Tablespace borrado.

Una vez borrado, el usuario sigue teniéndolo como tablespace por defecto.

SQL> select username, account_status, default_tablespace, temporary_tablespace
 2   from dba_users
 3   where username='ADMINDB';

USERNAME                       ACCOUNT_STATUS                   DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE
------------------------------ -------------------------------- ------------------------------ ------------------------------
ADMINDB                        OPEN                             TBS_DATOS_ADMIN                TEMP

Borrar un tablespace por defecto de la BBDD

Si el que se intenta borrar es el tablespace por defecto de la BBDD, sí que lo comprueba y no nos deja borrarlo, devolviendonos un error.

SQL> DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;

ERROR en lÝnea 1:
ORA-12919: No se puede borrar el tablespace permanente por defecto

Creación de objetos en tablespace borrado

Una vez borrado el tablespace, y comprobado que sigue siendo el tablespace por defecto del usuario, hay que tener cuidado porque si se quiere crear un objeto y no se especifica la clausula de almacenamiento, al ir a crearlo en el tablespace por defecto, y este no existir, pues devuelve un error no permitiéndonos crear el objeto.

SQL> connect admindb/admindb
Conectado.
SQL> CREATE TABLE tpru1 (
  2  cprue1 number,
  3  cprue2 varchar2(100)
  4  );
CREATE TABLE tpru1 (
*
ERROR en lÝnea 1:
ORA-00959: el tablespace 'TBS_DATOS_ADMIN' no existe

Esperamos que os haya sido de utilidad.

Un saludo.

Equipo de base de datos

Si no quieres perderte trucos como este y estar al día de este mundo, suscríbete a nuestra newsletter. Te mantendremos informados con un solo email al mes.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Si tienes dudas sobre su administración o relacionada con Oracle o SQL Server, ¡¡no dudes en contactar con nosotros que estaremos encantados de ayudar!!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *