Sunteți pe pagina 1din 70

Unidad Didctica 4

Gestin del Espacio Fsico


UNIDAD
DIDCTICA 4 Gestin del espacio fsico

ndice

1. Estructuras de almacenamiento
1.1. Visin general de las estructuras de almacenamiento
2. Tablespaces
2.1. Tablespaces permanentes
2.2. Tablespaces temporales
2.3. Tipos de tablespaces permanentes
2.4. Tablespace UNDO
2.5. Tablespaces por defecto
2.6. Gestin de extensiones
2.7. Disponibilidad de los Tablespaces
2.8. Tablespace de solo lectura
2.9. Obtener informacin de los Tablespaces
2.10. Clculo del tamao de la base de datos en Oracle 10g
3. Bloques, extensiones y segmentos
3.1. Bloques
3.2. Extensiones
3.3. Segmentos
4. Mtodos de acceso a datos
4.1. Indices
4.2. Indices de clave inversa
4.3. Arboles B
4.4. Mapa de bits
4.5. Tablas organizadas como ndices
4.6. Cluster
4.7. Hash cluster
4.8. Particiones
Esquema de contenidos:
Introduccin
Introduccin

Oracle dispone de un sistema de almacenamiento propio que, aunque se


coordina con el SO, se mantiene ajeno a l. Este sistema emplea unidades de
almacenamiento propias, cada una diseada para cumplir una misin concreta.

En esta unidad nos centraremos en los siguientes aspectos bsicos de


Oracle 10g:

Estructuras Lgicas de Almacenamiento

Gestin del Almacenamiento

Mtodos de Acceso a la informacin de la BBDD.

Al finalizar cada leccin se plantearn una serie de ejercicios prcticos que


inciden en los conceptos presentados y refuerzan su aprendizaje, intentar su
resolucin y trabajarlos es primordial para conseguir los objetivos fijados en esta
unidad.
Objetivos

Comprender:

- Estructuras lgicas de almacenamiento utilizadas por Oracle 10g.

- Relaciones existentes entre las diferentes estructuras lgicas.

- Gestin del almacenamiento de la informacin en un SGBD Oracle


10g.

- Herramientas de administracin incluidas en Oracle 10g para la


gestin del espacio en disco.

- Mtodos de acceso a datos que soporta Oracle 10g para optimizar


el acceso a la informacin.
Leccin 1 Estructuras de almacenamiento

ndice

1.1. Visin general de las estructuras de almacenamiento

Introduccin

En esta leccin se introducen las estructuras lgicas de almacenamiento


utilizadas por Oracle10 g. En segundo lugar se describen las relaciones
existentes entre ellas y con las estructuras fsicas a las que se conectan para
almacenar la informacin.

Al finalizar se incluyen una serie de ejercicios de auto evaluacin para


comprobar los conocimientos aprendidos.

Objetivos

Comprender:

- Estructuras lgicas de almacenamiento utilizadas por Oracle 10g.

- Relaciones de las estructuras lgicas y fsicas en Oracle 10g.

- Relaciones existentes entre las diferentes estructuras lgicas.


Apartado 1.1: Visin general de las estructuras de
almacenamiento

1. TABLESPACES
Oracle dispone de un sistema de almacenamiento propio que, aunque se
coordina con el SO, se mantiene ajeno a l. Este sistema emplea unidades de
almacenamiento propias, cada una diseada para cumplir una misin concreta.
Al mantener un catlogo lgico de todos los objetos que componen la base de
datos, Oracle 10g puede conocer, en todo momento de cunto espacio dispone,
dnde se encuentran los objetos y cuanto espacio necesita para realizar el
almacenamiento de los datos. Las estructuras de almacenamiento en Oracle10g
son los bloques, las extensiones, los segmentos y los tablespaces.

Desde el punto de abstraccin de ms alto nivel, Oracle 10g almacena los


objetos de los esquemas lgicamente en espacios de tablas o tablespaces y
fsicamente en ficheros de datos, los cuales tienen que ir asociados al tablespace
correspondiente.

Una BBDD Oracle consiste en 2 o ms tablespaces, y cada uno de ellos en


uno o ms ficheros de datos (estructuras fsicas de almacenamiento. Cada uno
de estos ficheros slo puede estar asociado a un tablespace.

Cuando se crea un objeto, por ejemplo una tabla o un ndice, se puede


especificar en que tablespace se almacenar, en caso de no hacerlo se guardar
en el tablespace por defecto del usuario propietario del objeto.

La distribucin de los objetos en un tablespace asociado a una BBDD


puede observarse en la siguiente figura.
Figura 1. Distribucin de objetos en un tablespace

2. ESQUEMA
Un esquema es un conjunto de objetos de la base de datos que
pertenecen al mismo propietario. Los objetos del esquema son las estructuras
lgicas que se corresponden con los datos de la BBDD. Algunos de los objetos
del esquema son tablas, vistas, secuencias, procedimientos almacenados,
ndices, clusters, etc.

Aunque puede resultar conveniente a efectos de administracin, un


tablespace y un esquema no tienen porque mantener una relacin uno a uno. Es
decir: un usuario puede crear objetos que residan en distintos tablespaces.

Para acceder a los objetos de un esquema se puede anteponer el sufijo


con el nombre del esquema antes del objeto. El nombre del esquema es del
propietario de los objetos que contiene:

nombre_esquema.nombre_objeto, por ejemplo user_aux.tabla1


3. BLOQUES
Desde el punto de vista de almacenamiento de los datos, Oracle 10g
guarda los datos en bloques de datos, tambin llamados bloques lgicos, bloques
Oracle o pginas (ver Figura 2).

Figura 2. Distribucin de estructuras lgicas en Oracle 10g

Los bloques son la unidad mnima de asignacin espacio y consisten en


nmero determinado de bytes contiguos en disco. Una vez asignado un objeto,
un bloque jams contendr filas de otro objeto. El nmero de filas que contiene
bloque depende de las dimensiones de ste y del tamao de las filas que
contiene.
4. EXTENSIN
El siguiente nivel lgico de almacenamiento es la extensin. sta es una
agrupacin de bloques de datos contiguos en disco dedicados a un nico objeto.
Es la unidad de espacio en la que se producen asignaciones de espacio, ya que
se hiciera a nivel de bloque resultara demasiado costoso y producira demasiada
fragmentacin. Cada una de estas extensiones solo puede residir en un fichero
de datos. Por tanto un segmento que se extiende por varios datafiles, debe estar
compuesto por mltiples extensiones, ubicadas en diferentes ficheros.

5. SEGMENTO
En un nivel superior a las extensiones se encuentran los segmentos. Un
segmento es el conjunto lgico de todas las extensiones asignadas a un nico
objeto, aunque no se encuentren contiguas en disco. Cuando un segmento se
satura (se queda sin espacio libre para nuevos datos), Oracle 10g le asigna una
nueva extensin. Por ello, dado que el sistema asigna nuevas extensiones en
funcin de la demanda, stas pueden no encontrarse contiguas en disco. Estos
segmentos estn asociados a un nico tablespace.

Cada tabla se almacena en su propio segmento de datos y cada ndice se


almacena en su propio segmento de ndice, pero si la tabla o ndice se divide en
particiones, cada una de ellas se almacena en su propio segmento.

Finalmente, los segmentos se almacenan en tablespaces. Un tablespace


puede almacenar segmentos cuyas extensiones se encuentren en ms de un
fichero, pero una extensin slo puede contener datos de un fichero de datos.
Gracias a esta propiedad, la base de datos es independiente del medio fsico:
aunque se agote el espacio fsico disponible, se puede agregar ficheros al
tablespace aunque ni siquiera residan en el equipo local.

La relacin de las estructuras lgicas y fsicas en Oracle puede observarse


en la Figura 3.
Figura 3. Relacin entre estructuras lgicas y fsicas en Oracle 10g
Conclusin
En esta leccin, se ha visto de manera global las estructuras lgicas y
fsicas de Oracle 10g. Adems se han descrito las relaciones existentes entre
ellas y la manera en la que conectan.

Leccin 2 Tablespaces

ndice

2.1. Tablespaces permanentes


2.2. Tablespaces temporales
2.3. Tipos de tablespaces permanentes
2.4. Tablespace UNDO
2.5. Tablespaces por defecto
2.6. Gestin de extensiones
2.7. Disponibilidad de los Tablespaces
2.8. Tablespace de solo lectura
2.9. Obtener informacin de los Tablespaces
2.10. Clculo del tamao de la base de datos en Oracle 10g
Introduccin

En esta leccin se da a conocer las estructuras lgicas de ms alto nivel


para el almacenamiento de informacin en Oracle10 g: el espacio de tablas o
tablespace.

Se incluye adems una descripcin de las herramientas disponibles en


Oracle 10 g para la gestin del espacio en disco.

Toda BBDD Oracle 10g se divide en unidades lgicas de almacenamiento,


conocidas como espacios de tablas o tablespaces. Estos tablespaces permiten
agrupar fsicamente esquemas de objetos para simplificar las operaciones de
administracin.

Cada BBDD se divide a nivel lgico en uno o ms tablespaces. Los


ficheros de datos son asociados de forma explicita a cada tablespace para
almacenar los datos de las estructuras lgicas (tablas, ndices, etc) en un
tablespace.

Es conveniente utilizar varios tablespaces, enfocando cada uno a una labor


concreta dentro del SGBD. Las ventajas inherentes ms comunes son las
siguientes:

Se podr separar los datos de los usuarios, de los datos del DD.

Se podr separar fsicamente distintos tipos de objetos, por ejemplo


tablas e ndices.

Se podrn separar los datos de distintas aplicaciones.

Se reduce la contencin de E/S del disco si existen varios


tablespaces que guardan sus datafiles en distintos discos.

Se podr realizar copias de seguridad de tablespaces individuales.

Se podr activar y desactivar de forma independiente ciertas reas


de la BBDD, limitando as el acceso nicamente a ciertas zonas.
Objetivos

- Descripcin y utilizacin de la estructura lgica de ms alto nivel en


Oracle 10g, Tablespace.

- Herramientas de administracin incluidas en Oracle 10g para la


gestin del espacio en disco.

- Calculo del tamao de una BBDD Oracle 10g.

Apartado 2.1: Tablespaces permanentes

Estos tablespaces estn compuestos por ficheros de datos y pueden


contener segmentos de datos y de ndices. Son los tablespaces donde se guarda
la informacin con la que trabaja el SGBD y a la que accede el usuario.

La sentencia bsica de creacin de este tipo de tablespace es:

CREATE TABLESPACE nombre_tablespace


DATAFILE ruta_fichero SIZE tamao_fichero;

Para asignar un tablespace permanente por defecto a un usuario, se puede


indicar en la sentencia de creacin del mismo:

CREATE USER nombre_user IDENTIFIED BY clave_usuario TEMPORARY


TABLESPACE nombre_tablespace.
Apartado 2.2: Tablespaces temporales

Este tipo de tablespace se utiliza como espacio de almacenamiento


predeterminado para los objetos temporales que Oracle 10g construye a medida
que procesa instrucciones SQL. Solo pueden contener segmentos temporales
(ver apartado 4)

Existe una zona de memoria dentro de la instancia de Oracle destinada a la


agrupacin y/o ordenacin de datos. Si la cantidad de memoria asignada es
insuficiente para el procesamiento de ciertas operaciones implcitas o explicitas,
Oracle utiliza este tablespace temporal como rea secundaria de trabajo.

La creacin de espacios temporales se realiza mediante la sentencia


CREATE TABLESPACE y clusula TEMPORARY:

CREATE TEMPORARY TABLESPACE nombre_tablespace


TEMPFILE ruta_fichero SIZE tamao_fichero;

Para especificar el tablespace por defecto de la BBDD se utiliza la clusula


DEFAULT TEMPORARY TABLESPACE de la sentencia CREATE DATABASE.

Si un usuario no va a utilizar el tablespace temporal por defecto de la


BBDD, es necesario indicarlo en la sentencia de creacin del usuario:

CREATE USER nombre_user IDENTIFIED BY clave_usuario

TEMPORARY TABLESPACE nombre_tablespace.


Apartado 2.3
2.3: Tipos de tablespaces
tablespaces permanentes
Una nueva funcionalidad en Oracle 10g es el tipo de tablespace BIGFILE.
Hasta la versin 9 de Oracle todos los tablespaces eran SMALLFILE
invariablemente. Los tablespaces BIGFILE utilizan un nico fichero de datos (o
temporal), en lugar de varios como los antiguos SMALLFILE, que puede tener
hasta 232 bloques de tamao. Por tanto en funcin del tamao de bloque utilizado,
un nico fichero puede ser como mximo de 128 terabytes (TB).

La consecuencia de esto es que Oracle 10g, en conjuncin con el


parmetro DB_FILES, puede escalar hasta BBDD de 8 exabytes (EX) de tamao.
Adems al ser la gestin de estos ficheros dependiente de Oracle, son
completamente transparentes para el usuario las operaciones que se realizan
sobre este tipo de ficheros tan grandes.

Este nuevo tipo de tablespace est orientado para BBDD extremadamente


grandes. Cuando un BBDD de este tipo presenta miles de ficheros de datos de
lectura/escritura, las operaciones a realizar sobre ellos pueden sufrir ciertos
retrasos. Por tanto al reducir el nmero de ficheros de datos sobre los que
trabajar, se mejora el rendimiento al reducir el tiempo de ejecucin de estas
operaciones.

Para crear este tipo de tablespace es necesario incluir la clusula BIGFILE


en la sentencia de creacin del espacio de tablas:

CREATE BIGFILE TABLESPACE tablespace_name

DATAFILE ruta_fichero SIZE tamao_fichero;

Los tipos de tablespace SMALLFILE es la nueva denominacin que da


Oracle 10g a los antiguos tablespaces. En este tipo de espacios, se pueden tener
varios ficheros de datos en un solo tablespace. En funcin del tamao de bloque
utilizado las BBDD que utilicen este tablespace pueden alcanzar como mximo
los 8 petabytes (PB).

Para crear este tipo de tablespace no es necesario incluir ninguna clusula


especial, ya que por defecto Oracle 10g crea estos en espacio de tablas:
Los tipos de tablespace SMALLFILE es la nueva denominacin que da
Oracle 10g a los antiguos tablespaces. En este tipo de espacios, se pueden tener
varios ficheros de datos en un solo tablespace. En funcin del tamao de bloque
utilizado las BBDD que utilicen este tablespace pueden alcanzar como mximo
los 8 petabytes (PB).

Para crear este tipo de tablespace no es necesario incluir ninguna clusula


especial, ya que por defecto Oracle 10g crea estos en espacio de tablas:

CREATE TABLESPACE tablespace_name

DATAFILE ruta_fichero SIZE tamao_fichero;

Los tablespaces SYSTEM y SYSAUX se crean con el tipo SMALLFILE.


Apartado 2.4: Tablespace UNDO
Este ltimo tipo de tablespace mantiene la informacin necesaria para
anular los cambios realizados sobre la BBDD. Esta informacin consiste en
registros de las acciones realizadas por las transacciones, y se conoce como
informacin de undo o deshacer.

Este tipo de tablespace solo puede contener un tipo de segmento, el de


UNDO.

En Oracle se entiende por deshacer (undo), el proceso de restaurar los


datos a un estado previo. A medida que se interacta con el SGBD los datos
contenidos en la BBDD cambian, si se quisiera recuperar alguno a un valor
anterior, por haberse producido un error o fallo, Oracle utilizar la informacin
almacenada aqu para conseguir restaurarlo.

Este tipo de tablespace es utilizado por el SGBD para mltiples propsitos:

Rollback explicito de una transaccin usando la sentencia


ROLLBACK.

Rollback implcito de una transaccin (por ejemplo, para recuperar


una transaccin fallida).

Reconstruir una imagen de los datos consistente en lectura

Recuperacin de corrupciones lgicas.

Aunque la BBDD puede tener definida ms de tablespace UNDO, estos


slo se utilizan por el SGBD cuando se ha activado la gestin automtica de
informacin de anulacin; en cuyo caso solo se puede utilizar un nico tablespace
UNDO.

CREATE UNDO TABLESPACE tablespace_name


DATAFILE ruta_fichero SIZE tamao_fichero;
Apartado 2.5: Tablespaces por defecto
Como parte del proceso de creacin de toda BBDD en Oracle 10g se crean
dos tablespaces por defecto, SYSTEM y SYSAUX.

El tablespace SYSTEM se encarga de almacenar el DD, el cual es utilizado


por el SGBD para su correcto funcionamiento. Este DD se compone de un
conjunto de tablas internas que almacenan informacin sobre la propia BBDD. A
medida que Oracle 10g opera, extrae de forma continuada informacin operativa
de este DD.

Adems del contenido del diccionario, el tablespace SYSTEM contiene el


cdigo fuente y compilado de los programas PL/SQL (procedimientos y funciones
almacenadas, disparadores, etc.), y los objetos de la BBDD (secuencias, vistas,
sinnimos, etc.). Por tanto, este tablespace siempre tiene que existir y estar
activo, mientras que la BBDD est abierta.

El tablespace SYSAUX, es utilizado por varias herramientas y mdulos en


los que se basan las actividades del SGBD para almacenar sus objetos. Este
espacio comparte con el de SYSTEM las siguientes caractersticas:

Son obligatorios cuando se crea un nueva BBDD.

Son de tipo permanente.

No pueden ser eliminado.

Siempre tienen que estar activados (online).

Tienen que tener el estado Lectura/Escritura

Cuando se actualiza una versin de Oracle a la versin 10g se crea el


tablespace SYSAUX para cubrir las nuevas funcionalidades del SGBD.

Como estos dos tablespaces, SYSTEM y SYSAUX, son los nicos que se
encuentran en el SGBD de forma certera, son los tablespaces por defecto. Sin
embargo Oracle recomienda encarecidamente que no sean usados como
tablespaces por defecto de los usuarios o aplicaciones.
Para conseguirlo durante la creacin de una nueva BBDD, se crean ciertos
tablespaces para almacenar datos de las diferentes aplicaciones y usuarios que
van a interactuar con el SGBD.

Es prctica comn en ciertas ocasiones crear varios tablespaces


temporales, as como un tablespace UNDO para mejorar el rendimiento del
SGBD.

Por tanto y como resumen, Oracle 10g utiliza varios espacios de tablas para
separar lgica y fsicamente el almacenamiento de distintos conjuntos de
informacin de la BBDD.
Apartado 2.6: Gestin de extensiones
Como se ha comentado anteriormente los tablespaces se componen de
segmentos que a su vez se desglosan en extensiones. La asignacin de estas
extensiones a un segmento perteneciente a un tablespace puede realizarse
siguiendo dos polticas distintas.

Cuando un segmento ha agotado el espacio del que dispone (todas sus


extensiones estn llenas) es necesario asignarle una nueva extensin para
almacenar la nueva informacin. Por tanto la asignacin de espacio en Oracle 10g
es bajo demanda, cuando un segmento no tiene extensiones libres solicita al
SGBD que le asigne ms espacio a travs de una nueva extensin.

Por otro lado las extensiones asignadas a un segmento tambin pueden ser
liberadas para ser utilizadas por otro tablespace.

Este proceso de asignacin/liberacin de extensiones implica que es


necesario almacenar en alguna zona del SGBD la informacin relativa a un
segmento y sus extensiones.

La forma de gestionar las extensiones de un tablespace puede ser (cuando


el segmento no tiene la suya propia):

Gestin de extensiones mediante el diccionario (nica conocida


antes de Oracle 8i): Modifica una serie de tablas en el DD en cuanto
una extensin es asignada o liberada. Esto implica que el volumen de
transacciones que operan sobre el diccionario puede ser muy elevado,
lo que en algunas ocasiones podra afectar al rendimiento del SGBD.

Para crear un tablespace usando esta poltica es necesario recurrir a la


clusula EXTENT MANAGEMENT DICTIONARY de la sentencia
CREATE TABLESPACE.

Adems se pueden indicar los parmetros de almacenamiento


predeterminados para los segmentos que se almacenan en el
tablespace. Para ello se incluir la clusula DEFAULT STORAGE de la
sentencia CREATE TABLESPACE. Las opciones disponibles son:
o INITIAL: Define las dimensiones de la primera extensin del
segmento.

o NEXT: Define las dimensiones del segundo y posteriores


extensiones del segmento.

o MINEXTENTS: Nmero de extensiones asignadas a un segmento


cuando se crea por primera vez en el tablespace.

o MAXEXTENTS: Determina el nmero mximo de extensiones que


un segmento puede tener. Puede tener como valor UNLIMITED.

o PCINCREASE: Define el porcentaje de incremento a partir de la


segunda (NEXT).

Se calcula mediante: NEXT*(1+(PCTINCREASE/100))

o FREELIST: Lista de bloques de datos en la extensin que permiten


la insercin, es decir que estn libres.

Un ejemplo de tablespace usando este mtodo es el siguiente:

CREATE TABLESPACE tablespace_name

DATAFILE ruta_fichero SIZE tamao_fichero

EXTENT MANAGEMENT DICTIONARY

DEFAULT STORAGE (INITIAL 50K NEXT 50K MINEXTENS 2


MAXTEXTENS 50 PCTINCREASE 0);

Gestin local de extensiones: En este caso se utiliza un mapa de


bits (bitmap) que reside en la cabecera del propio tablespace.

Es el recomendado por Oracle, ya que se reduce la contencin del


DD al reducirse las operaciones a realizar sobre el.

Para utilizar esta poltica se debe recurrir a la clusula EXTENT


MANAGEMENT LOCAL de la sentencia CREATE TABLESPACE.
Dentro de esta opcin aparecen dos alternativas, ya que el sistema
puede reservar el tamao que considere ms adecuado para las
extensiones o bien hacer que todas tengan el mismo.

En la primera alternativa, el mismo sistema es el encargado de


reservar las extensiones del tamao que considere ms oportuno
dependiendo de las necesidades puntuales. Para ello se utiliza la
clusula AUTOALLOCATE:

CREATE TABLESPACE tablespace_name

DATAFILE ruta_fichero SIZE tamao_fichero

EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

La otra opcin permite que todas las extensiones tengan las mismas
dimensiones. Se trata por tanto, de una asignacin uniforme de
extensiones. En este caso se utiliza la clusula UNIFORM, con la
posibilidad de definir el tamao que se quiere utilizar en las extensiones
(parmetro SIZE). Si no se define por defecto el valor es de 1MB.

CREATE TABLESPACE tablespace_name

DATAFILE ruta_fichero SIZE tamao_fichero

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K;

Si durante la creacin del segmento, se ha definido un mtodo de forma


explicita se utilizar este para las nuevas asignaciones/liberaciones. En caso
contrario se recurrir a la poltica de utilizacin de extensiones fijada en el
tablespace donde se aloja dicho segmento.

Un manejo ineficiente de las extensiones disponibles hace que se


produzcan demoras en la creacin y asignacin de las mismas. Oracle
recomienda utilizar la gestin local de extensiones.
Apartado 2.7: Disponibilidad de los tablespaces
Los tablespaces pueden tener los datos a disposicin de las aplicaciones y
de los usuarios, lo que se conoce como estado online o activo. Sin embargo, es
posible que en algunos casos se quiera limitar el acceso a los mismos aunque la
BBDD siga disponible; en este caso el tablespace estara offline o desactivo.

Al desactivar un espacio de tablas los objetos almacenados en el quedan


inaccesibles para los usuarios de la BBDD. Para cambiar su estado se utiliza la
sentencia:

ALTER TABLESPACE nombre_tablespace OFFLINE;

Al desactivar un tablespace, se desactivan (estado offline) todos los


ficheros asociados con el.

Para volver a activar un tablespace se utiliza la sentencia:

ALTER TABLESPACE nombre_tablespace ONLINE;


Apartado 2.8: Tablespace de solo lectura
Es posible cambiar la propiedad de lectura/escritura de un tablespace,
dejndolo con el atributo de solo lectura. Con esto se impiden todas las
operaciones que puedan modificar los contenidos de los ficheros asociados al
tablespace.

Sin embargo para poder realizar este cambio es necesario que se cumplan
una serie de condiciones para el tablespace en cuestin:

El tablespace debe estar online.

El tablespace no debe estar incluido en ninguna copia de seguridad


en caliente.

El tablespace no debe tener ningn segmento de undo activo.

Para impedir la escritura se utiliza la sentencia:

ALTER TABLESPACE tablespace_name READ ONLY;

Para volver a permitir las escrituras, se utiliza la sentencia:

ALTER TABLESPACE tablespace_name READ WRITE;

En un tablespace read only solo se pueden realizar consultas de los datos,


por tanto si en el instante de ejecutar esta sentencia se estn realizando cualquier
tipo de operacin que pueda alterar los datos, el servidor espera hasta que
acaben para poner el tablespace en estado read only.

Para comprobar el estado del tablespace, se puede realizar una consulta


sobre la vista dba_tablespaces, mostrando el tablespace y su estado:

SELECT tablespace_name, status FROM dba_tablespaces;


Apartado 2.9: Obtener informacin de los tablespaces
Oracle 10g incluye una serie de utilidades para obtener informacin
detallada de los diferentes tablespaces asociado a una BBDD. En lugar de tener
que acceder a esta informacin a travs de consultas al DD desde la lnea de
comandos de herramientas como el SQL*Plus o iSQL*Plus, se puede acceder a
mediante herramientas ms interactivas como Oracle Enterprise Manager (EM)
Database Control.

Gracias a esta herramienta se puede monitorizar y gestionar las diferentes


estructuras que componen la BBDD. EM Database Control es una alternativa a
las tradicionales herramientas de lnea de comandos y utiliza las ventajas que
aporta tecnologa web.

Para poder acceder a esta herramienta se tienen que seguir los siguientes
pasos:

1. Abrir un navegador y escribir la URL del Entreprise Manager de la BBDD


que se quiere gestionar.

2. Acceder mediante el usuario y contrasea del usuario correspondiente y


acceder a la pestaa de administracin (ver Figura 4).

3. Para listar los tablespaces asociados a la BBDD, elegir la opcin


tablespaces ubicada debajo de la cabecera Almacenamiento (ver Figura 5).

4. Seleccionar un tablespace del listado de disponibles y pinchar el botn


Editar para poder trabajar con l.
Figura 4. Pestaa de administracin en Oracle EM

Figura 5. Pestaa de tablespaces en Oracle EM


Las opciones ms importantes al alcanzar este punto son: General y
Almacenamiento (ver Figura 6). La primera de ellas muestra las caractersticas
principales del tablespace:

Tipo: Permanente, temporal, etc

Tamao: Bigfile, Smallfile.

Estado: Lectura/escritura, online, offline, etc.

Poltica de gestin de extensiones utilizada: Diccionario de datos, local.

Listado de ficheros asociados al tablespace.

Figura 6. Edicin de tablespace en Oracle EM

La segunda pestaa muestra informacin relativa al almacenamiento del


tablespace (gestin de extensiones, segmentos y tamao de bloque usado) (ver
Figura 7).
Figura 7. Gestin del almacenamiento de un tablespace en Oracle EM

Se puede utilizar las opciones comentadas en Oracle EM Database Control


para manipular y cambiar a travs de mltiples opciones los tablespaces. Adems
esta herramienta cubre prcticamente las mismas funcionalidades que las
ofrecidas por las que utilizan la lnea de comandos.

Por ejemplo para incrementar el tamao de los ficheros de datos de un


tablespace, basta con pinchar el botn Editar de la zona de Archivos de Datos.
Oracle EM Database Control mostrar una ventana para la edicin de las
caractersticas de ese fichero (ver Figura 8).
Figura 8. Edicin de un fichero de datos asociado a un tablespace en Oracle
EM
Apartado 2.10: Clculo de la base de datos en Oracle 10g
Para realizar una estimacin del tamao de la BBDD, es necesario tener
presente que Oracle 10g almacena la informacin de forma organizada, utilizando
estructuras de almacenamiento tanto lgicas como fsicas.

El tamao de la BBDD se calcula a partir de los tablespaces que la forman.


Estos a su vez dependen de las dimensiones de los ficheros de datos asociados a
ellos (ver Figura 9).

Por tanto el tamao final de una BBDD se calcula como la suma de las
dimensiones de los ficheros de datos asociados a los tablespaces que conforman
cada BBDD.

Figura 9. Distribucin de tablespaces y ficheros en Oracle 10g

Este tamao se fija al crear los tablespaces y definir los datafiles con su
dimensin inicial. Si con el paso del tiempo es necesario aumentar la capacidad
de la BBDD, existen tres alternativas:
Aadir un fichero de datos a un tablespace.

ALTER TABLESPACE nombre_tablespace ADD DATAFILE


ruta_fichero SIZE tamao_fichero [opciones];

Esta sentencia no puede ser utilizada si el tablespace es de


tipo BIGFILE, ya que solo se permite que tengan asociado un nico
fichero de datos.

Agregar un nuevo tablespace a la BBDD.

CREATE TABLESPACE nombre_tablespace DATAFILE


ruta_fichero SIZE tamao_fichero [opciones];

Modificar el tamao de los ficheros de datos asociados a algn


tablespace. Para realizar esto existen dos posibilidades, especificar
un nuevo tamao o bien permitir que estos crezcan dinmicamente
para satisfacer las nuevas demandas de espacio.

ALTER DATABASE DATAFILE ruta_fichero RESIZE


tamao_fichero [K|M]

ALTER DATABASE DATAFILE ruta_fichero AUTOEXTEND ON;

Es importante remarcar, que cuando un tablespace crea un fichero de datos


de un tamao concreto, implica para el SO la reserva y por tanto la ocupacin de
ese espacio en disco. Es decir, que aunque inicialmente el tablespace est vaco,
y disponga de espacio disponible para guardar informacin de los objetos de la
BBDD, para el SO ese fichero est lleno y tiene el tamao fijado al crear el
tablespace.
Conclusin
Con el desarrollo de esta leccin, el alumno debe ser capaz de saber crear
y gestionar las unidades lgicas de almacenamiento tablespaces en Oracle
10g.

Leccin 3 Bloques, extensiones y segmentos

ndice

3.1. Bloques
3.2. Extensiones
3.3. Segmentos
Introduccin

En esta leccin se detallan el resto de estructuras lgicas de alto para


almacenamiento de informacin en Oracle10 g: Bloque, Extensin y Segmento.

Por otro lado se describe el proceso de gestin del espacio en disco y


almacenamiento de la informacin en la BBDD.

Al finalizar se incluyen una serie de ejercicios de auto evaluacin para


comprobar los conocimientos aprendidos.

Objetivos

- Descripcin y utilizacin del resto de estructuras lgicas de Oracle


10g: Bloque, Extensin y Segmento.

- Dependencias entre estas unidades lgicas de almacenamiento.

- Gestin del almacenamiento de la informacin de la BBDD.

- Gestin del espacio en disco para el SGBD Oracle 10g.


Apartado 3.1: Bloques

Oracle 10 gestiona el almacenamiento en disco de los ficheros de datos a


travs de las unidades denominadas bloques de datos, las cuales representan las
unidades ms pequeas que usa Oracle para manejar informacin. Su tamao
para cada BBDD se especifica en el parmetro de inicio DB_BLOCK_SIZE y no
puede cambiarse posteriormente.

Oracle 10g delega en el SO la comunicacin con los elementos de


hardware del sistema y, por lo tanto, desde el punto de vista fsico, los datos se
almacenan y trasladan en bloques del mismo. Cada SO tiene su propio tamao de
bloque, pero Oracle 10g lo ignora para sus operaciones y aplica el suyo propio.
Para simplificar las operaciones de E/S, se recomienda que el tamao del bloque
de Oracle sea un mltiplo del tamao de bloque del sistema operativo.

1 FORMATO DE UN BLOQUE
La estructura de un bloque de datos est dividida en diferentes zonas como
se puede observar en la Figura 10.

Figura 10. Estructura de un bloque en Oracle 10g


Cabecera (Comn y variable): La cabecera contiene informacin
general del bloque, como su direccin y el tipo de segmento al que
pertenece (es decir, si se trata de un segmento de datos, de ndice o
de rollback).

Directorio de Tabla: Este componente almacena informacin sobre


la tabla a la que se encuentra asignado este bloque.

Directorio de Filas: Esta seccin contiene los identificadores de


registros pertenecientes al bloque. Un bloque puede estar vaco o
almacenar todos los registros posibles. En ambos casos, este
espacio est ocupado ya que, aunque los registros se destruyan, sus
identificadores siguen apareciendo en el directorio de filas hasta que
son reaprovechados por nuevas inserciones.

Las tres zonas anteriores con conocidas como sobrecabecera o


overhead.

Datos de filas: sta es la zona del bloque en la que se


encuentran fsicamente los datos de la tabla o ndice. Si un
registro es tan voluminoso que no cabe en un bloque, es necesario
dividir el registro y almacenado en varios. Esto se conoce como
"encadenamiento de filas" y afecta al rendimiento, ya que cuando se
consulte el registro ser necesario localizar el bloque principal y,
adems, el bloque asociado que contiene el resto del registro.

Espacio libre: El espacio libre es el espacio restante, apto para la


insercin de nuevos registros o la actualizacin de los que ya estn
en el bloque y necesitan ms espacio. Este espacio libre se gestiona
con el parmetro PCTFREE.
2 ESPACIO LIBRE
El espacio libre se reserva para insertar nuevas filas y para actualizaciones
de filas que requieren espacio adicional. La gestin de los espacio libre puede ser
realizada de forma manual o automtica.

Si se utiliza la opcin de manejo automtico, este se gestiona a travs de


los segmentos de la BBDD, depositando esta informacin en bitmaps. Su uso es
opuesto a la gestin manual a travs de las listas de bloques libres.

En esta segunda opcin, caso el espacio libre para los segmentos de datos
e ndices se gestiona a travs de una lista de bloques libres (denominada como
free lists en la terminologa de ORACLE). Estos bloques son aquellos poseen
espacio mayor o igual al que determina el parmetro PCTFREE.

La utilizacin de la gestin automtica ofrece los siguientes beneficios:

Facilidad de uso.

Se aprovecha el espacio, especialmente para aquellos objetos que


tienen filas que varan mucho de tamao.

Mejores ajustes en tiempo real a las variaciones en acceso


concurrente.

Mejor comportamiento en entornos multi instancia en trminos de


rendimiento y utilizacin del espacio disponible.

3 PCTUSED / PCTFREE
En los tablespaces gestionados de forma manual, al crear o modificar un
objeto de tipo tabla o cluster, existen dos parmetros que permiten controlar el
comportamiento del espacio libre. Estos parmetros son PCTUSED y PCTFREE y
controlan el uso del espacio libre para inserciones y actualizaciones, para todos
los bloques de un determinado segmento asociado al tablespace. Tambin se
puede especificar el parmetro de almacenamiento PCTFREE cuando se crea o
modifica un ndice (que tiene su propio segmento de indices).
El parmetro PCTFREE establece el porcentaje mnimo del bloque que
debe reservarse para permitir la expansin de los datos que ya se encuentran
almacenados en dicho bloque. Esta expansin se produce cuando se modifican
filas o registros almacenados en la tabla, asignado valores a columnas que
previamente contenan nulos, o valores mayores a columnas con tipos de datos
variables.

Figura 11. Uso del parmetro PCTFREE

Si por ejemplo, se asigna el valor 20 al parmetro PCTFREE, el 20% de


cada bloque de este segmento de datos quedar libre y disponible siempre para
las posibles actualizaciones de registros que ya existan en ese bloque. El bloque
permitir inserciones hasta que se encuentre lleno al 80% (sumando el espacio de
datos de filas y el overhead). A partir de ese momento, el bloque queda
inhabilitado para inserciones y nicamente se destinar a la actualizacin (y
borrado) de registros.

El parmetro PCTUSED marca el nivel de ocupacin por debajo del cual


debe encontrarse el bloque para reactivarse. Tras alcanzar el lmite de PCTFREE,
Oracle inhabilita el bloque para inserciones hasta que su ocupacin sea inferior al
porcentaje establecido en PCTUSED. De este modo, el sistema se asegura de
que el bloque slo queda disponible cuando hay espacio suficiente para insertar
un nmero significativo de registros.
Si configuramos el parmetro PCTUSED = 4O al crear la tabla, el bloque de
datos no se considera disponible para nuevas inserciones hasta que el espacio
usado (la suma del espacio para datos de filas y el overhead) decae hasta el 39%
o menos. Un ejemplo de este parmetro lo podemos ver en la siguiente figura:

Figura 12. Uso del parmetro PCTUSED

Mediante el uso combinado de PCTFREE y PCTUSED puede controlarse el


comportamiento del espacio en los bloques de datos de las extensiones de un
segmento.

Para los nuevos bloques, el espacio disponible para inserciones es el


tamao del bloque menos la suma del Overhead y el PCTFREE. Las
actualizaciones de datos existentes pueden usar cualquier espacio disponible en
el bloque. Por lo tanto las actualizaciones tambin pueden reducir el espacio
disponible por debajo del PCTFREE establecido. Un ejemplo de funcionamiento
de estos parmetros puede observarse en la Figura 13.
Figura 13. Uso combinado de PCTFREE y PCTUSED

Por cada segmento de datos o de ndice, Oracle 10g mantiene una o varias
listas libres (free lists). Se trata de listas que bloques de datos, asociados a las
extensiones del segmento, que disponen de ms espacio libre que el
PCTFREE. Estos bloques estn disponibles para nuevas inserciones. Cuando
se intenta insertar nuevos registros en una tabla, Oracle recorre las free lists en
busca de bloques disponibles para nuevas inserciones. Por este motivo se
recomienda crear varias free lists por segmento para reducir la contencin cuando
se produzcan al mismo tiempo varias inserciones.
4 ENCADENAMIENTO Y MIGRACIN
En Oracle 10g existen dos circunstancias en las cuales los datos de una fila
de una tabla pueden ser demasiado grandes para almacenarlos en un nico
bloque.

En el primer caso, encadenamiento, Oracle almacena los datos de la fila en


una cadena de uno o ms bloques de datos reservados para ese segmento Esto
sucede con filas grandes con columnas del tipo LONG o LONG RAW. Las
operaciones que pueden producir este fenmeno son INSERT UPDATE.

La reorganizacin es provocada por un valor demasiado bajo de PCTFREE;


ya que no hay espacio suficiente en los bloques para las futuras inserciones o
modificaciones.

El segundo fenmeno, migracin, se produce si una sentencia UPDATE


incrementa la cantidad de datos en una fila, de modo que la fila no se puede dejar
en ese bloque de datos. Oracle intenta encontrar otro bloque con espacio libre
suficiente para mantener la fila entera. Si el bloque est disponible, Oracle mueve
la fila entera al nuevo bloque y guarda en el bloque original un puntero al nuevo
bloque. El identificador de la fila o ROWID de la fila migrada no cambia. Gracias a
esto los ndices no son modificados, ya que apuntan a la localizacin original de la
fila.

Estos fenmenos, encadenamiento y migracin tienen un efecto negativo


sobre el rendimiento:

Las sentencias INSERT y UPDATE que causan reorganizacin y


encadenamiento se ejecutan ms lentamente, porque realizan un
procesamiento adicional.

Las consultas que utilizan un ndice para seleccionar filas


encadenadas o reorganizadas deben realizar I/Os adicionales.
Apartado 3.2: Extensiones
Una extensin es una unidad lgica de almacenamiento compuesta de una
serie de bloques de datos contiguos. Una o ms extensiones crean a su vez un
segmento. Cuando todo el espacio de un segmento est usado, Oracle asigna
una nueva extensin para el segmento (siempre y cuando sea posible).

Cuando se crea un objeto, por ejemplo una tabla, Oracle le asigna al


segmento de ese objeto una extensin inicial de un nmero determinado de
bloques de datos. Aunque no se hayan insertado datos todava, los bloques de
datos de Oracle que corresponden con la extensin inicial son reservados para
las posibles filas de la tabla.

Si los bloques de datos de esa extensin inicial se llenan y se necesita ms


espacio para almacenar nueva informacin, Oracle asigna automticamente una
extensin adicional para el segmento. Esa nueva extensin debe tener el mismo
tamao o superior que la anterior en el segmento.

1 NMERO DE EXTENSIONES Y TAMAO


El control de la asignacin del espacio libre a travs de las extensiones se
define en la clusula de almacenamiento de cada segmento, sea del tipo que se.

Por ejemplo se puede determinar cuanto espacio se reserva inicialmente o


el nmero de extensiones de un segmento, especificando los parmetros de
almacenamiento de la clusula STORAGE en la sentencia CREATE TABLE o
CREATE INDEX. Si no se especifican, se utiliza la clusula predeterminada del
tablespace al que pertenece el objeto.

Los tablespaces pueden gestionar las extensiones de dos formas: a travs


del diccionario de datos o localmente.

En la primera de ellas, se utilizan los parmetros INITIAL, NEXT y


PCTINCREASE de la clusula STORAGE de la sentencia de creacin del objeto,
tabla o ndice. Siguiendo esta poltica, la primera extensin del segmento tendr el
tamao especificado en el parmetro INITIAL. Si se requiere una segunda, su
tamao lo fija el parmetro NEXT, el resto se calculan en funcin de los
parmetros NEXT y PCTINCREASE. Estos parmetros pueden modificarse
despus de la creacin del objeto correspondiente.

La segunda alternativa, gestin local, se configura con la clusula


UNIFORM O AUTOALLOCATE a la hora de crear el tablespace. Si se utiliza esta
se renuncia a la posibilidad de configurar los parmetros anteriores, INITIAL,
NEXT, etc para el tablespace.

Sin embargo si pueden especificarse a nivel de segmento. En este caso los


parmetros INITIAL, NEXT, PCTINCREASE y MINEXTENTS son usados de
forma conjunta para calcular el tamao inicial del segmento. Despus de esto,
una serie de algoritmos internos determinan el tamao de cada extensin.

Las posibilidades que existen en este tipo de gestin para el tamao de las
extensiones son: que todas tengan un tamao fijo (UNIFORM) o variable
calculado por el SGBD (AUTOALLOCATE).

2 ASIGNACIN / LIBERACIN DE EXTENSIONES


Oracle utiliza diferentes algoritmos para asignar extensiones, dependiendo
del tipo de gestin elegida: local o diccionario de datos.

Con la gestin local, Oracle busca espacio libre para asignar una nueva
extensin. Para ello en primer lugar determina el fichero de datos candidato en el
tablespace, y posteriormente busca el mapa de bits (bitmap) del fichero para
reservar los bloques libres adyacentes necesarios. Si en este fichero no existiera
espacio libre, Oracle buscara en otro de los asignados al tablespace.

De forma general, las extensiones de un segmento no se devuelven al


tablespace hasta que se elimina el objeto del esquema (sentencia DROP).
Cuando las extensiones se liberan, en el modo local Oracle modifica la
cabecera bitmap del fichero, y en modo del diccionario actualiza los datos
correspondientes del DD para reflejar que las extensiones vuelven a ser espacio
libre. Todos los bloques de las extensiones liberadas pasan a estar inaccesibles.
Apartado 3.3: Segmentos
Un segmento es la estructura de ms alto nivel dentro de un tablespace. Se
trata de un conjunto de extensiones que contienen todos los datos asociados a un
objeto especfico dentro del tablespace al que pertenece.

Para cada objeto, por ejemplo una tabla o ndice, Oracle asigna una o ms
extensiones para formar su correspondiente segmento de datos o segmento de
ndice.

Por tanto los segmentos son simplemente objetos de la BBDD que


consumen espacio de almacenamiento.

La liberacin de las extensiones de un segmento suele realizarse cuando


se borra el objeto que almacena los datos en el segmento. En el caso de los
segmentos temporales, se borran al terminar de ejecutar la sentencia SQL que los
requera.

Existen diferentes tipos de segmentos en funcin de los objetos que se van


a almacenar en cada uno.

Segmento de Datos.

Segmentos de ndices.

Segmentos Temporales.

Gestin Manual de Undo (Segmentos de Rollback) / Gestin


Automtica de Undo.

1 SEGMENTOS DE DATOS
Conjunto de extensiones asignadas a una tabla, cluster o particin. Al crear
el objeto correspondiente Oracle 10g crea un segmento de este tipo para
almacenar todos los datos asociados a el. Por tanto en un segmento de este tipo
no pueden aparecer extensiones asignadas a varios objetos.

El mtodo de almacenamiento utilizado depende de la clusula STORAGE


incluida en la sentencia de creacin CREATE TABLE.
En el caso de no incluirse de forma explcita, la gestin de extensiones se
ajusta a la poltica definida en el tablespace donde reside el objeto.

Una vez que asignada una extensin a un segmento, esta se mantiene


asociada hasta que se borra el segmento, es decir al borrar el objeto que
almacena los datos. Por ejemplo si se borran datos de una tabla con el comando
DELETE, esto no influye en el espacio de disco ocupado por ese objeto. Esto es
debido a que Oracle realiza la reserva de espacio a priori, es decir al asignar las
extensiones (bloques de bytes) a una extensin se est reservando cierta
cantidad de sitio en disco. Por tanto para el SO, este espacio de disco aparece
como ocupado aunque en realidad no lo est todava.

El nmero mximo de extensiones que puede tener un segmento puede


estar fijado, por el parmetro MAXEXTENTS de la clusula de almacenamiento, la
cuota disponible por el usuario en el tablespace, o bien, por el espacio libre en el
tablespace (si la clusula AUTOEXTEND no est activada).

2 SEGMENTOS DE NDICES
Cada ndice tiene asignado un conjunto de extensiones que almacena
todos sus datos. La creacin de este tipo de segmento es inherente a la sentencia
CREATE INDEX, en la cual tambin se pueden especificar los parmetros de
gestin de extensiones.

Al igual que en lo segmentos de datos, la liberacin de las extensiones se produce al borrar el segmento al
que estn asignadas. En este caso adems si se borra la tabla o cluster que est indexando, tambin se borrara
el segmento.

3 SEGMENTOS DE ROLLBACK O UNDO


Estos segmentos almacenan la informacin temporal relativa a las
transacciones que se ejecutan en el SGBD. Su uso permite brindar consistencia
de lectura, restaurar mltiples transacciones y recuperar la BBDD despus de un
fallo.

Gracias a esto se consigue que en entornos multiusuario con acceso


concurrente, la informacin aparezca siempre en un estado consistente.
Cada segmento de rollback, mantiene cierta informacin antes de ser
cambiada por una o ms transacciones de la base de datos. Esta informacin es
til para brindar a las dems transacciones consistencia de lectura. Cuando
acceden las transacciones intentan acceder a la informacin almacenada en un
bloque sucio (que ha sido actualizado pero no confirmado), se les remite a la
informacin del segmento de rollback respectivo.

Adems de esto, en los casos que una transaccin aborte por cualquier
motivo, el proceso PMON restaura el valor de los bloques sucios con la
informacin original.

Por ltimo, en el caso de una cada de la base de datos, los segmentos de


rollback son reconstruidos segn la informacin de los ficheros de redo, a
continuacin se inicia el proceso de restauracin de todas las transacciones no
confirmadas.

La cantidad de transacciones asociadas un segmento de rollback puede


limitarse mediante el parmetro de inicializacin:

TRANSACTIONS_PER_ROLLBACK_SEGMENT.

Como el resto de los segmentos, los segmentos de rollback adquieren


nuevas extensiones si las que ya dispone no bastan para almacenar la
informacin que recibe. El contenido de cada transaccin debe almacenarse en
nico segmento de rollback. De este modo la utilizacin y reutilizacin de las
extensiones es un problema acuciante, especialmente en entornos con gran carga
de trabajo.

Las extensiones asociadas a un segmento de rollback, son utilizadas de


forma cclica. De esta forma en la Figura 14, en su parte izquierda se muestra
que cuando el extensin E3 se llena se pasa a la E4. Cuando la E4 se llena, se
verifica si en la extensin E1 puede almacenarse la transaccin en curso y no
tiene otras transacciones activas actuando sobre. En este caso se contina
almacenando la transaccin en la extensin E1 (parte derecha de la figura), en
caso contrario se generara una nueva extensin E5.
Figura 14. Utilizacin cclica de los segmentos de Rollback

Toda BBDD dispone de al menos un segmento de rollback en el tablespace


SYSTEM. Por tanto no es un segmento pblico, por lo que slo es utilizado por el
SGBD y no por los usuarios finales. Si existen varios segmentos de rollback,
Oracle slo utiliza el ubicado en SYSTEM para operaciones del sistema. En
general, se recomienda crear al menos un segmento de rollback adicional.

4 SEGMENTOS TEMPORALES
Este tipo de segmentos son creados por el SGBD cuando el anlisis sobre
una sentencia SQL necesita un espacio de trabajo suplementario al disponible en
la zona SGA. Al terminar ejecucin de la sentencia, sea con xito o error, se
liberan y pueden volver a ser utilizadas.

Algunas de las operaciones que necesitan utilizar los segmentos


temporales son: CREATE INDEX, SELECT DISCTINCT, SELECT[GROUP BY
| ORDER BY | UNION | INTERSECT | MINUS], etc.

Estos segmentos se crean automticamente en el tablespace temporal del


usuario que ejecuta la sentencia. Para la asignacin de un tablespace temporal a
un usuario se recurre a la sentencia TERMPORARY TABLESPACE de las
sentencias de creacin (CREATE USER) o modificacin de usuarios (ALTER
USER)..
Los tablespaces temporales asociados a los usuarios no pueden ser del
tipo permanente.

5 GESTIN DEL UNDO


En Oracle 8i y anteriores, los segmentos de Rollback aseguraban la
consistencia en lectura y la capacidad de gestionar la restauracin de
transacciones. En este casos se considera que la gestin del undo se realiza de
forma manual: gestin manual del undo (Manual Undo Management o MUM).

Para simplificar la gestin de los segmentos de Rollback, a partir de Oracle


9i se introdujo la Gestin Automtica de Undo (Automatic Undo Management o
AUM). En este caso el SGBD, gestiona automticamente la asignacin del
espacio de undo (rollback) entre las diferentes sesiones activas.

En este caso la gestin de los segmentos de undo y el espacio entre las


diferentes sesiones activas recae en el SGBD. En lugar de utilizar los segmentos
de rollback de sus predecesores, recurre a los tablespaces de undo. Por tanto el
espacio se asigna por medio del tablespace undo, evitando la necesidad de tener
que reservar mltiples segmentos de rollback de diferentes tamaos.

Gracias a esto se consigue reducir la complejidad de la gestin de los


segmentos de rollback y permite ejercer mayor control sobre cuanto tiempo est
retenido antes de ser sobrescrito.

En una BBDD que utiliza AUM, todas las transacciones comparten un nico
tablespace undo. Cualquier transaccin en ejecucin puede consumir espacio
libre en ese tablespace. El espacio de undo es dinmicamente transferido, desde
las transacciones confirmadas a las transacciones en ejecucin en caso de
escasez de espacio dentro del tablespace undo
En la nueva poltica diseada, el SGBD cambia automticamente el periodo
para el cual la informacin de undo es retenida, para satisfacer as las
operaciones que requieran informacin de este tipo. Este periodo es conocido en
Oracle 10g como undo retention, e indica la cantidad de tiempo que deber pasar
antes de que la informacin antigua, es decir informacin de undo para
transacciones confirmadas, pueda ser sobrescrita. Este tiempo puede ser
especificado a travs del parmetro UNDO_RETENTION, el cual es dinmico y
puede por tanto ser cambiado en cualquier momento a travs de la sentencia
ALTER SYSTEM.

Esta caracterstica AUM ha sido mejorada en Oracle 10g a travs de la


funcionalidad Automatic Undo Retention Tuning. Esta caracterstica es utilizada
por defecto en el SGBD, y determina automticamente el tiempo ptimo de undo
retention dependiendo del tamao del tablespace de undo.

Oracle 10g se ajusta dinmicamente a los cambios de requisitos de undo,


en funcin de la actividad del sistema, no siendo necesaria la intervencin del
usuario. Esto maximiza el uso del espacio disponible en el tablespace de undo y
permite que las sentencias largas se completen sin encontrar problemas
relacionados con la gestin de los segmentos de rollback.

Oracle recomienda encarecidamente utilizar los tablespaces de undo para


manejar las operaciones de deshacer en lugar de los antiguos segmentos de
rollback/undo. La gestin del espacio en estos segmentos era excesivamente
compleja, y Oracle en la actualidad ha dejado de lado este mtodo de gestin del
undo.

En resumen en el modo manual (MUM) el espacio de undo se gestiona a


travs de segmentos rollback/undo; mientras que el automtico (AUM) se utilizan
los tablespaces de undo. Para utilizar este ltimo, es necesario crear un
tablespace undo para cada instancia y fijar el parmetro UNDO_MANAGEMENT
del fichero init.ora a AUTO.
Conclusin
Al llegar a este punto el alumno habr cumplido los objetivos de la leccin,
y por tanto ser capaz de:

 Utilizar y dimensionar bloques.

 Utilizar y dimensionar extensiones.

 Utilizar y dimensionar segmentos.

Leccin
Leccin 4 Mtodos de acceso a datos

ndice

4.1. Indices
4.2. Indices de clave inversa
4.3. Arboles B
4.4. Mapa de bits
4.5. Tablas organizadas como ndices
4.6. Cluster
4.7. Hash cluster
4.8. Particiones
Introduccin

En esta leccin se describen los mtodos de acceso disponibles en Oracle


10g para mejorar el acceso a la informacin almacenada en la BBDD.

En segundo lugar se describen otros posibles objetos existentes en Oracle


10g para la gestin de los datos de los usuarios: cluster y tablas particionadas,
as como su mbito y ventajas de utilizacin.

Al finalizar se incluyen una serie de ejercicios de auto evaluacin para


comprobar los conocimientos aprendidos.

Objetivos

En esta leccin aprenders:

- Tipos de mtodos de acceso a datos que soporta Oracle 10g para


optimizar el acceso a la informacin.

- mbitos y ventajas de aplicacin de cada mtodo de acceso.

- Descripcin y utilizacin de los clusters y las tablas particionadas en


Oracle 10g.

- mbitos y ventajas de aplicacin de los clusters y tablas


particionadas.
Apartado 4.1: ndices
Los ndices son estructuras opcionales asociadas con las tablas y clusters.
Son estructuras que se almacenan dentro de la BBDD y los usuarios pueden
crearlos, modificarlos y borrarlos a travs de sentencias SQL.

Se pueden crear ndices sobre una o ms columnas de una tabla para


acelerar las sentencias SQL que se ejecuten sobre dicha tabla. Un ndice en
Oracle 10g permite acceder de forma rpida a los datos de una tabla. Son
adems el principal causante de la reduccin de las operaciones de E/S cuando
se usan correctamente.

Sus utilidades ms importantes dentro del SGBD se pueden resumir en:

Mejorar el tiempo de bsqueda en funcin de ciertas condiciones del


tipo WHERE condicin:

Igualdad (una o varias filas)

Intervalo

Prefijo

Reducir el tiempo de las operaciones de combinacin de tablas.

Mejorar las consultas que requieren agrupacin u ordenacin:

ORDER BY, GROUP BY, DISTINCT, etc.

Facilitar la implementacin de restricciones:

Integridad referencial

Unicidad
Se pueden crear varios tipos de ndices para una tabla, siempre y cuando la
combinacin de columnas de cada uno difiera. En el caso de crear ndices sobre
las mismas columnas deberan cambiarse las combinaciones de las columnas
alternando el orden. Por ejemplo:

CREATE INDEX nombre_ndice ON nombre_tabla (col1, col2);

CREATE INDEX nombre_ndice ON nombre_tabla (col2, col1);

Los ndices en Oracle 10g pueden ser nicos (opcin unique) o no nicos
(opcin nonunique), segn exijan o no que las columnas del ndice admitan o no
valores duplicados en distintas filas:

CREATE [UNIQUE] INDEX...

Si la restriccin UNIQUE existe sobre alguna columna de la tabla, el SGBD


crea un ndice nico automticamente. Por tanto, Oracle no recomienda crear
ndices nicos explcitamente. Por ejemplo sobre las claves primarias no es
necesario definir ndices lo que ahorra tiempo al administrador del SGBD.

Es recomendable que los ndices sean nicos y que, al menos, exista uno
por cada clave primaria o ajena de cada tabla, as como por cada columna que
contenga valores de bsqueda usuales.

Oracle 10g soporta mltiples tipos de indexado que permiten una


funcionalidad distinta de cara al rendimiento de la BD: rboles B sobre las tablas,
rboles B sobre los clusters, ndices hash sobre clusters, ndices de clave inversa
e ndices de mapas de bits.

Los ndices son lgica y fsicamente Independientes de los datos de las


tablas asociadas y son mantenidos dinmica y automticamente. Por tanto se
puede crear o borrar un ndice sin ningn efecto lateral sobre los datos de la tabla
u otros ndices.
Sin embargo a la hora de definir los ndices es necesario tener en cuenta el
coste en espacio que esto supone, y que adems es necesario reorganizarlos al
modificarse la informacin a la que apuntan. Por tanto es conveniente no definir
ndices si se sabe de antemano que el SGBD no lo va a utilizar y si la clave es
muy voltil o muy larga.

Cuando se crea un ndice se le asigna un segmento de tipo ndice para


contener sus valores en el tablespace correspondiente. Es preferible que este
tablespace no sea el mismo en el que est contenida la tabla asociada y que
ambos tablespaces estn almacenados en discos diferentes, para que Oracle
pueda leerlos en paralelo.

Al crear un ndice, Oracle ordena las columnas del ndice y almacena el


valor de los ndices junto con el ROWID de las filas. Los ndices pueden crearse
en orden ascendente (ASC), descendente (DESC), comprimidos (COMPRESS) o no
comprimidos (NOCOMPRESS)

En los siguientes apartados se detallan los mtodos de acceso a datos ms


comunes en Oracle 10g.
Apartado 4.2: ndices de clave inversa
A veces, puede ocurrir que las inserciones o modificaciones a un ndice se
concentren en un conjunto pequeo de bloques. Esto puede conllevar una bajada
crtica del rendimiento debido a los continuos bloqueos de los mismos bloques del
ndice.

Para solventar esto, Oracle 10g permite generar ndices inversos, donde
las claves (valores de las columnas) se insertan invirtiendo el orden de sus bytes.

Al revertirse los nodos del ndice, las inserciones se realizan de forma


distribuida a lo largo de todos los nodos hojas.

Por ejemplo, si se insertan filas con la clave 101, 102 y 103 en una tabla
con un ndice regular, las filas se almacenarn probablemente en el mismo nodo
hoja.

En un ndice clave inversa, las claves se convertiran en 101, 201 y 301, y


las filas se insertarn de forma dispersa por el segmento del ndice.

Esta posibilidad es recomendable tan solo para operaciones de acceso a


un nico valor, ya que las recuperaciones por rango de ndice no se beneficiaran
de este ndice, al no estar ahora las entradas ordenadas alfabticamente por el
valor de la columna.

Adems son tiles en situaciones en las que el usuario inserta valores


ascendentes y borra los valores bajos de la tabla.

Para crearlo se aade la clusula REVERSE al final de la instruccin de


creacin:

CREATE [UNIQUE] INDEX nombre_indice

ON nombre_tabla (col1, col2, coln) REVERSE;


Existe la posibilidad de convertir un ndice invertido en uno normal
mediante la sentencia:

ALTER INDEX nombre_indice REBUILD NOREVERSE.

Sin embargo el proceso inverso no puede hacerse, lo que implicara que


sera necesario crearlo de nuevo.
Apartado 4.3: rboles B
Oracle 10g utiliza estructuras basadas en arboles B para almacenar los
ndices y acelerar el acceso a los datos. Es adems el tipo de ndice ms habitual
en Oracle 10g.

Si no existieran estos ndices, el acceso a los datos sera secuencial y se


tendra que recorrer toda la tabla para encontrar el valor buscado. En el mejor de
los casos, si existieran n filas, la media de filas ledas sera de n/2. Es por tanto
evidente que al aumentar el tamao de la BBDD el tiempo de acceso a los datos
tambin subira.

Si los valores a los que se quiere acceder estuvieran ordenados, se podran


dividir en bloques de rangos de valores. Estos seran los nodos hojas del rbol B.
Cada valor final de un rango, se almacena en un bloque junto con un puntero a
otro bloque, construyendo as un rbol de bsqueda en el cual el tiempo medio de
acceso a un dato sera de log(n) para n entradas. Este es el principio bsico de
los ndices de Oracle 10g.

Los nodos superiores de un rbol B apuntan a los nodos del nivel inferior
dentro del rbol. En el nivel ms bajo se encuentran los nodos hojas, estos
contienen cada uno de los valores de la columna indexada y el rowid de la fila
donde se encuentra el resto de datos asociados a ese valor del ndice.

Figura 15. Ejemplos de bsquedas en un ndice del tipo rbol B


Las ventajas de utilizar la estructura de rbol B son:

Todos los nodos hoja estn a la misma profundidad.

La recuperacin de cualquier registro lleva aproximadamente el


mismo tiempo.

Permanecen automticamente balanceados.

Todos los bloques del rbol estn llenos de media en .

Excelente rendimiento para una amplia variedad de consultas, desde


emparejamiento exacto (exact match) a bsquedas por rango de
valores (ver Figura 15).

Inserts, updates, y deletes son eficientes, mantenindose el orden de


clave.

El rendimiento es bueno tanto para tablas grandes y pequeas, y no


se degrada con el aumento del tamao de las mismas.

La sentencia bsica de creacin de este tipo de ndices es la siguiente:

CREATE [UNIQUE] INDEX nombre_indice

ON nombre_tabla (col1, col2, ... coln)

[ATRIBUTOS];
donde:

UNIQUE: indica que la combinacin que la combinacin de valores


en las columnas indexadas debe ser nico.

ATRIBUTOS: NOSORT | SORT, REVERSE, COMPRESS,


NOCOMPRESS, COMPUTE STATISTICS, etc.
Apartado
Apartado 4.4: Mapa de bits
En este tipo de ndice, para cada valor de la clave se utiliza un mapa de bits
en lugar del rowid. Cada bit de este mapa se corresponde con un posible rowid.
Si el bit tiene el valor 1, quiere decir que esa fila con el correspondiente rowid
contiene el valor de la clave, en caso contrario aparecera un 0 (ver Figura 16).
Una funcin de mapeo convierte la posicin del bit en un rowid, por tanto este
ndice proporciona la misma funcionalidad que los ndices regulares basados en
rboles B, pero utilizando una representacin interna distinta.

Figura 16. Ejemplo de ndice mapa de bits sobre una tabla

Si el nmero de valores que difieren en la clave a indexar es pequeo, los


ndices de mapa de bits son muy eficientes desde el punto de vista del ahorro del
espacio. En general las columnas cuyos valores se repiten ms de cien veces,
son buenas candidatas para un ndice de mapas de bits.

Adems si el ndice a crear se corresponde con varias condiciones dentro


de la clusula WHERE, a travs de operadores AND,OR, etc, este tipo de ndice
es muy eficiente. Las filas que satisfacen algunas, pero no todas, de las
condiciones son filtradas antes de acceder a la tabla. Esto mejora el tiempo de
acceso, a veces de forma drstica.
Los ndices de mapa de bits, pueden indexar filas que contengan valores
NULL, al contrario que la mayora de los otros tipos de ndices (basados en
rboles B). La indexacin de valores nulos puede ser til para la ejecucin de
algunas sentencias SQL, como por ejemplo sentencias de agregado del tipo
COUNT.

La sentencia bsica de creacin de este tipo de ndices es la siguiente:

CREATE BITMAP INDEX nombre_indice

ON nombre_tabla (col1, col2, ... coln)

[ATRIBUTOS];

donde:

ATRIBUTOS: NOSORT | SORT, REVERSE, COMPRESS,


NOCOMPRESS, COMPUTE STATISTICS, etc.
Apartado 4.5
4.5: Tablas organizadas como ndices
Es una tabla normal con un ndice en una o ms de sus columnas. En lugar
de mantener dos segmentos separados para la tabla y el ndice rbol B, el SGBD
mantiene un nico ndice del tipo rbol B con el contenido de ambas:

El valor de la clave primaria.

Los valores de la otra columna para la fila correspondiente.

Cada fila del ndice contiene los valores de la clave y del resto de los
atributos no claves:

<valor_clave_primaria, valores_clave_no_primarias>

Su utilizacin suele darte en tablas que se consultan por la clave primaria


con pocas columnas. Gracias a esto los datos son recuperados ms rpidamente
que si hubiesen sido almacenados en tablas normales.

Las ventajas de este tipo de ndices son:

Acceso ms rpido a las filas de las tablas ya que estn en el mismo


bloque.

Acceso secuencial y por rangos por la clave primaria o un sufijo.

Ahorro en espacio: la clave se guarda una sola vez.

Sin embargo es conveniente no utilizar en tablas con filas grandes ya que


entonces su rendimiento se ve afectado.
Apartado 4.6: Cluster
Un cluster es un grupo de una o ms tablas que comparten los mismos
bloques de datos, porque comparten columnas comunes y a menudo se utilizan
juntas en consultas en operaciones del tipo join (ver Figura 17).

En este tipo de tablas la clave slo se almacena una vez, por lo que se
produce un ahorro de espacio dentro de la BBDD.

Es obligatorio construir un ndice de cluster, para las columnas de la clave.


El ndice que se construye se basa en el rbol B de bsqueda. Adems no puede
ejecutarse ninguna sentencia LMD en las tablas del cluster si no existe su ndice
correspondiente. Este ndice ser utilizado para localizar una fila dentro del
mismo, ya que apunta al bloque asociado con cada valor de clave del cluster.

Figura 17. Ejemplo de almacenamiento en tablas normales o cluster


Su utilizacin adems de mejorar la eficiencia del SGBD en tablas con joins
frecuentes, disminuye la E/S de disco y mejora el tiempo de acceso.

No se recomienda su uso cuando:

El valor clave se modifica a menudo.

En tablas que se recorren completas con asiduidad.

Si las filas que se agrupan juntas varan en nmero y/o superan el


tamao de uno o dos bloques.

Por ltimo es necesario resaltar, que las bsquedas de tablas completas


son generalmente ms lentas en tablas cluster que en tablas normales.

Apartado 4.7: Hash cluster


En este cluster en lugar del ndice tradicional, se utiliza una funcin de
dispersin para calcular la ubicacin de una fila. La funcin hash usa una clave de
cluster que puede ser definida por el usuario o generada por el sistema.

Cuando una fila es insertada dentro de una de las tablas en un cluster de


este tipo, las columnas de la clave hash son utilizadas para calcular un valor
tambin hash. Por ltimo la fila es almacenada basndose en ese valor.

Es eficiente para consultas con condiciones de igualdad ya que facilita un


nico acceso, pero presenta la desventaja de ocupar ms espacio.
Apartado 4.8: Particiones
El particionamiento en Oracle 10g permite a los usuarios descomponer, en
cualquier momento, tablas e ndices en trozos ms pequeos y manejables
llamados particiones que son almacenados en segmentos separados.

La nocin de particin permite manejar tablas que almacenan grandes


volmenes de datos de forma ptima, y permiten que un gran nmero de
procesos pueda acceder a las mismas de forma concurrente.

Se recomienda el uso de particiones cuando:

La tabla tiene un tamao superior a 2 GB.

Tablas que mantienen histricos.

Todas las particiones de una tabla o ndice deberan contener las mismas
columnas y definiciones de restricciones, pero cada particin puede tener sus
propios parmetros de almacenamiento y cada particin puede residir en
tablespaces separados.

Oracle 10g soporta diferentes rangos de particionamiento:

Particionamiento por Rango: se hace corresponder datos en


particiones haciendo uso de los rangos de los valores de la clave de
particionamiento.

Particionamiento por Lista: permite especificar explcitamente la


correspondencia entre las filas y las particiones. Se especifica una
lista de valores discretos para la clave de particionamiento. No se
soportan claves de particionamiento formadas por varios atributos.

Particionamiento por Hash: la correspondencia entre las filas y las


particiones se realiza a travs de una funcin de hash. Es una
opcin til cuando:

o Se desconoce la correspondencia en funcin de los rangos.

o El rango de las particiones difiere sustancialmente o es difcil


balancearla manualmente.
Conclusin
En esta leccin se han presentado los principales mtodos de acceso a
datos, detallando las ventajas e inconvenientes de cada uno.
Conclusin General

Al finalizar esta unidad didctica has debido comprender aspectos


fundamentales relativos al almacenamiento de la informacin dentro de un SGBD
Oracle 10g.

Los puntos fundamentales tratados han sido:

Estructuras lgicas de almacenamiento utilizadas por Oracle 10g.

Relaciones existentes entre las diferentes estructuras lgicas.

Gestin del almacenamiento de la informacin en un SGBD Oracle


10g.

Herramientas de administracin incluidas en Oracle 10g para la


gestin del espacio en disco.

Mtodos de acceso a datos que soporta Oracle 10g para optimizar


el acceso a la informacin.
Glosario de trminos

AUM Automatic Undo Management:

BBDD Base de Datos.

DD Diccionario de Datos.

EM Enterprise Manager.

EX ExaBytes.

LMD Lenguaje de Manipulacin de Datos.

MUM Manual Undo Management

PB PetaBytes.

PMON Process Monitor

ROWID Identificador de Fila (Row Identification).

SQL Structured Query Language (Lenguaje de Consulta Estructurado)

SGBD Sistema de Gestin de Base de Datos.

TB TeraBytes.

URL Uniform Resource Locator


Bibliografa

Abramson, I., 2004]. Oracle database 10g : gua de aprendizaje. Captulo


1.

[Arun Kumar R., 2005]. Oracle Database 10g Insider Solutions. Sams
Publishing. Captulo 1.

[Dawes,C. & Bryla, B., 2004] OCA: Oracle 10g Administration I Study
Guide. Sybex. Captulo 1.

[Greenwald, R. & Stackowiak, R., 2004]. Oracle Essentials, 3e: Oracle


Database 10g. Captulo 2, 4 & 11.

[Kreines, D. C., 2003]. Oracle Data Dictionary, Pocket Reference.

[Kyte, T., 2005]. Expert Oracle Database Architecture: 9i and 10g


Programming Techniques and Solutions. Apress. Captulo 2, 3, 4, 5.

[Loney, K., 2004]. Oracle Database 10g: The Complete Reference.


Captulo 1.

[Oracle, 2006]. Oracle Database Administrator's Guide


10g Release 2 (10.2). Parte I & II. (url: http://download-
uk.oracle.com/docs/cd/B19306_01/server.102/b14231/toc.htm)

[Oracle, 2006]. Oracle Database Concepts 10g Release 2 (10.2). (url:


http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14220/toc.htm ).

[Perez, C., 2005]. Oracle 10g: administracin y anlisis de bases de datos.


Captulo 14.

S-ar putea să vă placă și