3 GESTIÓN DE TABLESPACES 3.1 Introducción. 3.2 Creación de tablespaces. 3.3 Modificación de tablespaces. 3.4 Borrado de tablespaces. 3.5 Índices, secuencias y clusters. 3.6 Enlaces de bases de datos. 3.7 Parámetros de almacenamiento. 3.1 INTRODUCCIÓN Un tablespace es una unidad lógica de almacenamiento de datos representado físicamente por uno o más archivos de datos. Se recomienda crear un tablespace por aplicación o grupos de usuarios. (al instalar SYSTEM, USERS, TEMP, UNDOTBS01) Se pueden ver todos los tablespaces en DBA_DATA_FILES. Los ficheros de los tablespaces que genera el usuario están por defecto situados en C:\oracle\product\10.2.0\oradata\orcl. 3.2 CREACIÓN DE TABLESPACES Para crear un tablespace se usa la orden CREATE TABLESPACE la cual permite asignar uno o más archivos al espacio de tablas y especificar un espacio por omisión para cualquiera de las tablas creadas sin un espacio de tabla explícitamente mencionado en una sentencia CREATE TABLE. Su sintaxis es: CREATE TABLESPACE nb_tablespace DATAFILE nb_archivo [SIZE entero [K M][REUSE]] [AUTOEXTEND {OFF ON claúsulas}], [ nb_archivo [SIZE entero [K M][REUSE] [AUTOEXTEND {OFF ON claúsulas}],...] [DEFAULT STORAGE )] (INITIAL tamaño NEXT tamaño MINEXTENTS tamaño MAXEXTENTS tamaño PCTINCREASE valor [ONLINE OFFLINE]; Donde: DATAFILE: Especifica los archivos de datos que componen el tablespace. REUSE: Reutiliza el archivo si ya existe o lo crea si no existe. Pag: 1 de8
SIZE entero: Especifica el tamaño del tablespace, en KB o MB DEFAULT STORAGE: Define el almacenamiento por omisión para todos los objetos que se creen en ese espacio de tabla. Fija la cantidad de espacio si no se especifica en la sentencia CREATE TABLE. INITIAL: Extensión inicial. Tamaño en bytes de la primera extensión del objeto. NEXT: Extensión siguiente. Tamaño de la siguiente extensión que va a asignar al objeto. Por defecto, es el tamaño de un bloque de datos (el tamaño del bloque de datos se especifica en el parámetro de inicio de Oracle: db_block_size y debe ser múltiplo del tamaño del bloque del sistema operativo del servidor) MINEXTENTS: Reserva extensiones adicionales más allá de la extensión inicial que se da a la tabla por omisión. Este parámetro permite asignar una gran cantidad de espacio cuando se crea un objeto, incluso si el espacio disponible no esta contiguo. El valor por omisión es 1, que significa que Oracle solo asigna la extensión inicial. Si el valor es mayor que 1, Oracle calcula el tamaño de las extensiones subsiguientes basándose en los valores de los parámetros INITIAL, NEXT Y PCTINCREASE. MAXEXTENTS: Número total de extensiones incluida la primera que Oracle puede asignar al objeto. El valor depende del tamaño del bloque de datos. PCTINCREASE: Es un factor de crecimiento para las extensiones. Por defecto es 50, lo que significa que cada extensión subsiguiente será un 50% más grande que la extensión anterior. El valor de la siguiente extensión es: NEXT = NEXT + (PCTINCREASE * NEXT) / 100 ONLINE: El tablespace está disponible después de crearlo. Activa tablespaces. Es el valor por defecto OFFLINE: Desactiva el tablespace e impide el acceso al mismo. AUTOEXTEND cláusulas: Activa o desactiva el crecimiento automático de los archivos de datos del tablespace. Cuando un tablespace se llena podemos usar esta opción para que el tamaño del archivo o archivos de datos asociados crezca automáticamente. AUTOEXTEND OFF desactiva el crecimiento automático. El formato AUTOEXTEND ON es: AUTOEXTEND ON NEXT entero {K M} MAXSIZE {UNLIMITED entero {K M}} NEXT entero: Es el incremento de espacio en disco expresado en Kilobytes o en Megabytes que se reservara automáticamente para el archivo. MAXSIZE: es el máximo espacio en disco reservado para la extensión automática del archivo. Pag: 2 de8
UNLIMITED: Significa que no hay limite del espacio en el disco reservado. Los tablespaces se miran escribiendo la siguiente select: SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME, BYTES FROM DBA_DATA_FILES; (Es necesario que el usuario SYS dé privilegios sobre esta vista para poder consultarla) Ejemplo creación Tablespace: CREATE TABLESPACE trabajo DATAFILE TRABAJ1.ORA SIZE 10 M, TRABAJ2.ORA SIZE 5 M DEFAULT STORAGE (INITIAL 10 NEXT 10 PCTINCREASE 25); En este ejemplo se crea un tablespace Trabajo que está formado por 2 ficheros, y con valor inicial, siguiente y porcentaje de incremento. 3.3 MODIFICACIÓN DE TABLESPACES Dónde: ALTER TABLESPACE nb_tablespace {ADD DATAFILE nb_archivo [SIZE entero [K M]] [REUSE] [AUTOEXTEND ON **... OFF] [, nb_archivo [SIZE entero [K M] [REUSE] [AUTOEXTEND ON **... OFF]... ] RENAME DATAFILE nb_archivo [, nb_archivo2 ]... TO nb_nuevo_archivo [, nb_nuevo_archivo2 ] [DEFAULT STORAGE clausulas_de_almacenamiento] [ON LINE OFF LINE]}; ADD DATAFILE: Añade al tablespace uno o varios ficheros. AUTOEXTEND: Hace que se active o desactive el crecimiento de los ficheros. Por defecto está en ON. RENAME DATAFILE: Cambia el nombre de un archivo existente en el tablespace. Este cambio ha de hacerse previamente en el sistema operativo y después ejecutar la orden SQL. El tablespaces debe estar desactivado (offline) mientras se produce el cambio. DEFAULT STORAGE: especifica los nuevos parámetros de almacenamiento para todos los objetos que se creen a partir de ahora en este tablespaces. ** PUNTOS SUSPENSIVOS (...): En este lugar pueden ir colocadas las siguientes cláusulas (como vimos anteriormente): Pag: 3 de8
- NEXT: Entero que incrementa el espacio en disco, en Mb. - MAXSIZE: Es el máximo espacio en disco reservado para la extensión automática del tablespace. - UNLIMITED: No existe límite reservado. Ejemplo: Desactivar el tablespace Trabajo ALTER TABLESPACE Trabajo OFF LINE; Ejemplo: Añadir un fichero de 6 Mb al tablespace Trabajo ALTER TABLESPACE Trabajo ADD DATAFILE Trabajo3.ora SIZE 6 M; 3.4 BORRAR TABLESPACES El borrado de Tablespaces de hace mediante la orden DROP Sintaxis: DROP TABLESPACE nb_tablespace [INCLUDING CONTENTS [AND DATAFILES] [CACADE CONSTRAINTS]]; Donde: INCLUDING CONTENTS: Permite borrar un tablespaces que tenga datos. Sin esta opción solo puede borrarse uno vacío. AND DATAFILES: Borra todos los archivos de datos asociados. CACADE CONSTRAINTS: Borra las relaciones de integridad referencial que afecten a las tablas del tablespaces suprimido. Conviene poner el tablespace a offline antes de borrarlo para asegurarnos de que no haya sentencias SQL que estén accediendo a sus datos, en cuyo caso seria imposible borrarlo. 3.5 ÍNDICES, SECUENCIAS Y CLUSTERS. SECUENCIAS: Se usan para generar números únicos y de manera automática. Una secuencia es un objeto que se puede compartir. Se usa típicamente para crear valores en una primary key. La misma secuencia puede utilizarse para varias tablas. Mejora la eficiencia en cuanto a la rapidez de acceso de los objetos que están en memoria. Para crear una secuencia se debe tener el permiso de creación de secuencias (CREATE SEQUENCE) y para usarlas se debe ser su propietario (el privilegio CREATE ANY SEQUENCE permite crear secuencias en cualquier esquema). Pag: 4 de8
Su sintaxis es la siguiente: Donde: CREATE SEQUENCE nb_secuencia [INCREMENT BY n] [START WITH n] [{MAXVALUE n NOMAXVALUE}] [{MINVALUE n NOMINVALUE}] [{CYCLE NOCYCLE}] [{ORDER NOORDER}] [{CACHE n NOCACHE]; INCREMENT BY: Especifica el intervalo entre los números de secuencia donde n es un nº entero. n por defecto es 1. Puede ser negativo y produce un decremento de la secuencia. START WITH n: Especifica el primer nº de la secuencia, por defecto, 1. MAXVALUE n: Especifica el valor máximo que la secuencia puede generar. NOMAXVALUE especifica el valor máximo de 1027 para secuencia ascendente, y 1 para secuencias descendentes MINVALUE n: Especifica el valor mínimo de la secuencia, NOMINVALUE especifica un valor mínimo 1 para ascendentes y 1026 para descendentes. CYCLE: Reanuda la secuencia cuando llega al máximo o al mínimo valor. NOCYCLE: Es la opción predeterminada por defecto. No la reanuda. CACHE: Especifica el número de valores que serán preasignados y mantenidos por el servidor para garantizar un acceso mas rápido. Como mínimo 2. ORDER NO ORDER: garantiza que los números de secuencia se generan en el orden requerido. NO ORDER no lo garantiza, es la opción por defecto. Las secuencias creadas pueden ser vistas en USER_SEQUENCES Ejemplo: Crear la secuencia Dept_Deptno con el fin de ser utilizada en la columna Deptno de la tabla Dept. La secuencia comenzará por 91 no permitiéndose ni caché ni ciclos: CREATE SEQUENCE DEPT_DEPTNO INCREMENT BY 1 START WITH 90 MAXVALUE 100; Pag: 5 de8
LAS PSEUDOCOLUMNAS NEXVAL Y CURRVAL NEXTVAL : Se usa para obtener eficientemente el próximo número de secuencia. Se ha de utilizar con el nombre de la secuencia. Siempre que se refiere la secuencia a nextval se generará un número nuevo de secuencia, con lo que hay que tener cuidado al usarlo. Se mira así: SELECT DEPT_DEPTNO.NEXTVAL Aunque tiene el inconveniente de que al mirarlo la secuencia se ejecuta y suma un incremento al último valor: entonces al seguir insertando claves con la secuencia el resultado sería erróneo. CURRVAL: se usa para hacer referencia al número de secuencia generado recientemente. O sea, que si queremos consultar el número por el que va la secuencia debemos usar currval. Se mira así: SELECT DEPT_DEPTNO.CURRVAL FROM DUAL; Ejemplo: Insertar en dept el deptartamento márketing, de la ciudad de San Diego Insert Into Dept values (Dept_Deptno.Nextval, Marketing, San Diego ); MODIFICACIÓN DE UNA SECUENCIA ALTER SEQUENCE nb_secuencia [INCREMENT BY n] [START WITH n] [{MAXVALUE n NOMAXVALUE}] [{MINVALUE n NOMINVALUE}] [{CYCLE NOCYCLE}] [{ORDER NOORDER}] [{CACHE n NOCACHE]; La sintaxis es idéntica a la de la creación, cambiando el create por el alter. Todas las funciones tienen la misma sintaxis y sirven para lo mismo. Al modificar una secuencia se verán afectados los valores futuros. Si se quiere recomenzar la secuencia por un número diferente debe ser eliminada y creada de nuevo. BORRAR UNA SECUENCIA Se borra mediante la orden DROP: Sintaxis: Pag: 6 de8
ÍNDICES DROP SEQUENCE nb_secuencia; El índice es un objeto de la BD cuya misión es acelerar la recuperación de filas. Suelen ser usados y mantenidos automáticamente por el servidor. Pueden ser creados de dos formas: manual y automáticamente. - Automáticamente: Cuando se establece una primary key, o unique key - Manualmente: Cuando el usuario de la BD así lo desea para acceder más rápido a las filas. Sintaxis : CREATE INDEX nb_index ON nombretabla (column1[asc DESC] [,column2...] ); Ejemplo: crear un índice para la columna ename de la tabla emp: CREATE INDEX ID_EMP ON EMP (ENAME); Los índices no suelen aparecer en el catálogo, hay que hacer un select específico para verlos: SELECT IC.INDEX_NAME, IC.COLUMN_NAME, IC.COLUMN_POSITION, IX.UNIQUENESS FROM USER_INDEXES IX, USER_IND_COLUMNS IC WHERE IC.INDEX_NAME= IX.INDEX_NAME; ELIMINAR UN ÍNDICE Se utiliza la orden DROP CLUSTERS DROP INDEX nb_indice; Se utilizan para almacenar una sola vez en la misma área del disco columnas que son idénticas en distintas tablas. Los clusters se pueden crear: - Cuando se crea la tabla: CREATE TABLE nb_tabla (columna1 tipo..., CLUSTER nb_cluster(columna[,columna2...])); - De forma Independiente: CREATE CLUSTER nb_cluster (columna tipo_dato [,columna tipo_dato]); Pag: 7 de8
BORRAR UN CLUSTER Se hace mediante la orden DROP DROP CLUSTER nb_cluster [INCLUDING TABLES [CASCADE constraints]]; 3.6 ENLACES DE BASES DE DATOS. Es un objeto que permite acceder a objetos de una base de datos remota. Define el enlace entre una base de datos local y un nombre de usuario en una base de datos remota. Se usa para realizar consultas en tablas de la BD remota. El formato es: CREATE [PUBLIC] DATABASE LINK nombredelenlace CONNECT TO usuario IDENTIFIED BY clave USING cadenadeconexion ; En el acceso a tablas remotas es necesario añadir al nombre de la tabla el nombre del enlace de esta manera: nombretabla@nombredelenlace. 3.7 PARÁMETROS DE ALMACENAMIENTO. Hasta ahora al crear una tabla no hemos definido parámetros e almacenamiento, lo hemos dejado por defecto, según la especificación del tablespaces que contiene a la tabla (DEFAULT STORAGE). Podemos hacerlo de la siguiente forma. CREATE TABLE nombre tabla ( Igual que siempre ) STORAGE ( INITIAL tamaño NEXT tamaño MINEXTENTS tamaño MAXEXTENTS tamaño PCTINCREASE valor ) [TABLESPACE nombretablespace]; Consultar el manual de referencia de Oracle para ver el resto de cláusulas. Pag: 8 de8