Tema 4 - Instancias de BBDD Oracle (Curso 2011)
Tema 4 - Instancias de BBDD Oracle (Curso 2011)
Tema 4 - Instancias de BBDD Oracle (Curso 2011)
TEMA 4
ARQUITECTURA
INSTANCIAS DE UNA
BBDD
1
Curso de Administración de Base de Datos (ORACLE) 2011
Una base de datos puede tener corriendo al mismo tiempo varias instancias, cada vez que se
arranca una base datos se arranca automáticamente una instancia.
2
Curso de Administración de Base de Datos (ORACLE) 2011
Para la asignación de Memoria de una manera óptima, se recomienda la siguiente pauta para
los distintos componentes:
Componente % Memoria
SGA de Oracle 50
Sistema Operativo 15
Memoria de Usuario 35
Componente Mb. de
Memoria
SGA de Oracle 1024
Sistema Operativo 306
Memoria de Usuario 694
1.1 SGA
Es un área de memoria compartida que se utiliza para la información de control y de datos de
la instancia. Se crea cuando la instancia se levanta y se elimina cuando se deja de usar
(shutdown).
La SGA es compartida por todos los procesos, tanto los de Servidor (Server Process) como los
de Background (Background process). Los daots incluidos en la SGA son por ejemplo los
bloques de datos cacheados o las áreas de SQL compartidas.
Consta de los siguientes elementos, cada uno de ellos con un tamaño fijo:
El buffer de redo log: Guarda los cambios efectuados en la base de datos. Estos
buffers escriben en el archivo físico de redo log tan rápido como se pueda sin
perder eficiencia. Este último archivo se utiliza para recuperar la base de datos
ante eventuales fallas del sistema.
El área shared pool: Esta sola área almacena estructuras de memoria compartida,
tales como las áreas de código SQL compartido e información interna del
diccionario. Una cantidad insuficiente de espacio asignado a esta área podría
redundar en problemas de rendimiento. En resumen, contiene las áreas del caché
de biblioteca y del caché del diccionario de datos.
3
Curso de Administración de Base de Datos (ORACLE) 2011
LRU esl el algoritmo para manejar el contenido del Shared Pool y del Database
Buffer Cache.
Cada componente del SGA (Buffer Cache, Shared Pool, etc) trabajan bajo
granulas, donde una granula equivale a:
o 4 mb, si el SGA_MAX_SIZE < 128.
o 16 mb, si el SGA_MAX_SIZE >= 128.
Mínimo el SGA necesita 12 MB, es decir una granula para el Buffer Cache, 1
granula para el Shared Pool y una granula para el Fixed Cache.
4
Curso de Administración de Base de Datos (ORACLE) 2011
5
Curso de Administración de Base de Datos (ORACLE) 2011
Diccionario de Datos
Ejemplo
Buffer Cache
Se utiliza para indicar diferentes tamaños de la cache para diferentes
tamaños de bloque utilizados.
Si se utiliza un tamaño pequeño de la buffer cache se origina una gran
cantidad de Entrada / Salida, mientras que si se determina un tamaño
grande aparte de necesitar una gran cantidad de memoria se puede originar
una gran cantidad de paginación y de swaping.
El valor por defecto se incluye en el parámetro DB_CACHE_SIZE y se
puede definir un parámetro para cada tamaño de bloque
(DB_2K_CAHCE_SIZE, DB_4K_CAHCE_SIZE,
DB_6K_CAHCE_SIZE…..) No se permite colocar el valor del cache para
el bloque por defecto, este estará en el genérico DB_CACHE_SIZE.
6
Curso de Administración de Base de Datos (ORACLE) 2011
Se pueden utilizar diferentes buffer cache con diferentes pool que hacen
que se fijen los datos en diferentes buffers o que se reutilicen los buffer tan
pronto como se hayan usado los bloques de datos.
o KEEP buffer pool retiene los objetos de un esquema en un bloque
de datos de la memoria.
o RECYCLE buffer pool elimina los bloques de datos tan poronto
como dejan de ser utilizados.
o DEFAULT buffer pool contiene los objetos de un esquema que no
han sido asignados a ningún otro específicamente.
1.2 PGA
Es un área de memoria que contiene datos e información de control para los procesos de
Servidor. Estas regiones de la PGA no son compartidas y so creadas cada vez que se
arranca un proceso de servidor y liberada cada vez que ese proceso es finalizado.
Existe una PGA para cada proceso de servidor o para cada proceso de Background y
cada uno de esos procesos será asignado a su porción de memoria.
7
Curso de Administración de Base de Datos (ORACLE) 2011
Cuando se utiliza esta modalidad Oracle automatiza su usa para todas las áreas de
trabajo de los procesos de SQL y todos los parámetros *_AREA_SIZE son
ignorados.
Diccionario de Datos
8
Curso de Administración de Base de Datos (ORACLE) 2011
o no activas
V$sql_workarea_active Muestra la información de las áreas de sql utilizadas que
estén activas.
V$process Algunos campos de esta vista nos informan de la memoria
asignada a los diferentes procesos.
SORT_AREA_SIZE
HASH_AREA_SIZE
BITMAP_MERGE_AREA_SIZE
CREATE_BITMAP_AREA_SIZE
Los procesos de Background son los encargados de realizar asíncronamente todas las
operaciones de Entrada / Salida y monitorizar otros procesos de la base de datos para
incrementar el paralelismo para una mayor eficiencia de la propia instancia.
Los principales procesos que se ejecutan en una instancia son los siguientes:
9
Curso de Administración de Base de Datos (ORACLE) 2011
Job Queue (J): Ejecuta jobs de la base de datos que han sido shedule.
Job Queue Monitor (CJQ): Asigna jobs a la cola de jobs.
MMNL (Memory Monitor Light): Recolecta estadísticas para AWR.
MMAN (Memory Manager): Es activado en el Database Control y esto permite
que el ADDM ajuste database buffer cache según los estadísticas. El MMAN a
cada componente del SGA lo dimensiona.
Recovery Writer (RVWR): Escribe recovery information cuando se habilita el
flash recovery.
10
Curso de Administración de Base de Datos (ORACLE) 2011
Diccionario de Datos
Para ilustrar el funcionamiento del servidor Oracle vamos a ver el ciclo de ejecución de
una sentencia de lectura y otra de actualización.
Ciclo de Lectura
1. El proceso cliente pasa la sentencia SQL (SELECT) al proceso servidor por medio
de la SGA.
2. Los procesos del servidor buscan en la zona de SQL compartido una versión
ejecutable de la sentencia. Si la encuentran no tienen que procesarla.
3. Se procesa la sentencia SQL y su versión ejecutable se coloca en la zona de SQL
compartido.
4. El proceso del servidor intenta leer los bloques de datos de la SGA. Si no están,
se han de leer del fichero de datos. Si los bloques están en la SGA pero han sido
modificados por otro usuario y esa modificación no ha sido validada aún, el
proceso de servidor debe reconstruir la imagen de la fila a partir de los
segmentos de rollback, para conseguir consistencia en lectura.
5. El proceso servidor pasa los datos solicitados al proceso cliente.
Ciclo de Actualización
1. El proceso cliente pasa la sentencia SQL (UPDATE) al proceso servidor por medio
de la SGA.
2. Los procesos del servidor buscan en la zona de SQL compartido una versión
ejecutable de la sentencia. Si la encuentran no tienen que procesarla.
3. Se procesa la sentencia SQL y su versión ejecutable se coloca en la zona de SQL
compartido.
4. El proceso del servidor intenta leer los bloques de datos de la SGA. Si no están,
se han de leer del fichero de datos.
5. Se registra el valor antiguo de los datos en un segmento de rollback y se crea un
registro redo log.
6. Se crea una copia de la transacción en un registro redo log.
11
Curso de Administración de Base de Datos (ORACLE) 2011
7. Se ejecuta la sentencia SQL modificando los datos, y se crea un registro redo log
que así lo refleja.
8. El proceso usuario valida la transacción (COMMIT), registrándose en un registro
redo log.
9. El LGWR escribe los buffers del redo log en el disco.
10. El servidor indica al cliente que la operación ha sido completada de manera
satisfactoria.
11. Se registra la terminación de la transacción en un registro redo log.
12. Se libera la información del rollback, pues ya no va a necesitarse.
Si sucede algo que impida que la transacción validada por el usuario pueda llevarse a
cabo, se puede utilizar la información contenida en los registros redo log para rehacer la
transacción (a partir del paso 6).
Como ocurre con todas las transacciones, en algún momento el DBWR escribe en el
archivo de datos la copia de los bloques de datos modificados que se encuentran en el
buffer cache.
Spfile$ORACLE_SID.ora
Spfile.ora
Init$ORACLE_SID.ora
Los pasos para arrancar una instancia en SQL*Plus son los siguientes:
OPEN
Cuando se ejecuta el comando startup open la BD pasa por tres estados (nomount,
mount y open) antes de estar disponible. El DBA puede arrancar la BD hasta uno de los
estados con el comando startup: startup nomount, startup mount. A continuaciÓn
12
Curso de Administración de Base de Datos (ORACLE) 2011
vamos a describir cada uno de los estados por los que pasa la BD en el proceso de
arranque.
NOMOUNT
Oracle lee el fichero init.ora, localiza los ficheros de control, crea e inicializa la SGA, y
finalmente arranca todos los procesos Oracle. En este estado la instancia de BD está
arrancada. Se deberá llevar la BD al estado nomount cuando se está creando la BD o
cuando se está restaurando un fichero de control después de haberlo perdido.
STARTUP NOMOUNT
MOUNT
Oracle abre los ficheros de control para localizar los ficheros de datos y los redo log,
pero no se realizan ninguna comprobaci�n en ellos en este momento. La instancia
monta la BD y la bloquea, verificando que ninguna otra instancia ha montado la misma
BD.
Hay varias razones para querer tener la BD en el estado mount. En general, todas las
sentencias SQL del tipo alter database se deben ejecutar en esta etapa. Algunas de las
operaciones a realizar cuando la BD está montada son:
efectuar recuperaciones,
poner online/offline un fichero de datos,
recolocar los ficheros de datos y redo log,
Crear un nuevo grupo o miembro redo log, o borrar un grupo o miembro redo
log existente.
STARTUP MOUNT
OPEN
Durante esta etapa, la instancia abre la BD, bloquea los ficheros de datos, y abre todos
los ficheros redo log. Si la instancia abre la BD después de una terminación anormal, o
después de una caída, se ejecutar�automáticamente el proceso de recuperación
utilizando los ficheros redo log. Al final de esta etapa la BD está dispuesta para su uso
normal.
STARTUP OPEN / STARTUP
Se puede realizar un paso desde MOUNT a OPEN, mediante una instrucción de ALTER
DATABASE
13
Curso de Administración de Base de Datos (ORACLE) 2011
Una Base de Datos abierta se puede modificar también para colocarla en modo
READ ONLY o en modo READ WRITE, mediante un comando ALTER
DATABASE.
RESTRICT
Se puede iniciar una base de datos en un modo restrictivo, que estará disponible tan
solo para el personal de administración.
Los motivos por lo que se inica la base de datos en este modo son:
o Realizar Export o Import de los datos
o Cargas realizadas mediante SQL* Loader
o Deshabilitar el acceso a los datos de forma preventiva a los usuarios
o Realizar operaciones de migración o actualización.
Los usuarios con el role de CREATE_SESSION pueden acceder a una base de datos
abierta pero para acceder a una abierta en modo restrictivo además hay que tener el
role RESTRICTED_SESSION.
STARTUP RESTRICT
FORCE
Se puede forzar a una Base de Datos a arrancar, después de una parada inesperada o
forzada o si simplemente la base de datos no se cierra normalmente.
Este modo primero realiza un shutdown abort para después realizar un forzado de la
inicialización.
STARTUP FORCE
NORMAL
Se impide el acceso a la BD, espera a que todos los usuarios completen todas sus
peticiones y se desconecten del servidor. Purga todos los buffers de datos y caches de
redo log, actualizando los ficheros de datos y de redo log, se eliminan los bloqueos de
ficheros, se completan las transacciones en marcha, se actualizan las cabeceras de
ficheros, elimina los threads, libera los bloqueos de la BD por parte de la instancia, y
14
Curso de Administración de Base de Datos (ORACLE) 2011
SHUTDOWN NORMAL
INMEDIATE
En ciertas ocasiones puede ser necesario parar la BD de modo inmediato. Si es as�, las
sentencias en proceso son terminadas inmediatamente, cualquier transacción no
confirmada (uncommitted) es vuelta atrás (rolled back) y la BD es parada. La �nica
desventaja de utilizar esta opción es que Oracle no espera a que los usuarios se
desconecten. Sin embargo, la BD será consistente y no se necesitará recuperación en el
siguiente arranque.
SHUTDOWN INMEDIATE
ABORT
SHUTDOWN ABORT
1.6 Sesiones
Una Sesión es una conexión por parte de un usuario a la base de datos.
El inicio de una sesión implica el inicio de unos procesos que a su vez reservan la memoria
pertinente dentro de la Base de Datos.
Oracle administra automáticamente las sesiones y cuando dejan de estar conectados elimina
todos los procesos y libera toda la memoria que utilizaba. Sin embargo en algunas ocasiones es
necesario finalizar sesiones que se quedan colgadas en la Base de Datos y que están
bloqueando datos que no pueden ser accedidos por otros usuarios.
Para realizar este proceso de terminar una sesión se han de realizar los siguientes pasos:
15
Curso de Administración de Base de Datos (ORACLE) 2011
Cuando una sesión es finalizada todas las transacciones activas se hace rollback y todos los
recursos utilizados son devueltos al sistema para se reutilizados.
Una sesión se considera Activa si se encuentra en una transacción SQL con una llamada a la
Base de Datos, mientras que está Inactiva si no tiene ninguna transacción pendiente.
Si una transacción Activa se finaliza, se realiza el rollback de todas las transacciones asociadas y
al usuario se le envía un mensaje
Si la sesión es inactiva el usuario no recibe ningún mensaje hasta que intenta reutilizar la
sesión que ha sido finalizada.
Cuando una sesión inactiva es finalizada aparece con un estado KILLED, en la vista V$SESSION,
este registro desaparece una vez que el usuario ha intentado volver a utilizar la sesión que se
ha finalizado.
Ejemplo
SELECT SID,SERIAL#,STATUS,SERVER
FROM V$SESSION
WHERE USERNAME = 'JWARD';
16
Curso de Administración de Base de Datos (ORACLE) 2011
Diccionario de Datos
17