UNIVERSIDAD NACIONAL “SAN LUIS GONZAGA” DE ICA FACULTAD DE INGENIERIA DE SISTEMAS TESIS PARA OPTAR EL TITULO PROFESIONAL DE: INGENIERO DE SISTEMAS TEMA “Aplicación, Compilación e Intérprete de un Lenguaje en la Realización de Consultas para Base de Datos Múltiples” TESISTAS: BACHILLER: CAYO MORALES GERMAN BACHILLER: SCHIMIT CAMACHO, HANSY ICA – PERU 2010 DEDICATORIA: A mis padres quienes fueron los forjadores de mi carrera profesional, a mis hermanos quienes me apoyaron en todo momento para la culminación de mi carrera profesional. Germán DEDICATORIA: A mis padres y mis hermanos por ser los ejes en mi formación profesional. Hansy INDICE Introducción 1 Resumen 4 I. Planteamiento del Problema y Justificación 5 Antecedentes 5 Definición del Problema 5 Importancia de la Investigación 7 Objetivos 8 Objetivo General 8 Objetivos Específicos 8 Estrategia y Metodología 8 II. III. Capítulo I: Marco Teórico 9 1.1. Definición de DBMS 9 1.2. MYSQL 13 1.3. SQLSERVER 14 1.4. ORACLE 26 1.4.1. Programas y Archivos que componen Oracle 29 1.4.2. El PGA 30 1.4.3. El SGA 30 1.4.4. Diferentes Herramientas de Oracle 30 1.4.5. Estructura de bloqueo de código 33 1.4.6. Disparadores 34 1.4.7 Servicios de Seguridad 35 1.4.8. Administración de la Estructura de la Base de Datos 45 1.4.9. Funciones del Administrador de Base de datos 51 1.4.10. Usuarios de la Base de datos 55 Capitulo 2. Tecnologías Disponibles para la comunicación con fuentes de datos heterogéneas. 56 2.1. Compuertas para Base de Datos 56 2.2. Monitores de Procesamiento de Transacciones 57 2.3. Conectividad de Base de Datos abierto (ODBC) 58 2.4. Conectividad de Base de Datos Java 59 2.5. OLEDB 62 2.6. CORBA 63 Capítulo 3. Procesamiento de consultas en un sistema de base de datos múltiples 3.1. 3.2 65 Arquitectura de un Procesador de Consultas de base Datos múltiple 66 3.1.1. Analizador Léxico, Sintáctico y Validación. 68 3.1.2. Descomponedor de Consultas 68 3.1.3. El Generador de Planes. 69 El Catálogo de un SBDF 69 Capítulo 4. Lenguajes de bases de datos 71 4.1. Lenguaje de Consultas 71 4.2. Lenguaje de Manipulación de Datos 71 4.3. Lenguaje de Definición de Datos 72 4.4. Construcción de Lenguajes de Bases de Datos 72 4.5. Compiladores 73 4.5.1. Fases del un Compilador 73 4.6. Intérpretes 74 4.7. Lenguaje de Consultas de bases Datos múltiples 74 4.7.1. La fase de análisis de un lenguaje de consultas. 75 4.7.2. Detección e Información de Errores 76 Capítulo 5. LMBD: Un Lenguaje de Consulta Para un Sistema Multibase de Datos 78 5.1. Desarrollo del Analizador Léxico y Sintáctico 80 5.2. Desarrollo del Analizador Semántico 83 5.2.1. Reglas Semánticas 84 5.3. Desarrollo del Descomponedor de Consultas 85 5.4. Desarrollo del Despachador de Consultas 87 5.5. Desarrollo de la Interfaz de Usuario para la Captura y Presentación de Información 88 5.6. La Interface de Programación de la Aplicación de LMBD 91 Conclusiones Bibliografía Anexos Apéndice A. Reglas gramaticales de LMen su forma B Apéndice B. Tipos de conflictos de integración Apéndice C. Ejemplos de procesamiento de consultas multibase de datos Apéndice D. Algoritmo ordenamiento-mezcla para la operación reunión Apéndice E. Implementación en Java de la clase Result Apéndice F. Implementación en Java de la clase Metadatos INTRODUCCION La evolución de la computación ha dado origen a diversas formas de organización de la información. Debido a que la mayoría de las bases de datos son diseñadas e implementadas respondiendo a diferentes necesidades, en diferentes circunstancias y con diferentes recursos, da como resultado una amplia heterogeneidad entre los diversos depósitos de información. La información es el recurso clave tanto en los negocios, gobierno o ambiente académico. La forma en que la información se encuentra organizada es diversa, múltiples métodos de acceso a paradigmas para el manejo de información son utilizados. La necesidad de manipular información global requiere el accesar información desde distintas fuentes de datos y no es razonable tener que aprender distintos métodos de manipulación de datos y aun es menos razonable pensar que las organizaciones trasladen toda su información a un modelo de datos común y con una sola forma de manipularlos. De esta manera es necesario disponer de sistemas de base de datos que puedan operar sobre una red distribuida y puedan compaginar una mezcla heterogénea de computadoras, sistemas operativos, enlace de comunicaciones y sistemas manejadores de base de datos locales. Muchas organizaciones tienen diferentes computadoras y sistemas de base de datos. En la mayoría de los casos, este ambiente debe ser preservado mientras también existe la necesidad de compartir información en una o más bases de datos globales. La manipulación de datos global se requiere para recuperar y actualizar información semánticamente similar en diferentes nodos y con diferentes representaciones de datos. Las multibases de datos integran información desde bases de datos heterogéneas locales en un ambiente distribuido y presentan un acceso global a los usuarios con métodos transparentes para dar la información total en el sistema. La característica esencial es la autonomía que las bases de datos locales conservan para atender a aplicaciones existentes e incluso nuevas. Hay un amplio rango de soluciones para compartir información global en un sistema distribuido y la literatura utiliza una variedad de términos para describirlos: base de datos distribuidos, multibases de datos, bases de datos federadas, sistemas interoperables, etc. Todos estos términos describen un sistema distribuido que incluye un componente para acceso a la información global y múltiples componentes locales que manejan solo la información en un sitio. Las diferencias entre estos residen en la estructura de los componentes globales y cómo interactúan con los componentes locales. El objetivo de esta tesis es presentar una investigación en el campo de las multibases de datos. Se pretende mostrar un panorama claro de la forma en que una multibase de datos puede ser implementada y la tecnología disponible para este propósito. Además como parte práctica de esta investigación se ha desarrollado un prototipo capaz de integrar información desde dos bases de datos utilizando SQL como lenguaje de consulta y lo más importante: la transparencia con la que la recuperación de la información se lleva a cabo. En el capítulo I estudiaremos en qué consiste una multibase de datos, como se clasifican, se profundizara mas en las bases de datos federadas y por último se describirán trabajos que se han desarrollado en esta área y algunas de sus características. En el capítulo 2 se abordara uno de los aspectos más importantes en una multibase de datos, es decir, la conexión con las fuentes de datos. Se estudiaran distintas tecnologías que permitan establecer la comunicación con fuentes de datos heterogéneas y se profundizara más en la conocida como JDBC. En el capítulo 3 se estudia la arquitectura de un procesador de consultas multibase de datos, las funciones que desempeñan cada modulo, y la información que debe contener el catalogo de una multibase de datos como pieza clave de interacción con los distintos módulos. En el capítulo 4 se trata lo referente a los lenguajes para bases de datos, se da una clasificación, se describe la tecnología para el desarrollo de estos y se dan las bases para la implementación de un lenguaje de consulta. Por último el capitulo 5 describe la manera en cómo fue implementado el lenguaje de consulta para una multibase de datos como parte práctica de esta tesis. Se describen los algoritmos propuestos y se explica la implementación de los módulos del procesador de consultas multibase de datos. RESUMEN El presente proyecto de tesis presentará todo lo concerniente a la aplicación, compilación e intérprete de un Lenguaje de Consultas para base de datos múltiple, lo cual se apoya en la utilización del SQL Server como lenguaje de consulta integrando técnicas de manejo de sistemas Multidatos y Tecnologías disponibles para la comunicación con fuentes de datos heterogéneas. Así mismo se realizara todo lo concerniente al procesamiento de consultas de base de datos múltiples basados en la arquitectura de consultas de base de datos, desarrollando un catalogo de un SBDF También se investigará todo lo relacionado con el Lenguaje de consultas que pretenderá mostrar un panorama claro de la forma en que una multibase de datos puede ser implementada y la tecnológica disponible para este fin y se desarrollara un prototipo necesario para la integración de la información de las 2 bases de datos más utilizadas. SQL como lenguaje de consulta en la recuperación de la información. También se mencionarán la forma como será implementado el lenguaje de consultas para un sistema de base de datos múltiples y se describirán los algoritmos propuestos. I. PLANTEAMIENTO DEL PROBLEMA Y JUSTIFICACION En este acápite se dejara ver los diferentes motivos por los cuales se considera necesaria la realización de la monografía a desarrollar, de la misma manera se encontrará una documentación, de algunos antecedentes relevantes del tema central de este texto. Así mismos se hacen públicas las diferentes limitantes a las que está sometido el trabajo y por su puesto los objetivos que se fijaron desde el principio. Antecedentes A través del tiempo que han sido utilizadas las bases de datos, se han ido incorporando diferentes elementos que tienen como tarea el hacerlas más funcionales, robustas y amigables. Dentro de estas implementaciones se pueden mencionar la integridad referencial, implementación de transacciones, los procedimientos almacenados, actualización en cascada así como los disparadores y otros elementos. El tema del que trata este documento está relacionado con los procedimientos almacenados, por lo tanto en las siguientes líneas se describen que son éstos, así mismo se analizarán otros elementos que son necesarios para la comprensión de este documento. Definición del problema. Los principales problemas que se presentan en este momento en los proyectos referentes a bases de datos consisten en la incertidumbre que tiene el administrador de ellas a causa de la seguridad en los datos. Es decir, en algunos DBMS sobre todo de libre distribución, no brindan la posibilidad de implementar seguridad a nivel de registros y es por ello que se vuelve una verdadera pesadilla la administración de estas bases de datos. Uno de los problemas más palpables que solucionan los procedimientos almacenados se refiere al hecho de que en ocasiones mediante una sola consulta SQL(por muy elaborada que sea ésta), no es posible recuperar el total de la información requerida, y en consecuencia sea necesario la utilización de varias sentencias SQL para este fin. Este tipo de procesos tienen como consecuencia un cúmulo de consultas que están viajando del cliente al servidor y con ello contribuyendo a congestionar el tráfico de la red. Justificación del Problema El presente estudio se justifica por cuanto los sistemas de bases de datos se han ido incorporando a las diferentes empresas del país y del mundo con muy buena aceptación, es por ello que el presente estudio de investigación tendrá la responsabilidad de estar actualizando a las empresas en los temas que contribuyan a ofrecer un mejor servicio en la creación, administración y mantenimiento de estos elementos. Tengamos en cuenta la opinión de algunos expertos en las cuestiones informáticas que mencionan que la tendencia de todas las tecnologías van encaminadas hacia el Internet y para ciertos procesos largos como los que se exhibirán en algunos capítulos del documento es prácticamente imposible brindarlos sin la utilización de los lenguajes de consulta. Una de las consecuencias esperadas al seleccionar este tema fue sin duda alguna el incrementar la calidad de los proyectos, es decir, comenzar a incorporar algunos elementos sofisticados a las bases de datos con la finalidad de que el rendimiento obtenido sea el óptimo. Es imperante mencionar que desafortunadamente los textos con carácter de novedosos en el área de la tecnología se traducen (si es que llega a suceder) muchísimo tiempo después al español, es por ello que es difícil encontrar referencias de ellos en este idioma, así que realizando un esfuerzo por presentar una aportación en español se realizará este trabajo. Formulación del Problema ¿En qué medida la Aplicación, Compilación e Intérprete de un Lenguaje en la realización de consultas mejora la toma de decisiones en el manejo de la información? Importancia de la Investigación La investigación la consideramos de vital importancia, ya que la principal función de un lenguaje de consulta es la de efectuar la toma de decisiones en el manejo de la información de toda institución que le permitan poder competir en un mundo globalizado, y cada vez más competitivo; es por ello que se hace importante poder mejorar los lenguajes de consulta II. OBJETIVOS Objetivo General Hacer de conocimiento las características generales que tienen los sistemas multibases de datos para mejorar la seguridad y velocidad en sus bases de datos, y como utilizarlos. Objetivos Específicos • Que los usuarios consideren incorporar tecnologías para la comunicación de fuentes de datos heterogéneas. • Dar a conocer la estructura principal de un procesamiento de consultas en un sistema de base de datos múltiples. • Que se tenga en cuenta la utilización del Lenguaje de Consultas para un sistema de datos múltiples. III. Estrategia y Metodología. Diseño de la Investigación: Para el desarrollo del presente proyecto de investigación será de tipo: Aplicada y naturaleza práctica. Nivel de la Investigación El nivel del presente proyecto de investigación a desarrollarse será de tipo descriptivo. CAPITULO I: MARCO TEORICO 1.1. Definición de DBMS Los sistemas de Gestión de Base de Datos, son aplicaciones que permiten a los usuarios definir, crear y mantener la base de datos y proporciona un acceso controlado a la misma. Los SGBD es la aplicación que interactúa con los usuarios de los programas de aplicación y la base de datos. Algunos de los SG_BD más conocidos son: SQL, DB2, ORACLE, INFORMIX, SYBASE, PARADOX, ACCESS, FOXPRO, MYSQL. El sistema de gestión de bases de datos es esencial para el adecuado funcionamiento y manipulación de los datos contenidos en la base. Se puede definir como: "El Conjunto de programas, procedimientos, lenguajes, etc. que suministra, tanto a los usuarios no informáticos como a los analistas, programadores o al administrador, los medios necesarios para describir, recuperar y manipular los datos almacenados en la base, manteniendo su integridad, confidencialidad y seguridad". Objetivos de un SGDB Definir la Base de Datos mediante el Lenguaje de Definicion de datos, el cual permite especificar la estructura, tipo de datos y las restricciones sobre los datos, almacenándolo todo en la base de datos. Separar la descripción y manipulación de la ata, permitiendo un mayor entendimiento de los objetos, además de flexibilidad de consulta y actualización de los datos. Permitir la inserción, eliminación, actualización y consulta de los datos mediante el Lenguaje de Manejo de Datos, lo que permite resolver el problema que presentan los sistemas de archivos, donde hay que trabajar con un conjunto fijo de consultas o la necesidad de tener muchos programas de aplicaciones. Existen dos tipos de programas de Manejo de Datos, los cuales se diferencian por la forma en que acceden a los datos. Proporciona acceso controlado a la base de datos. Gestionar la estructura física de los datos y su almacenamiento, proporcionando eficiencia en las operaciones de la base de datos y el acceso al medio de almacenamiento. Proporciona un mecanismo de vistas, que permite a cada usuario tener su propia vista o visión de la base de datos. El lenguaje de defincion nos permite definir las vistas como subconjuntos de la base de datos. Eliminar la redundancia de datos, establecer una mínima duplicidad en los datos y minimizar el espacio en disco utilizado. Proveer interfaces permitiendo la procedimentales manipulación por y no usuarios procedimentales, interactivos y programadores. Independizar la estructura de la organización lógica de los datos (Independencia física). Independizar la descripción lógica de la Base de datos y las descripciones particulares de los diferentes puntos de vistas de los usuarios. Actores en el entorno de una Base de Datos Administrador de la base de datos: se encarga del diseño físico de la base de datos y de su implementación, realiza el control de la seguridad y de la concurrencia, mantiene el sistema para que siempre se encuentre operativo y se encarga de que los usuarios y las aplicaciones obtengan buenas prestaciones. El administrador debe conocer muy bien el que esté funcionando. Diseñadores de la base de datos: realizan el diseño lógico de la base de datos, debiendo identificar los datos, las relaciones entre datos y las restricciones sobre los datos y sus relaciones. El diseñador de la base de datos debe tener un profundo conocimiento de los datos de la empresa y también debe conocer sus reglas de negocio. Las reglas de negocio describen las características principales de los datos tal y como las ve la empresa. El diseñador de la base de datos debe implicar en el desarrollo del modelo de datos a todos los usuarios de la base de datos, tan pronto como sea posible. El diseño lógico de la base de datos es independiente del SGBD concreto que se vaya a utilizar es independiente de los programas de aplicación, de los lenguajes de programación y de cualquier otra consideración física. Programadores de aplicaciones: se encargan de implementar los programas de aplicación que servirán a los usuarios finales. Estos programas de aplicación son los que permiten consultar datos, insertarlos, actualizarlos y eliminarlos. Estos programas se escriben mediante lenguajes de tercera generación o de cuarta generación. Usuarios finales: consultan, actualizan y generan reportes de la base de datos. A los usuarios finales también se les llama clientes de la base de datos. La tabla adjunta muestra el funcionamiento de un DBMS. 1.2. MYSQL La historia del MySQL (cuya sigla en inglés se traslada a My Structured Query Language o Lenguaje de Consulta Estructurado) se remite a principios de la década de 1980. Programadores de IBM lo desarrollaron para contar con un código de programación que permitiera generar múltiples y extendidas bases de datos para empresas y organizaciones de diferente tipo. Desde esta época numerosas versiones han surgido y muchas de ellas fueron de gran importancia. Hoy en día MySQL es desarrollado por la empresa Sun Mycrosystems. Una de las características más interesantes de MySQL es que permite recurrir a bases de datos multiusuario a través de la web y en diferentes lenguajes de programación que se adaptan a diferentes necesidades y requerimientos. Por otro lado, MySQL es conocida por desarrollar alta velocidad en la búsqueda de datos e información, a diferencia de sistemas anteriores. Las plataformas que utiliza son de variado tipo y entre ellas podemos mencionar LAMP, MAMP, SAMP, BAMP y WAMP (aplicables a Mac, Windows, Linux, BSD, Open Solaris, Perl y Phyton entre otras). Se están estudiando y desarrollando nuevas versiones de MySQL que buscan presentar mejoras y avances para permitir un mejor desempeño en toda aquella actividad que requiera el uso de bases de datos relacionales. Entre estas mejoras podemos mencionar un nuevo dispositivo de depósito y almacenamiento, backup para todos los tipos de almacenamientos, replicación segura, planificación de eventos y otras más. 1.3. SQLSERVER Microsoft SQL Server constituye un lanzamiento determinante para los productos de bases de datos de Microsoft, continuando con la base sólida establecida por SQL Server 6.5. Como la mejor base de datos para Windows NT, SQL Server es el RDBMS de elección para una amplia gama de clientes corporativos y Proveedores Independientes de Software (ISVs) que construyen aplicaciones de negocios. Las necesidades y requerimientos de los clientes han llevado a la creación de innovaciones de producto significativas para facilitar la utilización, escalabilidad, confiabilidad y almacenamiento de datos. Objetivos del Diseño de SQL Server Los clientes están buscando soluciones para sus problemas de negocios. La mayoría de las "soluciones" de bases de datos solamente traen múltiples niveles de costos y complejidad. La estrategia de Microsoft es la de hacer que SQL Server sea la base de datos más fácil de utilizar para construir, administrar e implementar aplicaciones de negocios. Esto significa tener que poner a disposición un modelo de programación rápido y sencillo para desarrolladores, eliminando la administración de base de datos para operaciones estándar, y suministrando herramientas sofisticadas para operaciones más complejas. SQL Server 7.0 disminuye el costo total de propiedad a través de características como administración multi-servidor y con una sola consola; ejecución y alerta de trabajos basadas en eventos; seguridad integrada; y scripting administrativo. Esta versión también libera al administrador de base de datos para aspectos más sofisticados del trabajo al automatizar las tareas de rutina. Al combinar estos poderosos servicios de administración con las nuevas características de configuración automática, Microsoft SQL Server 7.0 es la elección ideal de automatización de sucursales y aplicaciones de base de datos insertadas. Los clientes invierten en sistemas de administración de bases de datos, en forma de aplicaciones escritas para esa base de datos y la educación que implica para la implementación y administración. Esa inversión debe protegerse: a medida que el negocio crece, la base de datos deberá crecer y manejar más datos, transacciones y usuarios. Los clientes también desean proteger las inversiones a medida que escalan aplicaciones de base de datos hacia equipos portátiles y sucursales. Para cumplir con estas necesidades, Microsoft ofrece un motor de base datos único que escala desde una computadora portátil que ejecuta Windows® 95 o Windows 98, hasta clusters de procesadores múltiples simétricos de terabyte que ejecutan Windows NT Server Enterprise Edition. Todos estos sistemas mantienen la seguridad y confiabilidad que exigen los sistemas de negocios de misión crítica. Nueva para el lanzamiento de 7.0 es una versión de rastro de baja memoria con capacidades de replicación de multi-sitio. Se ajusta muy bien a las necesidades cada vez mayores del mercado de la computación móvil. Las otras características tales como bloqueo a nivel de línea dinámico, el paralelismo intra-query, query distribuido, y mejoras para las bases de datos muy grandes (VLDB) hacen que el SQL Server 7.0 sea la elección ideal para sistemas OLTP de alta tecnología y sistemas de data warehousing. Mientras los sistemas de procesamiento siguen siendo un componente clave para las infraestructuras de bases de datos corporativas, las compañías también están invirtiendo bastante en mejorar la comprensión que tienen de sus datos. La estrategia de Microsoft consiste en reducir el costo y la complejidad del data warehousing mientras hace que la tecnología sea más accesible a una mayor cantidad de público. Microsoft ha establecido un enfoque total a todo el proceso de data warehousing (almacenamiento de datos) . El objetivo es facilitar la construcción y diseño de soluciones de data warehousing costo efectivas a través de una combinación de tecnologías, servicios y alianzas con los proveedores. La Microsoft Alliance for Data Warehousing es una coalición que une a los líderes en la industria de almacenamiento de datos y aplicaciones. El Microsoft Data Warehousing Framework constituye un conjunto de interfaces de programación diseñadas para simplificar la integración y administración de soluciones de data warehousing. Las innovaciones del producto en SQL Server 7.0 mejoran el proceso de data warehousing: Servicios de Transformación de Datos; manejo mejorado de las consultas complejas y bases de datos muy grandes; procesamiento analítico en línea e integrado; y el Microsoft Repository. Otro componente esencial es el soporte extenso para integración de terceros. Las innovaciones permiten que SQL Server 7.0 sea el líder en varias de las categorías de aplicación de rápido crecimiento en la industria de base de datos. Estas incluyen comercio electrónico, computación móvil, automatización de sucursales, aplicaciones de línea de negocios insertadas y mercados de datos. Las áreas de liderazgo e innovación en el Microsoft SQL Server incluyen La primera base de datos en escalar desde la computadora portátil hasta la empresa utilizando la misma base de código y ofrecer el 100% de compatibilidad de código La primera base de datos en soportar la auto-configuración y autosintonización Primera base de datos con OLAP integrado La primera base de datos con Servicios de Transformación de Datos integrado El Data Warehousing Framework constituye el primer enfoque comprehensivo al problema de metadatos La primera base de datos en proveer administración de multiservidor para cientos de servidores La más amplia gama de opciones de replicación de cualquier base de datos La mejor integración con Windows NT Server La mejor integración con Microsoft Transaction Server Lanzamientos SQL Server Recientes Esta sección provee una historia concisa de los lanzamientos SQL Server reciente. Una historia completa del desarrollo de SQL Server, desde sus comienzos hasta el lanzamiento del 6.5 se encuentra disponible en Dentro del Microsoft SQL Server 6.5, de Ron Soukup, publicado por Microsoft Press, ISBN 1-57231-331-5. El Standard Edition de SQL Server fue lanzado en abril de 1996. El Enterprise Edition fue lanzado en diciembre de 1997. Se incluyeron características adicionales en esta edición tales como soporte para Microsoft Cluster Server, sintonización de 4 GB RAM, English Query y soporte para sistemas de hasta 8 procesadores. El Service Pack actual para SQL Server es SP4, lanzado en diciembre de 1997. SP3 fue lanzado en junio de 1997, SP2 en diciembre de 1996 y SP1 en agosto de 1996. Beta 1 fue lanzado en junio de 1997 a 200 clientes. Este grupo incluía un número limitado de proveedores independientes de software (ISV), autores de libros, diseñadores de materiales para cursos, OEMs y algunas cuentas corporativas. No se pusieron copias a disposición de la prensa o analistas. Este lanzamiento enfocó las pruebas de funcionalidad de bajo nivel y programación de interfaces. Beta 2 fue lanzada a finales de diciembre de 1997 a 3000 clientes. El cubrimiento de las cuentas corporativas y de la comunidad ISV fue incrementado ampliamente, y se agregaron cuentas internacionales. Se entregaron copias de Beta 2 a la prensa y a los analistas en el Taller de Examinadores celebrado el 21 y 22 de enero. La versión Beta de Mercadeo será lanzada el segundo trimestre del año en curso con alta disponibilidad. El lanzamiento a fabricantes está planeado para la segunda mitad del año 1998. Las ediciones Standard y Enterprise de SQL Server 7.0 serán lanzadas simultáneamente. Microsoft SQL Server revoluciona el concepto de Base de Datos para la Empresa. Reúne en un sólo producto la potencia necesaria para cualquier aplicación empresarial crítica junto con unas herramientas de gestión que reducen al mínimo el coste de propiedad. Con Microsoft SQL Server, la empresa tiene todo de serie. Miles de Soluciones Disponibles: Tendrá libertad de elección, ya que todas las aplicaciones de gestión del mercado corren sobre Microsoft SQL Server Escalabilidad: Se adapta a las necesidades de la empresa, soportando desde unos pocos usuarios a varios miles. Empresas centralizadas u oficinas distribuidas, replicando cientos de sites. Potencia: Microsoft SQL Server es la mejor base de datos para Windows NT Server. Posee los mejores registros de los benchmarks independientes (TCP) tanto en transacciones totales como en coste por transacción. Gestión: Con un completo interfaz gráfico que reduce la complejidad innecesaria de las tareas de administración y gestión de la base de datos. Orientada al desarrollo: Visual Basic, Visual C++, Visual J++, Visual Interdev, Microfocus Cobol y muchas otras herramientas son compatibles con Microsoft SQL Server. La mejor base de datos para Internet y Extranet. Diseñada desde su inicio para trabajar en entornos Internet e Intranet, Microsoft SQL Server es capaz de integrar los nuevos desarrollos para estos entornos específicos con los desarrollos heredados de aplicaciones "tradicionales". Es más, cada aplicación que desarrollemos para ser empleada en entornos de red local puede ser utilizada de forma transparente -en parte o en su totalidad- desde entornos Internet, Intranet o Extranet. Plataforma de desarrollo fácil y abierto: integrada con las mejores tecnologías de Internet como ActiveX, ADC y Microsoft Transaction Server y con las mejores herramientas de gestión y desarrollo para Internet como FrontPage97, Microsoft Office97 y Visual Interdev. Diseñada para INTERNET: Es el único gestor de base de datos que contiene de forma integrada la posibilidad de generar contenido HTML de forma automática. La Base de Soluciones Integradas: La Integración total con BackOffice permite resolver toda las necesidades de infraestructura de la empresa con un sólo paquete. Potente y Escalable: Microsoft SQL Server es la única base de datos cuyo rendimiento sobre Internet está publicado, ofreciendo registros espectaculares. Mínimo coste de Propiedad: La sencillez de la instalación, y la potencia de sus herramientas de gestión y el menor coste de toda la industria para entornos Internet, hacen de Microsoft SQL Server la mejor opción con el menor coste. Arquitectura RDBMS. Arquitectura de servidor simétrico y paralelo con balanceo automático de carga en múltiples procesadores. Kernel multithread real para mejor rendimiento transaccional y escalabilidad. Soporte grandes bases de datos (VLDB) (+1 TB). Completo proceso transaccional interactivo con rollback automático y recuperación de roll-forward. Optimizador de consultas mejorado basado en coste. Checkpointing mejorado para un mejor throughput de datos y tiempo de respuesta. Soporte E/S asíncrono para acceso en paralelo a múltiples dispositivos de disco para un mejor throughput. Bloqueo a nivel fija y página con escalación de bloqueos; resolución automática de deadlocks. Datos distribuidos y replicación. Llamadas a procedimientos remotos servidor-a-servidor (procedimientos almacenados remotos). Replicación asíncrona o contínua basada en registros, o sincronización planificada de tablas point-in-time. Configuración de replicación gráfica y características de gestión. Replicación de subscriptores ODBC, incluyendo IBM DB2, ORACLE, SYBASE y Microsoft Access. Ei Distributed Transaction Coordinator gestiona transacciones que involucran a dos o más servidores SQL (proceso Two Phase Commit 2PC) transparente. Integración Internet y correo electrónico. MAPI, permitiendo aplicaciones de flujo de trabajo y notificación de cambio de datos automática. Compatibilidad con Microsoft Internet Information Server y otros servidores Web populares. SQL Web Assistant, para el retorno automático de datos en formato HTML. Procedimientos almacenados para generar páginas HTML o actualizar datos en plantillas Web. Gestión y administración centralizada de bases de datos. SQL Enterprise Manager, una consola de gestión y motorización 32bit visual basada en Windows. Un único punto de configuración y gestión de control de datos remotos. SQL Executive, planificador de trabajos y monitor para gestión proactiva de servidores distribuidos. DBA Assistant, para el mantenimiento automático rutinario en una única tarea planificada. SQL Trace, para monitorizar consultas cliente-servidor mediante SQL almacenadas en archivos de registros. Disponibilidad, fiabilidad y tolerancia a fallos. Mirroring de dispositivos de base de datos con failover automático para tolerancia a fallos de dispositivos. Copias de seguridad online desatendidas garantizando la consistencia de datos para la más alta disponibilidad. Contextos de usuario protegidos, que pueden aislar los fallos a un thread de un único usuario. Mejoras en Programabilidad y Lenguaje. Triggers, procedimientos almacenados (autoexec), disparador de eventos antes y después de conexiones. Procedimientos almacenados extendidos (funciones definidas por el usuario) utilizando C/C++. Cursores basados en el motor con scrolling hacia adelante y atrás; posicionamiento absoluto y relativo. Sentencias DLL permitidas dentro de transacciones. Seguridad. Un único ID de login tanto para red como para la DB para mejorar la seguridad y facilitar la administración. Password y encriptación de datos en red para mejorar la seguridad. Encriptación de procedimientos almacenados para la integridad y seguridad de código de aplicación. Interoperabilidad e integración con desktops. API estándar DB-Library totalmente soportada: estándar ODBC Nivel 2 totalmente soportado como API nativa. Gateway Open Data Services (ODS) programable para acceso transparente a fuentes de datos externas. Gateways de Microsoft y de terceros para fuentes de datos relacionales y no-relacionales, incluyendo IBM DB2. 1.4. ORACLE Oracle es básicamente una herramienta cliente/servidor para la gestión de base de datos, es un producto vendido a nivel mundial, aunque la gran potencia que tiene y su elevado precio hace que solo se vea en empresas muy grandes y multinacionales, por norma general. En el desarrollo de páginas Web pasa lo mismo como es un sistema muy caro no está tan extendido como otras bases de datos, por ejemplo, Access, MySQL, SQL Server etc. Oracle como antes lo mencionamos se basa en la tecnología cliente/ servidor, pues bien, para su utilización primero sería necesario la instalación de la herramienta servidor ( Oracle 8i ) y posteriormente podríamos atacar a la base de datos desde otros equipos con herramientas de desarrollo como Oracle Designer y Oracle Developer, que son las herramientas de programación sobre Oracle a partir de esta premisa vamos a desarrollar las principales acepciones de Oracle y sus aplicaciones en las distintas ares de trabajo. El manejador de Base de datos ORACLE, surgió a final de los años 70 y principio de los años 80. George Koch y su equipo de tropas de asalto de técnicos fue el primero en desembarcar en el terreno de Oracle en 1982, durante un proceso de evaluación de sistema de gestión de base de datos para una importante aplicación comercial que George estaba diseñando y construyendo. Cuando termino, la evaluación fue descrita en Computer World como el estudio más severo de SGBD que se había hecho nunca. El estudio fue tan riguroso con los vendedores cuyos productos había estudiado George, que la prensa hizo eco de sus palabras en lugares tan distantes como Nueva Zelandia y en publicaciones muy alejadas del campo como el Christian Sciencia Monitor. Oracle conocida entonces como Relational Software, tenía poco más de 25 empleados en aquel tiempo y solo unos pocos clientes importantes. Sin embargo, cuando se completo el estudio, Oracle fue declarada vencedora. George afirmo que el SGBD Oracle era técnicamente el mejor producto del mercado. Estas declaraciones fueron hecha en una época en la que muy poca gente conocía el significado del término "Relacional", y los que lo conocían (o creían conocerlo) no tenían muchas cosas favorables que decir de él. Oracle es una herramienta cliente/servidor para la gestión de Bases de Datos. Es un producto vendido a nivel mundial, aunque la gran potencia que tiene y su elevado precio hacen que sólo se vea en empresas muy grandes y multinacionales, por norma general. En el desarrollo de páginas Web pasa lo mismo: como es un sistema muy caro no está tan extendido como otras bases de datos, por ejemplo, Access, MySQL, SQL Server, etc. Vamos ahora en centrarnos en que es Oracle exactamente y cómo funciona la programación sobre éste. Oracle como antes he mencionado se basa en la tecnología cliente/servidor, pues bien, para su utilización primero sería necesario la instalación de la herramienta servidor (Oracle 8i) y posteriormente podríamos atacar a la base de datos desde otros equipos con herramientas de desarrollo como Oracle Designe y Oracle Developer, que son las herramientas básicas de programación sobre Oracle. Para desarrollar en Oracle utilizamos PL/SQL un lenguaje de 5ª generación, bastante potente para tratar y gestionar la base de datos, también por norma general se suele utilizar SQL al crear un formulario. El Developer es una herramienta que nos permite crear formularios en local, es decir, mediante esta herramienta nosotros podemos crear formularios, compilarlos y ejecutarlos, pero si queremos que los otros trabajen sobre este formulario deberemos copiarlo regularmente en una carpeta compartida para todos, de modo que, cuando quieran realizar un cambio, deberán copiarlo de dicha carpeta y luego volverlo a subir a la carpeta. Este sistema como podemos observar es bastante engorroso y poco fiable pues es bastante normal que las versiones se pierdan y se machaquen con frecuencia. La principal ventaja de esta herramienta es que es bastante intuitiva y dispone de un modo que nos permite componer el formulario, tal y como lo haríamos en Visual Basic o en Visual C, esto es muy de agradecer. 1.4.1. PROGRAMAS Y ARCHIVOS QUE COMPONE ORACLE Un RDBMS Oracle está compuesto por tres partes principales, que son: 1. El Kernel de Oracle 2. Las instancias del Sistema de Base de Datos. 3. Los Archivos relacionados al sistema de Base de Datos. EL KERNEL DE ORACLE El Kernel es el corazón del RDBMS Oracle, el cual maneja las siguientes tareas: Manejar el almacenamiento y definición de los datos. Suministrar y limitar el acceso a los datos y la concurrencia de los usuarios. Permitir los backup y la recuperación de los datos. Interpretar el SQL y PL/SQL. 1.4.2. EL PGA (Programa Global Área) Es también llamado Proceso Global Área, consta de datos e información de control de los procesos, asegurando el uso correcto de estos. El PGA contiene información acerca de las conexiones y los procesos que se realizan en Oracle, su tamaño es variable en longitud, pero no es dinámico. El PGA se activa al conectarse un usuario. 1.4.3. EL SGA (System Global Area) Se puede llamar Shared global área. Se podría definir como una serie de buffers en memoria residente, a través de la cual todas las transacciones y el almacenamiento de dato fluyen. El SGA es localizado en memoria al iniciarse una instancia y desaparece al bajarla. Su tamaño no puede ser cambiado, pero si puede ser visto con el comando "SHOW SGA" en el SQL*DBA. Su longitud está definida por el parámetro del archivo de iniciación INIT.ORA. Está Compuesto por: Diccionario Cache Los Redo Log Buffers Los Database Buffers 1.4.4. DIFERENTES HERRAMIENTAS DE ORACLE SQLForms: es la herramienta de Oracle que permite, de un modo sencillo y eficiente, diseñar pantallas para el ingreso, modificaciones, bajas y consultas de registros. El usuario podrá, una vez definida la forma, trabajar con ella sin necesidad de generar códigos, dado que Oracle trae incorporado un conjunto de procedimientos y funciones asociados a las teclas de funciones, como por ejemplo la tecla [F7], que se usa para iniciar una consulta. La herramienta fundamental de SQL es la sentencia SELECT, que permite seleccionar registros desde las tablas de la Base de Datos, devolviendo aquellos que cumplan las condiciones establecidas y pudiendo presentar el resultado en el orden deseado. Para ver el gráfico seleccione la opción "Descargar" del menú superior SQL (Structured Query Languague = Lenguaje de Consulta estructurado). La orden FROM identifica la lista de tablas a consultar. Si alguna de las tablas a consultar no es propiedad del usuario, debe especificarse el nombre del propietario antes que el nombre de la tabla en la forma nombre_propietario.nombre_tabla. La orden WHERE decide los registros a seleccionar según las condiciones establecidas, limitando el número de registros que se muestran. La orden ORDER BY indica el orden en que aparece el resultado de la cónsul ta. INDICES El índice es un instrumento que aumenta la velocidad de respuesta de la consulta, mejorando su rendimiento y optimizando su resultado. El manejo de los índices en ORACLE se realiza de forma inteligente, donde el programador sólo crea los índices sin tener que especificar, explícitamente, cuál es el índice que va a usar. Es el propio sistema, al analizar la condición de la consulta, quien decide qué índice se necesita. Por ejemplo cuando en una consulta se relacionan dos tablas por una columna, si ésta tiene definido un índice se activa, como en el caso cuando relacionamos la tabla de clientes y ventas por la columna código para identificar al cliente (WHERE clientes.codigo=ventas.codigo) USO DE MEMORIA El uso de memoria en el RDBMS Oracle tiene como propósito lo siguiente: Almacenar los códigos de los programas para empezar a ejecutarse. Almacenar los datos necesarios durante la ejecución de un programa. Almacenar información sobre como es la transferencia entre procesos y periféricos. Para ver el gráfico seleccione la opción &uml;Descargar trabajo¨ del menú superior La identificación del índice a usar está relacionada con las columnas que participan en las condiciones de la orden WHERE. Si la columna que forma el índice está presente en alguna de las condiciones éste se activa. PL/SQL: es un lenguaje portable, procedural y de transacción muy potente y de fácil manejo, con fundamentales: 1. Incluye todos los comandos de SQL. las siguientes características 2. Es una extensión de SQL, ya que este es un lenguaje no completo dado que no incluye las herramientas clásicas de programación. Por eso, PL/SQL amplia sus posibilidades al incorporar las siguientes sentencias: - Control condicional - Ciclos 3. Incorpora opciones avanzadas en: - Control y tratamiento de errores llamado excepciones. - Manejo de cursores. 1.4.5. ESTRUCTURA DEL BLOQUE DE CÓDIGO La organización del bloque de código de PL/SQL, compuesto por cuatro secciones DECLARE, BEGIN, EXCEPTION y END. MANEJO DE CURSORES El conjunto de filas resultantes de una consulta con la sentencia SELECT, como vimos anteriormente, puede estar compuesto por ninguna, una o varias filas, dependiendo de la condición que define la consulta. Para poder procesar individualmente cada fila de la consulta debemos definir un cursor (que es un área de trabajo de memoria) que contiene los datos de las filas de la tabla consultada por la sentencia SELECT. Para ver el gráfico seleccione la opción "Descargar" del menú superior Los pasos para el manejo de cursores, tema novedoso en la programación de Oracle con PL/SQL, son: Definir el cursor, especificando la lista de parámetros con sus correspondientes tipos de datos y estableciendo la consulta a realizar con la sentencia SELECT. Abrir el cursor para inicializarlo, siendo éste el momento en que se realiza la consulta. Leer una fila del cursor, pasando sus datos a las variables locales definidas a tal efecto. 1.4.6. DISPARADORES El módulo SQL*Forms tiene incorporado una colección de procedimientos y funciones llamados "empaquetados" que se pueden incluir en el código de procedimientos o disparadores definidos por el usuario. El disparador es un bloque de código que se activa cuando se pulsa una determinada tecla u ocurre cierto evento, como puede ser: Mover el cursor hacia o desde un campo, registro, bloque o forma. Realizar una consulta. Validar un dato. Hacer una transacción al insertar, modificar o eliminar registros de la base de datos. Oracle asocia a cada tecla de función un procedimiento empaquetado, pudiendo el usuario redefinir esta asignación o capturar el disparador para ampliarlo o modificarlo con su propio código. A partir de la versión 7 de Oracle el usuario puede almacenar, en forma independiente, sus funciones y procedimientos sin tener que escribirlos repetidamente para cada forma, y pudiendo compilarlos independientemente de las formas que lo usen. Pero, además, las funciones y procedimientos se pueden agrupar en un paquete para compartir definiciones, variables globales, constantes, cursores y excepciones, así como garantizar y revocar los permisos a nivel de paquete. En el caso que sea necesario modificar el contenido del paquete, como el mismo se encuentra almacenado separadamente, no es necesario recompilar nada que use ese paquete, lo que facilita la gestión y mantenimiento de todos los procedimientos almacenados como una sola entidad para una determinada aplicación. 1.4.7. SERVICIOS DE SEGURIDAD Existen varios servicios y tecnologías relacionadas con la seguridad. Accede a cada una de ellas para conocer qué tecnologías son las más interesantes: Autenticación: Se examinan las capacidades de logon único a la red, autenticación y seguridad. Además, se proporciona información sobre el interfaz Security Support Provider Interface (SSPI) para obtener servicios de seguridad integrados del sistema operativo. Kerberos es el protocolo por defecto en Windows 2000 para autenticación en red. Sistema de Archivos Encriptado: El Sistema de Archivos Encriptado (Encrypted File System - EFS) proporciona la tecnología principal de encriptación de archivos para almacenar archivos del sistema de archivos NTFS de Windows NT encriptados en disco. Seguridad IP: Windows IP Security, del Internet Engineering Task Force, proporciona a los administradores de redes un elemento estratégico de defensa para la protección de sus redes. Servicios de seguridad en Windows 2000: se examinan los procedimientos relacionados con la gestión de cuentas, autenticación de red a nivel corporativo, así como el Editor de Políticas de Seguridad. Tarjetas Inteligentes: se examinan los procesos de autenticación utilizando tarjetas inteligentes y los protocolos, servicios y especificaciones asociadas. Tecnologías de Clave Pública: se revisa la infraestructura de clave pública incluida en los sistemas operativos de Microsoft y se proporciona información sobre criptografía. Un SMBD cuenta con un subsistema de seguridad y autorización que se encarga de garantizar la seguridad de porciones de la BD contra el acceso no autorizado. Identificar y autorizar a los usuarios: uso de códigos de acceso y palabras claves, exámenes, impresiones digitales, reconocimiento de voz, barrido de la retina, etc. Autorización: usar derechos de acceso dados por el terminal, por la operación que puede realizar o por la hora del día. Uso de técnicas de cifrado: para proteger datos en BD distribuidas o con acceso por red o internet. Diferentes tipos de cuentas: en especial la del ABD con permisos para: creación de cuentas, concesión y revocación de privilegios y asignación de los niveles de seguridad. Discrecional: se usa para otorgar y revocar privilegios a los usuarios a nivel de archivos, registros o campos en un modo determinado (consulta o modificación). El ABD asigna el propietario de un esquema, quien puede otorgar o revocar privilegios a otros usuarios en la forma de consulta (select), modificación o referencias. A través del uso de la instrucción grant option se pueden propagar los privilegios en forma horizontal o vertical. Ejemplo: grant select on Empleado to códigoUsuario revoke select on Empleado from códigoUsuario. Obligatoria: sirve para imponer seguridad de varios niveles tanto para los usuarios como para los datos. Problemas de seguridad. La información de toda empresa es importante, aunque unos datos lo son más que otros, por tal motivo se debe considerar el control de acceso a los mismos, no todos los usuarios pueden visualizar alguna información, por tal motivo para que un sistema de base de datos sea confiable debe mantener un grado de seguridad que garantice la autenticación y protección de los datos. En un banco por ejemplo, el personal de nóminas sólo necesita ver la parte de la base de datos que tiene información acerca de los distintos empleados del banco y no a otro tipo de información. Identificación y autentificación En un SGBD existen diversos elementos que ayudan a controlar el acceso a los datos. En primer lugar el sistema debe identificar y autentificar a los usuarios utilizando alguno de las siguientes formas: Código y contraseña Identificación por hardware Características bioantropométricas Conocimiento, aptitudes y hábitos del usuario Información predefinida (Aficiones, cultura, etc) Además, el administrador deberá especificar los privilegios que un usuario tiene sobre los objetos: Usar una B.D. Consultar ciertos datos Actualizar datos Crear o actualizar objetos Ejecutar procedimientos almacenados Referenciar objetos Indexar objetos Crear identificadores Mecanismos de autentificación La autentificación, que consiste en identificar a los usuarios que entran al sistema, se puede basar en posesión (llave o tarjeta), conocimiento (clave) o en un atributo del usuario (huella digital). Claves El mecanismo de autentificación más ampliamente usado se basa en el uso de claves o passwords; es fácil de entender y fácil de implementar. En UNIX, existe un archivo /etc/passwd donde se guarda los nombres de usuarios y sus claves, cifradas mediante una función one-way F. El programa login pide nombre y clave, computa F(clave), y busca el par (nombre, F(clave)) en el archivo. Con claves de 7 caracteres tomados al azar de entre los 95 caracteres ASCII que se pueden digitar con cualquier teclado, entonces las 957 posibles claves deberían desincentivar cualquier intento por adivinarla. Sin embargo, una proporción demasiado grande de las claves escogidas por los usuarios son fáciles de adivinar, pues la idea es que sean también fáciles de recordar. La clave también se puede descubrir mirando (o filmando) cuando el usuario la digita, o si el usuario hace login remoto, interviniendo la red y observando todos los paquetes que pasan por ella. Por último, además de que las claves se pueden descubrir, éstas también se pueden "compartir", violando las reglas de seguridad. En definitiva, el sistema no tiene ninguna garantía de que quien hizo login es realmente el usuario que se supone que es. Identificación física Un enfoque diferente es usar un elemento físico difícil de copiar, típicamente una tarjeta con una banda magnética. Para mayor seguridad este enfoque se suele combinar con una clave (como es el caso de los cajeros automáticos). Otra posibilidad es medir características físicas particulares del sujeto: huella digital, patrón de vasos sanguíneos de la retina, longitud de los dedos. Incluso la firma sirve. Algunas medidas básicas: Demorar la respuesta ante claves erróneas; aumentar la demora cada vez. Alertar si hay demasiados intentos. Registrar todas las entradas. Cada vez que un usuario entra, chequear cuándo y desde dónde entró la vez anterior. Hacer chequeos periódicos de claves fáciles de adivinar, procesos que llevan demasiado tiempo corriendo, permisos erróneos, actividades extrañas (por ejemplo cuando usuario está de vacaciones). Un SMBD cuenta con un subsistema de seguridad y autorización que se encarga de garantizar la seguridad de porciones de la BD contra el acceso no autorizado. Identificar y autorizar a los usuarios: uso de códigos de acceso y palabras claves, exámenes, impresiones digitales, reconocimiento de voz, barrido de la retina, etc. Autorización: usar derechos de acceso dados por el terminal, por la operación que puede realizar o por la hora del día. Uso de técnicas de cifrado: para proteger datos en BD distribuidas o con acceso por red o internet. Diferentes tipos de cuentas: en especial la del ABD con permisos para: creación de cuentas, concesión y revocación de privilegios y asignación de los niveles de seguridad. Manejo de la tabla de usuarios con código y contraseña, control de las operaciones efectuadas en cada sesión de trabajo por cada usuario y anotadas en la bitácora, lo cual facilita la auditoría de la BD. Confidencialidad: No mostrar datos a usuarios no autorizados. Accesibilidad: Que la información se encuentre disponible. Integridad: Permite asegurar que los datos no se han falseado. Administrador de la base de datos El alcance de la actividad de la Administración de Datos es la organización completa (empresa, institución u otro organismo), mientras que el alcance de la Administración de Bases de Datos queda restringido a una Base de Datos en particular y a los sistemas que los procesan. La Administración de la Base de Datos opera dentro de un marco proporcionado por la Administración de Datos facilitándose de esta manera el desarrollo y el uso de una Base de Datos y sus aplicaciones. Las siglas DBA suelen utilizarse para designar tanto la función Administración de Base de Datos como al título del puesto administrador de Base de Datos. En los distintos niveles y aplicaciones de Base de Datos existe la función DBA, aunque varia en complejidad. Esta es más sencilla cuando se trata de una Base de Datos Personal que cuando se refiere a una Base de Datos de grupos de trabajo, y esta a su vez es más sencilla que en una Base de Datos Organizacional. En una Base de Datos Personal comúnmente el mismo usuario es el Administrador de la Base de Datos; las Bases de Datos de grupos de trabajo requieren de una o dos personas que normalmente no se dedican a esta función de tiempo completo puesto que tienen otras responsabilidades dentro o fuera de la organización. En las Bases de Datos Organizacionales, que comúnmente permiten el acceso a decenas e incluso centenas de usuarios, se requiere de un administrador de Base de Datos de tiempo completo; lo anterior debido al alto volumen de procesos que deben desarrollarse, controlarse y supervisarse. Un Administrador de Base de Datos de tiempo completo normalmente tiene aptitudes técnicas para el manejo del sistema en cuestión a demás, son cualidades deseables nociones de administración, manejo de personal e incluso un cierto grado de diplomacia. La característica más importante que debe poseer es un conocimiento profundo de las políticas y normas de la empresa así como el criterio de la empresa para aplicarlas en un momento dado. La responsabilidad general del DBA es facilitar el desarrollo y el uso de la Base de Datos dentro de las guías de acción definidas por la administración de los datos. El DBA es responsable primordialmente de: Administrar la estructura de la Base de Datos Administrar la actividad de los datos Administrar el Sistema Manejador de Base de Datos Establecer el Diccionario de Datos Asegurar la confiabilidad de la Base de Datos Confirmar la seguridad de la Base de Datos. 1.4.8. ADMINISTRACIÓN DE LA ESTRUCTURA DE LA BASE DE DATOS La administración de la estructura de la Base de Datos incluye participar en el diseño inicial de la misma y su puesta en práctica así como controlar, y administrar sus requerimientos, ayudando a evaluar alternativas, incluyendo los DBMS a utilizar y ayudando en el diseño general de BD. En los casos de grandes aplicaciones de tipo organizacional, el DBA es un gerente que supervisa el trabajo del personal de diseño de la BD. Una vez diseñada la BD, es puesta en práctica utilizando productos del DBMS, procediéndose entonces a la creación de los datos (captura inicial). El DBA participa en el desarrollo de procedimientos y controles para asegurar la calidad y la alta integridad de la BD. Los requerimientos de los usuarios van modificándose, estos encuentran nuevas formas o métodos para lograr sus objetivos; la tecnología de la BD se va modificando y los fabricantes del DBMS actualizan sus productos. Todas las modificaciones en las estructuras o procedimientos de BD requieren de una cuidadosa administración. IMPLICACIONES POR LA MODIFICACION DE ESQUEMAS. Las solicitudes de modificación son inevitables una vez que el sistema ha entrado en operación, pueden aparecer solicitudes de nuevos requerimientos o estos pueden resultar de una comprensión inadecuada de los mismos. En cualquier caso, deberán efectuarse modificaciones en relación con toda la comunidad de la BD, ya que el impacto de tales alteraciones será resentido por más de una aplicación. En algunos casos, pueden darse modificaciones que presentan efectos negativos para algunos usuarios; estos casos deberán ser tratados esgrimiendo como argumento los beneficios globales que serán obtenidos de tales alteraciones. Una administración eficaz de la BD debe incluir procedimientos y políticas mediante las cuales los usuarios puedan registrar sus necesidades de modificaciones, y así la comunidad podrá analizar y discutir los impactos de dichas modificaciones, determinándose entonces la puesta o no en práctica de tales alteraciones. En razón del tamaño y complejidad de una BD y de sus aplicaciones, las modificaciones pudieran tener resultados inesperados. El DBA debe estar preparado para reparar la BD y reunir suficiente información para diagnosticar y corregir el problema provocado por la falla. Después de un cambio la BD es más vulnerable a fallas. DOCUMENTACIÓN La responsabilidad final de un DBA en la administración de la estructura de una BD es la DOCUMENTACIÓN. Es de suma importancia saber que modificaciones han sido efectuadas, como fueron realizadas y cuando fueron establecidas. Una modificación sobre la estructura de la BD pudiera ocasionar un error que no apareciera a corto plazo; una vez que este surja, sin la documentación adecuada sobre las modificaciones realizadas, él diagnostico resultaría extremadamente complicado. En estos casos, se haría necesaria una secuencia de ejecuciones para intentar detectar el punto en conflicto; el riesgo de este procedimiento radica en que es posible afectar la información contenida en la BD. Para identificar un cambio es de suma importancia mantener un registro de los formatos de prueba y de las ejecuciones de las pruebas efectuadas. Si se utilizan procedimientos de prueba formatos de pruebas y métodos de registro estandarizados, el registro de los resultados de la prueba no consumirá tiempo excesivo. Comúnmente el tiempo de la documentación es tedioso y esto ocasiona que algunos DBA tienden a reducir o abreviar la información que se registra en ella e incluso llegan a desatenderla. Cuando ocurre un siniestro, la documentación completa y organizada puede ser la diferencia entre resolver o no un problema de extrema importancia y en la mayoría de los casos, que implica costos cuantiosos a la empresa. La tarea de la documentación es cada vez más ligera y precisa cuando se utilizan DBMS que integran herramientas CASE para las tareas de diseño, mantenimiento y documentación. Estas mismas herramientas CASE proporcionan en la, mayoría de los casos la facilidad de generar y mantener en forma automática el Diccionario de Datos. ADMINISTRACIÓN DE LA ACTIVIDAD DE DATOS Aunque el DBA protege los datos, no los procesa. El DBA no es usuario del sistema, en consecuencia, no administra valores de datos; el DBA administra actividad de datos. Dado que la BD es un recurso compartido, el DBA debe proporcionar estándares, guías de acción, procedimientos de control y la documentación necesaria para garantizar que los usuarios trabajan en forma cooperativa y complementaria al procesar datos en la BD. Como es de suponerse, existe una gran actividad al interior de un DBMS. La concurrencia de múltiples usuarios requieren de estandarizar los procesos de operación; el DBA es responsable de tales especificaciones y de asegurarse que estas lleguen a quienes concierne. Todo el ámbito de la BD se rige por estándares, desde la forma como se capture la información (tipo, longitud, formato), como es procesada y presentada. El nivel de estandarización alcanza hasta los aspectos más internos de la BD; como sé accesa a un archivo, como se determinan los índices primarios y auxiliares, la foliación de los registros y demás. Debe procurarse siempre que los estándares que serán aplicados beneficien también a los usuarios, privilegiando siempre la optimización en la operación del DBMS y el apego de las políticas de la empresa. Una administración de BD efectiva deberá disponer siempre de este tipo de estándares; entre las funciones del DBA se encuentra la de revisarlos periódicamente para determinar su operatividad, y en su caso ajustarlos, ampliarlos o cancelarlos. Es también su responsabilidad el que estos se cumplan. Cuando se definen estándares sobre la estructura de la BD, estos deben registrarse en una sección del diccionario de datos a la que todos aquellos usuarios relacionados con ese tipo de proceso pueden acceder. Otro de los aspectos que el administrador debe atender es el de coordinar las nuevas propuestas para realizar ajustes en los derechos de acceso a datos compartidos y aplicaciones específicamente propuestas serían analizados en conjunto con los supervisores o directivos de las áreas involucradas para determinar si procede pudieran aparecer problemas cuando dos o más grupos de usuarios quedan autorizados para notificar los mismos datos. Uno de tales conflictos es el de la actualización perdida; este ocurre cuando el trabajo de un usuario queda sobrescrito sobre por el de un segundo usuario. El DBA queda responsabilizado para identificar la posible ocurrencia de dichos problemas así como de crear normas y procedimientos para su eliminación. Se obtendrán este tipo de garantías cuando el DBMS sea capaz de implementar las restricciones aplicables al acceso concurrente, y este sea utilizado adecuadamente por programadores y usuarios; para borrar lo anterior, se hace indispensable el apego a los estándares el seguimiento de instructivos y manuales y las reglas establecidas para los diversos procesamientos y procedimientos que se llevan a cabo. Entre las alternativas más utilizadas por el DBA para tratar de resolver o minimizar este problema se encuentran las siguientes: a) Restringir el acceso a los procedimientos para ciertos usuarios. b) Restringir al acceso a los datos para ciertos usuarios procedimientos y/o datos. c) Evitar la coincidencia de horarios para usuarios que comparten. Las técnicas de recuperación son otra función esencial del DBA al administrar la actividad de datos. A pesar de que el DBMS lleva a cabo una parte del proceso de recuperación, los usuarios determinan en forma critica la operatividad de esos sistemas de protección. El DBA debe anticipar fallas y definir procedimientos estándares de operación; los usuarios deben saber qué hacer cuando el sistema este caído y que es lo primero que debe realizarse cuando el sistema este puesto en marcha nuevamente. El personal de operación deberá saber cómo iniciar el proceso de recuperación de la BD que copias de seguridad utilizar; como programar la ejecución del tiempo perdido y de las tareas pendientes; es importante también establecer un calendario para llevar a cabo estas actividades sin afectar a otros sistemas dentro de la organización que hagan uso de los mismos recursos de computo. Destacan por su importancia en el proceso de recuperación y a su vez en la atención que prestan a otros sectores de la organización. Los dispositivos de comunicación remota, los sistemas de interconexión y otros accesorios de uso compartido. El DBA es el responsable de la publicación y mantenimiento de la documentación en relación con la actividad de los datos, incluyendo los estándares de la BD, los derechos de recuperación y de acceso a la BD, los estándares para la recuperación de caídas y el cumplimiento de las políticas establecidas. Los productos DBMS más populares que se encuentran en el mercado proporcionan servicios de utilerías para ayudar al DBA en la administración de los datos y su actividad. Algunos sistemas registran en forma automática los nombres de los usuarios y de las aplicaciones a las que tienen acceso así como a otros objetos de la BD. Incorpora también utilerías que permitan definir en el diccionario de datos las restricciones para que determinadas aplicaciones o módulos de ellas solo tengan acceso a segmentos específicos de la BD. 1.4.9. FUNCIONES DEL ADMINISTRADOR DE BASES DE DATOS (DATE) DEFINIR EL ESQUEMA CONCEPTUAL: Es tarea del administrador de datos decidir con exactitud cuál es la información que debe mantenerse en la base de datos, es decir, identificar las entidades que interesan a la empresa y la información que debe registrarse acerca de esas entidades. Este proceso por lo general se denomina diseño lógico a veces conceptual de bases de datos. Cuando el administrador de datos decide el contenido de la base de datos en un nivel abstracto, el DBA crea a continuación el esquema conceptual correspondiente, empleando el DDL conceptual. El DBMS utilizará la versión objeto (compilada) de ese esquema para responder a las solicitudes de acceso. La versión fuente sin compilar servirá como documento de referencia para los usuarios del sistema. DEFINIR EL ESQUEMA INTERNO: el DBA debe decidir también como se representará la información en la base de datos almacenada. A este proceso suele llamársele diseño físico de la base de datos. Una vez hecho esto el DBA deberá crear la definición de estructura de almacenamiento correspondiente (es decir el esquema interno) valiéndose del DDL interno. Además deberá definir la correspondencia pertinente entre los esquemas interno y conceptual. En la práctica, ya sea el DDL conceptual o bien el DDL interno incluirán seguramente los medios para definir dicha correspondencia, pero las dos funciones (crear el esquema, definir la correspondencia) deberán poder separarse con nitidez. Al igual que el esquema conceptual, el esquema interno y la correspondencia asociada existirán tanto en la versión fuente como en la versión objeto. VINCULARSE CON LOS USUARIOS: el DBA debe encargarse de la comunicación con los usuarios, garantizar la disponibilidad de los datos que requieren y escribir o ayudar a los usuarios a escribir- los esquemas externos necesarios, empleando el DDL externo aplicable. Además, será preciso definir la correspondencia entre cualquier esquema externo y el esquema conceptual. En la práctica, el DDL externo incluirá con toda probabilidad los medios para especificar dicha correspondencia, pero en este caso también el esquema y la correspondencia deberán poder separarse con claridad. Cada esquema externo y la correspondencia asociada existirán en ambas versiones fuentes y objeto. Otros aspectos de la función de enlace con los usuarios incluyen las consultas sobre diseño de aplicaciones, la impetración de instrucción técnica, la ayuda en la localización y resolución de problemas, y otros servicios profesionales similares relacionados con el sistema. DEFINIR LAS VERIFICACIONES DE SEGURIDAD E INTEGRIDAD: las verificaciones de seguridad y de integridad pueden considerarse parte del esquema conceptual. El DDL conceptual incluirá los medios para especificar dichas verificaciones. DEFINIR PROCEDIMIENTOS DE RESPALDO Y RECUPERACION: cuando una empresa se decide a utilizar un sistema de base de datos, se vuelve dependiente en grado sumo del funcionamiento correcto de ese sistema. En caso de que sufra daño cualquier porción de la base de datos por causa de un error humano, digamos, o una falla en el equipo o en el sistema que lo apoya resulta esencial poder reparar los datos implicados con un mínimo de retraso y afectando lo menos posible el resto del sistema. En teoría, por ejemplo la disponibilidad de los datos no dañados no debería verse afectada. El DBA debe definir y poner en práctica un plan de recuperación adecuada que incluya, por ejemplo una descarga o "vaciado" periódico de la base de datos en un medio de almacenamiento de respaldo, y procedimientos para cargar otra vez la base de datos a partir de vaciado más reciente cuando sea necesario. SUPERVISAR EL DESEMPEÑO Y RESPONDER A CAMBIOS EN LOS REQUERIMIENTOS: es responsabilidad del DBA organizar el sistema de modo que se obtenga el desempeño que sea "mejor para la empresa", y realizar los ajustes apropiados cuando cambien los requerimientos. FUNCIONES DEL ADMINISTRADOR DE BASE DE DATOS (KORTH) DEFINICIÓN DEL ESQUEMA: el esquema original de la base de datos se crea escribiendo un conjunto de definiciones que son traducidas por el compilador de DDL a un conjunto de tablas que son almacenadas permanentemente en el DICCIONARIO DE DATOS. DEFINICIÓN DE LA ESTRUCTURA DE ALMACENAMIENTO Y DEL MÉTODO DE ACCESO: Estructuras de almacenamiento y métodos de acceso adecuados se crean escribiendo un conjunto de definiciones que son traducidas por el compilador del lenguaje de almacenamiento y definición de datos. MODIFICACIÓN DEL ESQUEMA Y DE LA ORGANIZACIÓN FÍSICA: las modificaciones, tanto al esquema de la base de datos como a la descripción de la organización física de almacenamiento, aunque relativamente poco comunes, se logran escribiendo un conjunto de definiciones que son usadas bien por el compilador del DDL o bien por el compilador del lenguaje de almacenamiento y definición de datos para generar modificaciones a las tablas internas apropiadas del sistema (por ejemplo, el diccionario de datos). CONCESIÓN DE AUTORIZACIÓN PARA EL ACCESO A LOS DATOS: la concesión de diferentes tipos de autorización permite al administrador de la base de datos regular qué partes de la base de datos van a poder ser accedidas por varios usuarios. ESPECIFICACIÓN DE LAS RESTRICCIONES DE INTEGRIDAD: las restricciones de integridad se mantienen en una estructura especial del sistema que consulta el gestor de la base de datos cada vez que tiene lugar una actualización en el sistema. 1.4.10.USUARIOS DE LA BASE DE DATOS Programadores de aplicaciones: No es difícil de describir a este usuario, es aquel que realiza aplicaciones para otros usuarios, generalmente profesionales de la computación. Usuarios sin experiencia: son usuarios complejos que interactúan con el sistema sin escribir programas. (Mantenimiento, tanto de base de datos, regeneración, índices, auditores). Capítulo 2. Tecnologías Disponibles para la Comunicación con Fuentes de Datos Heterogéneas Uno de los aspectos más importantes en un sistema multibase de datos es la forma en cómo llevar a cabo la comunicación con la base de datos componentes. En este capítulo se describen tecnologías actuales que permiten la comunicación con fuentes de datos heterogéneas, y sus características principales. Se describe más detalladamente la tecnología JDBC, debido a que es la que se utilizo en el desarrollo del prototipo. Internet ha sido en los últimos años uno de los principales medios de difusión de información. Debido a su popularidad cada vez más software se ha desarrollado tomando a Internet como punto de partida. Entre estos desarrollos se encuentra una gran variedad de herramientas enfocadas a la recuperación de información desde diversas fuentes, incluyendo base de datos relacionales y de objetos, así como archivos planos, archivos de texto, documentos de procesadores de palabras y páginas web. 2.1 Compuertas para Bases de Datos Las compuertas, desde una perspectiva de base de datos, permiten la interoperabilidad de bases de datos, habilitando aplicaciones cliente para conectarse a múltiples fuentes de datos. Las compuertas para base de datos son un tipo especial de middleware (software de enlace) que da a las aplicaciones cliente una interfaz de programación de aplicación (API) que hace que diversas fuentes de datos parezcan equivalentes. Una compuerta de base de datos consiste de: 1. Una biblioteca API cliente: La API del lado del cliente, la cual determina el formato y significado de las peticiones que las aplicaciones cliente pueden emitir. 2. Una biblioteca API Servidor: La API en la base de datos del lado del servidor, la cual determina los servicios de bases de datos disponibles para los clientes. 2.2 Monitores de Procesamiento de Transacciones Los monitoreos de procesamiento de transacciones (MPT) nacieron para mejorar procesos y orquestar programas. Esto lo hace al romper aplicaciones complejas en piezas de código llamadas transacciones. Los MPT’s fueron introducidos para ejecutar clases de aplicaciones que podrían servir a miles de clientes y servidores. Al hacer esta intercalación entre clientes y servidores los MPT’s pueden manejar transacciones, rutearlas a través del sistema, balancear la carga de su ejecución y reiniciarlas después de una falla. Un MPT puede manejar recursos transaccionales en un servidor o a través de múltiples servidores, y puede cooperar con otros MPT’s en arreglos federados. En el contexto de sistemas distribuidos un MPT provee un número de funciones útiles, incluyendo multiprocesamiento automático, seguridad y servicios de nombramiento global y resolución de nombres. Un MPT también provee acceso síncrono o asíncrono a fuentes de datos, soporta un gran número de usuarios, y facilita la integración de numerosos ambientes y componentes heterogéneos. 2.3 Conectividad de Base de Datos Abierta (ODBC) ODBC es una API abierta para acceder a bases de datos. La API especifica un conjunto de funciones para manejar conexiones a bases de datos, ejecutar declaraciones SQL (lenguaje de consultas estructurado) y consultar las capacidades del sistema de base de datos. ODBC está basado en la especificación de la interfaz a nivel de llamadas de X/Open SQL. Microsoft desarrollo ODBC como una implementación de la especificación de la interfaz a nivel de llamadas para proveer una API común para la conectividad de base de datos. ODBC provee una interfaz estándar que permite a las aplicaciones accesar a diferentes fuentes de datos. El código fuente de las aplicaciones no tiene que ser recompilado para cada fuente de datos. Un controlador de base de datos conecta a la aplicación a una fuente de datos específica. Un controlador de base de datos es una librería de cargado dinámico que una aplicación puede invocar en demanda de acceso a un origen de datos particular. Por lo tanto la interfaz ODBC define lo siguiente: Una librería que llama a funciones ODBC que permite a una aplicación conectarse a una fuente de datos, ejecutar sentencias SQL, y recuperar resultados. Una sintaxis SQL basada en el X/Open y el Grupo de Acceso SQL (SAG) especificación SQL CASE. Un conjunto estándar de códigos de error. Una forma estándar para conectarse y registrarse en una fuente de datos. Una representación estándar de los tipos de datos. 2.4 Conectividad de bases de datos java (JDBC) JDBC es una API a nivel de SQL de aplicaciones Java para sistemas de bases de datos SQL. La API JDBC define clases Java pare representar conexiones a base de datos, declaraciones SQL, conjunto de resultados, acceso a metadatos y más. La API JDBC puede soportar múltiples controladores que están conectados a diferentes SMBDs. JDBC provee una interfaz a nivel de programación para la comunicación con base de datos de una manera uniforme similar al concepto de ODBC de Microsoft, el cual ha llegado a ser un estándar para accesar SMBDs. El estándar JDBC está basado en la interfaz a nivel de llamadas X/Open SQL, la misma base de ODBC. La API de JDBC, define una interfaz estructurada para bases de datos, la cual es el estándar de la industria para accesarlas. Al soportar SQL, JDBC permite a los programadores interactuar y soportar una gran cantidad de bases de datos. Esto significa que las características especificas de la plataforma de la base de datos se vuelven irrelevantes cuando se accesan desde JDBC, así como la heterogeneidad de las bases de datos al poder accesarlas desde un estándar como DQL. ¿Qué es JDBC? JDBC es la herramienta de conectividad de base de datos para Java. JDBC abarca varias cosas dependiendo del contexto: JDBC es una especificación para usar fuentes de datos en applets y aplicaciones Java. JDBC es una API para usar controladores JDBC. JDBC es una API para crear los controladores JDBC, los cuales realizan la conectividad y transacciones con las fuentes de datos. JDBC está basado en la interface a nivel de llamadas SQL X/Open la cual define como las interacciones cliente/servidor deben ser implementadas para sistemas de bases de datos. JDBC define cada aspecto para manipular bases de datos desde applets y aplicaciones Java. Los controladores JDBC ejecutan la traducción específica de la base de datos a la interface. JDBC. Esta interface es utilizada por el desarrollador y asi el no necesita preocuparse por la sintaxis especifica de la base de datos cuando se conecta y consulta diferentes bases de datos. El aspecto excitante de JDBC es que los controladores necesarios para la conexión a sus respectivas bases de datos no requieren alguna preinstalación en los clientes. Un controlador JDBC puede ser descargado en el cliente junto con el applet. JDBC está ampliamente basado en el estándar ANSI SQL – 92. Esto no significa que un controlador JDBC tiene que ser escrito para base de datos SQL- 92, un controlador JDBC puede ser escrito para cualquier sistema de base de datos y funcionara perfectamente. Aunque el controlador no implemente cada función SQL – 92, este aun seguirá siendo un controlador JDBC. Este es uno de los aspectos más importantes de JDBC ya que de esta manera permite la recuperación de información desde fuentes de datos heterogéneas. JDBC cubre ODBC Los diseñadores de JDBC emplearon una filosofía de diseño que cubrirá los conceptos de ODBC (conectividad de base de datos abierta). Las dos principales razones para modelar JDBC como ODBC son: ODBC es ampliamente utilizado, lo cual ayudaría a que los usuarios lo aprendieran rápidamente. Hay implementaciones ODBC eficientes en todas las plataformas para casi todas las bases de datos. Los productos JDBC disponibles se clasifican en dos categorías aquellos que comunican a un controlador ODBC existente y los que comunican a una API de una base de datos nativa. javasoft desarrollo lo que se conoce como el puente JDBC – ODBC para tomar ventaja de un gran número de fuentes de datos habilitadas como ODBC. La ventaja primaria de usar el puente JDBC – ODBC es que las llamadas JDBC son finalmente convertidas en llamadas ODBC, así las aplicaciones pueden fácilmente accesar bases de datos de múltiples vendedores al seleccionar el controlador ODBC apropiado. Sin embargo el puente JDBC – ODBC requiere preinstalación en el cliente donde requiera que el programa Java se ejecute, debido a que el puente debe hacer llamadas a métodos nativos para hacer la traducción de ODBC a JDBC. Solamente los controladores JDBC 100% Java pueden ser descargados desde la red junto con el applet, y estos no requieren preinstalación del controlador. Un aspecto importante de JDBC es que el diseño estándar de la interface JDBC permite cambiar entre los controladores y por tanto las bases de datos son recodificar los programas. Java. JDBC, por tanto, emerge para dar solución al problema de la neutralidad de plataformas y heterogeneidad de fuentes de datos. 2.5. OLE DB OLE DB es un conjunto de interfaces desarrolladas por Microsoft cuya meta es habilitar aplicaciones para tener un acceso uniforme a datos almacenados en diversas fuentes de información de SMBDs (sistemas manejadores de base de datos) y No-SMBDs. Las fuentes SMBDs pueden incluir bases de datos mainframe, los servidores de base de datos, o repositorios de datos de escritorio. Fuentes No-SMBDs pueden incluir información almacenada en sistemas de archivos, archivos secuenciales indexados, correo electrónico, hojas de cálculo, herramientas de manejo de proyectos y muchas otras fuentes. Las áreas funcionales de OLE DB incluyen acceso a datos y actualizaciones, procesamiento de consultas, información del catalogo, notificaciones, transacciones, seguridad y acceso a datos remotos. OLE DB cubre la infraestructura OLE – COM (modelo de objetos componente), la cual reduce la duplicidad innecesaria de servicios y provee un grado más alto de interoperabilidad no solamente entre diversas fuentes de información, sino también entre ambientes y herramientas de programación existentes. 2.6. CORBA CORBA (Common Object Request Broker Architecture) es un estándar para la interoperación de objetos en ambientes cliente-servidor heterogeneous. Los objetos CORBA pueden residir en cualquier parte de una red. Estos están empaquetados como componentes binarios que los clientes remotos pueden accesar vía invocación de métodos. El lenguaje y compilador utilizado para crear los objetos servidores, son totalmente transparentes a los clientes. Los clientes no necesitan conocer donde los objetos distribuidos residen o en qué sistema operativo se ejecutan. Un ORB (Object Request Broker) CORBA viene con mecanismos estándar para generar y manejar metadatos. Los metadatos que describen los componentes y sus interfaces se generan usando IDL (Lenguaje de definición de la interface). El pre compilador IDL del ORB escribe automáticamente sus metadatos definidos IDL en un repositorio de interfaces. Desde el repositorio se pueden actualizar los metadatos usando las operaciones de escritura y actualización del repositorio de interfaces. Los clientes pueden consultar el repositorio de interfaces, ellos pueden descubrir que interfaces están disponibles y como llamarlas. Se puede utilizar el mismo repositorio de interfaces para almacenar la descripción de componentes. Con CORBA se tiene una especificación sólida para crear repositorios de interfaces federadas que pueden operar a través de ORB-s y sistemas operativos heterogéneos. Capítulo 3. Procesamiento de consultas en un sistema de base de datos múltiples El procesamiento de consultas en un sistema multibase de datos es la pieza más importante para la operación del sistema. En este capítulo se describe la arquitectura general de un procesador de consultas multibase de datos. Se mencionan los módulos que integran un procesador de este tipo y la función que deben llevar a cabo. A grandes rasgos tres pasos son necesarios para procesar una consulta global. Primero una consulta global es descompuesta en subconsulta de manera que los datos necesitados por cada subconsulta estén disponibles desde cada SBDC (sistema de base de datos componente). Después cada subconsulta es trasladada a una consulta o consultas del SBDC y enviada al SBDC. Tercero, los resultados retornados por las subconsultas son combinados para dar respuesta a la consulta global. El procesamiento de consultas es uno de los aspectos más complejos de un sistema multibase de datos. Aunque esto debiera parecerse a un sistema de base de datos distribuido existen diferencias debido a que los SBDCs de un sistema multibase de datos normalmente son heterogéneos y poseen distintas capacidades de procesamiento. De este manera el procesamiento y la optimización de consultas resulta más difícil que en un sistema de base de datos distribuido. Las capacidades de procesamiento de consultas de los sistemas de base de datos componentes (SBDC) pueden variar grandemente, las cuales van desde sistemas de bases de datos orientadas a objetos y sistemas de base de datos relacionales hasta sistemas de archivos. El optimizador de consultas global debe descomponer una consulta global en consultas componentes para ser procesadas por los SBDCs. Este también debe determinar cómo y dónde ejecutar algún procesamiento de integración que sea necesario. Para llevar a cabo cada SBDC para elegir el mejor plan de ejecución. 3.1 Arquitectura de un Procesador de Consultas de base Datos múltiple Un esquema global en los SBDFs fuertemente acoplados es el resultado de la integración de los esquemas de exportación de más bases de datos componentes. Un lenguaje de consulta global es utilizado por los usuarios del sistema de base de datos federada para especificar consultas contra el esquema global. Para procesar una consulta global, la consulta primero es analizada y después descompuesta en unidades de consulta las cuales son representadas en la forma de un grafo de unidades de consulta. El generador del Plan de Ejecución construye subconsultas a partir del grafo de unidades de consulta y estima su costo de ejecución. El plan de consulta con el costo estimado mínimo será enviado al despachador el cual será el encargado de coordinar la ejecución de las consultas. Por último los resultados de las consultas son combinados para construir los resultados de la consulta global. La figura 3.1. Muestra la arquitectura de un procesador de consultas para un SBDF. Consulta global Analizados sintáctico Consulta valida Descomponedor de Consultas Grafo de unidades de consulta Evaluador De Costo Generador del Plan de Consulta Plan de ejecución de la consulta Manejador De Estadistica Despachador de Subconsultas Resultados de la subconsulta SMBD1 SMBD2 Combinador de resultados Resultado de la consulta global Figura 3.1. Arquitectura de un procesador de consultas para un SBDF 3.1.1. Analizador Léxico, Sintáctico y Validación. El analizador léxico identifica los componentes del lenguaje (componentes léxicos) en el texto de la consulta. El analizador sintáctico revisa la sintaxis de la consulta para determinar si esta formulada de acuerdo con las reglas sintácticas. Además la consulta se debe validar, para lo cual ha de comprobarse que todos los nombres de atributos y de relaciones sean validos y tengan sentido desde el punto de vista semántico. Para llevar a cabo la validación este modulo requiere de interactuar con el catalogo del SBDF. 3.1.2. Descomponedor de Consultas La función del descomponedor es separar una consulta global en unidades de consulta. Una unidad de consulta, tales como la selección, proyección, o reunión con datos disponibles en la misma base de datos componente. La descomposición puede ser llevada a cabo de acuerdo a las siguientes heurísticas: 1. Selecciones y proyecciones en relaciones sencillas forman unidades de consulta por si mismas. 2. Las operaciones de reunión y las que involucran solamente relaciones almacenadas en la misma base de datos componente también forman unidades de consulta. 3. Cuando una relación es la unión de relaciones en diferentes bases de datos componentes, las unidades de consulta son formadas para cada sitio. 4. Para una reunión (u otra operacion) que involucra dos bases de datos diferentes, las relaciones en la condición de la reunión son reemplazadas con unidades de consulta resultantes de las unidades de consulta que recuperan la relación (o parte de esta) desde la base de datos original. El principio básico aquí es descomponer la consulta en el nivel más fino para explorar todos los planes de ejecución posibles. La información necesaria para poder descomponer la consulta es tomada del catalogo del SBDF. 3.1.3. El Generador de Planes. Dado un grafo de unidades de consulta, el generador de planes construye los planes posibles que consisten de las subconsultas y su secuencia de ejecución. Las unidades de consulta descompuestas son agrupadas 3.2 El Catálogo de un SBDF El catalogo de un SBDF tiene un propósito similar al catalogo de un sistema manejador de base de datos relacional. Los datos del catalogo son de dos tipos: o Datos estructurales. Descripciones de objetos en el sistema y sus relaciones. o Datos estadísticos. Principalmente estadísticas de los SBDCs utilizados durante la optimización de consultas. Un SBDC es descrito en el catalogo por propiedades tales como el tipo de la fuente de datos, el modelo de datos usado y las funcionalidades disponibles, los esquemas pueden ser representados en forma relacional, y la información mantenida en el catalogo incluye los nombres de las tablas en el esquema, el nombre y tipo de cada atributo en las tablas, y los mapeos desde el esquema local de los SBDCs a su representación relacional. Para generar un plan de ejecución para una consulta el generador requiere información de: La localización de los datos que son referenciados en la consulta. Los nombres de los datos requeridos, asi como la manera en que son entendidos por el SBDC. Estadísticas relacionadas al sistema de los SBDCs. Esta información debe ser guardada en el catalogo del SBDF la cual será accesada por el optimizador de consultas. Capítulo 4. Lenguajes de bases de datos 4.1. Lenguaje de Consultas Es un lenguaje de no-programación en el cual un usuario puede formular consultas y posiblemente también actualizar la base de datos. Noprogramación significa que el usuario no tiene que especificar un algoritmo para obtener resultados, sino solamente definir la consulta de una manera ordenada. 4.2. Lenguaje de Manipulación de Datos Es un lenguaje de programación que tiene una capacidad poderosa de cálculo, flujo de control, entrada-salida, también tiene constructores sintácticos para acceso a base de datos (actualización, recuperación e intercambio dinámico de datos entre el programa y la base de datos). El DML es utilizado por el programador de la aplicación. Un lenguaje de manipulación de datos puede ser: Un DML, stand-alone. En este caso el SMBD provee de un compilador o interprete para el DML. La desventaja de este lenguaje es que no puede ser usado para programas complejos, los cuales ejecutan algún acceso a la base de datos, pero simultáneamente ejecutan otras tareas, por ejemplo, cálculos numéricos. Una Interface para llamadas al sistema. El usuario escribe un programa en un lenguaje de programación tradicional. Elusuario ejecuta accesos a la base de datos por llamadas a subrutinas al SMBD. Las llamadas al sistema son interpretadas en tiempo de ejecución del programa. Una desventaja es que si la llamada al sistema contiene una solicitud incorrecta, el usuario no puede ser notificado en tiempo de compilación, sino que tiene que esperar hasta que el programa aborte. Un DML Incrustado en un Lenguaje de Programación Anfitrión. Este es una extensión de acceso a base de datos de un lenguaje de programación de propósito general. El SMBD pre compila el programa en un programa en el lenguaje anfitrión sin las sentencias del DML. Durante la pre compilación el SMBD valida la sintaxis y la compatibilidad con el esquema de la base de datos. El SMBD puede también ejecutar optimización del algoritmo del usuario. 4.3. Lenguaje de Definición de Datos Es un lenguaje, en el cual la estructura lógica de la información puede ser definida, junto con su interpretación pragmática para el manejo de una base de datos, incluyendo el esquema, restricciones de integridad y vistas de usuario. 4.4. Construcción de Lenguajes de Bases de Datos La tecnología de los compiladores, así como de los intérpretes ha sido utilizada para el desarrollo de los lenguajes de bases de datos. La compilación es ciertamente ventajosa desde el punto de vista de desempeño, esta tiene casi siempre un mejor desempeño en tiempo de ejecución que la interpretación. Sin embargo esto tiene una desventaja significante: “es posible que decisiones hechas por el compilador en tiempo de compilación no tengan validez larga en tiempo de ejecución”. 4.5. Compiladores Un compilador es un programa que lee un programa escrito en un lenguaje fuente y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de este proceso de traducción, el compilador informa al usuario de la presencia de errores en el programa fuente. En la compilación hay dos partes análisis y síntesis. Durante el análisis se determina las operaciones que implica el programa fuente y se registran en una estructura jerárquica llamada árbol. A menudo se usa una clase especial de árbol llamado árbol sintáctico, donde cada nodo representa una operación y los hijos del nodo son los argumentos de la operación 4.5.1. Fases del un Compilador Un compilador típicamente opera en fases, cada una lleva a cabo una tarea sobre el programa fuente. Las tres primeras fases suelen agruparse en una sola fase llamada fase de análisis y las últimas tres en una llamada fase de síntesis. La fase de análisis y el modulo de manejo de errores se describen posteriormente en este mismo capítulo. La fase de síntesis no es relevante en el contexto de un lenguaje multibase de datos, ya que este sigue un enfoque diferente que el de los lenguajes tradicionales, por esta razón solo se menciona. Muchas herramientas de software que manipulan programas fuente realizan primero algún tipo de análisis, entre estas se encuentran los editores de estructuras, impresoras estéticas, verificadores estáticos y los intérpretes. 4.6. Intérpretes En lugar de producir un programa objeto como resultado de una traducción, un intérprete realiza las operaciones que implica el programa fuente. Muchas veces los intérpretes se utilizan para ejecutar lenguajes de órdenes, pues cada operador que se ejecuta en un lenguaje de este tipo suele ser una invocación de una rutina, como un editor o un compilador. Del mismo modo algunos lenguajes de alto nivel son interpretados, porque hay muchas cosas sobre los datos, como el tamaño y la forma de las matrices que no se pueden deducir en el momento de la compilación. 4.7. Lenguaje de Consultas de bases Datos múltiples La parte de análisis de un lenguaje de consultas multibase de datos es parecida a la de un compilador convencional. Los lenguajes de este tipo son implementados por medio de un intérprete, un intérprete de este tipo traduce un predicado que contiene operadores relacionales y booleanos a órdenes para buscar en una base de datos registros que satisfagan ese predicado. 4.7.1. La Fase de Análisis de un Lenguaje de Consultas. El análisis consta de tres partes: análisis léxico, análisis sintáctico y el análisis semántico. Análisis Léxico La cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes léxicos, que son secuencias de caracteres que tienen un significado colectivo. El análisis léxico se encarga de hacer esta agrupación. Análisis Semántico. Implica agrupar los componentes léxicos en frases gramaticales que el compilador utiliza para sintetizar la salida. Por lo general, las frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico. La división entre el análisis léxico y el análisis sintáctico es algo arbitraria. Generalmente se elige una división que simplifique la tarea completa del análisis. Un factor para determinar la división es si una construcción es inherentemente recursiva o no. Las construcciones léxicas no requieren recursión, mientras que las construcciones sintácticas suelen requerirlas. Las gramáticas independientes de contexto son una formalización de reglas recursivas que se pueden usar para guiar el análisis sintáctico. Análisis Semántico La fase de análisis semántico utiliza la estructura sintáctica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones. En el caso de un intérprete de consultas se debe validar que los nombres de atributos y de relaciones sean validos y tengan sentido desde el punto de vista semántico. Un componente importante del análisis semántico es la verificación de tipos. Aquí, el intérprete verifica si cada operador tiene operando permitidos por la especificación del lenguaje fuente y verifica la compatibilidad de los tipos cuando estos están involucrados, por ejemplo, en una condición. 4.7.2. Detección e Información de Errores En cada fase se pueden encontrar errores. Después de detectar un error cada fase debe informar del error con la descripción que le permita al usuario o programador ubicarlo y corregirlo. Los errores se dan con mayor frecuencia en las fases de análisis sintáctico y semántico. La fase léxica puede detectar errores donde los caracteres restantes de la entrada no forman ningún componente léxico del lenguaje. Los errores donde la cadena componentes léxicos violan las reglas de estructura del lenguaje son detectados por la fase de análisis sintáctico. En el análisis semántico el interprete detecta construcciones que tienen la estructura sintáctica correcta, pero que no tienen significado para la operación implicada, por ejemplo, si en un select se intenta seleccionar un atributo cuya tabla no se especifica en la clausula from. Posterior a la fase de análisis en un lenguaje de consultas se lleva a cabo la descomposición de la consulta global en subconsultas, después la recuperación de la información desde las diversas bases de datos y global. por último la reconstrucción de la consulta Capítulo 5. LMBD: Un lenguaje de consulta para un sistema multibase de datos Este capítulo describe la forma en que fue implementado el prototipo para el lenguaje multibase de datos. Se explica de manera general que se hizo en cada fase del prototipo y los algoritmos que se utilizaron. LMBD es un lenguaje de consulta para un sistema multibase de datos. La implementación de este lenguaje comprende los siguientes módulos. Un analizador léxico y semántico Un analizador semántico Un descomponedor de consultas Un despachador de consultas Un constructor de la consulta global Una interfaz grafica para la captura y presentación de la información Una interfaz de programación de la aplicación para LMBD De esta forma la arquitectura del procesador de consultas para LMBD es como sigue: Consulta Global Analizador léxico y sintáctico Consulta Valida léxica y sintácticamente Catalogo de la BD Federeda Analizador Semántico Consulta Valida léxica semánticamente Descomponedor de consultas y generador de subconsultas Subconsultas Despachador de subconsultas Resultados de las Subconsultas SMBD1 Combinador de Resultados Resultados de la consulta Global Arquitectura del Procesador de Consultas de LMBD SMBD2 5.1. Desarrollo del Analizador Léxico y Sintáctico El analizador léxico y sintáctico se realizo utilizando una herramienta escrita en java conocida como JavaCC. Esta herramienta nos permite realizar la especificación de las reglas sintácticas. Para la especificación de las reglas sintácticas se utilizo un estilo BNF, que es una de las formas permitidas por JavaCC. Una consulta SQL puede constar de un máximo de 6 clausulas pero solamente son obligatorias las dos primeras, select y from. Las clausulas se especifican en el siguiente orden: SELECT (Lista de atributos) FROM (Lista de atributos) WHERE (condicion) GROUP BY (Atributos de agrupación) HAVING (condición de agrupación) ORDER BY (Lista de atributos) En el presente prototipo se contemplaron las primeras tres clausulas: Select, From y where. La clausula select indica que atributos se van a obtener, la clausula from especifica todas las relaciones que se necesitan en la consulta, pero no las que se requieren en consultas anidadas y la clausula where especifica las condiciones para seleccionar tuplas de esas relaciones. Estas tres clausulas le dan la suficiente capacidad para recuperar una gran cantidad de consultas, mas considerando que dentro de la clausula where se permite el empleo de consultas anidadas valiéndose para esto del operador de conjuntos In y la función exists, así como la utilización de los operadores lógicos and y or, además de permitir la especificación del orden de evaluación de las condiciones a través de paréntesis y la utilización de alias en las relaciones. Una consulta típica utilizando LMBD es: Select apellido, nombrep from empleado where not exists (select nombre from trabaja_en B where b.nump in (select numero from proyecto where numd=5) and not exists (select * from trabaja_en C where nss=010223)); Durante el análisis léxico - semántico se genera el árbol de análisis semántico (AAS), utilizando la herramienta JJTree de JavaCC. De esta manera es creado un nodo en el árbol por cada no terminal de la gramática, a no ser que se especifique lo contrario. El árbol se adapta para que capture la información referente a las unidades léxicas aceptadas por la gramática, como son los nombres de atributos y de tablas o valores atómicos, es decir, números, cadenas y valores de punto flotante. De esta forma una consulta como la siguiente: Select m.nombre, superficie From municipios m, localidades 1 Where (m.id>1) and (m.id=1.id); Después que es aceptada queda representada por un árbol de análisis sintáctico como el que se muestra en la figura adjunta: Query_spec Selection Column ref Column ref From clause Table ref Where clause Comp-predicaten Árbol de análisis sintáctico 5.2. Desarrollo del Analizador Semántico Comp-predicaten Después de llevar a cabo el análisis léxico y sintáctico, la consulta se debe validar, para lo cual ha de comprobarse que todos los nombres de atributos y de relaciones sean validos y tengan sentido desde el punto de vista semántico. Para poder llevar a cabo la validación semántica se repera la información producida durante el proceso de integración de las bases de datos, es decir, los metadatos. En el proceso de integración se genera un esquema global a partir de las bases de datos componentes. Así, a partir de este esquema global se obtienen los nombres de las tablas que integran la base de datos, los atributos de cada tabla y los tipos de datos de cada atributo. Esto se realiza por medio de la clase Metadato. Esta información se recupera una sola vez de la base de datos y después permanece en memoria principal, hasta que una nueva base de datos es abierta, esto hace más rápido el proceso de validación semántica. El formato referente a cada tabla que compone el catalogo de la multibase de datos es parte de un trabajo que se desarrolla al mismo tiempo que este lenguaje, así como el proceso de integración de los esquemas; mismo que fue diseñado en base a los requerimientos desprendidos del análisis de las necesidades de información (metadatos) necesarias para poder procesar una consulta multibase de datos. 5.2.1. Reglas Semánticas Las siguientes son las reglas que se verifican en el análisis semántico. 1. Las tablas listadas en la clausula from existan 2. Los atributos listados en el select pertenezcan a alguna de las tablas listadas en la clausula from. 3. Los nombres de atributos no deben repetirse 4. Un nombre de atributo no debe existir en más de una tabla, a no ser que se haga referencia al atributo anteponiendo como prefijo el alias de la tabla o el nombre de la tabla. 5. El nombre de atributo (con o sin alias) utilizado como parte de una condición en la clausula where debe pertenecer a alguna de las tablas listadas en la clausula from previa. 6. Los atributos que forman parte de una condición en el where deben tener tipos de datos compatibles. Ya se que trate de dos atributos o de un atributo y un valor. Por ejemplo: Where (dirección=domicilio) donde dirección y domicilio deben tener tipos de datos compatibles. Where (nombre= ‘Jesús’) donde nombre debe ser un tipo que sea compatible con una cadena. Where (numero=5) donde numero debe ser de tipo int o real. Where (fracción=0.90) donde fracción debe ser de tipo real. 7. Verificar que los atributos que forman parte de una colección en un where no presenten conflictos de atributo faltante o composición. Los atributos que presentan estos conflictos no son buenos candidatos para ser parte de una condición. Estas mismas reglas se aplican también a las subconsultas que aparecen dentro de un where. En esta etapa también se modifica el AAS (árbol de análisis sintáctico) para asociarle información que será utilizada en la descomposición de la consulta y en la verificación de la compatibilidad de tipos de datos. Esto se hace al agregar hijos al AAS o bien al agregar atributos al nodo (cada nodo es instancia de una clase que lo identifica). 5.3. Desarrollo del Descomponedor de Consultas Este proceso se lleva a cabo para poder obtener la información necesaria para construir las subconsulotas que deben enviarse a cada sitio El algoritmo que se propuso para la descomposición y construcción de subconsultas es como sigue: 1. Por cada atributo que aparece en la clausula select hacer: Ir a la tabla de equivalencias del esquema auxiliar y recuperar la tabla local, atributo local, el sitio donde se ubican y los conflictos que presentan. Si el atributo presenta el conflicto de atributo faltante (FA) entonces no agregar el atributo al select Si el atributo presenta el conflicto de composición (CMP) entonces localizar todos los atributos que lo conforman y agregarlos al select Si el atributo presenta el conflicto de horizontalidad (H) entonces agregar al atributo a ambos selects. Si el atributo no presenta el conflicto de horizontalidad entonces. Por cada atributo que se agrega al select también se agrega al atributo designado para ser el atributo con el que se va a hacer la operación reunión de las tablas, es decir el atributo común a ambas tablas. 2. Por cada atributo que aparece como parte de una condición en el where hacer: Si el atributo aun no forma parte de la lista de atributos del select agregar el atributo, para posteriormente poder verificar la condición. Las condiciones son guardadas en un vector para después utilizarlas en la reconstrucción de la consulta global, estas condiciones sirven para seleccionar las tuplas. Este algoritmo se lleva a cabo tomando la información del esquema auxiliar de la multibase de datos y la información almacenada en el AAS. 5.4. Desarrollo del Despachador de Consultas Este modulo se encarga de enviar las subconsultas al sitio que les corresponde y recuperar la información. Para hacer esto tiene que conocer la ubicación del sitio, la cual se encuentra almacenada en la tabla localización del esquema auxiliar de la multibase de datos. La interconexión con las fuentes de datos es a través de JDBC. Asi la información de localización del sitio está en forma de un URL (localizador uniforme de recursos) que es lo que se encuentra almacenado en la tabla localización del esquema auxiliar de la multibase de datos. La clase de BaseDatos que se implemento, permite la interconexión con las fuentes de datos de la manera sencilla. Por ejemplo: BaseDatos.OpenDB (“Informix”,”Municipios”); Realiza la conexión con la base de datos municipios que se encuentra en el servidor informix. En el presente prototipo las bases de datos que se pretenden integrar están almacenadas con los manejadores de base de datos Informix Universal y Oracle RDB. Obtener el controlador JDBC para Informix fue relativamente fácil, no así con el controlador JDBC para Oracle RDB. Oracle RDB funciona bajo el sistema operativo VMS lo cual implica otras operaciones propias de VMS para cargar el controlador. También cabe mencionar que la versión de JDBC que se utilizo es una versión comercial, por lo que si no se compra, solo se puede descargar para que funcione durante 4 horas, después de este tiempo el controlador se inhabilita, asi que si se desea seguir utilizándolo hay que matar el proceso y volver a cargar el controlador. 5.5. Desarrollo de la Interfaz de Usuario para la Captura y Presentación de Información El prototipo completo se desarrollo con el lenguaje Java, de esta forma la interfaz de usuario está construida utilizando clases del paquete AWT de Java. La interfaz principal de LMBD es como se muestra en la figura adjunta. Interfaz Principal de LMBD Esta interfaz ofrece diversos servicios los cuales se mencionan a continuación: 1. El menú File de la barra de menus tiene las siguientes opciones a. Open multidatabase. Realiza la apertura de una multibase de datos seleccionándola de una lista ver figura adjunta. b. Open Database. Realiza la apertura de una base de datos local. En una lista como la de la figura adjunta se despliegan las bases de datos locales y de aquí se selecciona alguna. Lista de la Base de Datos Disponibles para consulta c. Quit Sale de la aplicación 2. E menú View. Muestra el esquema de la base de datos activa en una ventana como la de la figura siguiente. El objetivo es presentar las tablas y atributos de la base de datos que se consulta. Funciona de la misma manera para una multibase de datos que para una base de datos local. Esquema de la base de datos activa 3. El botón Excecute del área de botones inicia la ejecución de la consulta presente en el área de captura de la consulta. Si la consulta es correcta los resultados son mostrados en una ventana, si algún error ocurre un mensaje es mostrado en la zona de mensajes de error. 4. El Botón Clean del área de botones limpia el área de captura de la consulta, así como el área de despliegue de mensajes de error. 5.6. La Interface de Programación de la Aplicación de LMBD LMBD puede ser manejado desde una aplicación sin necesidad de utilizar la interfaz grafica, es decir, LMBD puede ser llamado desde un programa Java a través de la clase MultiBD. Así, se puede llevar a cabo la manipulación de una o más multibases de datos dentro de un mismo programa Java. Los resultados de una consulta a una multibase de datos son retornados como un objeto de la clase Result (ver apéndice E) y por lo tanto pueden ser manipulados por el programador como desee. La forma en que se utiliza una multibase de datos dentro de una aplicación es sencilla solo son necesarios los siguientes pasos: 1. Crear un objeto de la clase MultiBD MultiBD m=new MultiBD(); 2. Abrir la multibase de datos indicando el nombre del esquema global y el nombre del esquema auxiliar M.open (“eg_municipios”, “ea_municipios”); 3. Someter una consulta Result r=m.execute (“select * from municipios;”); Para probar la funcionalidad de la clase MultiBD manejada desde un programa Java se desarrollo una aplicación en la que se integra información geográfica e información descriptiva. La información geográfica que se integra esta distribución en los manejadores de base de datos. La integración de la información geográfica se encuentra en una multibase de datos llamada eg_espacial y la información descriptiva en una multibase de datos llamada eg_municipios, ambas multibases de datos son manipuladas desde un programa Java llamado consultas. La aplicación Consultas dibuja el mapa de la ciudad de Chincha y permite hacer consultas haciendo click sobre alguno de sus municipios. Después de detectar el municipio seleccionado se genera una consulta que se encarga de recuperar la información descriptiva correspondiente a este municipio a través de la multibase de datos eg_municipios. Finalmente la información es presentada. Esta aplicación es una muestra de cómo se puede manipular más de una multibase de datos desde un mismo programa Java. La flexibilidad de LMBD de poderse manipular desde un programa Java le da al programador una herramienta poderosa para consultar una multibase de datos cuyo resultado puede manipularse a placer, aun mas si consideramos que se puede manipular más de una multibase de datos desde un mismo programa Java. En el apéndice C se muestran ejemplos que describen de manera sencilla como se realizan el procesamiento de una consulta, lo cual puede ayudar a comprender mejor la implementación de este lenguaje. Conclusiones La importancia principal de las multibases de datos y más concretamente de las bases de datos federadas fuertemente acopladas radica principalmente en su bi-procesamiento. Es decir, en su capacidad de atender consultas globales, al mismo tiempo que permite que las bases de datos componentes sigan atendiendo a sus aplicaciones locales. La existencia de un esquema global permite que el lenguaje implementado para llevar a cabo las consultas sea fácil de aprender y entender (muy parecido a SQL) debido a que este da a la multibase de datos la apariencia de que se accesa a una base de datos sencilla y por lo tanto las operaciones de distribución son transparentes al usuario. El problema de la heterogeneidad de las bases de datos componentes puede hacer que algunas tareas lleguen a ser complejas. La tarea de optimización de consultas requiere de información como la velocidad de procesamiento del CPU, la velocidad de entrada/salida entre otros, para cada una de las bases de datos; así como el tamaño de los resultados intermedios de las subconsultas, sin embargo debido a la heterogeneidad de las bases de datos componentes, esta información es difícil de mantener principalmente por las diferentes capacidades de procesamiento de las bases de datos componentes lo cual hace que la optimización de consultas sea una tarea difícil de realizar. El surgimiento de estándares y nuevas tecnologías permite crear soluciones multibase de datos. Estándares para el desarrollo de manejadores de bases de datos (como el estándar para SQL), así como el de tecnologías para la conexión a múltiples bases de datos y lenguajes capaces de crear aplicaciones que se ejecutan en cualquier plataforma (como java) permiten crear aplicaciones multibase de datos, que aunque consumen un tiempo considerable ofrecen una solución. Un aspecto importante de este prototipo es que permite la operación global y local desde la misma interfaz. Los servicios que ofrecen para una multibase de datos también se ofrecen para una base de datos local. El utilizar SQL como lenguaje de consulta para la multibase de datos hace que todo parezca transparente al usuario, que da la apariencia que se accede a una base de datos local. Bibliografía Alvarez, G. 1999. Integración de esquemas para una multibase de datos. Tesis. Departamento de Sistemas Computacionales, Universidad de las Américas, México. Litwin, W. y Abdellalit A. 1998. An Overwiew of the multi-database manipulation language MDSL. Procceding of the IEEE 75,5. López, E. J. 1998 Modelación de información geográfica. Tesis. Departamento de Sistemas Computacionales de la Universidad de las Américas, Santa Catarina, puebla, México. Data, C.J. 1990 Database Systems. Addison-Wesley. EU. Nguyen, T. y Srinivasan, V. 1996. Accessing relational databases from the world wide web. ACM Sigmod 25,2. Paginas electrónicas http://www.javaworld.com/javaworld/jw-05-1996/jw-05-shah.html http://www.suntest.com/javaCC ANEXOS Apéndice A. Reglas gramaticales de LMen su forma B Query_term::=”(“ <query_epec>”)” <query_epec>::=”select” <selection> <table_exp> “;” <selection> ::= <scalar_exp_commalist> “*” <scalar_exp_commalist> ::= (<column_ref()> {“,”<column_ref>}*) (“(”<column_ref>{“,”<column_ref>}*”)”) <column_ref> ::= <identifier> “.”<identifier> <identifier> <table_exp> ::= <from_clause> [where_clause] <from_clause> ::= “from” <table_ref_commalist> <table_ref_commalist> ::= (<table_ref>{“,”<table_ref>}*) (“(”<table_ref>{“,” <table_ref>}*”)”) <table_ref> ::= <identifier> {<identifier>}* <where_clause> ::= “where” <search_condiction> <search_condiction> ::= (<predicate> “(”<search_condiction>”)”) {(“or”; “and”) (<predicate>”(” <search_condiction> “)”)}* <predicate> ::= <comparasion_predicate> <search_condiction> <existence_test> <comparison_predicate> ::= <scalar_exp> <operador_relacional> <scalar_exp> (<scalar_exp> <operador_relacional> “(”<subquery>”)”) <in_predicate> ::= <scalar_exp> [“not”] “in” “(”<subquery>”)” <existence_test> ::= [“not”] “exists” “(”<subquery>”)” <subquery>::= “select” <selection> <table_exp> <operador_relacional> ::= “>” “<”“>=” “=<” “=”“<>” <escalar_exp> ::= <literal> <column_ref> <literal> ::= <entero> <real> <cadena> <entero> ::= [“0” – “9”] {[“0” – “9”]}* <real> ::= [“0” – “9”] {[“0” – “9”]}* <cadena> ::= “’”{&[““,””,”;”,”’” <identifier> ::= <letra> {<letra> <digito> “-” }* <letra> ::= “A”-“Z”, “a”-“z” <digito> ::= “0”-“9” Reglas Gramaticales implementadas con JavaCC Options { JAVA_UNICODE_ESCAPE =true; MULTI =true; VISITOR = true; } PARSER_BEGIN (SQLparser) Public class SQLParser {} PARSER_END (SQLParser) /*Estos caracteres serán ignorados por el parser*/ SKIP : { “” “ “ “ “” “f” } /*Palabras reservadas*/ TOKEN : { <SELECT: “select”> <DISTINCT: “distinct”> <FROM: “from”> <WHERE: “wheret”> <AND: “and”> <OR: “or”> <NOT: “not”> <IN: “in”> <EXISTS: “exists”> <ASTERISCO: “*”> } /*Separadores*/ TOKEN : { <LPAREN: “(”> <RPAREN: “(”> <LBRACKET: “[”> <RBRACKET: “]”> <SEMICOLON: “;”> <COMMA: “,”> <DOT: “.”> } /* Operadores */ Token : { <GT: “>”> <LT: “<”> <COLON: “:”> <EQ: “=”> <LE: “<=”> <LE: “>=”> <NE: “<>”> ASTStart Start () : {} { Query_term() { return jjtThis;} } Void query_term( ) # void : {} { Query_spec() “(” query_spec() “)“ } Void query_espec() : {} { “select” selection() table_exp (“;”) } Void selection () : {} { Scalar_exp_commalist() “+” } Apéndice B. Tipos de conflictos de integración Nombrado de tablas y nombrado de atributos. Estos requerimientos de la tabla de equivalencias para establecer la relación semántica entre las tablas y atributos globales con las tablas y atributos locales. Grado de atomicidad o composición (CMP). Cuando un atributo del esquema global puede ser representado por la composición de más de un atributo en el esquema local de una base de datos. Fragmentación horizontal (H). Cuando la información de una tabla se encuentra distribuida lógicamente en los dos componentes, pero a diferencia de la anterior los atributos globales tienen equivalencias con los atributos locales de las dos bases de datos componentes. Fragmentación Vertical. Cuando la información de una tabla se encuentra distribuida lógicamente en los dos componentes pero a diferencia de la anterior los atributos globales tienen equivalencias con los atributos locales en alguna de las dos bases de datos componentes, pero no en las dos, a excepción del atributo que se designe para llevar a cabo la operación reunión. Fragmentación Identidad. Esta se presenta cuando una tabla local (con sus atributos) tiene una equivalencia directa con la tabla global (con sus atributos), es decir la tabla local para a formar parte de manera directa de una tabla en el esquema global. Atributos Faltantes (FA). Este se presenta cuando hay fragmentación horizontal y algún atributo que no exista en alguna de las dos bases de datos componentes, y aun así se desea hacer una integración horizontal. Unidades Distintas (UD). Cuando la escala de medidas utilizadas para representar valores de atributos locales son diferentes pero compatibles. Así que hay que determinar una función de mapeo para poder aplicarla al atributo local y así tener una representación para el atributo global. Una de las tablas que componen el esquema auxiliar del catalogo de la multibase de datos y donde se encuentra la información referente a los conflictos antes mencionados es la de equivalencias, donde por cada atributo se define el conflicto(s) que presenta: Equivalencias Tabla Atributo Tabla Atributo Id global global local local componente Conflictos Las siguientes tablas completan el esquema auxiliar de la multibase de datos. Localización Nombre_bd Servidor Id_componente atributosJoin Id_componente Tabla Atributo tipoIntegracion Tabla Integración Auxiliar Id_componente Tabla_global Atributo_local Expresión Apéndice C. Ejemplos de procesamiento de consultas multibase de datos Supongamos que tenemos las siguientes bases de datos Municipios Id Nombre Significado Municipios Id Id Nombre Nombre No_habitantes No_habitantes Superficie Superficie Municipios Id Nombre No_habitantes Superficie Presidente Presidente RFC Nombre Domicilio Id_municipio RFC Nombre Domicilio Id_municipio Localidades Localidades Localidades Nombre Id_municipio Nombre Id_municipio Superficie Nom_loc Id_municipio Superficie Obras Nom_localidad Cue_obra Des_obra Cue_obra Desc Presupuesto Inicio Fin En el esquema podemos observar de manera grafica como se lleva a cabo la integración de dos bases de datos. Las flechas más gruesas indican que este atributo es con el que se va a llevar a cabo la operación reunión de ambas tablas, por lo cual este atributo debe estar en las dos tablas. Las flechas delgadas indican que este atributo forma parte de la tabla global. Este tipo de integración la denominamos integración de tipo vertical. Tomando en cuenta este esquema global, al someter una consulta contra este esquema como la siguiente: Select * from municipios,localidades Después de hacer la descomposición tendríamos las siguientes subconsultas: Para el sitio 1 tendríamos: o o Select Id,nombre para el sitio 2 tendríamos 1. Select ID, From municipios No_habitantes Select Nombre, superficie Id_municipio from Localidades 2. Select superficie localidades nom_loc, from Después que la despachadora de subconsultas envía estas al sitio que les corresponde y recupera los resultados obtenidos, se realiza la operación reunión entre ambos resultados. En los primeros selects la operación reunión se lleva a cabo por medio del atributo, el cual es el atributo común entre las dos tablas, en los selects (2) la reunión se lleva a cabo por medio de los atributos Nombre y Nom_loc. Después de esta operación cada tabla del esquema global ya tiene los resultados que les corresponde con los atributos seleccionados. De acuerdo a la consulta global se debe realizar el producto cartesiano de las tablas municipio y localidades y esta sería el resultado de la consulta. En el caso de que existiera una clausula where entonces mientras se lleva a cabo la combinación de tuplas en el producto cartesiano se va verificando que tuplas cumplen con las condición (es) y solo las que cumplen se agregan a la tabla resultados. Por supuesto el número de subconsultas y operaciones realizadas para procesar una consulta global se incrementan conforme se somete una consulta más complicada, por ejemplo una que utilice múltiples condiciones y subconsultas. Ejemplo. Procesamiento de una consulta global en una integración de tipo horizontal Si se tiene la siguiente base de datos. Sitio 1 BD escolar_mod Esquema global Sitio 2 de la multibase de datos BD Escolar_Mod Alumnos Alumnos Alumnos Matricula Nombre domicilio Fecha_nac Materias Matricula nombre domicilio Email Fecha_nac Materias Clave_alumno Nom_alumno calle No Localidad E_mail Materias Clave_mat Nombre Clave Nombre Clave Nombre Cursos Cursos Cursos Matricula Clave_materia cedula calif semestre Matricula Clave_materia cedula calif semestre Clave_alumno Clave_materia Cedula_profesor calificacion Catedraticos Catedraticos Catedraticos Cedula_prof nombre domicilio telefono Cedula Cedula_prof nombre domicilio telefono Cedula_profesional nombre domicilio telefono Figura. Integración de los esquemas de las bases de datos escolar_m y escolar_mod en un esquema global. Como podemos observar en la figura la integración del esquema global es tomando atributos de ambas tablas de los dos sitios. Este tipo de integración la denominaremos integración horizontal. La operación principal de este tipo de integración es la operación unión, es decir, la información de una tabla global es una unión del sitio 1 y los datos del sitio 2. En este tipo de integración se presentan diversos conflictos, los cuales se mencionan en el apéndice B. Asimismo vemos que el atributo domicilio en la tabla alumno del esquema global está integrado por el atributo domicilio de la base de datos escolar_m del sitio 1 por un lado, y por el otro por una concatenación de los atributos calle, no y localidad de la base de datos escolar_mod del sitio 2, este conflicto se conoce como composición. Otro conflicto que se presenta es el de atributo faltante. Podemos ver que el atributo fecha_nac de la tabla alumno del esquema global solo tiene atributo equivalente en el sitio 1, pero no en el sitio 2, de esta manera cuando se haga la unión de estos atributos la información del sitio 1 si tendrá esta información la cual se verá reflejada en la tabla correspondiente en el esquema global, pero como en el sitio 2 no existe esta información entonces un null es el esquema global, pero como en el sitio 2 no existe esta información entonces un null será agregado en el lugar que le corresponde a este atributo en la tabla del esquema global. Un conflicto más que se presenta es el de unidades distintas. El atributo calificación de la tabla cursos está integrado por el atributo calif en el sitio 1 y por calificación en el sitio 2. El conflicto aquí es que calif utiliza una escala de 10 para expresar la calificación y calificación del sitio 2 utiliza una escala de 100. Como en el atributo global calificación se desea que este expresado en escala de 100, al atributo calif local hay que aplicarle la expresión calif*10 para que asi al formar la tabla global los datos tengan la misma representación. Tomando en cuenta este esquema global, veamos los siguientes ejemplos. Ejemplo 1: Select * from catedráticos; Después de hacer la descomposición tendríamos las siguientes subconsultas: Para el sitio 1 tendriamos 1. Select cedula_prof, Para el sitio 2 tendriamos 1. Select, cedula_profesional, Nombre, domicilio, nombre, domicilio, Telefono from teléfono from Catedráticos catedráticos Ya teniendo las subconsultas el despachador de consultas se encarga de enviarlas al sitio que les corresponde y recupera los resultados obtenidos. Después se realiza la operación unión con la información de ambas subconsultas, aquí no hay problema porque hay una relación uno a uno entre los atributos de las tablas locales con los atributos en la tabla global, así que la información solamente se agrega en una estructura de datos que contendrá la información de ambos sitios. Ejemplo 2: Select * from alumnos; Después de hacer la descomposición tendríamos las siguientes subconsultas: Para el sitio 1 tendríamos: Select matricula, para el sitio 2 tendríamos: select clave_alumno, Nombre,domicilio nom_alumno,calle, Fecha_nac from no,localidad, Alumnos e_mail from alumnos Luego que el despachador envía las subconsultas y recupera los resultados, hay que hacer un proceso que haga coincidir los atributos de la tabla local con los atributos de la tabla global. En este proceso se deben resolver los conflictos que se presenten, en este ejemplo se presenta el conflicto de composición para el atributo domicilio y los conflictos de atributo faltante en los atributos fecha_nac, e_mail del esquema global. Después de resolver los conflictos y hacer coincidir los atributos locales con los globales, ya se puede llevar a cabo la operación unión con los resultados de las subconsultas. Al igual que en la integración vertical el procesamiento de la consulta se hace más complejo cuando, se involucran varias tablas, condiciones y subconsultas. Pero el objetivo de estos ejemplos es ilustrar como se lleva a cabo el proceso para integrar la información en tablas, el resto del procesamiento ya es similar al de una base de datos sencilla. La diferencia entre la integración vertical y la horizontal es el tipo de operación que se realiza para integrar una tabla, es decir para una vertical se lleva a cabo una operación reunión y para la horizontal una operación unión. En un esquema global pueden existir tablas integradas de manera horizontal y tablas integradas de forma vertical si así se desea. Apéndice D. Algoritmo ordenamiento-mezcla para la operación reunión El algoritmo ordenamiento-mezcla es ejecutado en dos etapas. Primero ambas relaciones son ordenadas con los atributos con los que se hará la operación reunión. Luego, ambas relaciones son analizadas en el orden de los atributos de reunión y las tuplas que satisfacen la conducción de reunión son mezcladas para formar una sola relación. El algoritmo para ejecutar la reunión es como sigue: Etapa 1: Proceso de ordenamiento Ordenar R en r(a) Ordenar S en s(b) Etapa 2: Proceso de mezcla Leer primera tupla de R Leer primera tupla de S Para cada tupla r hacer { Mientras s(b) < r(a) Leer la siguiente tupla de S Si r(a) = s(b) entonces Reunir r y s Colocar la reunión en la relación de salida El tiempo de procesamiento de este algoritmo depende de los algoritmos de ordenamiento y mezcla. Si las relaciones ya están ordenadas, el costo es solamente de mezclar las dos relaciones. En general el tiempo de ejecución depende principalmente del tiempo de ordenamiento el cual es usualmente de O (n log n) para cada relación, donde n es la cardinalidad de la relación. Para el prototipo de esta tesis las relaciones se recuperan ya ordenadas desde la base de datos. Apéndice E. Implementación en Java de la clase Result La clase Result es la clase utilizada para modelar la estructura en la que se almacenan los resultados de una consulta global. El método setData introduce un dato a la estructura por medio del nombre de la columna a la que pertenece. El método getData recupera el dato correspondiente a una columna. El método getTupla recupera la tupla especificada por un numero de renglón El método include retorna true si la estructura contiene el dato que recibe como parámetro. El método notinclude retorna true si la estructura no contiene el dato que recibe como parámetro. El método isEmpty retorna true si la estructura está vacía. Importe java.util.*; Importe java.lang.*; Public class result { Vector buf[]; Vector nombres=new vector(); Int sizes[]; Int numCols; Results (int numcolumnas){ Buf =new vector (numcolumnas]; Sizes = new int(numcolumnas); For (int i=0; I I (numcolumnas; i++) buf [i] =new vector (); Numcols =numcolumnas; } Public void setData (String columnas, String dato) { Dato=dato.trim(); If (!nombres,contains (columnas)) nombres.addElement(columnas); Int col=nombres.indexOf (columnas); Buf [col].addElement [dato]; If (dato.length () > sizes [col]) sizes [col]=dato.length(); } Public String getData (int ren, String columnas) { Int col=nombres.indexOf (columnas); Return buf [col].elementat (ren). To String(); } Public vector getTupla (int ren) { Vector tupla=new vector(); For (int j=0; j < numCols; j++) { tupla.addElement (buf[j].elementAt(ren)); } Return tupla; } Public Boolean include (string valor){ For (int i=0; i <buf [0].size(); i++) { For (int j=0; j <numCols; j++){ If (!buf [j].IsEmpty()) If (valor.compareTo (buf[j].elementAt (i).toString())== 0) return true; } Return false; } Public Boolean notInclude (string valor){ For (int i=0; i <buf [0].size(); i++) { For (int j=0; j <numCols; j++){ If (!buf [j].IsEmpty()) If (valor.compareTo (buf[j].elementAt (i).toString())== 0) return true; } Return true; } Public Boolean isEmpty(){ For (int j=0; j <numCols; j++) If (!buf [j].IsEmpty()) return false; Return true; } Public String toString(){ for (int i=0; i<nombres.size(); i++) system.out.print (nombres.elementAt(i) +” “); for (int i=0; i for <buf [0].size(); i++ for (int i=0; i<nombres.size(); i++) if (!buf[j].IsEmpty()) system.out.print (buf[j].elementAt(i)+” “); system.out.printLn (“ “); } Return “ “; } } //FIN Result Apéndice F. Implementación en Java de la clase Metadatos La clase metadato se utiliza para recuperar los metadatos de una base de datos que implemente la tecnología JDBC. El método getCatalogs obtiene los nombres de las bases de datos que existen en un sistema manejador de base de datos, solo requiere de un objeto de la clase Connection (clase del paquete sql de java) que este dirigido a cualquier base de datos del manejador. El método gettables obtiene las tablas pertenecientes a una base de datos. Requiere como parámetros un objeto de la clase Connection y el nombre de la base de datos. El método getColums obtiene las columnas pertenecientes a una tabla. Requiere como parámetro un objeto de la clase Connection dirigido a la base de datos que contiene la tabla y el nombre de la tabla. El método getTypes obtiene los tipos de datos de los atributos de una tabla. Requiere como parámetro un objeto de la clase Connection dirigido a la base de datos que contiene la tabla y el nombre de la tabla. Import java.sql.*; Import java.util.*; Class Metadatos { Public static vector getCatalogs (connection conn) { Boolean notnode=true; String catalog_name; Vector Catalog_list=new vector(); Try { DatabaseMetadata dmd = conn.getMetadata(); ResultSet rs =dmd.getCatalogsa(); While (notnode) { Nodnode = rs.next(); If (notnode) { Catalog_name=rsgetString(1); Catalog_list.addElement(catalog_name); } } } Catch (SQLException se) { System.out.printLn (se); } Finally {return catalog_list;} } Public static vector getTables (connection conn, String database) { Boolean notdone=true; Vector table_list =new vector(); String types[] ={“TABLE”, “VIEW”,”SYSTEM TABLE”,”GLOBAL”,”TEMPORARY”, “LOCAL TEMPORARY”} Try { DatabaseMetadata dmd=conn.getMetaData(); ResultSet rs =dmd.getTables (database, “&”,”&”,types); While (notdone) { Notdone=rs.next(); If (notdone) Table_list.addElement (rs.getString(3)); } } Catch (SQLException se) {System.out.println(se);} Finally {return Table_list;} } Public static vector getColumn (connection conn, String database) { Vector Column =new vector(); String query = “select * from “ + table; Try { Statement stat = conn.createStatement(); ResultSet re = stat.executeQuery(query); ResultSetmetadata metadata = re.getMetadata(); Int nresultcols = metadata.getColumnCount(); For (int i=0; I < nresultcols; i++) Columns.addElement (metadata.getColumnLabel (i+1)); System.out.println(); } Finally {return Columns;} } Public static vector getTypes (connection conn, String table) { Vector Types =new vector(); String query = “select * from “ + table; Try { Statement stat = conn.createStatement(); ResultSet re = stat.executeQuery(query); ResultSetmetadata metadata = re.getMetadata(); Int nresultcols = metadata.getColumnCount(); For (int i=0; I < nresultcols; i++) Types.addElement (metadata.getColumnTypeName (i+1)); System.out.println(); } Catch (SQLException se) { System.out.print (se); } Finally {return Types;} } // FIN CLASE Metadatos