Está en la página 1de 14

Curso Oracle Sesión 3

16/11/2006 Gestión de espacios para tablas

Práctica 3. Gestión de espacios para tablas

1. Espacios para tablas (Tablespaces)


Son las unidades lógicas de almacenamiento que componen una base de datos, es decir, son asignaciones de
espacio en la base de datos que permiten contener objetos persistentes del esquema.
Aunque los datos de usuario y de herramientas podrían ubicarse dentro del tablespace SYSTEM, que es el que
se construye en el proceso de creación de la base de datos, Oracle recomienda crear un cierto número de tablespaces
para facilitar la gestión, las tareas administrativas y además, mejorar el rendimiento del sistema. Así, en un sistema en
explotación deberían existir, al menos:
• El tablespace SYSTEM.
• Un tablespace separado para datos de cada aplicación.
• Un tablespace separado para los índices de cada aplicación.
• Un tablespace para los datos de poco uso (tablas con datos estáticos) y otro para los índices de poco uso.
• Para las herramientas es conveniente disponer de un tablespace para sus datos y otro para sus índices.
• Un tablespace para contener los segmentos de rollback o alternativamente uno o varios tablespaces de
deshacer.
• Un tablespace temporal y puede que, para algunos usuarios, un tablespace temporal dedicado.
• Si algún usuario particular, además del administrador, tiene privilegios para crear objetos (o estamos en un
entorno de desarrollo), debería existir además un tablespace para sus datos.
Usaremos la sentencia CREATE TABLESPACE para crear un tablespace. Cuando se crea un tablespace,
inicialmente está disponible para lectura y escritura. Posteriormente, mediante la sentencia ALTER TABLESPACE,
puede ponerse el tablespace no disponible para su uso (offline) o disponible (online), dejarlo como sólo lectura o añadir
nuevos ficheros al mismo o modificarlos, entre otras cosas. Para borrar un tablespace se usa la sentencia DROP
TABLESPACE. Además, se pueden crear tablespaces temporales para contener objetos del esquema sólo durante la
duración de una sesión mediante la sentencia CREATE TEMPORARY TABLESPACE.
Evidentemente toda la gestión de tablespaces puede realizarse desde la Consola de OEM. Dada la facilidad de
uso y la existencia de ayuda en línea, se deja en manos de los alumnos el aprendizaje de estas operaciones mediante el
uso de esta herramienta. Nuestro objetivo aquí es conocer el detalle de los parámetros de las sentencias SQL que hay
detrás de estas operaciones, que son muy parecidos en una gran parte de los sistemas de bases de datos relacionales
existentes en el mercado.

2. La sentencia CREATE TABLESPACE

2.1 Prerrequisitos
• Se debe poseer al menos el privilegio del sistema CREATE TABLESPACE.
• Antes de crear un tablespace debe existir al menos una base de datos donde se ubique, que debe estar abierta.
Para poder crear tablespaces y objetos en ellos es necesario, además:
• Si nuestra base de datos está ejecutando usando tablespaces de deshacer, al menos uno de ellos debe estar
online.
• Si estamos usando segmentos de rollback, al menos un segmento de rollback, diferente del SYSTEM, debe
existir y estar online.

1/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

2.2 Sintaxis
create_tablespace::=

(datafile_tempfile_spec::= part of file_specification, logging_clause::=, data_segment_compression::=,


storage_clause::=, extent_management_clause::=, segment_management_clause::=)

datafile_tempfile_spec::=

autoextend_clause::=

2/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

maxsize_clause::=

logging_clause::=

storage_clause::=

3/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

data_segment_compression::=

extent_management_clause::=

segment_management_clause::=

2.3 Descripción de algunos parámetros


UNDO
Se usa para crear un tablespace de deshacer. Si la base de datos se creó inicialmente sin tablespace de deshacer
pero el parámetro UNDO_MANAGEMENT estaba puesto a AUTO en el fichero de parámetros de inicialización,
Oracle usará el tablespace SYSTEM hasta que no se cree un tablespace de deshacer.
Como restricciones: no se pueden crear objetos dentro de este tablespace y las únicas cláusulas que pueden
especificarse son la cláusula DATAFILE y la extend_management. Siempre se crean permanentes, de lectura/escritura
y en modo logging (ver logging_clause).
tablespace
Es el nombre del tablespace que se va a crear.
DATAFILE datafile_tempfile_spec
Especificación de los nombres y características de los ficheros asociados al tablespace. Esta cláusula es
opcional si el parámetro de incialización DB_CREATE_FILE_DEST tiene un valor asignado. En este caso Oracle crea
un fichero con 100M y un nombre por defecto en el directorio que se hubiese especificado en el parámetro, que será
autoextensible y de tamaño máximo ilimitado. De estos ficheros se dice que son Ficheros Gestionados por Oracle
(OMF).
MINIMUM EXTENT Clause
Indica el tamaño mínimo de las extensiones en el tablespace, obligando a que éstas (estén ocupadas o libres)
tengan un tamaño múltiplo del número que se especifique.
BLOCKSIZE Clause
Se usa para indicar un tamaño de bloque diferente del estándar para este tablespace. En el fichero de
parámetros de inicialización debe especificarse entonces un valor para DB_CACHE_SIZE y al menos para un
DB_nK_CACHE_SIZE, donde nK coincide con el tamaño de bloque no estándar que se ha indicado en esta cláusula.
No puede usarse en tablespaces temporales o en tablespaces que se van a asignar como temporales a los usuarios.

4/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

logging_clause
Se usa para indicar si las operaciones que van a realizarse sobre los objetos del tablespace deben registrarse en
los ficheros de redo log. Este es el valor por defecto para todos los objetos almacenados en el tablespace, si en la
creación de cada objeto no se indica lo contrario. Si a nivel de cada objeto se especifica una opción diferente, será esta
última la que prevalezca. Si no se indica nada, por defecto la opción es LOGGING.
FORCE LOGGING
Se usa para poner el tablespace en modo FORCE LOGGING, lo que implica que Oracle escribirá en el redo
log todos los cambios en los objetos almacenados en el tablespace, independientemente de lo que se haya especificado
para cada objeto a nivel individual. La base de datos debe estar abierta y en modo lectura/escritura. No es incompatible
con poner NOLOGGING en la cláusula anterior, que será el defecto para los objetos que se creen, si bien Oracle
ignorará este NOLOGGING mientras el tablespace esté en modo FORCE LOGGING. Esta cláusula no puede
especificarse para un tablespace temporal.
DEFAULT storage_clause
La cláusula storage puede usarse en muchas de las sentencias SQL CREATE y ALTER de diversos objetos
(TABLESPACE, TABLE, INDEX…). Permite especificar cómo Oracle debe almacenar un objeto de la base de datos.
Esto afectará al tiempo que se tardará en acceder a este objeto y la eficiencia del uso del espacio de almacenamiento
En la sentencia CREATE TABLESPACE con esta cláusula podemos indicar parámetros por defecto para
todos los objetos que se creen en el tablespace, si bien prevalecerán los parámetros que se hayan especificado en el
propio objeto. Para tablespaces temporales gestionados mediante el diccionario, Oracle sólo tiene en cuenta el
parámetro NEXT.
Debido a su extensión, los parámetros asociados a esta cláusula se explican por separado en la sección 2.3.1.
ONLINE | OFFLINE Clauses
ONLINE es el defecto y permite que después de la creación el tablespace esté disponible para aquellos
usuarios que tengan autorización. OFFLINE deja el tablespace no disponible. La vista del diccionario
DBA_TABLESPACES indica la situación de cada tablespace.
PERMANENT | TEMPORARY Clauses
Si el tablespace se usará para contener objetos permanentes, se debe especificar PERMANENT, que es el
defecto. TEMPORARY indica que se usará para operaciones temporales, tales como ordenaciones provocadas por la
cláusula ORDER BY de las sentencias SELECT. Los tablespaces temporales creados usando esta cláusula son siempre
gestionados por el diccionario y no se puede especificar una cláusula EXTEND MANAGEMENT LOCAL ni tampoco
BLOCKSIZE. Si se quiere crear tablespaces temporales gestionados localmente (lo que es fuertemente recomendado
por Oracle a partir de esta versión), debe usarse la cláusula CREATE TEMPORARY TABLESPACE.
extent_management_clause
Permite especificar como se gestionarán las extensiones del tablespace. Si se elige LOCAL (defecto), dentro
del propio tablespace estará almacenada la información necesaria para controlar el uso del espacio. En este caso, si se
indica la opción AUTOALLOCATE el tablespace será gestionado por el sistema y no se permite especificar un tamaño
de extensión. Este es el defecto si el parámetro de inicialización COMPATIBLE está puesto a 9.0.0 o superior. Por el
contrario, si se elige UNIFORM estamos indicando que la gestión del tablespace se realizará con extensiones
uniformes, que tendrán el tamaño que se indique en SIZE (Por defecto serán de 1M). Como alternativa a LOCAL,
podemos especificar DICTIONARY si queremos que la información relativa a la gestión del espacio en el tablespace se
administre mediante tablas del diccionario y no mediante información almacenada en el propio tablespace. Este valor
(DICTIONARY) es el defecto si el parámetro COMPATIBLE tiene un valor de versión menor que 9.0.0.
Como restricción: no se puede especificar DICTIONARY para ningún tablespace si el tablespace SYSTEM
está gestionado localmente. Oracle recomienda crear tablespaces con la opción LOCAL, ya que son mucho más
eficientes. Además, en futuras versiones probablemente sólo se soportará este tipo.
Si esta cláusula no se especifica, Oracle usa la información del parámetro de inicialización COMPATIBLE y
las cláusulas MINIMUM EXTENT y DEFAULT storage, para decidir la gestión de extensiones. Si COMPATIBLE es
menor que 9.0.0, Oracle crea un tablespace gestionado por tablas del diccionario. Si COMPATIBLE es mayor o igual a
ese valor:
• Si no se especifica la cláusula DEFAULT storage, Oracle crea un tablespace gestionado localmente por el
sistema (LOCAL+AUTOALLOCATE).
• Si se especifica la cláusula DEFAULT storage hay varias situaciones posibles. En caso de que se indique la
cláusula MINIMUM EXTENT, Oracle evalúa si los valores de MINIMUM EXTENT, INITIAL y NEXT son

5/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

iguales y el valor de PCTINCREASE es 0. Si es así, se creará un tablespace gestionado localmente y uniforme


con extensiones de tamaño = INITIAL. Si estos tres valores anteriores no son iguales o PCTINCREASE no es
0, Oracle ignora los valores indicados y crea un tablespace gestionado localmente por el sistema (como en el
caso anterior, LOCAL+AUTOALLOCATE). Si por el contrario no se especificó la cláusula MINIMUM
EXTENT, Oracle comprueba si los valores INITIAL y NEXT son iguales y el valor de PCTINCREASE es 0,
y en este caso crea un tablespace gestionado localmente y uniforme. Si no se cumple algunas de las
condiciones anteriores será un tablespace gestionado localmente por el sistema (LOCAL+
AUTOALLOCATE).
Otras restricciones son:
• Un tablespace gestionado localmente sólo puede contener objetos permanentes; si se desea que un tablespace
gestionado localmente contenga objetos temporales debe usarse la sentencia CREATE TEMPORARY
TABLESPACE.
• Si se especifica la opción LOCAL, no puede usarse DEFAULT storage, MINIMUM EXTENT o
TEMPORARY.

segment_management_clause
Tiene sentido sólo para tablespaces permanentes y gestionados localmente. La opción MANUAL indica que la
gestión del espacio libre en los segmentos se realice por medio del uso de listas de bloques libres. La opción AUTO
indica que esta gestión se realice por medio de mapas de bits. Si se elige esta segunda opción Oracle ignora cualquier
especificación para PCTUSED, FREELIST y FREELIST GROUPS que aparezca en los objetos de este tablespace. A
esto se le llama gestión automática de espacio en segmentos.
Si queremos saber cuál es la gestión de segmentos predefinida para cualquier tablespace, podemos consultar la
columna SEGMENT_SPACE_MANAGEMENT de las vistas del diccionario DBA_TABLESPACES o
USER_TABLESPACES.
Si se usa AUTO y en la cláusula extent_management se indicó LOCAL UNIFORM, debemos asegurarnos que
cada extensión contiene al menos 5 bloques de la base de datos, dado el tamaño de bloque por defecto. Si se usa AUTO
pero en la cláusula extent_management se indicó LOCAL AUTOALLOCATE, y si, además, el tamaño de bloque es
mayor o igual a 16K, Oracle gestiona el espacio en los segmentos creando extensiones con un tamaño mínimo de 1M.
Como restricciones para la opción AUTO: sólo puede usarse para tablespaces permanentes y gestionados
localmente y nunca puede especificarse para el tablespace SYSTEM.

2.3.1 Parámetros de la cláusula storage


INITIAL
Tamaño de la primera extensión del objeto (en Kbytes, Mbytes o, por defecto, en bytes), para la que Oracle
asigna espacio cuando se crea. El valor por defecto si no se indica nada es 5 bloques de datos, aunque hay variantes
dependiendo de si la gestión de espacio en segmentos se realiza manual o automáticamente. Si el valor es menor que 5
bloques de datos Oracle redondea el tamaño al siguiente múltiplo de un bloque de datos y si es mayor que 5 bloques de
datos redondea hasta el siguiente múltiplo de 5 bloques de datos.
Como restricción en una sentencia ALTER no puede especificarse INITIAL.
NEXT
Tamaño de la siguiente extensión (en Kbytes, Mbytes o bytes) que se asignará al objeto. El valor
predeterminado es de 5 bloques de datos. Si se especifica un valor menor que 5 bloques de datos Oracle redondea el
tamaño a un múltiplo del tamaño del bloque de datos y si se especifica un valor mayor que 5 bloques de datos redondea
hasta un valor que minimice la fragmentación.
PCTINCREASE
Especifica el porcentaje en que crecen la tercera extensión y siguientes, con respecto al tamaño de la última
extensión asignada. El valor predeterminado es 50 y el mínimo 0, que indica que todas las extensiones serán del mismo
tamaño. Oracle redondea el tamaño de cada nueva extensión a un múltiplo del tamaño del bloque de datos.
MINEXTENTS
Indica el número de extensiones que deben asignarse en la creación del objeto. El valor predeterminado y
mínimo es 1. Si es mayor que 1, el tamaño total a asignar se calcula en función de los parámetros anteriores. En una
instrucción ALTER el número MINEXTENTS puede reducirse pero no aumentarse. No se puede cambiar este valor
para un objeto que reside en un tablespace gestionado localmente.

6/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

MAXEXTENTS
Indica el número total de extensiones, incluida la primera, que Oracle puede reservar para el objeto. El valor
mínimo es 1 y el predeterminado depende del tamaño de bloque especificado en cada caso. No se puede cambiar este
valor para un objeto que reside en un tablespace gestionado localmente.
UNLIMITED
Reserva automáticamente las extensiones en función de las necesidades. Oracle recomienda esta opción para
evitar la fragmentación, salvo en el caso de los segmentos de rollback, donde no debería usarse.
FREELIST GROUPS
Especifica el número de grupos de listas de extensiones libres para el objeto en cuestión. El valor
predeterminado y mínimo es 1. Si el tablespace en que reside el objeto está en modo de gestión automática del espacio
de segmentos se ignora este parámetro.
FREELIST
Especifica el número de listas de extensiones libres para cada uno de los grupos. El valor predeterminado y
mínimo es 1. Se ignora si el tablespace en que reside el objeto está en modo de gestión automática del espacio de
segmentos.
OPTIMAL
Sólo es relevante para los segmentos de rollback. Especifica el tamaño óptimo para estos segmentos y no
puede ser inferior al espacio que se ha asignado inicialmente por los parámetros INITIAL, NEXT, PCTINCREASE y
MINEXTENTS. Oracle redondea el tamaño a un múltiplo del tamaño del bloque de datos y se encarga de desasignar
extensiones libres o asignar nuevas extensiones para mantener el tamaño ajustado al valor de OPTIMAL. Si se
especifica NULL (valor por defecto), Oracle nunca desasigna extensiones.
BUFFER_POOL
Especifica un área de buffers predeterminada para un objeto. El tamaño de estas áreas puede definirse en el
fichero de parámetros de inicialización. La opción KEEP hace que los bloques del objeto vayan al área KEEP, donde se
retienen a fin de evitar operaciones de E/S. Si se define un área KEEP del tamaño apropiado puede mantenerse el
objeto completo en memoria. RECYCLE indica que los bloques se lleven a esta área, donde siempre permanecerán
disponibles para desalojo; así los bloques del objeto no ocuparán espacio de caché necesario para otras operaciones.
DEFAULT indica el área de buffers predeterminada. Es el valor por defecto y donde se llevan los bloques de objetos a
los que no se ha asignado KEEP o RECYCLE.

2.4 Ejemplos
1. Crear un tablespace de deshacer
CREATE UNDO TABLESPACE undots
DATAFILE 'undots.dat'
SIZE 10M AUTOEXTEND ON;

2. Crear un tablespace indicando parámetros de almacenamiento por defecto para los objetos que se creen
posteriormente
CREATE TABLESPACE tbs01
DATAFILE 'tbs01.dat' SIZE 20M
DEFAULT STORAGE (INITIAL 128K NEXT 128K
MINEXTENTS 1 MAXEXTENTS 999)
ONLINE;

3. Crear un tablespace con un fichero de datos de 1M de tal forma que cuando se llene, se le asignen extensiones de
500K hasta un máximo de 100M
CREATE TABLESPACE tbs02
DATAFILE 'diskb:tbs02.dat' SIZE 1M REUSE
AUTOEXTEND ON NEXT 500K MAXSIZE 100M;

7/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

4. Crear un tablespace especificando un tamaño mínimo de extensión de 500K (asignará extensiones como múltiplos de
500K)
CREATE TABLESPACE tbs03
DATAFILE 'tbs03.dat' SIZE 20M
MINIMUM EXTENT 500K
DEFAULT STORAGE (INITIAL 128K NEXT 128K)
LOGGING;

5. Crear un tablespace gestionado localmente


CREATE TABLESPACE tbs04 DATAFILE 'tbs04.dat' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
Esta sentencia crea un tablespace gestionado localmente con extensiones de 128K y cada bit del mapa de bits
describe el uso del espacio de 64 bloques (se asume tamaño de bloque de 2K; así el valor 64 se obtiene de 128/2).

6. Crear un tablespace con gestión automática del espacio de segmentos


CREATE TABLESPACE autosegts DATAFILE 'autosegts.dat' SIZE 1M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

3. La sentencia ALTER TABLESPACE

3.1 Prerrequisitos
• Si se posee el privilegio del sistema ALTER TABLESPACE pueden realizarse todas las operaciones.
• Si sólo se posee el privilegio MANAGE TABLESPACE las operaciones que pueden realizarse son: ponerlo
disponible o no disponible (online u offline), iniciar o finalizar una copia de seguridad y ponerlo en modo sólo
lectura o lectura/escritura.
Además, para poder poner un tablespace en modo de sólo lectura ha de cumplirse:
• El tablespace debe estar online.
• No puede contener ningún segmento de rollback activo. De ahí que el tablespace SYSTEM no pueda ponerse
nunca como no disponible.
• El tablespace no puede intervenir en una copia de seguridad abierta, porque al final de la misma se escribe en
el archivo de cabecera de los archivos de datos asociados al tablespace.

8/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

3.2 Sintaxis
alter_tablespace::=

(datafile_tempfile_clauses::=, data_segment_compression::=, part of ALTER TABLE syntax, storage_clause::=,


logging_clause::=)

datafile_tempfile_clauses::=

9/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

3.3 Descripción de algunos parámetros


Sólo se comentarán aquí aquellos parámetros que puedan resultar novedosos con respecto a los explicados en
la sentencia CREATE o cuyo significado no sea obvio. Los ejemplos complementan también estas explicaciones.
tablespace
Nombre del tablespace que quiere modificarse. Restricciones:
• Si el tablespace es de tipo deshacer, sólo se pueden especificar las cláusulas: ADD DATAFILE, RENAME
DATAFILE, DATAFILE...ONLINE|OFFLINE y BEGIN|END BACKUP.
• Si el tablespace es temporal gestionado localmente sólo puede usarse la cláusula ADD.

OFFLINE
Se usa para poner no disponible o desactivar un tablespace (esto afecta a todos sus archivos de datos y
objetos). La opción NORMAL (por defecto) limpia la SGA de todos los bloques pertenecientes a ficheros de datos de
este tablespace, asegurándose de que todo está escrito y consistente. Con la opción TEMPORARY, Oracle ejecuta un
punto de control (checkpoint) para todos los ficheros de datos de este tablespace, pero no asegura que todos los ficheros
puedan ser escritos; puede ser necesaria la recuperación de algunos ficheros desde soporte físico antes de poder poner
disponible de nuevo el tablespace. La opción IMMEDIATE obliga siempre a realizar una recuperación desde soporte
físico antes de volver a activar el tablespace.
No puede ponerse offline un espacio para tablas temporal.
BEGIN BACKUP
Indica que se va a comenzar una copia de seguridad abierta (los usuarios pueden seguir accediendo a los
datos). No se puede especificar esta opción para un tablespace de sólo lectura, ni temporal gestionado localmente.
END BACKUP
Indica que la copia de seguridad abierta se ha completado. Esta opción debe usarse tan pronto como sea
posible, inmediatamente después de finalizada la copia de seguridad, porque de no hacerse así, un fallo (o un shutdown
abort), que provoque la caída de la instancia, hará que en el rearranque se proceda a la recuperación del tablespace
desde ficheros de redo log archivados (si es que existen) con mucha probabilidad. Esta opción no puede usarse en
tablespaces de sólo lectura.
READ
La opción ONLY pone el tablespace en modo lectura, permitiendo primero que terminen las transacciones que
se estaban ejecutando e impidiendo el acceso de nuevas transacciones que pretenden escribir en los ficheros de datos.
La opción WRITE cambia a modo lectura/escritura un tablespace que era sólo de lectura, permitiendo, a partir de ese
momento, las operaciones de escritura.
COALESCE
Para todos los archivos de datos del tablespace, esta opción combina todas las extensiones libres con otras
contiguas, para formar extensiones más grandes.

3.4 Ejemplos
1. Indicación de que se va a hacer una copia de seguridad de un tablespace
ALTER TABLESPACE tbs01
BEGIN BACKUP;

2. Indicación de que la copia de seguridad ha finalizado


ALTER TABLESPACE tbs01
END BACKUP;

3. Mover y renombrar los ficheros asociados a un tablespace. Hay que hacer varios pasos:
3.1. Poner el tablespace offline
ALTER TABLESPACE tbs01 OFFLINE NORMAL;
3.2. Mediante comandos del sistema operativo: mover el fichero a su nueva ubicación (supongamos desde
'diskb:tbs01.dat' to 'diska:tbs01.dat') y renombrarlo

10/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

3.3. Hacer que Oracle conozca el nuevo nombre del fichero de datos asociado al tablespace (“renombrar” en Oracle)
ALTER TABLESPACE tbs01
RENAME DATAFILE 'diskb:tbs01.dat'
TO 'diska:tbs01.dat';
3.4. Poner el tablespace online
ALTER TABLESPACE tbs01 ONLINE;

4. Añadir un fichero de datos a un tablespace


ALTER TABLESPACE tbs03
ADD DATAFILE 'tbs031.dat'
SIZE 50K
AUTOEXTEND ON
NEXT 10K
MAXSIZE 100K;

5. Cambiar el atributo de LOGGING de un tablespace


ALTER TABLESPACE tbs03 NOLOGGING;
Esta operación no tiene efecto sobre la especificación de logging que tengan indicada de manera particular los
objetos de los esquemas almacenados en este tablespace.

6. Cambiar la asignación de extensiones del tablespace haciendo que se obtengan siempre múltiplos de 128K.
ALTER TABLESPACE tbs03 MINIMUM EXTENT 128K;

4. La sentencia DROP TABLESPACE

4.1 Prerrequisitos
Se debe poseer al menos el privilegio del sistema DROP TABLESPACE. No se puede borrar un tablespace que
contenga segmentos de rollback con información de transacciones activas.

4.2 Sintaxis
drop_tablespace::=

4.3 Parámetros
tablespace
Nombre del tablespace que quiere borrarse. Un tablespace puede borrarse independientemente de que esté
online u offline. Sin embargo, Oracle recomienda ponerlo offline antes, para asegurarnos de que no hay ninguna
transacción realizando operaciones sobre alguno de los objetos del tablespace. Una vez que el tablespace haya sido
borrado, los usuarios que tuviesen asignado este tablespace por defecto no podrán seguir asignando espacio para sus
objetos o para las áreas de ordenación. Es preciso utilizar la sentencia ALTER USER para asignar al usuario un nuevo
tablespace por defecto (o temporal).
Algunas restricciones al borrar un tablespace:
• El tablespace SYSTEM no puede borrarse.
• No se puede borrar un tablespace de deshacer si está siendo usado por alguna transacción.

11/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

INCLUDING CONTENTS
Permite borrar todos los objetos del tablespace. Si se omite y el tablespace no está vacío, Oracle devuelve un
error y no borra el tablespace.
AND DATAFILES
Si se especifican las dos cláusulas anteriores Oracle borra, además de los objetos, los ficheros del sistema
operativo asociados a este tablespace. Esta cláusula no sería necesaria para los ficheros que son gestionados
directamente por Oracle (OMF, ver cláusula DATAFILE de la sentencia TABLESPACE).
CASCADE CONSTRAINTS
Permite borrar todas las restricciones de integridad referencial de tablas que están almacenadas en otros
tablespaces y hacen referencia a tablas del tablespace que se desea borrar. Si se omite la cláusula y existen estas
restricciones de integridad, Oracle devuelve un error y no borra el tablespace.

4.4 Ejemplos
1. Borrar un tablespace, eliminado todos los objetos que contiene y todas las restricciones de claves primarias y
externas de objetos almacenados fuera de este tablespace.
ALTER TABLESPACE tbs01 OFFLINE NORMAL;
COMMIT;
DROP TABLESPACE tbs01
INCLUDING CONTENTS
CASCADE CONSTRAINTS;

2. Borrar un tablespace incluyendo contenidos y ficheros de datos del sistema operativo.


ALTER TABLESPACE tbs02 OFFLINE NORMAL;
COMMIT;
DROP TABLESPACE tbs02
INCLUDING CONTENTS AND DATAFILES;

12/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

5. Ejercicios
En estos ejercicios vamos a crear, modificar y borrar tablespaces, para el usuario SYSTEM, en la base de datos
ABD0.

PASOS PARA REALIZAR LOS EJERCICIOS:


Para realizar los ejercicios debe crear los scripts y ficheros SQL que crea necesario en cada caso en el
directorio D:\ABD\ficheros\. Tenga en cuenta que todas las operaciones debes realizarlas mediante llamadas al
SQLPLUS, usando el usuario SYSTEM y la password MANAGER, y no desde la Consola del Oracle Enterprise
Manager. Los pasos que debe realizar son:
1. Construir los scripts y ficheros SQL necesarios (ejer1.bat, ejer1.sql, ejer2.bat, ejer2.sql,…)
2. Ejecutarlos desde el SO leyendo detenidamente los mensajes de salida (o incluir en los .sql ficheros
de spool para poder comprobar la salida).
3. Consultar el diccionario de datos (vistas DBA_TABLESPACES y/o USER_TABLESPACES)
mediante el SQLPLUS (puede ser el Worksheet), para comprobar los objetos creados y sus
características.
4. Consultar la consola de OEM para comprobar los objetos creados y sus características.

ANTES DE EJECUTAR LOS EJERCICIOS:


• Para evitar posibles errores debe parar la base de datos ORCL, que puede estar activa.
• Arranque la instancia ABD0 y monte y abra la base de datos ABD0. Use el fichero de parámetros
D:\ABD\ABD0\database\init.ora (o D:\ABD\ABD0\ArranqueABD0\init.ora)
Puede usar los scripts de la práctica anterior. Ejecute los scripts desde la línea de comandos del SO o genere
ficheros de spool y lea atentamente los mensajes que te devuelva. Es importante que se asegure de que la parada y
arranque se han realizado correctamente antes de poder ejecutar los ejercicios.

OPERACIONES QUE HAY QUE REALIZAR:


1. Crear el tablespace TS1G0 con las siguientes características:
• Fichero de datos: D:\ABD\ABD0\database\TS1G0_01.dat
• Su tamaño inicial será 100K y deberá extenderse con extensiones de tamaño 20K. Su tamaño máximo
será ilimitado
• Queremos que, por defecto, los cambios que se realicen en sus objetos se almacenen en los ficheros de
redo log
• La gestión de extensiones se realizará con información almacenada en el propio tablespace y la gestión de
segmentos usando mapas de bits.
2. Crear el tablespace TS2G0 con las siguientes características:
• Fichero de datos: D:\ABD\ABD0\database\TS2G0_01.dat
• Todos los parámetros igual que TS1G0, excepto el tamaño de bloque que será de 2K
3. Crear el tablespace TS3G0 con las siguientes características:
• Fichero de datos: D:\ABD\ABD0\database\TS3G0_01.dat
• Su tamaño inicial será 1M y será autoextensible. Su tamaño máximo será 5M
• Queremos que, por defecto, los cambios que se realicen en sus objetos no se almacenen en los ficheros de
redo log
• El almacenamiento por defecto para sus objetos será: inicial=20K, siguiente=20K, % incremento=0
4. Crear el tablespace TS4G0 con las siguientes características:
• Fichero de datos: D:\ABD\ABD0\database\TS4G0_01.dat
• Su tamaño inicial será 2M y será autoextensible
• Queremos que, por defecto, los cambios que se realicen en sus objetos no se almacenen en los ficheros de
redo log
• Será un tablespace permanente

13/14
Curso Oracle Sesión 3
16/11/2006 Gestión de espacios para tablas

• Cuando se cree queremos que quede no disponible para su uso


• El almacenamiento por defecto para sus objetos será: inicial=20K, siguiente=20K, % incremento=0,
mínimo nº de extensiones=2, máximo número de extensiones=10
5. Añadir el fichero d:\ABD\ABD0\TS1G0_02.dbf, de tamaño 100K y autoextensible, al tablespace TS1G0.
6. Modificar la ubicación del fichero añadido en el ejercicio anterior llevándolo al directorio
d:\ABD\ABD0\database y renombrarlo para ponerle extensión .dat (hay que realizar los pasos indicados en el
ejemplo 3 del apartado 3.4)
7. Cambiar el parámetro por defecto en el tablespace TS4G0 para que se almacenen sus cambios en el fichero
redo log y ponerlo disponible para su uso
8. Borre todos los tablespaces creados, incluyendo siempre el borrado de sus ficheros.

14/14

También podría gustarte