FUNCIONAMIENTO DE ORACLE SISTEMA GESTOR DE ORACLE............................................................................2 Funcionamiento General....................................................................................................................................2 Estructura de Física de la Base de Datos, ficheros..........................................................................................6 Estructura de Lógica de la Base de Datos. Tablespaces, segmentos y objetos..............................................14 Estructura de Memoria...................................................................................................................................25 Estructura de Procesos...................................................................................................................................29 Usuarios, Seguridad de Acceso.....................................................................................................................35 La Estructura de Datos Ejemplo.....................................................................................................................40 Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 1 FUNCIONAMIENTO DE ORACLE SISTEMA GESTOR DE ORACLE En éste capítulo se verá, a modo de ejemplo, el funcionamiento del Sistema Gestor de Base de Datos de ORACLE, uno de los SGBDR más utilizados en el mundo de las grandes empresas. Si el lector quiere introducirse en los por menores de éste, es necesaria la consulta con el manual apropiado que ORACLE proporciona a tal efecto. Nosotros presentaremos dicho funcionamiento a grandes rasgos para que este pueda concebir el sistema genérico utilizado por un SGBD. Funcionamiento General El sistema gestor de Base de Datos de ORACLE puede ser configurado para dar el servicio de manera más eficiente según sea la configuración que éste tome. La figura 1 ilustra el funcionamiento general del SGBD de ORACLE. Una Base de Datos ORACLE es una colección de datos tratados todos ellos como una unidad. Una Base de Datos que está formada por diversos tipos de ficheros dentro de un sistema operativo. Físicamente, trataremos la Base de Datos como un conjunto de ficheros de base de datos y ficheros de traza. Lógicamente, la veremos como un conjunto de diccionarios, tablas de usuarios y ficheros de traza conteniendo datos de recuperación de errores. Adicionalmente, una Base de datos requiere uno o más ficheros de control. Ellos contienen aquella información que identifica y describe el resto de la Base de Datos. El funcionamiento del SGBD pasa por la definición de una instancia ORACLE [fig.2]. Una instancia consiste, básicamente en: - Una área de memoria (llamada Area Global del Sistema, SGA) que permita una comunicación entre los procesos, - Al menos cinco procesos en background (SMON, PMON, DBWR, LGWR y ARCH) utilizados por los usuarios de ORACLE. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 2 FUNCIONAMIENTO DE ORACLE AREA GLOBA L DEL SIST EMA (SGA ) Búffer Redo Areas PGA Búffer Base de contexto Procesos USUARIO_ 1 Segm ento de Datos Segm ento de Rollback BASE DE DATOS DBW R PMON SMON LGW R ARCH Fichero de Traza Activo FICHEROS DE TRAZA ON-LINE FICHEROS DE TRAZA OFF-LINE Figura 1. Funcionamiento General del SGBDR ORACLE. Cada una de las instancias necesita del acceso al código ejecutable que ORACLE proporciona, aunque éste código puede ser compartido por cada una de las instancias. Una Base de Datos puede ser accedida por múltiples instancias simultáneamente, por ello podemos decir que ORACLE es un sistema compartido. La figura 3 muestra como se produce el acceso de dos instancias a la Base de Datos. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 3 FUNCIONAMIENTO DE ORACLE AREA GLOBAL DEL SISTEMA (SGA) CODIGO EJECUTABLE ORACLE SMON PMON DBWR FICHEROS CONTROL LGWR USU_1 USU_2 USU_3 USU_N ARCH FICHEROS TRAZA Buffers Ficheros FICHEROS DE BASE DE DATOS Buffers Ficheros B.D. Estructuras de memoria Estructuras de Procesos Estructuras de la Base de Datos Estructura de Usuarios Figura 2. Relación de las Estructuras de ORACLE. Veremos el funcionamiento de ORACLE a partir de cada uno de los componentes que lo componen, es decir, la estructura física de fichero y la lógica de tablas, la estructura de procesos y la estructura de memoria. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 4 FUNCIONAMIENTO DE ORACLE INSTANCIA A S M O N P M O N D B W R INSTANCIA B L G W R A R C H S M O N SGA FICHEROS DE BASE DE DATOS P M O N D B W R L G W R A R C H SGA FICHEROS TRAZA FICHEROS DE CONTROL Figura 3. Acceso de dos instancias a la B.D. ORACLE. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 5 FUNCIONAMIENTO DE ORACLE Estructura de Física de la Base de Datos, ficheros. En éste capítulo veremos los ficheros necesarios para ejecutar el producto ORACLE. Estos están agrupados en diferentes tipos según el uso interno y la utilización que a cada uno de ellos se les da. Por ello éstos serán agrupados según la función que desempeñen: - Ficheros de Programas de ORACLE - Ficheros de Base de Datos - Ficheros de Control - Ficheros de Traza Obviamente, será sólo el Administrador de la Base de Datos a quien le concernirá la información incluida en los ficheros especificados anteriormente. Los usuarios de la Base de Datos raramente necesitarán saber la información existente en éstos, a ellos les concierne la información ‘lógica’ que de ellos se extrae, es decir los objetos de la Base de Datos que éstos representan. La figura 4 ilustra el número de ficheros mínimo que requiere ORACLE para su funcionamiento: Tipo de Ficheros F. de Base de Datos F. de Traza F. de Control Programas ORACLE Número 1 2 1 Muchos Tamaño aproximado 500 Kb. 50 Kb. Según tipo de Instalación aprox 17400 Kb. (según instalación) Figura 4. Número Mínimo de Ficheros por tipos Estructuras Físicas, Estructuras Lógicas Una estructura física es aquella que está almacenada de una manera tangible en un medio hardware (un disco, una cinta magnética, un disquete, etc.). De ésta manera, un fichero corresponde a un área reservada de espacio por el sistema operativo para almacenar una determinada información. Dicho fichero, de alguna manera es tangible ya que existe de una manera física en un medio tangible. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 6 FUNCIONAMIENTO DE ORACLE Por otra parte, una estructura lógica es aquella que si bien también se corresponde a una unidad de espacio, sus límites son independientes de su localización física. Una tabla puede ser almacenada a lo largo de varios ficheros de bases de datos físicos. Ficheros de Programas de ORACLE Entre éste tipo de ficheros encontramos aquellos que son propios de la instalación del producto ORACLE. Dependiendo del tipo de instalación, variará el número de éste tipo de ficheros, así con el espacio requerido por éstos. De ésta manera, tendremos ficheros ejecutables, ficheros de comandos y librerías de objetos, todos ellos formando parte de los llamados ficheros de programa. Obviamente, es necesaria su conservación ya que de su existencia depende la ejecución correcta del producto. Ficheros de Bases de Datos Una Base de Datos ORACLE está formada por uno o más ficheros de base de datos. Estos contienen todos los datos de la Base de Datos y se caracterizan porque: - Cada fichero está asociado solamente a una Base de Datos. - Una fichero físico forma una unidad lógica de la Base de Datos llamada tablespace. Cada tablespace puede estar formado por varios ficheros de base de datos, aunque éstos solamente pueden estar relacionados con un tablespace. Dada su importancia, nos extenderemos en los tablespaces en posteriores capítulos. - Todos los ficheros de base de datos de tablespaces on-line deben ser accesibles al arrancar ORACLE RDBMS. - Aunque no es necesario que el espacio asignado a un fichero de base de datos sea contiguo, sí que es aconsejable para una mejor accesibilidad. - Una vez creado, un fichero de base de datos no cambiará de tamaño. El número de ficheros de base de datos variará en función de las necesidades de espacio de nuestros aplicativos y del incremento realizado al ampliar dicho espacio requerido. Siempre será obligatorio tener definido un fichero de base de datos asociado al tablespace SYSTEM. Este almacenará información del diccionario de datos y del segmento de rollback iniciales. El parámetro MAXDATAFILES del comando CREATE DATABASE marcará el número máximo de ficheros. Si éste no es precisado, lo marcará el parámetro DB_FILES del fichero INIT.ORA, fichero propio del producto ORACLE. Las lecturas/escrituras de los ficheros de bases de datos realizadas por el sistema operativo vendrán determinadas por el llamado tamaño de bloque. Este viene definido por Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 7 FUNCIONAMIENTO DE ORACLE el parámetro DB_BLOCK_SIZE del fichero CONFIG.ORA. Normalmente suele tener un tamaño de 4Kb. Ficheros de base de datos on-line y off-line Mediante la instrucción ALTER TABLESPACE conseguiremos cambiar un tablespace en modo on-line a off-line y viceversa. Un tablespace on-line indica que las tablas que éste contiene son accesibles por el gestor de ORACLE. Un tablespace off-line será aquel que por cualquier razón esté desactivado. De esta manera, diremos que los ficheros asociados a un tablespace están on-line si el tablespace lo está y estarán off-line si el tablespace del que dependen está off-line. Creación y eliminación de un fichero de base de datos Las instrucciones CREATE DATABASE y CREATE TABLESPACE ... DATAFILE ... permiten crear los ficheros de base de datos, definiendo el tamaño asignado a éstos. Una vez se ha alcanzado el máximo de dicho espacio, es posible definir un nuevo fichero de base de datos asociándolo a un tablespace existente mediante la instrucción ALTER TABLESPACE ... ADD DATAFILE. Mediante la instrucción DROP TABLESPACE conseguiremos borrar un tablespace del sistema. Para ello deberemos asegurarnos que anteriormente esté off-line. Seguidamente podremos eliminar los ficheros asociados al tablespace utilizando los comandos de sistema operativo correspondientes. Ficheros de Control Los ficheros de control son pequeños ficheros binarios asociados a una Base de Datos que son chequeados cada vez que la Base de Datos de ORACLE se abre. Los ficheros de control se crean durante la instalación del producto ORACLE y deben ser siempre accesibles cada vez que sea arrancada la Base de Datos. Deberemos saber, pues, cuántos ficheros de control mantener, y en qué dispositivo colocarlos. Un fichero de control contiene información sobre la manera de acceder a la Base de Datos asociada. Por ello contiene información tal como: - Nombre físico de la Base de Datos y de los ficheros de traza, - Fecha y hora de creación de la Base de Datos, - Nombre lógico de la Base de Datos. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 8 FUNCIONAMIENTO DE ORACLE El fichero de control es modificado automáticamente por ORACLE, no es necesario que éste sea editado por un operador cada vez que se produzca un cambio en su información. Es recomendable realizar copias de los ficheros de control en diferentes dispositivos para evitar el riesgo de fallo en un dispositivo, aunque sea tedioso el posterior mantenimiento de éstos. El nombre del fichero de control asociado a una Base de Datos está indicado en el fichero INIT.ORA mediante el parámetro CONTROL_FILE. Este indica una lista de uno o más nombres de ficheros de control. Es posible cambiar la lista para añadir o cambiar la localización los ficheros de control siempre que la base de datos esté abajo. Para crear un nuevo fichero de control, deberemos copiar un fichero de control existente en uno nuevo y seguidamente añadirlo a la lista de ficheros de control. Para llevar a efecto dicho cambio, deberemos llevar abajo la Base de Datos (shutdown) y volverla a encender (startup). El tamaño de un fichero de control suele tener pequeñas dimensiones. Éste viene determinado por los parámetros DB_FILES y LOG_FILES del fichero de configuración INIT.ORA. Ficheros de Traza Las trazas están compuestas por un conjunto de ficheros (llamados ficheros de traza) externos a la Base de Datos que almacenan los cambios hechos durante cada una de las transacciones contra la Base de Datos. Existen dos tipos de ficheros de traza: los ficheros de traza on-line y ficheros de traza off-line. Los primeros almacenan los cambios realizados por transacciones cada vez que se produce un COMMIT en éstas. Gracias a éstos, es posible recuperar el estado de la Base de Datos después de que se haya producido un error en ésta. El proceso encargado de escribir las trazas en éste fichero, denominado LGWR, debe tener acceso a dichos ficheros de traza, ya que de otra manera, ORACLE RDBMS desmontaría la Base de Datos. Cada Base de Datos debe tener al menos dos ficheros de traza activos on-line. El uso de los archivos de traza off-line es opcional, estos son copias de los primeros realizadas en otro dispositivo físico. Para archivar los ficheros de traza, debe operarse el ORACLE en modo Archivelog. Tanto los primeros como los segundos serán utilizados en caso de error en la Base de Datos. El uso de los ficheros de traza se debe a que el proceso encargado de escribir los cambios en la Base de Datos, DBWR, no sincroniza dichos cambios producidos por un COMMIT con escrituras físicas en los ficheros de bases de datos (vistos anteriormente). Estos quedan en un búffer de operaciones de escritura a la Base de Datos. Los ficheros de traza se utilizan básicamente para asegurar que éstos cambios se lleven a efectos. De ésta manera se pueden llevar a cabo la vuelta atrás para aquellas transacciones terminadas en ROLLBACK. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 9 FUNCIONAMIENTO DE ORACLE Los ficheros de traza son utilizados para operaciones de vuelta atrás. Es decir, operaciones que mediante acceso a los ficheros de traza deben dejar la Base de Datos en un estado anterior al actual. Para éstas operaciones se utilizan los llamados segmentos de rollback. Estos segmentos se corresponden con áreas de disco que contienen la información necesaria para la vuelta atrás. Ficheros de Traza On-Line Los ficheros de traza on-line son formados por al menos parejas de dos ficheros. Éstos se crean en el momento de creación de la Base de Datos a los que automáticamente se asocian. Al ejecutar el comando CREATE DATABASE se especifican las siguientes acciones que afectan a los ficheros de traza on-line: - Modo de operación de la Base de Datos, Archivelog o Noarchivelog. - Número de ficheros de traza on-line a utilizar, - El tamaño de éstos, - Lugar en donde serán creados los ficheros de traza on-line. Los ficheros de traza on-line son una parte esencial del producto ORACLE. Estos contienen la manera en que se produjeron cada una de las grabaciones de cada una de las transacciones de datos realizadas en la Base de Datos asociada. Así, un COMMIT realizado en la Base de Datos sólo se completará si se ha podido realizar una traza en el fichero de traza asociado. Por ello, los ficheros de traza son la única manera de recuperar la Base de Datos en caso de problemas. El modo de funcionamiento de los ficheros de traza on-line se asemeja a un tiovivo. Es decir, cuando el proceso LGWR escribe sobre un fichero de traza on-line y llega hasta el final de éste, utiliza el siguiente fichero de traza on-line disponible. Cuando se completa el último fichero de traza disponible, el gestor de la Base de Datos ORACLE utilizará el primer fichero de traza on-line, completando y continuando la rueda de escrituras. Diremos que cada vez que ORACLE cambia de fichero de traza se produce un cambio de fichero de traza. La escritura circular que se ha descrito anteriormente se describe en la figura 5: Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 10 FUNCIONAMIENTO DE ORACLE F.TRAZA ON-LINE A F.TRAZA ON-LINE B F.TRAZA ON-LINE C Figura 5. Escritura Circular para los Ficheros de Traza on-line. Es posible numerar cada uno de los ficheros de traza on-line que forman el ciclo de escrituras visto anteriormente y marcar la secuencia en el que deben hacerse los cambios de fichero de traza. Ello se consigue con el comando ARCHIVE LOG LIST. Tanto el tamaño de cada fichero de traza, como el número de éstos dependerá de cada instalación de ORACLE, según las necesidades de cada sistema, para ello deberemos considerar los siguientes factores: - Cuanto más grandes sean los ficheros de traza, mayor será la información de vuelta atrás almacenada. - Cuanto mayores sean los ficheros de traza, menores serán los puntos de chequeo para realizar un cambio de fichero de traza. - Cuanto mayor sea el número de ficheros de traza on-line utilizados, menor será el uso que hagamos de los ficheros de traza off-line, ya que implícitamente estamos haciendo un uso implícito de los ficheros de traza off-line. - Cuanto menor sea un fichero de traza on-line menor será la información real que habremos perdido. Ficheros de Traza Off-Line Los ficheros de traza off-line son utilizados para proteger la Base de Datos contra los errores físicos que pueda sufrir el disco en la que se almacena. En importante, siempre que sea posible, almacenar los ficheros de base de datos y los ficheros de traza on-line en discos diferentes, pero no siempre es posible, por ello almacenaremos periódicamente los Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 11 FUNCIONAMIENTO DE ORACLE ficheros de traza on-line en un medio diferente, convirtiendo los ficheros de traza on-line en ficheros de traza off-line copias de los primeros. Esta operación puede realizarse de manera automática o manualmente, aunque siempre estando la Base de Datos en modo ARCHIVELOG. Puntos de Chequeo Diremos que se produce un punto de chequeo siempre que sea necesaria la escritura de un número predeterminado de bloques de traza a disco. También se produce un punto de chequeo siempre que se produzca un cambio de fichero de traza. Cada vez que se produce un punto de chequeo, el proceso DBWR escribe todos los cambios existentes en el búffer del SGA desde el anterior punto de chequeo. Por ello, los puntos de chequeo aseguran la escritura de los bloques de traza a sus correspondientes ficheros de traza, así como los cambios que éstos provocan en la Base de Datos mediante la escritura a los correspondientes ficheros de base de datos. Segmentos de Rollback Los segmentos de Rollback son áreas de disco utilizadas para almacenar los cambios provocados en la Base de Datos, permitiendo la vuelta atrás de dichos cambios mediante la instrucción ROLLBACK. Representan aquella unidad lógica asociada a un fichero de traza. En la creación de un Segmento de Rollback se define aquel tablespace en donde se definirá éste. Como ya sabemos, los tablespaces están representados por uno o más ficheros de base de datos. Al crear una Base de Datos, se crea por defecto el segmento de rollback del sistema. Es posible añadir cuantos segmentos de rollback sean necesarios. Para ello deberemos considerar los siguientes puntos: - El espacio de la Base de Datos que dedicaremos a nuestros segmentos de rollback. - La media de transacciones que tenemos en nuestra Base de Datos de manera concurrente (para cada transacción deberemos prever un espacio en el segmento de rollback). - La cantidad de espacio necesario para almacenar los cambios que éstas transacciones provocan. Normalmente, las transacciones asociadas a procesos batch utilizan mayor cantidad de espacio que las transacciones asociadas a procesos online. - ¿ Es posible dividir las entradas de los segmentos de rollback en varios discos ? Por todo ello deberemos tener en cuenta la siguiente tabla, ella indica un número aproximado de segmentos de rollback a tener en cuenta para nuestras instalaciones: Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 12 FUNCIONAMIENTO DE ORACLE Número de Transacciones concurrentes menos de 16 entre 16 y 32 más de 32 Número de Segmentos de Rollback recomendado 4 segmentos 8 segmentos nº transac / 4 (menor que 50) Figura 6. Número de Segmentos de Rollback Sea cual sea en número de segmentos de rollback escogido, es recomendable que todos ellos tengan un tamaño similar. Al igual que las tablas de datos (que veremos posteriormente), los segmentos de rollback se definen a partir de un tamaño inicial, que es incrementado en extensiones finitas una vez que se haya completado el espacio asignado. Por ello, nos aseguraremos que el tamaño total que sean capaces de cubrir nuestros segmentos de rollback sea siempre el espacio necesario que generen las transacciones concurrentes. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 13 FUNCIONAMIENTO DE ORACLE Estructura de Lógica de la Base de Datos. Tablespaces, segmentos y objetos En éste punto trataremos la estructura lógica de la Base de Datos de ORACLE. Esta estructura está apoyada, obviamente, sobre la estructura de ficheros vista anteriormente, de la que depende. La siguiente figura representa la relación entre cada uno de los componentes lógicos de la Base de Datos. BASE DE DATOS BD TABLESPACES OBJETOS: Tablas, Indices, Vistas SEGMENTOS EXTENSIONES TS_1 SYSTEM Tb_1 Tb_2 Tb_3 Ind_1 Ind_2 ... ... Dato Dato Dato Indice Indice ... ... Figura 7. Estructura Lógica de la Base de Datos ORACLE Base de Datos Tablespaces Objectos BASE DE DATOS SYSTEM TBSPC_1 /home/oracle/dbs/fichero1.dbf /home/oracle/dbs/fichero2.dbf /home/oracle/dbs/fichero3.dbf Espacio no ocupado en el fichero de base de datos (f. de b.d.) Espacio ocupado por un objeto del Tablespace SYSTEM en el f. de b.d. .../dbs/fichero1.dbf Espacio ocupado por un objeto del Tablespace SYSTEM en el f. de b.d. .../dbs/fichero1.dbf Espacio ocupado por un objeto del Tablespace SYSTEM en el f. de b.d. .../dbs/fichero1.dbf Espacio ocupado por un objeto del Tablespace TBSPC_1 en el f. de b.d. .../dbs/fichero2.dbf Espacio ocupado por un objeto del Tablespace TBSPC_1 en el f. de b.d. .../dbs/fichero2.dbf Espacio ocupado por un objeto del Tablespace TBSPC_1 en el f. de b.d. .../dbs/fichero2.dbf Espacio ocupado por un objeto del Tablespace TBSPC_1 en el f. de b.d. .../dbs/fichero2.dbf Espacio ocupado por un objeto del Tablespace TBSPC_1 en el f. de b.d. .../dbs/fichero2.dbf Figura 8. Enlace Estructura Física y Estructura Lógica de ORACLE. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 14 FUNCIONAMIENTO DE ORACLE El SGDB de ORACLE es capaz de administrar cuantas Bases de Datos seamos capaces de definir en el sistema (dentro de unos límites lógicos, aunque normalmente tendremos definida una sola Base de Datos). Cada Bases de Datos estará dividida en una estructura lógica denominada tablespace. Veremos su utilidad en el ejemplo que a continuación se define. A su vez, cada tablespace contendrá, ahora sí, cada uno de los objetos que necesitemos definir y sobre los que nuestros aplicativos trabajarán, es decir cuantas tablas, índices, vistas, etc ... necesitemos para almacenar la información deseada. Cada uno de los tablespaces definidos estará asociado a un fichero de base de datos, que a su vez contendrá cada uno de los datos almacenados en las tablas lógicas que vemos. La creación de dichos objetos físicos obliga a definir el tamaño inicial para este, un tamaño de extensión una vez se haya completado el tamaño inicial asignado y un número máximo de extensiones que puede alcanzar dicho objeto, para evitar un crecimiento descontrolado y una dispersión física del objeto lógico dentro del fichero de base de datos. La figura 8 muestra la manera en que quedan ligadas la estructura física y la lógica. Tablespaces Hemos visto anteriormente la estructura básica en que se compone una Base de Datos. Hemos visto que ésta se divide en unidades lógicas llamadas tablespaces. Una Base de Datos puede estar formada por uno o varios tablespaces, aunque siempre deberá existir el tablespace primario denominado SYSTEM. Un tablespace está asociado ineludiblemente a uno o más ficheros de base de datos (vistos anteriormente). Principalmente, los tablespaces son utilizados por el administrador de la Base de Datos para: - Controlar el espacio que ocupan cada uno de los objetos de la base de datos asociados al tablespace, tales como tablas, índices, vistas, etc . . . - Definir cuotas de espacio para los usuarios de los objetos asignados a un tablespace. - Controlar el acceso a los datos, situando un tablespace en on-line u off-line. - Realizar copias de seguridad de una manera más flexible. Es decir, podríamos entender los tablespace como 'cada una de las áreas en que podemos dividir una Base de Datos'. Obviamente, ubicaremos en cada tablespace aquellos objetos pertenecientes a dicha 'área' (tablas, índices, vistas, etc ... necesarios). Veamos ahora la función del tablespace SYSTEM. Éste tablespace debe existir en cada Base de Datos. Al crearse ésta, dicho tablespace es creado automáticamente y es obligatorio que el tablespace SYSTEM esté siempre on-line ya que contiene la siguiente información: - El diccionario de la Base de Datos, Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 15 FUNCIONAMIENTO DE ORACLE - Los segmentos de rollback temporales, - La ayuda en línea, siempre que ésta esté cargada, - Aquellas tablas que el producto ORACLE utilice para su funcionamiento, - La definición de los usuarios creados. Aunque no es obligatorio, el uso de múltiples tablespaces permitirá al Administrador de la Base de Datos una mayor flexibilidad. Algunos de los beneficios de un sistema con múltiples tablespaces son: - Diversificación en los accesos a disco siempre que los tablespaces estén asociados a ficheros de base de datos situados en diferentes unidades de disco, - Posible separación de los tipos de objetos en tipos, teniendo la posibilidad de asociar todos las tablas a un tablespace, los índices a otro tablespace y las vistas a un tercero, etc. ..., - Forzar esquemas de utilización del espacio del disco, dependiendo de la situación física de los ficheros de base de datos a éstos, - Posibilidad de situar un tablespace de on-line a off-line y viceversa. - Reservar tablespaces para tablas de un índice de actividad parecido. Una manera de optimizar una Base de Datos es la de asociar un tablespace a un fichero de base de datos, colocando éste fichero en un espacio de disco contiguo y en un lugar de fácil acceso, siempre que sea posible (recordar que la parte central de un disco tiene un acceso más rápido que los extremos de éste). De ésta manera, la accesibilidad de la Base de Datos se haya mejorado con respecto a una Base de Datos sin una organización previa. Por ello, la importancia de que la estructura de tablespaces y ficheros de base de datos en la rapidez de acceso a la Base de Datos. Segmentos y extensiones Todos los datos de un tablespace son almacenados en 'pedazos' del espacio reservado para la Base de Datos llamados segmentos. Por ello, un segmento es un conjunto de bloques de la Base de Datos distribuidos para almacenar los datos de ésta. Éstos se corresponden con el siguiente nivel lógico en que se divide la estructura lógica de la Base de Datos, después de los tablespaces, por ello no pueden expandirse a través de más de uno de ellos, pero sí a través de más de un fichero de base de datos (en caso de que un tablespace esté asociado con más de uno de ellos). Una Base de Datos se compone de cinco tipos de segmentos: - Segmentos de Datos, - Segmentos de Indices, - Segmentos de Rollback, - Segmentos Temporales y Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 16 FUNCIONAMIENTO DE ORACLE - Segmento de Arranque. De todos ellos, los dos primeros son los más utilizados implícitamente por los usuarios de ORACLE. Al Administrador de la Base de Datos le conciernen los tres siguientes; aunque todos ellos tienen una estructura similar, especificada mediante los parámetros de almacenamiento, esto es, se define un tamaño inicial (compuesto por un número finito de segmentos) y seguidamente un número, finito también, de extensiones, o ampliaciones que permite su crecimiento. El propósito de los parámetros de almacenamiento es controlar el espacio en que va creciendo un objeto de la Base de Datos, limitándolo a un tamaño finito de extensiones. Una extensión será pues un espacio contiguo de la Base de Datos (dentro de un fichero de base de datos) expresado en bytes. Por ello, al crearse una tabla, su segmento de datos asociado contiene una extensión inicial con un número finito de bytes. Aunque dicha tabla no contenga ninguna fila, éste espacio inicial queda reservado de manera definitiva. A medida que el número de filas va incrementándose, dicho espacio va siendo ocupado por datos de la tabla hasta que éste espacio inicial se completa. Entonces es creada automáticamente una extensión. En éste momento diremos que el segmento de datos contiene ahora extensiones. Segmentos de Datos e Indices Evidentemente el primero de ellos contiene todos los datos de tablas, mientras que el segundo contendrá los datos pertenecientes a índices. Una tabla puede tener uno, más de uno o ningún segmento de índices, dependiendo del número de índices asociados a dicha tabla. Segmentos de Rollback Aunque de ellos nos hemos ocupado anteriormente, hablaremos ahora de cada uno de los tipos de segmentos de rollback existentes, por ello podemos decir que existen: - Segmentos de Rollback Públicos y - Segmentos de Rollback Privados. Aunque es posible definir ambos tipos de segmentos de Rollback en una Base de Datos, de los primeros diremos que son los más usados en las instalaciones de ORACLE, utilizados por cualquiera de las instancias de la Base de Datos. Los segundos son útiles en casos excepcionales, por ejemplo para instancias particulares que requieran de un tamaño extremadamente grande de segmento de rollback para ser ejecutadas. Segmentos Temporales Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 17 FUNCIONAMIENTO DE ORACLE Al igual que los segmentos de rollback privados, los segmentos temporales son utilizados en casos excepcionales. Por ello los utilizaremos en operaciones tales como: - Creación de Indices, - Instrucciones como: SELECT ... ORDER BY, SELECT ... DISTINCT, SELECT ... GROUP BY, SELECT ... UNION, SELECT ... INTERSECT, SELECT ... MINUS, - Selección de Datos a través de varias tablas (Joins) sin índice, - Selección de subqueries, - Etc ... Segmento de Arranque El segmento de Arranque es creado en el tablespace SYSTEM automáticamente al crearse la Base de Datos. Contiene la definición del diccionario de datos para las tablas, es decir la definición de cada estructura de cada una de las tablas creadas en la Base de Datos. Obviamente, dicho segmento ocupa un espacio pequeño comparado con el espacio que ocupan los demás segmentos. Objetos de la Base de Datos Los diferentes objetos que forman parte de una Base de Datos ORACLE son los siguientes: - Tablas, - Indices, - Vistas, - Clústers, - Secuencias y - Sinónimos. Debido al amplio conocimiento que se le supone al lector de éste capítulo (es caso contrario es recomendable la lectura del capítulo dedicado al Modelo y Teoría Relacional) veremos de manera rápida la definición y posterior desarrollo de los dos primeros tipos de objetos. Nos detendremos en cuestiones particulares utilizadas por ORACLE. Tablas Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 18 FUNCIONAMIENTO DE ORACLE Una tabla es la unidad elemental de almacenamiento en un sistema relacional de datos. Compuesta, como es sabido, por filas que representan elementos de la entidad a la que representan y columnas, con un nombre, tipo y tamaño asociado que representan cada uno de los atributos de cada elemento de la entidad. Las tablas son creadas a partir de la instrucción CREATE TABLE. Los parámetros de almacenamiento asociados a éste comando permiten definir un tamaño inicial y un número finito de extensiones. La localización física de una tabla la deberemos encontrar siempre en el fichero de base de datos asociado al tablespace en el que sé difinió la tabla, aunque es imposible adivinar (no para el SGDB) qué espacio exacto ocupa un dato concreto de una tabla. Diremos que la operación de compactación de una tabla consiste en situar de una manera contigua a cada uno de los segmentos que componen una tabla. Indices Los índices son estructuras de datos opcionales asociadas a tablas y clústers. Son utilizados básicamente para: - Incrementar el acceso a las filas de la tabla asociada, - Garantizar la unicidad de las filas mediante el uso de las claves únicas. Por tanto, crearemos un índice siempre que deseemos incrementar algunos de los parámetros anteriores, teniendo en cuenta que un número elevado de índices asociados a una tabla decrementará las operaciones de modificación y creación de filas. Normalmente los índices son creados en una tablespace específico. El uso de un tablespace distintos para datos y otro para índices, situados en diferentes discos, incrementa la accesibilidad de los datos. Situando los índices y datos en un único tablespace obtendremos una mayor facilidad en el mantenimiento de la Base de Datos para realizar backups. Situaremos los índices en el tablespace que más nos convenga, dependiendo siempre de la instalación que debamos realizar. El acceso de los datos a través de los índices asociados se realiza utilizando la estructura de Arboles B+. Veamos como se funcionan dichas estructuras a partir de la figura 9: Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 19 FUNCIONAMIENTO DE ORACLE M B ADAM ALLEN J BLAKE FORD MI JAMES JONES MARTIN T MILLER SCOTT TURNER WARD Figura 9. Arboles B+ A partir de un nodo inicial, y basándonos ramificaciones, llegaremos al nodo deseado. El identificador de la fila asociado a dicho nodo nos permitirá el acceso directo a la tabla de datos para la que se define el índice. Las filas con valores nulos no formarán parte de dicha estructura de índice. Vistas Aunque técnica y físicamente no podemos tratar las vistas como tablas de datos, sí que podemos afirmar que lógicamente son verdaderas tablas de datos. Una vista almacena el resultado de una consulta previamente definida realizada contra una tabla de datos. Por ello, aplicando la teoría relacional, podemos tratar las vistas como verdaderas tablas lógicas de datos. Normalmente utilizaremos las vistas para facilitar y restringir las consultas de datos hacia las tablas definidas en la Base de Datos. Debido que éstas son simples referencias a las tablas de datos, no ocupan el espacio físico de la consulta que representan (sólo ocupan espacio en el diccionario de datos). El usuario de vistas debe tener presente en cada momento las tablas de datos a las que éstas hacen referencia, ya que un cambio en éstas últimas (alteración de campos, eliminación de la tabla de datos asociada, etc ...) no modificará automáticamente las vistas de éstas. Dada la tabla de datos CLIENTES, supongamos que deseamos ocultar a los usuarios la información referente a los clientes no pertenecientes a nuestra provincia. Para ello crearemos la vista Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 20 FUNCIONAMIENTO DE ORACLE CREATE VIEW clientes_baleares AS SELECT * FROM clientes WHERE provincia = 'BALEARES' No olvidemos que los usuarios de dicha vista verán los datos que ésta ofrece como una tabla lógica de datos. Figura 10. Uso de las Vistas Clústers Los clústers son utilizados como un modo alternativo de almacenamiento de tablas. Los clústers representan grupos de tablas almacenadas de manera conjunta ya que éstas comparten columnas comunes y son utilizadas frecuentemente juntas. Por ello, el uso de clústers puede modificar sensiblemente la velocidad de respuesta frente a consultas de datos con tablas enlazadas mediante éste sistema. Debemos tener en cuenta una serie de consideraciones sobre el uso de éstas: - Los tiempos de búsqueda y cálculo se reducen ya que la información está almacenada de manera conjunta, - El espacio de almacenamiento se reduce al estar almacenada una sola vez la información redundante de varias tablas, - Los clústers almacenan más eficientemente un conjunto de tablas que si éstas fuesen almacenadas de manera separada, - El uso de clústers, así como el de índices, no afecta al diseño futuro de las aplicaciones que manejen dichos datos, - El uso de clústers permite una mejor identificación de la información existente (ello se nota especialmente al asociar las columnas código con la tabla que contiene la descripción de dicho código) Así, aquellas tablas que son consultadas frecuentemente de manera conjunta son candidatas a ser asociadas mediante clústers. Obviamente, las columnas que formen el campo clave de unión con las tablas serán utilizadas en la asociación. Secuencias Las secuencias son un tipo de objetos utilizados para establecer y asociar una numeración correlativa de manera automática en las columnas que así se desee realizar. Las secuencias serán numeradores siempre de tipo numérico a los que se les asocian las siguientes propiedades: Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 21 FUNCIONAMIENTO DE ORACLE - Un inicio, - Un final, - Un valor de incremento, - Una marca que indique si la secuencia es cíclica o no. Existen dos funciones utilizadas en la manipulación de las secuencias: NEXTVAL es utilizada para generar el siguiente valor de la secuencia, para ello incrementa la secuencia en la unidad de incremento definida para ésta y obtiene dicho valor; CURRVAL obtiene el valor actual de la secuencia sin incrementar el valor de ésta. El siguiente ejemplo muestra el uso de las secuencias: Supongamos la secuencia seqval definida como: CREATE SEQUENCE seqval INCREMENT BY 10 START WITH 0 La sentencia: SELECT seqval.NEXTVAL A, seqval.NEXTVAL B, seqval.CURRVAL C FROM dual generaría la salida: A B C --- --- --10 20 20 Figura 11. Uso de las Secuencias El uso de los operadores CURRVAL y NEXTVAL está restringido en las siguientes cláusulas: - SELECT ... WHERE ... - SELECT ... ORDER BY ... - SELECT ... CONNECT BY ... - SELECT ... GROUP BY ... - SELECT DISTINCT ... En cambio, el uso de secuencias está indicado para las sentencias siguientes: - INSERT ... VALUES ... - UPDATE ... SET ... - SELECT .NEXTVAL FROM dual Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 22 FUNCIONAMIENTO DE ORACLE - CREATE TABLE AS ... INSERT .NEXTVAL - UPDATE ... SELECT .NEXTVAL. Es posible modificar el valor de una secuencia, así como alguna de las propiedades que la definen, utilizando el comando ALTER SEQUENCE. Sinónimos Un sinónimo es un objeto utilizado como enlace para el acceso a cualquiera de los demás objetos definidos en la Base de Datos. Es decir, dado cualquier objeto de la misma, podemos crear un segundo acceso a ésta mediante la utilización de un sinónimo. Veamos la siguiente figura para entender mejor el uso de los sinónimos: Supongamos la tabla: EMPLEADOS Podemos acceder a la información que ésta contiene mediante la instrucción: SELECT codigo, direccion, telefono FROM empleados WHERE nombre LIKE 'A%' Después de la instrucción: CREATE PUBLIC SYNONYM trabajadores ON empleados la instrucción: SELECT codigo, direccion, telefono FROM trabajadores WHERE nombre LIKE 'A%' implica la misma consulta que la primera. Figura 12. Uso de sinónimos El Diccionario de Datos Hasta ahora hemos estado hablando del Diccionario de Datos aunque en ningún momento hemos definido la finalidad y estructura del mismo. En éste punto veremos la definición del diccionario de datos, qué tipo de objetos lo forman, el esquema de diseño que sigue y la manera de modificar su contenido. Dicha estructura es utilizada por el Administrador de la Base de Datos, aunque algunos usuarios pueden beneficiarse de alguno de sus contenidos. Así, podemos definir el Diccionario de Datos como un conjunto de tablas y vistas de sólo lectura, propias del producto ORACLE que contienen la siguiente información: Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 23 FUNCIONAMIENTO DE ORACLE - Los nombre de cada uno de los usuarios de la Base de Datos ORACLE, - Derechos y privilegios que tienen cada uno de ellos, - Los nombres de cada uno de los objetos definidos en la Base de Datos, es decir, tablas, vistas, índices, clústers, sinónimos y secuencias, - Claves primarias y externas referentes a los índices existentes, - Valores por defecto para las columnas, - Enlaces entre columnas, - Espacio que ocupan los objetos definidos, - Información referente a las posibles auditorias realizadas en la Base de Datos, - Información general de la Base de Datos. He aquí una breve relación de las tablas y vistas más utilizadas en el diccionario de datos: DICTIONARY: Relación de las tablas y vistas que componen el Diccionario de Datos ALL_USERS: Información acerca de los usuarios de la Base de Datos ALL_OBJECTS: Información acerca de cada uno de los objetos, es decir, tablas, índices, vistas, secuencias, synónimos, etc. ... existentes en la b.d. accesible por el usuario. ALL_TABLES: Descripción de las Tablas accesibles por los usuarios ALL_INDEXES: Relación de los índices accesibles por los usuarios. ALL_SEQUENCES: Relación de las secuencias existentes ALL_VIEWS: Texto de las Vistas accesibles en la Base de Datos ALL_SYNONYMS: Relación de sinóminos en la Base de Datos. ALL_TAB_COLUMNS: relación de cada una de las columnas y tablas existentes en la b.d. TABLE_PRIVILEGES: Relación de cada uno de los privilegios existentes en cada una de las tablas de la Base de Datos, asociándolo con cada uno de los usuarios. COLUMN_PRIVILEGES: Relación similar a la anterior, a nivel de columnas. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 24 FUNCIONAMIENTO DE ORACLE Estructura de Memoria En éste apartado describiremos la estructura de memoria utilizada por ORACLE. Dicha estructura viene definida a partir de las siguientes áreas: - Area Global del Sistema (SGA), - Búffers de base de datos, - Búffers de traza, - Area Global de Programas (PGA), - Areas de contexto, - Areas de software, - Memoria virtual. Es decir, en ella se almacenará básicamente información del tipo: - El código de sus programas ejecutables, - Los datos necesarios para la ejecución de éstos, - Información necesaria para comunicación entre procesos. Todas las operaciones realizadas por el Gestor de la Base de Datos ORACLE están basadas en la estructura de memoria y procesos existente. Esta se basa en la memoria principal de la computadora sobre la que está instalado el producto. Un proceso es un trabajo o tarea que realiza operaciones en memoria. Entre éstos, se incluyen los procesos que cada uno de los usuarios ejecuta, más los cinco procesos background de ORACLE ya presentados en la introducción y que en capítulos posteriores desarrollaremos. Veamos cada una de las áreas en que se compone la estructura de memoria de manera separada. Area Global del Sistema (SGA) La SGA (System Global Area, Area Global del Sistema) es un conjunto de Búffers de memoria compartida que contiene tanto datos como información de control para una instancia de la Base de Datos. El SGBD es quien escribe directamente sobre dicha área a partir de la ejecución del código que el usuario procesa. El SGA contiene entonces los búffers de la Base de Datos, los búffers de redo e incluso información cacheada del diccionario de datos. Por ello, cada instancia mantendrá su propia SGA, y todas las SGAs existentes serán compartidas por cada uno de los usuarios conectados a la Base de Datos. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 25 FUNCIONAMIENTO DE ORACLE Veamos como actúan los búffers de la Base de Datos existentes en el SGA durante la ejecución de una transacción que produce modificación de datos: - Cada instrucción que ejecuta una transacción modifica el bloque de segmento de datos correspondiente en su buffer correspondiente. Un bloque del buffer de la Base de Datos se corresponde unívocamente con un bloque de un fichero de base de datos (vistos anteriormente). Si es demandada una información de un bloque del fichero que no existe en el buffer de la Base de Datos, éstas es leída y llevada al buffer. De ésta manera, la transacción modifica la información existente en el buffer de la Base de Datos, nunca directamente la información existente en el fichero de base de datos. - Al mismo tiempo, se almacena aquella información necesaria para realizar una posible vuelta atrás de la transacción en su correspondiente bloque de rollback del buffer de redo correspondiente. - Al grabarse una transacción, la información existente en el buffer de redo es escrita en su correspondiente fichero de traza (aquel que esté on-line en el momento de la escritura). La información existente en el buffer de la Base de Datos no es escrita al terminar la transacción, sino que dicha información queda en dicho buffer. El proceso DBWR será el encargado de escribir dicha información en los ficheros físicos de base de datos siguiendo un algoritmo llamado LRU (Least fRequence Used, el menos utilizado frecuentemente). Dicho algoritmo trabaja de la siguiente manera: - Los procesos de cada usuario provocan nuevas inserciones de bloques en el buffer de memoria, - Aquellos bloques que no son utilizados quedan marcadas en una 'lista de utilización de bloques', - De ésta manera, inserciones de nuevos bloques provocan la salida de aquellos bloques situados al final de la 'lista'. Area Global de Programas El área global de programas (Program Global Area, PGA) es un búffer de memoria de lectura-escritura no compartida que contiene datos e información de control acerca de cada uno de los procesos de un usuario. Por ello, diremos que cada proceso provocado por un usuario contendrá su propia PGA. Un usuario, al conectar con la Base de Datos ORACLE (desde cualquiera de sus componentes) provoca la creación de una PGA que contiene información acerca de la conexión. Si el sistema operativo no es capaz de suministrar dicha memoria, se producirá Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 26 FUNCIONAMIENTO DE ORACLE un error de conexión por falta de memoria. Además, cada PGA incluye las llamadas áreas de contexto que serán descritas seguidamente. Los parámetros: - OPEN_CURSORS, - OPEN_LINKS, - SAVEPOINTS, - DB_FILES y - LOG_FILES del fichero de configuración INIT.ORA permiten definir el tamaño de cada PGA. El tamaño para los procesos background (DBWR, LGWR, SMON, PMON y ARCH) vendrá definido adicionalmente por éstos y otros parámetros. Areas de Contexto El término área de contenido es asociado frecuentemente al término cursor1, ya que en muchas ocasiones representan lo mismo. Cada instrucción SQL provocada por un proceso de un usuario requiere de su área de contexto, un buffer de memoria de lectura-escritura no compartida creado para almacenar la información del proceso acerca de la ejecución de la instrucción SQL. El SGBD crea automáticamente una área de contexto cada vez que una instrucción SQL lo requiere, y la cierra al finalizar la ejecución de la misma. Por ello, un proceso puede tener varias áreas de contexto asociadas a su PGA. Esta estructura contiene información acerca de: - El texto de la instrucción SQL, - La traducción de dicho texto, - Una fila para el resultado de valores intermedios en la ejecución de la instrucción, - Información de la ejecución del cursor de la instrucción, - Información de control para instrucciones de ordenación de datos. Areas de Software 1 El término cursor está asociado a la ejecución de instrucciones SQL. La ejecución de una instrucción SQL provoca la 'creación de una tabla fictícia' sobre la que se opera, o consulta. El apuntador a cada una de éstos registros que componen la tabla se denomina cursor. Diremos, pues que al iniciarse una instrucción SQL se abre un cursor, que es cerrado al finalizar la ejecución de la misma. Un usuario es capaz de crear pues cursores de una manera implícita. El lector encontrará una mayor extensión acerca de la utilización de cursores explícitos en el capítulo dedicado a la programación de PRO*C. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 27 FUNCIONAMIENTO DE ORACLE Las áreas de software proporcionan porciones de memoria de sólo lectura, compartidas o exclusivas según instalación utilizadas para almacenar el código que el usuario ejecuta. El código contenido en cada uno de los cinco procesos background también ocupa espacio en dichas áreas de memoria, aunque éste espacio ocupa un lugar protegido y exclusivo diferente al asignado a los usuarios. Estas áreas están asociadas al contenido de los ficheros programas de ORACLE vistos anteriormente. Memoria Virtual Dependiendo del sistema operativo sobre el que esté instalado el producto ORACLE, éste puede utilizar parte de la llamada memoria virtual. Esta proporciona la ventaja de utilizar espacio de disco simulando espacio de memoria real o principal. El objetivo de éste apartado no es el de explicar el funcionamiento de la memoria virtual, sino simplemente hacer constancia de la existencia de éste tipo de estructura de memoria. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 28 FUNCIONAMIENTO DE ORACLE Estructura de Procesos Trataremos ahora la descripción general de los tipos de procesos utilizados por el SGBD de ORACLE, su utilización, la implementación actual y las opciones que nos ofrece el sistema operativo. Hablaremos de conceptos tales como los procesos de usuarios, los cinco procesos background utilizados por el sistema de usuarios y la diferencia de funcionamiento entre un sistema ORACLE funcionando en single-task o funcionando en two-task. Definimos un proceso como un mecanismo, dentro del sistema operativo sobre el que convive, capaz de ejecutar una serie de instrucciones en una área, normalmente propia, de memoria. La estructura de procesos de un sistema define cuantos procesos pueden ejecutarse al mismo tiempo y como son ejecutados éstos. Dicha estructura debe conseguir dos metas básicas: - Simular un entorno privado en un entorno público de procesos, en donde todos ellos trabajan simultáneamente y - Permitir que cada uno de los procesos comparta todos los recursos de la máquina sobre la que se ejecuta sin que ninguno de ellos hagan un uso individual de éstos. En un sistema ORACLE existen diferentes tipos de procesos. Estos son: - Procesos de usuario, es decir, aquellos procesos que son utilizados directamente por un usuario o por las aplicaciones que éste ejecuta. - Procesos del servidor, aquellos invocados por otros procesos. Estos a su vez se dividen en: - Procesos sombra: asociados indefectiblemente a un proceso de usuario - Procesos background, compuesto por el conjunto de cinco procesos vistos anteriormente: SMON, PMON, DBWR, LGWR y ARCH, utilizados en un sistema multiproceso, no están asociados a un proceso de usuario, aunque éstos se sirven de los procesos background para realizar funciones contra la Base de Datos. Su ciclo de vida empieza al arrancar el SGBD y finaliza al hacerlo éste. Todos ellos serán descritos con mayor extensión en los siguientes puntos. Single-Task contra Two-Task La estructura de procesos del SGBD presenta dos variaciones principales dependiendo de sí los programas que representan los procesos son compartidos o no. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 29 FUNCIONAMIENTO DE ORACLE Los procesos de usuario son creados cada vez que un usuario del sistema hace referencia a cualquier aplicación que requiera conexión con ORACLE. Los procesos de usuario se comunican con la Base de Datos a través del llamado program interface. En sistemas single-task, las aplicaciones del usuario, el núcleo de ORACLE y el program interface son todos ejecutados bajo un mismo proceso. Este último es el encargado la protección del código ejecutable de éstos, así como del traspaso de datos entre el usuario y ORACLE. Bajo éste sistema solo se permite una única conexión a la Base de Datos por proceso. Este sistema es utilizado cuando se requiere una clara separación entre los programas de usuario y los de ORACLE, así como una integridad y privacidad de los datos que el sistema operativo no es capaz de asegurar. Programa Usuario Un Proceso para dos programas Program Interface Programa ORACLE Figura 14. Single Task sobre un ordenador Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 30 FUNCIONAMIENTO DE ORACLE Programa Usuario Proceso del Usuario Program Interface Proceso Sombra Programa ORACLE Figura 15. Two Task sobre un ordenador Los sistemas two-task sitúan los procesos sombra, aquellos generados a partir de los procesos de usuario de los que dependen, en diferentes procesos asociados. Para ello se utiliza el mecanismo de comunicación entre procesos que ofrece el sistema operativo. De ésta manera, cada proceso conectado a ORACLE tendrá su propio proceso sombra. El sistema two-task es utilizado por el producto SQL*Net al ejecutar un programa en un ordenador cuya Base de Datos remota está situada en otra máquina externa a ésta. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 31 FUNCIONAMIENTO DE ORACLE Proceso del Usuario Programa Usuario Máquina Local Protocolo Program Comunicación Interface Máquina Remota Proceso Sombra Programa ORACLE Figura 16. Two Task sobre dos ordenador Instancias en Multiproceso contra Monoproceso El Gestor de la Base de Datos de ORACLE puede funcionar en cualquiera de los modos expuestos en el título anterior dependiendo del valor del parámetro SINGLE_PROCESS (true ó false) dentro del fichero de configuración INIT.ORA. Veamos las peculiaridades de cada uno de los modos de procesamiento que presenta el Gestor. El monoproceso, o también llamado único usuario, permite la entrada a la Base de Datos de un único usuario. Así la entrada de más de un usuario de forma concurrente no está permitida. Aquellas instalaciones de ORACLE sobre sistemas operativos que no soporten dicha concurrencia deben hacerse en éste modo (p.e. MS-DOS). Por ello éstas instalaciones son también 'monoinstanciales', la Base de Datos no puede ser consultada por dos o más instancias a la vez. El multiproceso es aquel que permite el acceso de dos o más usuarios contra la Base de Datos de una manera concurrente. Éste modo requiere de la puesta en marcha de los cinco procesos que anteriormente hemos llamado procesos background. La función de éstos es la de mejorar el sistema de manera que se permita un acceso concurrente y fiable a Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 32 FUNCIONAMIENTO DE ORACLE la Base de Datos, por ello cada una de las instancias se sirve de éstos procesos para realizar dicha concurrencia. Veamos de manera separada cada uno de éstos procesos: DBWR: Database Writer Está encargado de escribir aquellas modificaciones provocadas en los bloques existentes en el buffer de la Base de Datos. El algoritmo que sigue dicho proceso asegura la existencia de los bloques que últimamente han sido consultados, escribiendo aquellos bloques que no son consultados frecuentemente; de ésta mantiene los bloques con aquella información que más recientemente ha sido requerida y escribe los bloques que no son requeridos. LGWR: Log Writer Se ha dicho con anterioridad que la finalización de una transacción mediante un COMMIT no aseguraba la escritura física del bloque correspondiente a disco, sino que es el proceso DBWR el encargado de dicha tarea (siguiendo el llamado algoritmo). El proceso LGWR permite la actualización de las modificaciones que realiza una transacción en los ficheros de trazas a partir de las modificaciones anotadas en el buffer de redo. La terminación de dicha transacción en COMMIT provoca la escritura de las anotaciones realizadas en el buffer sobre el fichero de traza on-line que es el momento de la escritura esté activo. SMON: System Monitor Este proceso se encarga de la recuperación de instancias en caso de error. Por ello, éste es referenciado por aquellos procesos que los requieran. PMON: Process Monitor El proceso PMON actúa en caso de errores en procesos de usuarios. Está encargado de liberar aquellos recursos utilizados por los usuarios. Por ello resetea la tabla de transacciones activas, modifica los bloqueos entre tablas y elimina los procesos que ya no actúan. ARCH: Archiver Está encargado de realizar copia a cinta (u otro medio) de aquellos ficheros de traza on-line cuando éstos se llenan siempre que esté habilitado el modo ARCHIVELOG. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 33 FUNCIONAMIENTO DE ORACLE El Program Interface El program interface actúa como interface entre los programas de usuario (aplicaciones, programas batch, etc ...) y los programas de ORACLE. Las funciones principales de éste son: - Asegurar una barrera de seguridad, previniendo la Base de Datos de accesos destructivos de procesos de usuarios no deseados, - Actuar como un mecanismo de comunicaciones entre los procesos de usuario y la Base de Datos, transformando y traduciendo datos y errores de ésta entre posiblemente ordenadores diferentes y aplicativos con tipo de datos distintos, - Formatear la información requerida de la Base de Datos, traduciendo y devolviendo errores. Por ello, decimos que el program interface es un nivel, o 'capa' situada entre la Base de Datos y los aplicativos de los usuarios. La estructura viene definida a partir de estructuras básicas, entre las que pueden distinguirse las siguientes: - UPI, User Program Interface (Program Interface del Usuario), - OPI, ORACLE Program Interface ( Program Interface de ORACLE), - Drivers, por ejemplo de comunicaciones, - Software de Comunicaciones propio del sistema operativo, - OCI, ORACLE Call Interface (Call Interface de ORACLE), - SQL, Interface del Precompilador de SQL. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 34 FUNCIONAMIENTO DE ORACLE Usuarios, Seguridad de Acceso. Hasta ahora hemos hablado de los elementos esenciales que integran el SGBD, pero es precisamente la presencia de los usuarios lo que activa la ‘maquinaria’ del producto ORACLE. Obviamente, sin la existencia de dichos usuarios no se justificaría de ningún modo la presencia de todas las estructuras vistas anteriormente. En éste capítulo distinguiremos la accesibilidad de los usuarios respecto a la Base de Datos y de éstos hacia cada uno de los objetos definidos en ésta. Usuarios y Base de Datos Empezaremos por definir los tipos de acceso que se le otorga a un usuario, la manera en que se puede cambiar los atributos de éste y un procedimiento útil a seguir para la creación de los usuarios de la Base de Datos. Una de las tareas encomendadas al Administrador de la Base de Datos es la de permitir la entrada a aquellos usuarios que deban tener acceso a ésta de una manera controlada. Para ello, el usuario debe tener un nombre de usuario y una contraseña de entrada definida en la Base de Datos ORACLE. Una vez creado el usuario, ORACLE define una serie de prioridades que pueden ser otorgadas a éstos. Dichas prioridades marcan el tipo de acceso que un usuario puede realizar a la Base de Datos. La información referente a dichos privilegios, así como aquella asociada a cada usuario, queda almacenada en el diccionario de la Base de Datos, y por ello en éste tenemos información acerca de: - El tipo de acceso del usuario a la Base de Datos, es decir acceso del tipo CONNECT, RESOURCE o DBA, - Tablespace por defecto asociado al usuario, y por ello tablas, índices, etc. ... asociados a dicho tablespace, - tablespace temporal para la ejecución de aquellos procesos que los requieran, - Cuota de tablespace máxima de utilización dentro del tablespace. Como hemos visto anteriormente, es posible asociar un privilegio a cada uno de los usuarios de la Base de Datos, de manera que éste le permite realizar una serie de acciones u otras en función de dicho privilegio. En ORACLE es posible definir hasta tres tipos de entrada diferentes a la Base de Datos cada uno de ellos con unas peculiaridades. Veamos cada uno de ellos: - Usuarios con privilegio CONNECT: a un usuario con éste tipo de privilegio sólo le es permitido una conexión simple a la Base de Datos. De ésta manera, dicho usuario podrá ejecutar cuantas transacciones requiera siempre que sean del tipo: Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 35 FUNCIONAMIENTO DE ORACLE - Conexión a la Base de Datos (CONNECT), - Consultas con tablas, vistas de otros usuarios, (SELECT) siempre que dichos objetos tengan uso público o uso privado definido para dicho usuario (veremos posteriormente los privilegios que pueden tener los objetos de la Base de Datos), - Realizar operaciones de modificación e inserción (UPDATE, INSERT) contra objetos de la Base de Datos con privilegios para ello, - Crear objetos propios tales como vistas, sinónimos y enlaces a Bases de Datos externas. Sin embargo, no podrá crear tablas, clústers, secuencias o índices. Aquellos usuarios que convivan en un entorno con más de una Base de Datos deberán tener el privilegio CONNECT en cada una de las Bases de Datos en donde deseen acceder. - Usuarios con privilegio RESOURCE: los usuarios con el privilegio RESOURCE adquieren automáticamente los privilegios anteriormente vistos. Además, éste privilegio permite la posibilidad de crear aquellos objetos de la Base de Datos que no es posible crear con el privilegio anterior, es decir crear tablas, clústers, secuencias e índices. El privilegio RESOURCE puede darse de tres maneras diferentes: - Sin restricciones de acceso a ninguna de las tablas de la Base de Datos, - Restringiendo el acceso a aquellas tablas de la Base de Datos asociadas a un tablespace, - Especificando una cuota de espacio para aquellas tablas pertenecientes a un tablespace. La manera normal de operar, y la que asegura una protección a la Base de Datos es la permitir a todos los usuarios un acceso con CONNECT a toda la Base de Datos, y asociar a los tablespaces requeridos el privilegio de RESOURCE a los usuarios que lo soliciten. - Usuarios con privilegio DBA: los usuarios con el privilegio DBA tienen asegurados los privilegios anteriores. Además pueden realizar las siguientes operaciones: - Acceder a cualquier tabla existente en la Base de Datos y ejecutar cualquier instrucción SQL sobre ésta, - Dar y/o eliminar los privilegios sobre objetos existentes a cualquiera de los usuarios, - Crear sinónimos de uso público, - Crear y/o modificar tablespaces, así como operar con ellos (poner en on/off-line, realizar copia de seguridad de un tablespace, etc. ...). Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 36 FUNCIONAMIENTO DE ORACLE Aunque el número de usuarios DBA en un sistema ORACLE no está restringido, no es correcto que dicho número sea ilimitado por razones obvias. Por defecto, las instalaciones de ORACLE vienen configuradas con dos usuarios del tipo DBA, los usuarios SYSTEM y SYS. Es importante que tanto los privilegios como las características de éstos no sean alterados. Es posible modificar los privilegios que a un usuario se le han otorgado, ya sea para incrementar las operaciones que éste puede realizar, como para disminuirlas. Existen otros atributos asociados a un usuario, alguno de ellos vistos anteriormente. Estos son: - El tablespace por defecto al sobre el que un usuario trabaja, y por tanto sobre el que creará sus objetos, - El tablespace temporal por defecto de dicho usuario, - La cuota de espacio permitida a un usuario sobre un tablespace. - Definiendo un usuario con el prefijo ‘OPS$’ en el nombre de un usuario, permitiremos un acceso directo2 a la Base de Datos de éste, tomando el nombre de usuario de sistema operativo. Es decir un usuario de sistema operativo llamado ‘alfonso’ tendrá acceso directo siempre que exista en la Base de Datos un usuario llamado ‘ops$alfonso’. Por todo ello, seguiremos el siguiente procedimiento para crear un usuario en la Base de Datos ORACLE: 1- Decidir el nombre y contraseña inicial del usuario, 2- Decidir si dicho usuario es de acceso directo, por ello añadiremos al nombre del usuario el prefijo ‘OPS$’, 3- Si el usuario va a crear objetos, identificar sobre que tablespace realizará dichas operaciones de creación de objetos. Identificar el tablespace temporal que dicho usuario utilizará, 4- Decidir el tipo de acceso, así como la cantidad de espacio permitido sobre cada tablespace, 5- Permitir el privilegio RESOURCE sobre el tablespace requerido, con la cuota de espacio necesario, así como marcar el tablespace temporal que utilizará (según pto. 3), 6- Informar al usuario de su nombre de usuario, password y si es de acceso directo o no. Usuarios y los Objetos de la Base de Datos 2 Acceso directo a la Base de Datos indica que podemos omitir la entrada de nombre_usuario/password en cualquier producto ORACLE simplemente pulsando Intro/Intro en cada una de ellas. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 37 FUNCIONAMIENTO DE ORACLE Este apartado está especialmente indicado a aquellos usuarios a los que se les ha asignado el privilegio DBA ya que éste explica, entre otras, los posibles accesos que puede realizarse hacia un objeto. Como ya es sabido, un objeto tiene como característica principal la del propietario, es decir, la persona que creó dicho objeto (mediante la instrucción CREATE TABLE, INDEX, VIEW, etc.). Este propietario, en principio, está autorizado al acceso de todos los datos que representa dicho objeto (es decir, acceso a todas las filas y columnas) y a conceder acceso parcial o total a otros usuarios (mientras que un usuario del tipo DBA no se quite ésta propiedad sobre el objeto determinado). Veamos los tipos de accesos que es posible definir a partir de la instrucción que permite otorgar dichos accesos: GRANT SELECT, UPDATE, INSERT, DELETE, INDEX ON objeto TO usuario WITH GRANT OPTION Ello nos indica los tipos de acceso que es posible otorgar a un usuario no propietario de un objeto. Por ello diremos que los usuarios podrán consultar, modificar y añadir filas o borrarlas (SELECT, UPDATE, INSERT, DELETE respectivamente) sobre un objeto según el acceso que se haya definido sobre él. El parámetro WITH GRANT OPTION indica que el usuario, a su vez, puede otorgar accesos a otros usuarios. El acceso INDEX indica el uso, en caso de que existan, de los índices asociados al objeto. Este tipo de acceso está definido especialmente sobre tablas y vistas. Existen algunas restricciones tales como: - No es posible ejecutar instrucciones del tipo UPDATE, INSERT o DELETE sobre vistas que estén basadas en expresiones, joins o operadores de conjunto (UNION, INTERSECT, etc. ...), - Los propietarios de una vista B basada en una tabla A no pueden otorgar a su vez acceso a otros usuarios en la vista B si no poseen el privilegio sobre la tabla A. La instrucción GRANT permite, además, otorgar un acceso parcial a las columnas que el objeto representa. De ésta manera, es posible ejecutar la instrucción: GRANT SELECT, UPDATE, ... REFERENCES (columna_1, columna_2, ...) ON objeto TO usuario WITH GRANT OPTION Obviamente, el uso de las opciones DELETE y REFERENCES son incompatibles, así como cualquiera de las opciones UPDATE, INSERT, DELETE, INDEX sobre secuencias. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 38 FUNCIONAMIENTO DE ORACLE De la misma manera que es posible definir GRANTs sobre objetos, es posible revocar dicho acceso sobre los mismos. La instrucción: REVOKE SELECT, UPDATE, INSERT, DELETE, INDEX ON objeto permite dicha acción. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 39 FUNCIONAMIENTO DE ORACLE La Estructura de Datos Ejemplo. Veamos lo anteriormente expuesto en un ejemplo práctico. Esta podría ser la estructura de datos simple de una empresa que haya elegido como gestor de Base de datos un entorno ORACLE: Estructura Lógica de la Base de Datos: B. Datos TABLESPACES OBJETOS BASE DATOS EJEMPLO SYSTEM TABLAS SISTEMA PERSONAL EMPLEADOS SALARIOS CATEGORIAS ASISTENCIA ... ... CONTABILIDAD ASIENTOS APUNTES CENTROS ... DE COSTE B.Datos BASE DATOS DESARROLLO APLICATIVOS TABLESPACES OBJECTOS DESARROLLO_1 TABLAS DE PRUEBA PARA DESARROLLO DE PROGRAMAS SEGMENTOS ROLLBACK RS_BIG RS_2 RS_3 RS_4 RS_5 RS_6 RS_7 ... ... RS_8 ADMINISTRACION FACTURAS RECIBOS CLIENTES RS_9 ... ... IND_1 IND_3 INDICES IND_2 IND_N TEMPORAL ... ... RS_10 Estructura Física de la Base de Datos: Ficheros de Base de Datos /home/oracle/dbs_1/system.dbf /home/oracle/dbs_1/personal.dbf /home/oracle/dbs_1/contabilidad.dbf /home/oracle/dbs_1/administración_1.dbf /home/oracle/dbs_1/administracion_2.dbf /home/oracle/dbs_1/indices_1.dbf /home/oracle/dbs_1/indices_2.dbf /home/oracle/dbs_1/temporal.dbf /home/oracle/dbs_2/temporal.dbf /home/oracle/dbs_3/desarrollo.dbf Montado en Disco Disco A Disco B Disco A Disco B Disco B Disco C Disco C Disco C Disco D Disco D Ficheros de Traza /home/oracle/dbs_t/trazas.dbf Montado en Disco Disco C Figura 13. Ejemplo de la Estructura Global de una Base de Datos Real. En ésta se presentan seis tablespaces asociados a la Base de Datos Corporativa. Uno para cada una de las áreas en que hemos dividido la empresa, y por tanto la Base de Datos asociada. Para ello hemos creado los tablespaces 'Personal', 'Contabilidad', 'Administración'. Estos contendrán las tablas de datos asociadas a cada área que representan, de ésta manera, el primer tablespace 'Personal' contendrá las tablas de 'Empleados', 'Categorías', 'Salarios', 'Asistencia', etc. ..., el segundo, las tablas de 'Asientos', 'Apuntes', 'Centros de Coste', etc. ... Se ha reservado un tablespace 'Indices' al Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 40 FUNCIONAMIENTO DE ORACLE que se le han asociado los índices de las tablas de los tablespaces anteriores. El tablespace 'Temporal' contiene todos aquellos objetos utilizados en la Base de Datos que no están representados en ningún tablespace particular y que sean utilizados de manera temporal, por ejemplo tablas de datos e índices utilizados por procesos batch, etc. ... . De ésta manera los accesos a las tablas, y por tanto a sus índices se reparten de una manera más uniforme a lo largo del disco ya que debemos tener en cuenta que el acceso a un registro de una tabla que tiene asociado un índice supone el acceso a un registro de índice para cada uno de los índices definidos para la tabla. Bartomeu Vives Sansó , 1999 4003 – Laboratori de software de gestió Curs 2006/2007 Pag 41