Universidad Central de Venezuela Facultad de Ciencias Escuela de Computación Administración de Base de Datos TALLER 1 MODELOS INTERNOS I – Parte Teórica: 1.- ¿Qué es una Base de Datos? Una Base de Datos es una serie de datos organizados y relacionados entre sí, independiente de su utilización y su implementación en maquinas accesibles en tiempo real y compatibles con usuarios concurrentes con la necesidad de diferente información y no predicable en el tiempo. 2.- ¿Qué es un Sistema Manejador de Base de Datos? Es un conjunto de programas que se encargan de manejar la creación y todos los accesos a las bases de datos. Se compone de un lenguaje de definición de datos (DDL: Data Definition Language), de un lenguaje de manipulación de datos (DML: Data Manipulation Language) y de un lenguaje de consulta (SQL: Structured Query Language). El lenguaje de definición de datos (DDL) es utilizado para describir todas las estructuras de información y los programas que se usan para construir, actualizar e introducir la información que contiene una base de datos. El lenguaje de manipulación de datos (DML) es utilizado para escribir programas que crean, actualizan y extraen información de las bases de datos. El lenguaje de consulta (SQL) es empleado por el usuario para extraer información de la base de datos. El lenguaje de consulta permite al usuario hacer requisiciones de datos sin tener que escribir un programa, usando instrucciones como el SELECT, el PROJECT y el JOIN. 3.- Oracle como SMBD Oracle es un sistema de base de datos objeto - relacional extremadamente potente y flexible, esta potencia y flexibilidad, sin embargo, implica también una cierta complejidad. Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando su: Soporte de transacciones. Estabilidad. Escalabilidad. Editado: Semestre I-2009 GABD/DD Soporte multiplataforma. La Corporación Oracle ofrece este RDBMS como un producto incorporado a la línea de producción. Además incluye cuatro generaciones de desarrollo de aplicación, herramientas de reportes y utilitarios. Una Base de Datos Oracle es un conjunto de datos almacenado sobre los cuales se puedan realizar operaciones. Los datos están almacenados en páginas de disco y están relacionados entre sí. Una Base de Datos Oracle está almacenada físicamente en archivos y la correspondencia entre los éstos y las tablas es posible gracias a las estructuras internas de la BD, las cuales permiten que diferentes tipos de datos estén almacenados físicamente separados y se puedan acceder utilizando los métodos de acceso definidos. Oracle como SMBD consta de tres partes bien definidas, que se mencionan a continuación: 1.- Instancia de Oracle: Es un conjunto de procesos y estructuras que permiten la interacción entre los usuarios y los datos almacenados. La instancia de Oracle es la combinación procesos de background y estructuras de memoria. Una instancia debe estar levantada para acceder a una base de datos oracle. Cada vez que una instancia de oracle es levantada, el sistema genera el SGA (System Global Area) y se levantan una serie de procesos de background. La instancia a su vez se subdivide en estructuras, las cuales son: Editado: Semestre I-2009 GABD/DD 1.1.- Estructura de Memoria: Se almacenan los ejecutables del software Oracle y todo el sistema necesario para el tratamiento del SMBD. La filosofía de Oracle es albergar la máxima cantidad de información en memoria con el objeto de acelerar el tratamiento de los datos. La estructura de Oracle en memoria se divide en: 1.1.1.- SGA (System Global Area): Es el área de memoria utilizada para almacenar temporalmente información de la base de datos que es utilizada y compartida por los procesos de base de datos. La SGA puede estar compuesta por muchas estructuras, pero al menos encontraremos tres estructuras internas básicas que son Shared Pool, Data Buffer Cache y Redo Log Buffer. Shared Pool: Es una estructura de memoria que almacena las sentencias de SQL que han sido usadas recientemente, al igual que los datos del Diccionario de Datos que han tenido los últimos accesos. Data Base Buffer Cache y Redo Log Buffer: En estas estructuras se almacenan la data usada más recientemente y lo últimos registros de los archivos logs creados. El DB buffer es usado para enviar información a o leer de información de los Archivos de Datos. El Redo Log buffer es usado para seguir los cambios hechos a la BD. Hay que mencionar que existen otros tipos de estructuras adicionales a los mencionados, como lo son: o Java Pool: Usada para guardar código Java a ejecutar. o Large Pool: Usada para mover grandes cantidades de datos, por ejemplo al hacer backups o restauraciones de la información. 1.1.2.- PGA (Program Global Area) es un área de memoria usada para almacenar data e información de control necesaria para el proceso de servidor. A diferencia de la SGA, la PGA es usada por un único proceso, el del servidor. La PGA es iniciada con el proceso de servidor y terminada, cuando dicho proceso muere. Entre los componentes principales del PGA, se encuentra: Sort Area: esta área es utilizada para la ordenación de sentencias. Session information: contiene los privilegios de usuario, así como estadísticas de sesión. 1.2.- Archivos de Configuración (init.ora): Archivo de inicialización de valores para el arranque de la instancia y para el establecimiento de configuraciones Oracle. Se especifican parámetros predeterminados con el valor que se desee, con el fin de optimizar los rendimientos o adecuar los recursos. Será donde se establezcan todos los parámetros para que Oracle trabaje de una u otra forma. Estos archivos son independientes por instancia, es decir, habrá tantos archivos de configuración como instancias activas en el sistema de información. Editado: Semestre I-2009 GABD/DD 1.3.- Procesos Background: Serie de procesos encargados de mantener, manejar y controlar todo el SMBD. Existen unos procesos estándar, que Oracle activa siempre que ejecuta una instancia, y otros que dependerán de las configuraciones establecidas en el fichero de inicialización (init.ora) Los procesos estándar que Oracle siempre se activa son: SMON (System Monitor): Verifica la consistencia de la BD, si es necesario, recupera parte de la BD cuando esta es abierta. PMON (Process Monitor): Proceso que se encarga de monitorear a los otros procesos. En caso de falla, libera los recursos que son utilizados por el o los procesos que presentan el problema. CKPT (Check Point): Actualiza el estado de la BD en los Control Files y los Data Files cuando los cambios de los buffers pasan a la BD. LGWR (Log Writer): Proceso que se encarga de actualizar los Log Files con los datos que se encuentran en el buffer de Redo Log. DBWR (Data Base Writer): Proceso que se encarga de actualizar los Data Files con los datos que se encuentran en el buffer de Datos. Otros: pueden ser procesos como Dnnn, que es el despachador de peticiones por parte del proceso de servidor, el LCKn es el proceso encargado de gestionar bloqueos entre distintas instancias, entre otros. 2.- Base de Datos de Oracle: Una Base de Datos Oracle es un conjunto de datos almacenado y accesible según el formato de tablas relacionales. Una Base de Datos Oracle está almacenada físicamente en ficheros, y la correspondencia entre los ficheros y las tablas es posible gracias a las estructuras internas de la BD, que permiten que diferentes tipos de datos estén almacenados físicamente separados. Está división lógica se hace gracias a los espacios de tablas, tablespaces. A su vez una base de datos esta conformada de estructuras, como son: 2.1.- Data Files (Archivos de Datos): Son los archivos que proveen almacenamiento físico de la información de la BD. Estos archivos se emplean para asegurando que los datos puedan ser recuperados en caso de falla. Existen también otros tipos de archivos dentro de Oracle, que a pesar de que no son Data Files, forman parte de la Base de Datos. Estos archivos se usan para configurar la instancia, autenticar usuarios y recuperar la BD en caso de falla. 2.2.- Control file (Archivos de control): Mantienen la información física de todos los ficheros que forman la BD, camino incluido; así como el estado actual de la BD. Son utilizados para mantener la consistencia interna y guiar las operaciones de recuperación. Son imprescindibles para que la BD se pueda arrancar. Contienen: Editado: Semestre I-2009 GABD/DD Información de arranque y parada de la BD Nombres de los archivos de la BD y redo log. Información sobre los checkpoints. Fecha de creación y nombre de la BD. Estado online y offline de los archivos. Debe haber múltiples copias en distintos discos, oracle garantiza que exista un respaldo, pero puede haber más de uno, por seguridad para protegerlos de los fallos de disco. La lista de los ficheros de control se encuentra en el parámetro CONTROL_FILES, que debe modificarse con la BD parada. 2.3.- Redo Log file (Archivos de transacciones): Los registros Redo describen los cambios realizados en la BD y son escritos en los ficheros redo log para que puedan ser utilizados en las operaciones de recuperación hacia adelante, roll-forward, durante las recuperaciones de la BD. Pero antes de ser escritos en los ficheros redo log son escritos en un caché de la SGA llamado redo log buffer. El servidor escribe periódicamente los registros redo log en los ficheros redo log. El tamaño del buffer redo log se fija por el parámetro LOG_BUFFER. 2.4.- Archivo Alerta: Si la escritura en un fichero redo log falla pero el LGWR puede escribir al menos en uno de los miembros del grupo, lo hace , ignorando el fichero inaccesible y registrando un fallo en un fichero de traza o alerta. Oracle crea ficheros de traza automáticamente cuando ocurre algún error. 3.- Entorno Cliente / Servidor Sistema basado en compartir aplicaciones y/o datos a través de una red. El entorno cliente/servidor básico, quedaría establecido de la siguiente manera: Servidor de datos compartido, donde estará ubicado el SMBD Oracle, el software del servidor y la propia estructura física de los datos. Puestos de trabajo de los usuarios, donde se ubicará el software cliente Oracle. Infraestructura de conexión, para establecer las comunicaciones, tanto físicas como lógicas, entre las estaciones de los clientes y el servidor de datos. Software de comunicaciones. Editado: Semestre I-2009 GABD/DD 1.- Estructura Lógica 1.1.- Tablespaces (Espacio de Tablas): Cuando se crea una base de datos es obligatorio crear un tablespace inicial en el que se van a crear los usuarios SYS y SYSTEM automáticamente, los cuales tienen permisologías del sistema para tareas de administración, como por ejemplo, creación de tablespaces, usuarios y base de datos. El tablespace inicial se llama por defecto SYSTEM, en el cual residen todos los objetos de los usuarios SYS y SYSTEM. Cuando se crea un tablespace se le asigna un espacio en disco reservado de inmediato por el SMBD Oracle. Dicho espacio se puede gestionar para que su crecimiento sea dinámico. Los parámetros de crecimiento del tamaño de los tablespaces se especifican durante la creación de los mismos. Tablespace Temporal: Es aquel en el que solamente se pueden tener objetos temporales. No se pueden crear objetos permanentes como los índices, tablas y segmentos de rollback. Están especialmente preparados para optimizar las operaciones que requieren ordenar o agrupar datos, así como la creación de índices y cálculos de estadísticas. Editado: Semestre I-2009 GABD/DD 1.2.- Segmento. Un segmento almacena la información de una estructura lógica de Oracle dentro de un tablespace. Existen cuatro tipos de segmentos: Segmentos de datos, Segmentos de índices, Segmentos de Rollback y Segmentos Temporales. 1.2.1.- Segmentos de Datos. Cada una de las tablas se almacena en un segmento de datos (excepto los clusters). El segmento se especifica en la sintaxis de la creación de las tablas, mediante los parámetros de control de almacenamiento (PCTFREE y PCTUSED) y la evolución de los segmentos; ésta última viene dada por los siguientes parámetros: INITIAL: Tamaño de la extensión inicial del segmento. NEXT: Tamaño de las próximas extensiones. PCTINCREASE: Porcentaje que debe crecer cada nueva extensión. MINEXTENTS: número de extensiones que tendrá inicialmente la tabla. MAXEXTENTS: número de extensiones máximas que tendrá la tabla. 1.2.2.- Segmentos de índices. Cada índice es almacenado en un solo segmento. Durante su creación se puede especificar el parámetro PCTFREE, el tablespace y la forma en que se creará el segmento. 1.2.3.- Segmentos de RollBack. Este segmento almacena todas las acciones producidas por una transacción y se utiliza para deshacer las transacciones y recuperar la BD en caso de una falla. Cada BD contiene uno o más segmentos de rollback. Durante la creación del segmento de rollback se especifica los siguientes parámetros: Valor mínimo (MINEXTENTS). Generalmente es 2 OPTIMAL indica el tamaño óptimo. 1.2.4.- Segmentos temporales. Oracle necesita un espacio temporal para guardar los resultados intermedios, los cuales se crean y eliminan automáticamente cuando sean necesarios. Estos segmentos se crean por defecto en el tablespace SYSTEM. 1.3.- Extents. Un extent es una unidad lógica de almacenamiento formada por un número determinado de bloques de datos contiguos. La agrupación de uno o varios extents forman un segmento que puede ser una tabla, un índice, un segmento de rollback o un segmento temporal. Además, los datos de una tabla estarán en un segmento tipo tabla, que a su vez estará formado por uno o varios extents; cada uno de estos estén están organizados en forma de bloques de datos. 1.4.- Bloques de Datos. Son unidades lógicas y están relacionadas con los segmentos y extents. Un segmento está formado por una o varias extensiones y cada extent está formado por varios bloques. Un bloque es la unidad mínima de almacenamiento de información. A los bloques también se les conoce como "bloques de datos", "bloques lógicos" o "bloques oracle". Cada uno de estos bloques está formado por un número determinado de bloques del sistema operativo. A la hora de crear una nueva base de datos se debe indicar cuántos bloques de sistema operativo formarán un bloque de datos o bloque Oracle. Es muy Editado: Semestre I-2009 GABD/DD importante decidir bien este valor de antemano ya que una vez creada la base de datos ya no se puede modificar más que en migraciones a versiones más actuales del producto. Un bloque de datos es la mínima unidad de Lectura / Escritura en una base de datos Oracle, es decir, el SMBD Oracle no lee y escribe en bloques del sistema operativo sino que lo hace en unidades lógicas que son los bloques de datos y que varían de una base de datos a otra en la misma máquina ya que es un valor que se debe indicar en la creación de cada base de datos. Oracle recomienda que el tamaño de un bloque de datos sea siempre un múltiplo del bloque de datos del sistema operativo. 2.- Estructura Física 2.1.- Datafile: Es un archivo físico donde se almacenan los objetos que forman parte de un tablespace. Un tablespace puede estar formado por uno o varios datafiles. Un datafile pertenece solamente a un tablespace y a una instancia de base de datos. Cuando se crea un datafile se debe indicar su nombre, ubicación física de disco, tamaño y el tablespace al que va a pertenecer. El SMBD reserva el espacio siempre y cuando haya disponibilidad suficiente de espacio en disco para crear dicho archivo; de lo contrario se producirá un error y no será creado. En dicho tablespace se irán almacenando lógicamente los elementos de datos (tablas, datos, índices, etc.) y físicamente se van guardando en los datafiles asignados a dicho tablespace. No se puede controlar en qué archivo físico se almacenan los datos de un tablespace. Si un tablespace está formado por 2 datafiles y tenemos una tabla en ese tablespace, a medida que vamos insertando filas éstas se almacenarán indistintamente en cualquiera de los dos datafiles. El espacio total disponible en un tablespace es la suma de los tamaños que ocupan los datafiles que lo componen. 2.2.- OSBlock: Son simplemente los bloques en memoria del sistema operativo. Parámetros de control de almacenamiento 1.- PCTFREE. Define el porcentaje de espacio libre que se debe reservar, por cada bloque de datos, para las actualizaciones sobre los registros. Este parámetro es un valor entero entre 0 y 99, que considera las actualizaciones sobre los registros de la tabla. Por ejemplo, supongamos una tabla de empleados; dicha tabla almacena datos de trabajadores de la empresa, la cual está dividida en distintos bloques de datos. Si el primer bloque de datos de la tabla se encuentra lleno y se desea modificar el nombre de un empleado, si no se dispone de espacio en el bloque para almacenar los caracteres adicionales, se requiere del pctfree como espacio libre para actualizaciones sobre los registros. Editado: Semestre I-2009 GABD/DD 2.- PCTUSED. Está directamente relacionado con el pctfree, ya que define el porcentaje que se debe haber liberado del bloque de datos para poder hacer nuevas inserciones sobre dicho bloque. Al igual que el pctfree, el pctused es un entero entre 0 y 99. La utilidad del mismo se ve reflejada en el momento que se borran registros de un bloque que se encontraba ocupado. Es ilógico bloquear escrituras sobre dicho bloque, ya que estaríamos inutilizando espacio de disco. Parámetros de control de concurrencia 1.- INITRANS. Determina el número mínimo de transacciones simultáneas que pueden hacer cambios sobre un bloque de datos. Cuando se manipula el initrans Oracle reserva (23 * n) bytes de cabecera para garantizar la atención de las n transacciones sobre dicho bloque de datos. 2.- MAXTRANS. Define el número máximo de transacciones simultáneas que pueden hacer cambios sobre un bloque de datos. Se utiliza para limitar la concurrencia. Listado de consultas básicas disponibles en Oracle: Consultar los datafiles usando la vista v$datafile ó SYS.GV_$DATAFILE ó consultando la tabla DBA_DATA_FILES. Consultar los segmentos de rollback usando la tabla DBA_ROLLBACK_SEGS Consultar los redo log files usando la vista V$LOGFILE Consultar los archived log usando la vista V$ARCHIVED_LOG Consultar los datos del buffer usando la vista V$BUFFER_POOL Consultar los control files usando la vista V$CONTROLFILE Consultar los archivos de Base de datos usando la vista V$DBFILE Consultar la instancia de Base de datos usando la vista V$INSTANCE Consultar los valores del SGA usando la vista V$SGA o show SGA. Consultar los datos contenidos en la vista V$DB_CACHE_ADVICE Consultar los datos del Area de SQL contenidos en la vista V$SQLAREA Verifique cuál es la configuración actual del SMBD. Use la vista V$PARAMETER. Sintaxis de creación de tablespace: Editado: Semestre I-2009 GABD/DD CREATE [UNDO] TABLESPACE tablespace_name DATAFILE Datafile_Options Storage_Options; Storage_Options: DEFAULT [COMPRESS|NOCOMPRESS] STORAGE storage_clause MINIMUM EXTENT int {K|M} BLOCKSIZE int K LOGGING | NOLOGGING FORCE LOGGING ONLINE | OFFLINE PERMANENT | TEMPORARY EXTENT MANAGEMENT {DICTIONARY | LOCAL {AUTOALLOCATE | UNIFORM [SIZE int K | M]} } SEGMENT SPACE MANAGEMENT {MANUAL | AUTO} storage clause: INITIAL int K | M NEXT int K | M MINEXTENTS int MAXEXTENTS int MAXEXTENTS UNLIMITED PCTINCREASE int FREELISTS int FREELIST GROUPS int OPTIMAL OPTIMAL int K | M OPTIMAL NULL BUFFER POOL {KEEP|RECYCLE|DEFAULT} Sintaxis de creación de tablas: CREATE TABLE [usuario.]tabla ({Columna tipo_dato [DEFAULT expresion] [restricción_columna] | restricción_tabla}, [{columna tipo_dato [DEFAULT expresion] [restricción_columna] | restricción_tabla}]...) [PCTFREE entero] [PCTUSED entero] [STORAGE ([INITIAL entero [k|M]] [NEXT entero [K|M]] [PCTINCREASE entero] [MINEXTENTS entero] [MAXEXTENTS entero]) [TABLESPACE espacio_tabla] Sintaxis de creación de segmentos de rollback: CREATE ROLLBACK SEGMENT segmento Editado: Semestre I-2009 GABD/DD [TABLESPACE espacio_tabla] [STORAGE ([INITIAL entero [K|M]] [NEXT entero [K|M]] [PCTINCREASE entero] [MINEXTENTS entero] [MAXEXTENTS entero] [OPTIMAL (entero [K|M] | NULL}]) Comandos que pueden requerir de segmentos temporales: CREATE INDEX SELECT ... ORDER BY SELECT DISTINCT SELECT ... GROUP BY SELECT ... UNION SELECT ... INTERSECT SELECT ... MINUS Datafile_Options: 'filespec' [AUTOEXTEND OFF] 'filespec' [AUTOEXTEND ON [NEXT int K | M] [MAXSIZE int K|M]] II - Parte Practica: 1. Cree un tablespace de 3 Mb cuyo nombre debe ser TSDATA_XX, donde XX es el código de usuario que usted tiene asignado. El datafile asociado deberá tener un tamaño inicial de 1 Mb y deberá denominarse DFDATA1_XX. Ayuda: Use las vistas V$TABLESPACE, V$DATAFILES del diccionario de datos para verificar el resultado. 2. Agregue un datafile de 2Mb al tablespace TSDATA_XX con la opción de autoresizing, y con un tamaño máximo de 5 Mb. Verifique los resultados con la vista V$DATAFILE. 3. Redimensione el tamaño del datafile a 5 Mb. Consulte como quedaron finalmente los datafiles. 4. Cree un tablespace temporal llamado TSTEMP_XX de 1 Mb. 5. Desactivar (colocar OFFLINE) el tablespace TSTEMP_XX usando el comando ALTER TABLESPACE. Use la vista V$DATAFILE para confirmar. 6. Cree la tabla Producto (código, nombre) en el tablespace TSTEMP_XX. ¿Qué observa?. Ahora intente crearla en el tablespace TSDATA_XX. Consulte la estructura de la tabla Producto. 7. Eliminar el tablespace TSTEMP_XX. Verifique que efectivamente este tablespace no existe en la base de datos. 8. Verifique la cantidad, status y tamaño de cada uno de los tablespace existente en el sistema. 9. Use la vista DBA_SEGMENTS para que identifique los tipos de segmentos existentes en el sistema. 10. Elimine el tablespace TSDATA_XX 11. Cree una tabla cualquiera en el tablespace de datos. Asuma que va a tener un alto grado de actualizaciones (manipule el pctfree, el pctused, el initrans y el maxtrans para que el manejo de la tabla sea eficiente). 12. En el tablespace TSDATA_XX, crear las tablas: Producto (Codigo, Nombre) Editado: Semestre I-2009 GABD/DD Vendedor (CI, Nombre, Edad, FechaNac, Sexo) 13. Inserte un producto, 2 vendedores. Consulte la información insertada. 14. A la tabla Producto agregue la columna Precio, para saber cual fue el precio del producto en particular. 15. Consulte los extends usados por la tabla Producto. Use la tabla DBA_EXTENDS 16. Consultar el espacio disponible por cada tablespace. Use la vista DBA_FREE_SPACE. 17. Verifique el porcentaje de espacio usado de cada uno de los tablespaces (o datafiles asociados). Use la vista DBA_SEGEMENTS Editado: Semestre I-2009 GABD/DD