Sunteți pe pagina 1din 11

Manual del estudiante de Ingeniera en Sistemas de UTN

Bases de datos avanzadas


Arquitectura de la base de datos Oracle
Manual del estudiante de Ingeniera en Sistemas de UTN/Bases de datos avanzadas/Arquitectura
de la base de datos Oracle
Contenido
[ocultar]
1 Instancia Oracle
o 1.1 Los procesos de usuario y los procesos Oracle
o 1.2 Estructura lgica de la DB
1.2.1 Tablespaces
1.2.2 Data blocks
1.2.3 Extents
1.2.4 Segments
1.2.5 Schemas Objects
1.2.6 Consideraciones
o 1.3 Estructura fsica de la DB
1.3.1 Datafiles
1.3.2 Redo Log files
1.3.3 Control files
o 1.4 Bloques de datos, Extensiones y Segmentos
1.4.1 Formato del bloque de datos
1.4.1.1 El overhead
1.4.1.2 Datos de fila
1.4.1.3 Espacio libre
1.4.2 PCTFREE, PCTUSED y Encadenamiento de filas
1.4.3 Asignacin y liberacin de espacio
1.4.3.1 Asignacin de extents
1.4.3.1.1 Algoritmo de asignacin de segmentos
1.4.3.2 Liberacin de los extents
1.4.3.2.1 Tablas Nonclustered
1.4.3.2.2 Tablas Clustered
1.4.3.2.3 Indices
1.4.3.2.4 Segmentos Rollback
1.4.3.2.5 Segmentos temporarios
1.4.4 Segmentos
1.4.4.1 Segmentos de datos
1.4.4.2 Segmentos de ndices
1.4.4.3 Segmentos temporarios
1.4.4.4 Segmentos de rollback
1.4.4.5 Contenido de los segmentos de rollback
1.4.4.6 Transacciones y segmentos rollback
Instancia Oracle[editar]
Cada vez que se arranca una base de datos se asigna en la memoria un rea Global del Sistema
(SGA), que emplean los usuarios para compartir informacin de la base, y algunos procesos
background de Oracle son inicializados. Estos procesos, junto con la memoria buffer, constituyen
la Instancia Oracle.
Los procesos de usuario y los procesos Oracle[editar]
Un proceso de usuario ejecuta el cdigo de un programa de aplicacin o una herramienta Oracle,
y se comunica con los procesos del servidor.
Los procesos del servidor son creados por Oracle para capturar los requerimientos de los procesos
de usuario.
Los procesos background realizan las operaciones de I/O y monitorean a los otros procesos; lo
realizan asincrnicamente para proveer mayor paralelismo y mejorar la performance.
Database Writer (DBWR)
Escribe los bloques modificados desde el DB buffer a los datafiles.
Log Writer (LGWR)
Escribe las entradas del redo log generadas en el redo log buffer al disco.
Checkpoint (CKPT)
Da una seal al DBWR de los checkpoints y actualiza todos los datafiles y control files para indicar
el ms reciente checkpoint.
System Monitor (SMON)
Realiza la recuperacin de la instancia cuando se realiza el startup. Limpia los segmentos
temporales y recupera transacciones muertas durante alguna falla. Agrupa extents libres que
tienen PCTINCREASE=1.
Process Monitor (PMON)
Realiza la recuperacin de los procesos cuando un proceso de usuario falla; limpia el cach y
libera recursos que el proceso usaba.
Archiver (ARCH)
Copia el redo log file online a un almacenamiento de archivo cuando est lleno.
Recoverer (RECO)
Resuelve transacciones distribuidas que quedaron pendientes durante una falla en una DB
distribuida.
Dispatcher (Dnnn)
Se presentan cuando es usada una configuracin de server multithread.
Lock (LCKn)
Es usado para el bloqueo inter-instancia en el Oracle Parallel Server.
Estructura lgica de la DB[editar]
Tablespaces[editar]
La DB est dividida en una o ms unidades lgicas de almacenamiento llamadas tablespaces, que a
su vez pueden estar constituidos por uno o ms archivos del S.O., llamados datafiles. Representan
un nivel medio entre la DB y los datafiles. Por su parte, undatafile puede ser asociado con slo una
tablespace y una base de datos.
Data blocks[editar]
Un bloque de datos del Oracle Server es la menor unidad de almacenamiento usada por la base de
datos.
Extents[editar]
Un extent es un conjunto de bloques de datos contiguos.
Segments[editar]
Un conjunto de uno o ms extents que contiene todos los datos para una estructura especfica en
un tablespace.
El segmento de datos es una coleccin de extents que mantiene todos los datos para
una tabla o cluster.
El segmento de ndices mantiene todos los datos para un ndice.
El segmento de rollback mantiene datos para rollback, consistencia de lecturas o
recuperacin
El segmento temporario es una coleccin de extents que mantiene datos pertenecientes
a objetos temporales (consultas largas que necesitan guardar resultados intermedios).
Schemas Objects[editar]
Es la estructura lgica que refiere directamente a los datos de la DB.
Consideraciones[editar]
Especificaciones a nivel de segmento solapan las del tablespace (no MIN. EXTENT).
Un tamao de extensin mnima se aplica a todas las asignadas al tablespace.
Por omisin se emplean las especificaciones del tablespace.
Cuando no se tienen especificaciones para el tablespace se emplean las del Servidor
ORACLE.
La modificacin de parmetros de almacenamiento se aplican a extensiones futuras.
Existen parmetros que se especifican a nivel de segmento no de tablespace.
Estructura fsica de la DB[editar]
Datafiles[editar]
Contienen todos los datos de la base de datos, como las tablas e ndices.
Redo Log files[editar]
Mantienen registros de todos los cambios hechos a la base de datos, con fines de recuperacin.
Control files[editar]
Almacenan la estructura fsica y el estado de la base de datos.
Bloques de datos, Extensiones y Segmentos[editar]
Estas son las unidades de asignacin de espacio para una Base de Datos. Un Bloque de Datos se
corresponde con un nmero especfico de bytes relacionado con el espacio de datos fsico en el
disco.
Oracle requiere los datos en mltiplos del Bloque de Datos de Oracle. Cuando se crea la Base de
Datos Oracle se debe setear la medida del Bloque de Datos (parmetro db_block_size),
procurando que sea un mltiplo de la medida del bloque del sistema operativo, dentro de un
lmite mximo para evitar I/O innecesarios.
La extensin (extent) que es un nmero especfico de Bloques de Datos contiguos asignados para
almacenar un tipo especfico de informacin.
Un segmento es un conjunto de extensiones que se han asignado a un tipo especfico de
estructura de datos. Por ejemplo cada tabla de datos es almacenada en su propio segmento de
datos, mientras que cada ndice de datos es almacenado en su propiosegmento de ndice.
Cuando una extensin existente en un segmento esta llena, Oracle asigna otra extensin para ese
segmento.

Debido a que las extensiones son asignadas en la medida que son
necesarias, las extensiones de los segmentos pueden o no ser
contiguas en el disco.
Un segmento y todas sus extensiones son almacenados en un Tablespace, dentro del cual un
segmento puede extenderse sobre los archivos de datos (tener extensiones con datos en ms de
un archivo). Cada extensin puede contener datos de un archivo solamente.
Formato del bloque de datos[editar]
El bloque est dividido en el overhead, los datos de fila, y el espacio libre entre ellos dos.
El overhead[editar]
El overhead est constituido por:
Cabecera (Header)
contiene informacin general del bloque tales como la direccin del bloque y el tipo de segmento
(datos, ndices o rollback).
Directorio de tablas (Table Directory)
contiene informacin acerca de aquellas tablas que tienen filas en este bloque.
Directorio de filas (Row Directory)
contiene informacin sobre las filas actuales en el bloque, incluyendo direcciones para cada
pedazo de fila en el rea de datos.
Datos de fila[editar]
Contiene los datos de tablas o ndices.
Espacio libre[editar]
Es asignado para insertar filas nuevas y actualizar aquellas que requieren espacio adicional. El
espacio libre debe albergar tambin los datos de la transaccin (transaction entry), que se
requiere en un bloque por cada INSERT, UPDATE, DELETE y SELECT...FOR UPDATE que acceden a
una o ms filas en el bloque.
PCTFREE, PCTUSED y Encadenamiento de filas[editar]
PCTFREE Y PCTUSED permiten controlar el espacio libre para inserciones y eliminaciones de filas
en los bloques de un segmento.
Estos parmetros se especifican cuando se crea o altera una tabla o cluster; para el caso de los
ndices se puede especificar PCTFREE.
PCTFREE
Indica el porcentaje mnimo de un bloque de datos que se debe reservar como espacio libre.
PCTUSED
Indica cuando un bloque puede volver a emplearse para insertar nuevos datos de filas.
Un bloque est disponible para insercin mientras tenga libre el porcentaje que indica PCTFREE.
Cuando ste es menor, se marcar como no disponible para inserciones, hasta que el porcentaje
de uso caiga debajo del parmetro PCTUSED.
En dos casos, los datos de una tabla pueden ser demasiado largos para encajar en un bloque de
datos:
La fila es demasiado larga cuando se inserta por primera vez, en cuyo caso Oracle
almacena los datos para la fila en una cadena de bloques de datos (una o ms) reservadas
para ese segmento.
Una fila que originalmente encaja se actualiza de modo tal que la longitud global se
incrementa y el espacio libre del bloque se encuentra lleno; en este caso Oracle mueve la
fila entera a un bloque de datos nuevo.
Asignacin y liberacin de espacio[editar]
Cuando el espacio existente en un segmento es usado completamente, Oracle asigna un nuevo
extent para el segmento.
Asignacin de extents[editar]
Cuando se crea una tabla, Oracle asigna al segmento de datos de la tabla un extent inicial
compuesto por un nmero especfico de bloques de datos.
Si los bloques de datos de un extent inicial del segmento se llenan, Oracle automticamente
asigna un extent incremental para ese segmento, que es un extent subsecuente del mismo
tamao de un tamao mayor que el extent asignado previamente en ese segmento. Para
propsitos de mantenimiento el bloque cabecera de cada segmento contiene un directorio de los
extents de ese segmento.
Algoritmo de asignacin de segmentos[editar]
Oracle busca en el espacio libre (del tablespace que contiene los segmentos) hasta el
encontrar el primer conjunto de bloques de datos contiguos, libre, de igual o mayor
tamao que el extent incremental:
Coincidencia exacta: se busca un conjunto que coincidan con el tamao del extent
nuevo ms un bloque adicional para reducir la fragmentacin interna.
Espacio contiguo mayor: si encuentra un grupo mayor en al menos 5 bloques que
el necesitado, divide el grupo de bloques en extents separados uno de los cuales
es del tamao que se requiere.
Reasignacin de espacio: si Oracle no encuentra un bloque de datos contiguo igual
o mayor, reordena los bloques libres de su correspondiente tablespace para
formar conjuntos de bloques de datos contiguos mayores. Luego aplica los pasos
anteriores.
Autoextensin: Si un extent no puede ser asignado despus de una segunda
bsqueda, Oracle trata de redimensionar los archivos por autoextensin. Si no
puede hacerlo retorna un error.
Una vez que Oracle encuentra y asigna el espacio libre necesario en el tablespace, asigna
una porcin del espacio libre que corresponde al tamao del extent incremental. Si hay
remanente, queda como espacio libre.
Oracle actualiza la cabecera del segmento y el diccionario de datos para mostrar que un
extent nuevo ha sido asignado y que el espacio asignado no est ms libre.
Liberacin de los extents[editar]
En general, los extents de un segmento no retornan al tablespace mientras no se eliminan los
objetos cuyos datos estn almacenados en el segmento (por medio de un DROP TABLE o DROP
CLUSTER).
Excepciones a esto:
Se puede truncar la tabla o cluster con la sentencia TRUNCATE...DROP STORAGE.
Peridicamente, Oracle puede desasignar uno o ms extents de un segmento de rollback
si tienen la opcin OPTIMAL especificada.
Un DBA puede desasignar extents no utilizados usando la instruccin SQL ALTER TABLE
nombre_tabla DEALLOCATE UNUSED.
Tablas Nonclustered[editar]
En tanto existan las tablas nonclustered o hasta que se las trunca, cualquier bloque de datos
asignado a su segmento de datos permanece asignado a la tabla. Despus de eliminarse una tabla
nonclustered, este espacio puede ser reclamado cuando otros extents requieran espacio libre.
Tablas Clustered[editar]
Almacenan su informacin en los segmento de datos creados para el cluster. Si se elimina una
tabla en un cluster, el segmento de datos permanece para las otras tablas en el cluster y ningn
extent se desasigna.
Indices[editar]
Todos los extents asignados en un segmento ndice permanecen asignados en tanto y en cuanto
exista el ndice.
Segmentos Rollback[editar]
Oracle peridicamente chequea para ver si los segmentos de rollback de una base de datos han
crecido ms que su tamao ptimo. Si un segmento rollback es mayor que su ptimo, Oracle
automticamente desasigna uno o ms extents de su segmento de rollback.
Segmentos temporarios[editar]
Cuando se completa la ejecucin de una sentencia que requiere un segmento temporario, Oracle
automticamente lo elimina.
Segmentos[editar]
Un segmento es un conjunto de extents que contienen todos los datos para una estructura de
almacenamiento lgico especfica.
Segmentos de datos[editar]
Cada tabla o particin nonclustered y cada cluster en una base de datos Oracle tiene un segmento
de datos simple para mantener todos sus datos.

Los parmetros de almacenamiento determinan como sus extents
de segmentos de datos son asignados. Estos parmetros afectan la
eficiencia de la recuperacin de datos y almacenamiento para el
segmento de datos asociado con el objeto.
Segmentos de ndices[editar]
Sirven para mantener los datos de los ndices. Se pueden especificar los parmetros de
almacenamiento para los extents del segmento de ndices y el tablespace en el que se crea el
segmento ndice.
Segmentos temporarios[editar]
Constituyen un rea de trabajo para las actividades de ordenamiento. Si dicha operacin puede
ser realizada en memoria este segmento no se crea. Las consultas que pueden requerir de
segmentos temporarios son:
CREATE INDEX
SELECT ... ORDER BY
SELECT DISTINCT
SELECT ... GROUP BY
SELECT...UNION
SELECT...INTERSECT
SELECT...MINUS
Joins indexados o con subconsultas
Segmentos de rollback[editar]
Un segmento de rollback registra los valores viejos de los datos que fueron cambiados por cada
transaccin (cometida o no).
Contenido de los segmentos de rollback[editar]
Consiste de varias entradas de rollback, que incluyen informacin del bloque y los datos como
existan antes de la operacin en una transaccin.

Slo Oracle puede acceder a los segmentos de Rollback, ni los
usuarios ni el DBA pueden acceder a ellos.
Las entradas de rollback cambian los bloques de datos en los segmento de rollback y Oracle
registra todos los cambios de los bloques de datos, incluyendo las entradas de rollback en los redo
log (que son por lo menos dos).
Si hay una falla en el sistema, Oracle automticamente recupera la informacin del segmento,
incluyendo las entradas de rollback para transacciones interactivas.
Una vez que se completa la recuperacin, Oracle realiza los rollback de las transacciones que ni
fueron completadas ni vueltas a atrs en el momento de la falla.

Para cada segmento rollback, Oracle mantiene una tabla de
transacciones:
Una lista de todas las transacciones que usan el segmento
de rollback.
Las entradas de rollback por cada cambio realizado por
estas transacciones.
Los segmentos de rollback registran los valores de los datos antes de los cambios para cada
transaccin, luego vincula cada nuevo cambio al cambio previo. Si se deben recuperar una
transaccin, Oracle aplica los cambios en cadena a los bloques de datos en el orden que
restablezcan los datos a sus valores previos.
Transacciones y segmentos rollback[editar]
Cada vez que una transaccin de usuario comienza, se le asigna un segmento de rollback en una
de las siguientes dos maneras:
Oracle puede asignar una transaccin automticamente al prximo segmento de rollback
disponible. La asignacin de la transaccin ocurre cuando se edita la primera sentencia
DML o DDL en la transaccin. Nunca se asignan transacciones de solo lectura a un
segmento rollback.
Una aplicacin puede asignar una transaccin a un segmento de rollback especfico. Al
comienzo de una transaccin, un desarrollador o usuario de aplicaciones puede especificar
un segmento rollback particular que Oracle debera usar cuando se ejecute la transaccin.
Cuando una transaccin se completa (commit), Oracle libera la informacin de rollback pero no la
destruye inmediatamente. La informacin permanece en el segmento de rollback para crear vistas
consistentes de lectura de los datos pertinentes para las queries que comenzaron antes que la
transaccin se completara exitosamente.
Oracle escribe los extents en los segmentos de rollback secuencialmente. Cuando el ltimo extent
del segmento rollback se llena, Oracle contina escribiendo datos de rollback sobreescribiendo el
primer extent en el segmento.
Una transaccin que se ejecute en un perodo de tiempo largo puede requerir un nuevo extent
para asignar un segmento de rollback.
Oracle siempre trata de reusar los extents ya asignados a una transaccin.
Si el prximo extent contiene datos de transacciones que estn activas todava entonces debe
asignar un extent nuevo. Esto se hace hasta que el nmero de extents para un segmento alcanza
el parmetro de almacenamiento MAXEXTENTS.

PCTINCREASE le indica a Oracle cuanto ha de crecer cada extent luego que fueren usados
los extents INITIAL y NEXT.
INITRANS, MAXTRANS especifica el nmero de entradas inicial y mximo que las
transacciones tendrn en el bloque. Estn relacionados con la concurrencia que se permite
en el bloque.

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