Está en la página 1de 18

Sistemas Gestores de Bases de Datos

Tema 4: Gestión del Almacenamiento en ORACLE

Raúl Ruiz Padilla

rruizp@gmail.com
Octubre 2011
© Raúl Ruiz Padilla, Octubre de 2011

Algunos derechos reservados.


Este artículo se distribuye bajo la licencia
“Reconocimiento-CompartirIgual 3.0 España" de Creative
Commons, disponible en
http://creativecommons.org/licenses/by-sa/3.0/es/deed.es

Este documento (o uno muy similar)


esta disponible en (o enlazado desde)
http://informatica.gonzalonazareno.org
Índice

1.Creación y uso de índices.


2.Claúsulas de almacenamiento
3.Gestión de espacios de tablas.
4.Gestión de enlaces de bases de datos
5.Gestión de clusters
6.Creación y uso de secuencias
1. Creación y uso de índices. Definición y sintáxis.

Los índices se crean para disminuir el tiempo de respuesta a


una consulta. Pueden afectar brutalmente al rendimiento, para
bien o para mal.
Se definen sobre una columna o conjunto de columnas de una
tabla concreta y, gracias a ellos, la búsqueda pasa de ser
secuencial a dicotómica o binaria. O(n) → O(lg2n).
Los SGBD suelen crear automáticamente un índice para las
columnas que forman la clave primaria o si hay restricción de
unicidad.
La sintaxis más simple para crear un índice es la siguiente:
CREATE INDEX nombreindice
ON nombretabla(listacolumnas)[ASC|DESC]
[TABLESPACE nombre_ts];
1. Creación y uso de índices.Estudio de oportunidad.
Los índices deben crearse durante periodos de poco trabajo de la BD
(es una operación que consume mucho). Es recomendable que el
índice no esté en el mismo disco que la tabla.
Crear un índice es muy sencillo, lo díficil es saber cuando hacerlo.
SI es recomendable crearlo si:
El número de inserciones, modificaciones y borrados es despreciable
frente al número de consultas por esa columna.
La tabla es muy grande.
Hay muchas consultas por una columna que no es clave primaria.
NO es recomendable crearlo si:
Hay muchos valores repetidos o nulos en la columna.
La tabla es muy pequeña.
La tabla tiene muchas inserciones, modificaciones y borrados en
proporción al número de consultas por esa columna.
1. Creación y uso de índices. Vistas del D.D.

Las vistas del diccionario de datos con información sobre los


índices son las siguientes:
DBA_INDEXES
DBA_IND_COLUMNS

Para borrar un índice:


DROP INDEX nombreindice ON nombretabla(listacolumnas);

Hay varios tipos de índices, con distintos comportamientos. Su


estudio sobrepasa los objetivos de este curso.
2. Claúsulas de almacenamiento.
La sintaxis de creación de tablas puede ser algo más compleja de lo
visto hasta ahora:
CREATE TABLE nombretabla
( columnas y restricciones)
STORAGE
( claúsulas de almacenamiento)
TABLESPACE nombre_ts;

Las claúsulas de almacenamiento son:


INITIAL (tamaño extensión inicial) (en K o M)
NEXT (tamaño 2ª extensión)
PCTINCREASE (porcentaje de incremento para la 3ª y siguientes),
MINEXTENTS (extensiones reservadas en principio)
MAXEXTENTS (número total de extensiones como máximo).
3. Gestión de espacios de tablas.
Definición Tablespace. Tablespaces predefinidos.
Un tablespace o espacio de tablas es una unidad lógica de
almacenamiento de datos (una especie de carpeta que contiene
tablas, índices, etc.) que se corresponde con uno o varios
ficheros del sistema operativo (datafiles).
No deben mezclarse datos de distinta naturaleza en el mismo
tablespace.
Al instalar ORACLE se crean varios tablespaces:
SYSTEM: Se guarda el diccionario de datos y otros objetos del
sistema. NO usar para guardar otras cosas.
SYSAUX: Componentes opcionales de ORACLE
USERS: Objetos de los usuarios.
TEMP: Para guardar objetos temporales (sorts, productos
cartesianos, etc...)
UNDOTBS01: Segmento de ROLLBACK.
3. Gestión de espacios de tablas. Creación.
Se recomienda crear un tablespace por cada departamento de la
empresa. Si se desea liberar de carga el tablespace TEMP o
UNDOTBS01 se pueden crear otros tablespaces temporales o de
deshacer y repartir a los usuarios entre ellos.
Una sintaxis sencilla para crear un tablespace es la siguiente:
CREATE [TEMPORARY|UNDO] TABLESPACE nombrets
[DATAFILE|TEMPFILE] ruta_absoluta_fichero [SIZE nº [K|M]][REUSE]
[AUTOEXTEND ON [MAXSIZE n M]]
… (podemos añadir más ficheros separando con comas)...
[LOGGING|NOLOGGING]
[PERMANENT|TEMPORARY]
[DEFAULT STORAGE
(clausulas de almacenamiento)]
[OFFLINE];
3. Gestión de espacios de tablas. Operaciones.

Para ponerlo OFFLINE (útil para restaurar o realizar ciertas


operaciones):
ALTER TABLESPACE nombrets OFFLINE;
Para añadirle otro datafile:
ALTER TABLESPACE nombrets
ADD DATAFILE …
Para cambiar la ruta de un fichero:
ALTER TABLESPACE nombrets
RENAME DATAFILE nombre1 TO nombre2
Para borrarlo:
DROP TABLESPACE nombrets [INCLUDING CONTENTS][AND DATAFILES];
3. Gestión de espacios de tablas.
Bloques de datos, extensiones y segmentos.
En ORACLE, un bloque de datos es la cantidad mínima de
información que se puede recuperar de los dispositivos de
almacenamiento. Su tamaño debe ser múltiplo del bloque de
disco definido en el sistema operativo anfitrión y se define con
DB_BLOCK_SIZE.
Una extensión es un conjunto de bloques de datos contiguos
reservados de una vez.
Un tablespace se divide en segmentos, uno para cada objeto
existente en el tablespace.
El almacenamiento en un tablespace se puede gestionar por
diccionario o localmente (en el propio tablespace). Esta última
fórmula da mejor rendimiento, pero se ignora la claúsula
STORAGE de los objetos del tablespace.
Existen cuatro tipos de segmentos: de tabla, de índice, temporal
y de undo.
3. Gestión de espacios de tablas.
Bloques de datos, extensiones y segmentos.(II)
Un segmento es un conjunto de extensiones, pertenecientes al
mismo tablespace y que guardan los datos correspondientes a un
objeto concreto, sea éste una tabla, un índice o un cluster.
Cuando todas las extensiones de un segmento se llenan, se
reserva una nueva, buscando entre los distintos datafiles del
tablespace alguno con suficientes bloques de datos libres
contiguos.
Las extensiones de un segmento no se liberan salvo que se haga
un DROP del objeto correspondiente a dicho segmento, un
TRUNCATE del objeto o un ALTER TABLE DEALLOCATE UNUSED.
Las extensiones de un segmento no tienen porque ser contiguas,
ni estar en el mismo disco.
3. Gestión de espacios de tablas. Vistas del D.D.

Las vistas más útiles para gestionar el espacio de


almacenamiento son:
DBA_TABLESPACES: Descripción de todos los tablespaces.
DBA_TS_QUOTAS: Cuotas de usuario en cada tablespace
DBA_DATA_FILES: Información de los ficheros de datos.
DBA_FREE_SPACE: Extensiones disponibles en cada tablespace.
DBA_EXTENTS: Extensiones de cada segmento.
DBA_ROLLBACK_SEGS: Segmentos de rollback
DBA_SEGMENTS: Segmentos de cada tablespace.
DBA_TEMP_FILES: Ficheros para los tablespaces temporales.
4. Gestión de enlaces de bases de datos (I)

Es muy fácil acceder desde un cliente a dos bases de


datos distintas, basta con editar el fichero tnsnames.ora y
añadir las entradas necesarias.
Actividad: Conecta desde tu cliente favorito a la BD de un
compañero.
En ocasiones, nos interesará acceder a una BD SIN SALIR
de otra. Es decir, conectar las dos bases de datos para
poder transferir información entre ellas o hacer consultas
que incluyan información de ambas, etc...
Para ello es necesario crear un enlace de bases de datos
en la BD1 que acceda a la BD2 (donde debe existir un
usuario con los permisos oportunos).
4. Gestión de enlaces de bases de datos (II)
La sintaxis para hacer esto es la siguiente:
CREATE DATABASE LINK nombreenlace
CONNECT TO nombreusuarioBD2
IDENTIFIED BY passwordusuarioBD2
USING 'nombreTNSBD2';
nombreTNSBD2 debe aparecer en mi tnsnames.ora,
especificando IP o hostname, puerto y protocolo.
Para acceder a una tabla de BD2 hay que usar la sintaxis:
nombreusuario.nombretabla@nombreenlace
Actividad: Accede desde tu BD a la BD de un compañero y
transfiere datos de una a otra.
Vista del diccionario de datos: DBA_DB_LINKS
5. Gestión de clusters
Un cluster de tablas es un objeto de la base de datos que almacena en
un mismo área del disco varias tablas que contienen una o varias
columnas en común. Se usa mucho en caso de que un join se repita
con mucha frecuencia porque aumenta su velocidad. Para que un
cluster funcione debe tener un índice asociado. Para crear un cluster:
CREATE CLUSTER nombrecluster (columna tipo)
[TABLESPACE nombrets]
[STORAGE (claúsulas de almacenamiento)];

CREATE INDEX nombreidx ON CLUSTER nombrecluster;

Para que una tabla se cree dentro de un cluster:


CREATE TABLE nombretabla
( lista columnas y restricciones)
CLUSTER nombrecluster(columnadelcluster);

Actividad: Piensa los pasos a dar para crear un cluster con dos tablas
que ya contienen datos.
6. Creación y uso de secuencias(I)

En ORACLE no existen los campos autonuméricos como tales, no


obstante, puede crearse un objeto tipo secuencia que va
generando números a medida que se necesiten.

La sintaxis es la siguiente:
CREATE SEQUENCE nombresec
[INCREMENT BY numero]
[START WITH numero]
[MAXVALUE numero]
[MINVALUE numero]
[CYCLE | NOCYCLE]
[ORDER | NOORDER];
6. Creación y uso de secuencias (II)

Las secuencias tienen dos métodos: CURVAL y NEXTVAL


que nos permiten utilizarlas.
Veamos un ejemplo de su uso:
CREATE SEQUENCE secuencia1;
INSERT INTO CLIENTES (codcliente, nombre)
VALUES (secuencia1.NEXTVAL, 'PEPE');
INSERT INTO CLIENTES (codcliente, nombre)
VALUES (secuencia1.NEXTVAL, 'JUAN');
codcliente debe ser tipo NUMBER.
Vista del diccionario de datos: DBA_SEQUENCES

También podría gustarte