Anda di halaman 1dari 210

SEP

SNEST INSTITUTO TECNOLGICO DE CHIHUAHUA II

DGEST

TALLER DE BASES DE DATOS

PRESENTA: Alumno

Chihuahua, Chih., Enero 2009.

TABLA DE CONTENIDO PORTADA i AGRADECIMIENTOS ............................................................... Error! Bookmark not defined. DICTAMEN ............................................................................... Error! Bookmark not defined. PREFACIO ............................................................................... Error! Bookmark not defined. TABLA DE CONTENIDO .......................................................................................................... ii NDICE DE FIGURAS .............................................................................................................. iv TEMARIO OFICIAL.................................................................................................................. ix UNIDAD 1. GESTOR DE BASES DE DATOS. ......................................................................... 1 1.1 Caractersticas del gestor. ............................................................................................... 2 1.2 Herramientas. .................................................................................................................. 7 1.2.1 De creacin de bases de datos. ............................................................................... 7 1.2.2 De administracin de bases de datos. .................................................................... 10 1.2.3 De edicin para crear esquemas y consultas de bases de datos. .......................... 15 1.2.4 De control, monitoreo y estadsticas de acceso a bases de datos. ........................ 17 1.2.5 Utileras diversas. ................................................................................................... 19 1.3 Instalacin y configuracin del entorno operativo.......................................................... 21 UNIDAD 2. ADMINISTRACIN DE BASES DE DATOS. ....................................................... 35 2.1 Creacin de bases de datos. ......................................................................................... 35 2.1.1 Creacin de la estructura de la base de datos........................................................ 36 2.1.1.1 Estructuras de almacenamiento. ...................................................................... 36 2.1.1.2 Asignacin de espacio en disco para diferentes estructuras de almacenamiento. .......................................................................................................... 40 2.1.1.3 Espacio asignado en memoria principal para diferentes objetos de la base de datos. ........................................................................................................................... 41 2.1.2 Creacin de dominios definidos por el DBA. .......................................................... 43 2.1.3 Definir el esquema general de la base de datos (tablas, atributos, llaves primarias y llaves heredadas). ........................................................................................................... 46 2.1.4 Creacin de vistas de la base de datos (view)........................................................ 51 2.2 Definicin del esquema de integridad. .......................................................................... 53 2.2.1 Validar y verificar integridad de entidad e integridad referencial............................. 54 2.2.2 Creacin de disparadores (triggers). ...................................................................... 57 2.2.3 Creacin de procedimientos almacenados. ............................................................ 61

ii

2.3 Definicin del esquema de seguridad. .......................................................................... 65 2.3.1 Creacin de usuarios de la base de datos. ............................................................. 67 2.3.2 Asignacin de privilegios sobre los objetos de informacin. ................................... 69 2.4 Definicin del esquema de recuperacin. ..................................................................... 72 2.4.1 Diseo y creacin de la bitcora. ............................................................................ 74 2.4.2 Recuperacin a partir de la bitcora. ...................................................................... 79 2.4.3 Respaldar bases de datos. ..................................................................................... 80 2.4.4 Recuperar bases de datos. ..................................................................................... 86 2.5 Diseo y procesamiento de transacciones. ................................................................... 90 2.5.1 Definicin de transacciones en un lenguaje husped. ............................................ 92 2.5.2 Ejecucin de transacciones planas en el gestor de bases de datos. ...................... 96 2.5.3 Ejecucin de transacciones anidadas. .................................................................... 97 UNIDAD 3. TECNOLOGAS DE CONECTIVIDAD A BASES DE DATOS. ........................... 106 3.1 ODBC. ......................................................................................................................... 107 3.1.1 Terminologa y conceptos. .................................................................................... 107 3.1.2 Administrador de orgenes de datos ODBC. ......................................................... 109 3.1.3 Instalacin y configuracin del driver acorde al gestor de bases de datos. .......... 112 3.2 ADO.NET. ................................................................................................................... 135 3.2.1 Terminologa y conceptos. .................................................................................... 135 3.2.2 Componentes disponibles..................................................................................... 137 3.2.2.1 Connection. .................................................................................................... 140 3.2.2.2 Command....................................................................................................... 140 3.2.2.3 Recordsource. ................................................................................................ 141 3.2.2.4 Error. .............................................................................................................. 143 3.2.3 Prototipo de aplicaciones con conectividad a bases de datos. ............................. 145 3.3 JDBC. .......................................................................................................................... 154 3.3.1 Terminologa y conceptos. .................................................................................... 154 3.3.2 SQL y JDBC. ........................................................................................................ 158 3.3.2.1 Jerarqua de clases java.sql.*. ....................................................................... 158 3.3.2.2 Interface java.sql.connection. ......................................................................... 162 3.3.2.3 Interface java.sql.statement. .......................................................................... 163 3.3.2.4 Interface java.sql.resultset.............................................................................. 164 3.3.2.5 Jerarqua de clases javax.sql.* ....................................................................... 166 3.3.3 Instalacin y configuracin del driver acorde al gestor de base de datos. ............ 169 3.3.4 Prototipo de aplicaciones con conectividad a bases de datos. ............................. 171 BIBLIOGRAFA. .................................................................................................................... 193

iii

NDICE DE FIGURAS Figura 1. Informacin de "MySQL Network Monitoring". ................................................................. 3 Figura 2. Ruta de acceso al "MySQL Query Browser"..................................................................... 8 Figura 3. Datos para ingreso al "MySQL Query Browser"............................................................... 8 Figura 4. Base de datos y objetos en "MySQL Query Browser". ................................................... 9 Figura 5. Crear base de datos ("Schema") en "MySQL Query Browser". .................................... 9 Figura 6. Pantalla de informacin del servidor de MySQL. ........................................................... 11 Figura 7. Men "Tools" de "MySQL Administrator". ....................................................................... 12 Figura 8. Opciones de administracin en Microsoft SQL Server Management Studio Express. ................................................................................................................................................ 13 Figura 9. Opciones de administracin de "Oracle Database Express Edition". ......................... 14 Figura 10. Crear una tabla con "MySQL Table Editor". ................................................................. 15 Figura 11. Editar datos de una tabla con "MySQL Query Browser". ........................................... 16 Figura 12. Consulta con "MySQL Query Browser". ........................................................................ 17 Figura 13. Estadsticas del sistema en Oracle. ............................................................................... 19 Figura 14. Opcin "Utilidades" en Oracle. ........................................................................................ 20 Figura 15. Archivos para instalar servidor y herramienta grfica para MySQL 5.0. .................. 22 Figura 16. Instalando MySQL Server 5.0., pantalla de bienvenida. ........................................... 23 Figura 17. Instalando MySQL Server 5.0., tipo de instalacin. ..................................................... 23 Figura 18. Instalando MySQL Server 5.0., confirmar informacin. .............................................. 24 Figura 19. Instalando MySQL Server 5.0., copiando archivos. .................................................... 24 Figura 20. Instalando MySQL Server 5.0., cuenta en MySQL.com. ............................................ 25 Figura 21. Instalando MySQL Server 5.0., pantalla para confirmar configuracin. .................. 25 Figura 22. Configurando MySQL Server 5.0., pantalla de bienvenida. ....................................... 26 Figura 23. Configurando MySQL Server 5.0., seleccionar tipo de configuracin. ..................... 27 Figura 24. Configurando MySQL Server 5.0., seleccionar tipo de servidor. .............................. 27 Figura 25. Configurando MySQL Server 5.0., seleccionar uso de la base de datos. ............... 28 Figura 26. Configurando MySQL Server 5.0., seleccionar ruta para almacenar tablas. .......... 29 Figura 27. Configurando MySQL Server 5.0., seleccionar nmero de conexiones. ................. 30 Figura 28. Configurando MySQL Server 5.0., opciones de conexin en red. ............................ 30 Figura 29. Configurando MySQL Server 5.0., seleccionar conjunto de caracteres. ................. 31 Figura 30. Configurando MySQL Server 5.0., opciones para Windows. ..................................... 32 Figura 31. Configurando MySQL Server 5.0., opciones de seguridad. ....................................... 32 Figura 32. Configurando MySQL Server 5.0., preparado para ejecutar. .................................... 33 Figura 33. Configurando MySQL Server 5.0., fin de la configuracin. ........................................ 34 Figura 34. Mquinas de almacenamiento en MySQL. ................................................................... 38 Figura 35. Opciones para la mquina de almacenamiento InnoDB en MySQL. ....................... 39 Figura 36. Bases de datos del sistema de MySQL. ....................................................................... 40 Figura 37. Archivos de bitcora en MySQL. .................................................................................... 41 Figura 38. Configuracin de memoria en Oracle. ........................................................................... 42 Figura 39. Diagrama de base de datos del ejemplo prctico........................................................ 50 Figura 40. Creacin de tabla con llave primaria y fornea en MySQL. ...................................... 50 Figura 41. Men para crear una vista en MySQL. .......................................................................... 52 Figura 42. Crear una vista en MySQL. ............................................................................................. 53 Figura 43. Ejecutar una vista en MySQL. ......................................................................................... 53 Figura 44. Integridad de entidad en MySQL. ................................................................................... 55

iv

Figura 45. Comportamientos de borrado y actualizacin de llave fornea. ............................... 57 Figura 46. Acceso a la lnea de comandos de MySQL. ................................................................. 59 Figura 47. Crear disparador de actualizacin desde la lnea de comandos. ............................. 60 Figura 48. Crear disparador de insercin desde la lnea de comandos. ..................................... 61 Figura 49. Crear procedimiento almacenado, paso 1. ................................................................... 63 Figura 50. Crear procedimiento almacenado, paso 2. ................................................................... 64 Figura 51. Escribir procedimiento almacenado ............................................................................... 64 Figura 52. Ejecutar procedimiento almacenado. ............................................................................. 65 Figura 53. Opcin para administrar usuarios en MySQL. ............................................................. 68 Figura 54. Crear usuario en MySQL. ................................................................................................ 69 Figura 55. Asignar privilegios en modo grfico a usuarios en MySQL. ....................................... 70 Figura 56. Asignar privilegios con la lnea de comandos en MySQL. ......................................... 71 Figura 57. Asignar recursos a usuarios en MySQL. ....................................................................... 72 Figura 58. Pantalla para ver archivos de bitcora en MySQL. ..................................................... 75 Figura 59. Crear archivos de bitcora en MySQL. ......................................................................... 76 Figura 60. Ver archivos de bitcora creados en MySQL. .............................................................. 77 Figura 61. Crear nuevos archivos de bitcora en MySQL. ........................................................... 77 Figura 62. Ver nuevos archivos de bitcora creados en MySQL. ................................................ 78 Figura 63. Vista parcial del contenido del archivo de bitcora Query log" en MySQL. ........... 78 Figura 64. Pantalla para respaldar base de datos en SQL Server Express. .............................. 80 Figura 65. Opciones de respaldo de base de datos en SQL Server. .......................................... 81 Figura 66. Pantalla para respaldar base de datos en Oracle Database Express. ................... 82 Figura 67. Pantalla para respaldar base de datos en MySQL. .................................................... 82 Figura 68. Opciones de respaldo en MySQL. ................................................................................. 83 Figura 69. Pantalla de avance de respaldo en MySQL. ................................................................ 84 Figura 70. Opciones de respaldo avanzadas en MySQL. ............................................................. 84 Figura 71. Calendarizacin de un respaldo en MySQL. ................................................................ 85 Figura 72. Pantalla para recuperar base de datos en MySQL. .................................................... 87 Figura 73. Seleccionar archivo para recuperacin en MySQL. .................................................... 88 Figura 74. Pantalla para recuperacin con informacin completa en MySQL. .......................... 89 Figura 75. Pantalla de avance de recuperacin en MySQL. ......................................................... 90 Figura 76. Escritura de una transaccin plana en MySQL. ........................................................... 94 Figura 77. Contenido de la tabla "Cuentas". .................................................................................... 95 Figura 78. Ejecutar la transaccin en MySQL. ................................................................................ 95 Figura 79. Contenido de la tabla "Cuentas" despus de ejecutar la transaccin. ..................... 96 Figura 80. Estructura de una transaccin anidada. ........................................................................ 97 Figura 81. Diseo de la base de datos para el ejemplo de transacciones anidadas. ............. 100 Figura 82. Crear un procedimiento almacenado en SQL Server Express................................ 101 Figura 83. Ejecutar procedimiento con transacciones anidadas en SQL Server. ................... 104 Figura 84. Pgina de descarga de conectores para MySQL. ..................................................... 107 Figura 85. Componentes bsicos de ODBC.................................................................................. 109 Figura 86. Ubicacin del Administrador ODBC en Windows. ..................................................... 110 Figura 87. Pantalla principal del Administrador ODBC. ............................................................... 110 Figura 88. Vista de la ficha "Controladores" del Administrador ODBC. .................................... 112 Figura 89. Controladores ODBC adicionales a los preinstalados. ............................................ 113 Figura 90. Conector ODBC en la pgina de MySQL. ................................................................... 114 Figura 91. Seleccionar el conector ODBC adecuado al sistema operativo. ............................. 115 Figura 92. Seleccionar el tipo de archivo para el conector ODBC. ............................................ 116

Figura 93. Seleccionar un servidor de descarga para el conector ODBC. ............................... 116 Figura 94. Instalacin del conector ODBC, pantalla de inicio. .................................................... 117 Figura 95. Instalacin del conector ODBC, seleccionar tipo de instalacin. ............................ 117 Figura 96. Instalacin del conector ODBC, aceptar opciones de instalacin. ......................... 118 Figura 97. Instalacin del conector ODBC, fin de instalacin. .................................................... 118 Figura 98. Verificar controlador ODBC instalado. ......................................................................... 119 Figura 99. Crear una nueva conexin ODBC. ............................................................................... 120 Figura 100. Seleccionar controlador para conexin ODBC. ....................................................... 120 Figura 101. Proporcionar informacin para conexin ODBC. ..................................................... 121 Figura 102. Ver conexin ODBC recin creada. ........................................................................... 121 Figura 103. Ventana "Server Explorer" de Microsoft Visual Studio .NET. .............................. 122 Figura 104. Agregar una nueva conexin de datos en Visual Studio .NET. ............................ 123 Figura 105. Cambiar la fuente de datos de una conexin en Visual Studio .NET. ................. 123 Figura 106. Seleccionar la nueva fuente de datos de una conexin en Visual Studio .NET. 124 Figura 107. Seleccionar la conexin ODBC como fuente de datos en Visual Studio .NET. 125 Figura 108. Ver conexin de datos creada en Visual Studio .NET. ........................................... 125 Figura 109. Agregar un nuevo "DataSet" en Visual Studio .NET. .............................................. 126 Figura 110. Configurar un "DataSet", seleccionar conexin de datos. ..................................... 127 Figura 111. Configurar un "DataSet", seleccionar tipo de comando para el "TableAdapter". 127 Figura 112. Configurar un "DataSet", escribir la consulta SQL para el "TableAdapter". ....... 128 Figura 113. Configurar un "DataSet", seleccionar mtodos a generar para el "TableAdapter" ............................................................................................................................................................... 129 Figura 114. Configurar un "DataSet", mostrando resultados de la configuracin. ................. 129 Figura 115. Agregar una "Web Form" en Visual Studio .NET. ................................................... 130 Figura 116. Agregar un objeto "ObjectDataSource" a una "WebForm". ................................... 131 Figura 117. Configurar un "ObjectDataSource", seleccionar el objeto "Business Object". .... 131 Figura 118. Configurar un "ObjectDataSource", seleccionar los mtodos que regresan datos. ............................................................................................................................................................... 132 Figura 119. Agregar un objeto "GridView" a una "Web Form". .................................................. 133 Figura 120. Configurar un objeto "GridView", seleccionar su fuente de datos. ....................... 133 Figura 121. Resultado de ejecutar la "Web Form" de acceso a la base datos. ....................... 134 Figura 122. Arquitectura bsica de .NET Framework. ................................................................. 137 Figura 123. Clases principales de .NET Framework para bases de datos. ............................. 139 Figura 124. Arquitectura de ADO.NET. .......................................................................................... 139 Figura 125. Modelo de objeto de la clase "DataSet". ................................................................... 142 Figura 126. Ubicacin del objeto "Error" de ADO. ........................................................................ 143 Figura 127. El conector .NET en la pgina de descarga de conectores de MySQL. .............. 145 Figura 128. Pgina de descarga del conector .NET 5.1. ............................................................. 146 Figura 129. Seleccionar tipo de archivo de descarga del conector .NET 5.1. ......................... 147 Figura 130. Avance de descarga del conector .NET 5.1. ............................................................ 147 Figura 131. Instalar el conector .NET, ejecutar archivo de instalacin. .................................... 148 Figura 132. Instalar el conector .NET, seleccionar tipo de instalacin. ................................... 148 Figura 133. Instalar el conector .NET, preparado para instalar. ............................................... 149 Figura 134. Instalar el conector .NET, avance de instalacin. .................................................. 149 Figura 135. Instalar el conector .NET, fin de instalacin. ........................................................... 150 Figura 136. Ver conector .NET instalado. ...................................................................................... 150 Figura 137. Ver documentacin instalada del conector .NET. ................................................... 151 Figura 138. Seleccionar la base de datos MySQL como fuente de datos. ............................... 152 Figura 139. Configurar y probar la conexin a la base de datos de MySQL............................ 153

vi

Figura 140. Ver la conexin a MySQL en el "Server Explorer" de Visual Studio .NET. ......... 153 Figura 141. Controlador JDBC segn el DBMS. ........................................................................... 157 Figura 142. Jerarqua de clases del paquete "java.sql". .............................................................. 159 Figura 143. Jerarqua de interfases del paquete java.sql. ........................................................ 160 Figura 144. Relacin funcional de clases e interfases del paquete java.sql. ........................ 162 Figura 145. Jerarqua de clases del paquete "javax.sql". ............................................................ 167 Figura 146. Jerarqua de interfases del paquete "javax.sql". ...................................................... 168 Figura 147. Pgina de descarga del conector JDBC en el sitio Web de MySQL. ................... 170 Figura 148. Versiones del conector JDBC y enlace para descarga. ........................................ 170 Figura 149. Ficha "Services" en NetBeans. ................................................................................... 172 Figura 150. La base de datos "innovacion" en MySQL. .............................................................. 172 Figura 151. Propiedades de la conexin JDBC. ........................................................................... 173 Figura 152. Opcin "Connect" para JDBC. .................................................................................... 174 Figura 153. Vista de conexin JDBC exitosa. ............................................................................... 174 Figura 154. Ejecutar sentencia SQL en NetBeans ....................................................................... 175 Figura 155. Arquitectura del prototipo que usa JDBC. ................................................................. 176 Figura 156. Primer pgina del prototipo que usa JDBC. ............................................................. 177 Figura 157. Segunda pgina que usa JDBC. ................................................................................ 178 Figura 158. Avance de la pgina "proyectos.jsp". ........................................................................ 179 Figura 159. Avance de la pgina proyectoDetalle.jsp. ................................................................. 181 Figura 160. Crear nuevo recurso de servidor en Netbeans. ....................................................... 182 Figura 161. Crear un recurso JDBC para GlassFish.................................................................... 183 Figura 162. JDBC y pool de conexiones agregados a GlassFish. ............................................. 184 Figura 163. Referencia a un recurso JNDI desde la aplicacin. ................................................ 185 Figura 164. Contenido del archivo web.xml despus de agregar un recurso JNDI. ............... 186 Figura 165. Librera JSTL en GlassFish. ........................................................................................ 187 Figura 166. Ejecucin de las pginas del proyecto Web. ............................................................ 191

vii

NDICE DE TABLAS. Tabla 1. Esquema de la tabla "Proyectos" .............................................................................. 48 Tabla 2. Esquema de la tabla "Responsables" ....................................................................... 49 Tabla 3. Esquema de la tabla "Proyectos_Avances" .............................................................. 49 Tabla 4. Relacin de DBMS y sus lenguajes para escribir procedimientos almacenados ...... 62 Tabla 5. Tipos de archivos de bitcora de MySQL. ................................................................ 75 Tabla 6. Esquema de la tabla "Cuentas". ............................................................................... 93 Tabla 7. Esquema de la tabla "Clientes". ................................................................................ 93 Tabla 8. Propiedades del objeto "Error". ............................................................................... 144 Tabla 9. Propiedades del objeto "Connection" de ADO.NET. ............................................... 144 Tabla 10. Descripcin de clases del paquete java.sql. ....................................................... 160 Tabla 11. Descripcin de interfases del paquete java.sql. .................................................. 161 Tabla 12. Algunos mtodos de la interfase "Connection". .................................................... 163 Tabla 13. Algunos mtodos de la interfase "Statement". ...................................................... 164 Tabla 14. Algunos mtodos de la interfase "ResultSet". ....................................................... 166 Tabla 15. Descripcin de clases del paquete "javax.sql". ..................................................... 167 Tabla 16. Descripcin de interfases del paquete "javax.sql". ................................................ 168

viii

TEMARIO OFICIAL.

1.- Datos de la asignatura Nombre de la asignatura: Taller de bases de datos Carrera: Licenciatura en Informtica Clave de la asignatura: IFH - 0439 Horas teora-horas prctica-crditos: 0-4-4

2.- Historia del programa Lugar y fecha de elaboracin o revisin. Instituto Tecnolgico de Puebla del 8 al 12 septiembre 2003. Participantes. Representantes de la academia de sistemas y computacin de los Institutos Tecnolgicos. Observaciones (cambios y justificacin). Reunin nacional de evaluacin curricular de la carrera de Licenciatura en Informtica.

Instituto Tecnolgico de: Cd. Valles, Orizaba, Zacatepec 13 septiembre al 28 de noviembre 2003. Academia de sistemas y computacin

Academia de sistemas y computacin.

Anlisis y enriquecimiento de las propuestas de los programas diseados en la reunin nacional de evaluacin. Academia de de sistemas y computacin

Anlisis y enriquecimiento de las propuestas de los programas diseados en la reunin nacional de evaluacin.

3.- Ubicacin de la asignatura. a). Relacin con otras asignaturas del plan de estudios.

Anteriores Asignaturas Temas Fundamentos de Conceptos de base de datos. base de datos. Diseo de base de datos

Posteriores Asignaturas Temas Desarrollo de aplicaciones distribuidas.

ix

relacionales. Lenguajes de base de datos.

b). Aportacin de la asignatura al perfil del egresado Proporciona conocimientos y habilidades para que utilicen de manera ptima gestores y tecnologas de acceso a bases de datos.

4.- Objetivo(s) general(es) del curso El estudiante identificar herramientas de software para disear y administrar bases de datos, as como las tecnologas de conectividad.

5.- TEMARIO Unidad 1 Gestor de bases de datos.

2 Administracin de bases de datos.

Subtemas 1.1 Caractersticas del gestor. 1.2 Herramientas. 1.2.1 De creacin de bases de datos. 1.2.2 De administracin de bases de datos. 1.2.3 De edicin para crear esquemas y consultas de bases de datos. 1.2.4 De control, monitoreo y estadsticas de acceso a bases de datos. 1.2.5 Utileras diversas. 1.3 Instalacin y configuracin del entorno operativo. 2.1 Creacin de bases de datos 2.1.1 Creacin de la estructura de la base de datos. 2.1.2 Creacin de dominios definidos por el DBA. 2.1.3 Definir el esquema general de la base de datos (tablas, atributos, llaves primarias y llaves heredadas). 2.1.4 Creacin de vistas de la base de datos (view). 2.2 Definicin del esquema de integridad. 2.2.1 Validar y verificar integridad de entidad e integridad referencial. 2.2.2 Creacin de disparadores (Triggers). 2.2.3 Creacin de procedimientos almacenados. 2.3 Definicin del esquema de seguridad. 2.3.1 Creacin de usuarios de la base de datos. 2.3.2 Asignacin de privilegios sobre los objetos de informacin. 2.4 Definicin del esquema de recuperacin. 2.4.1 Diseo y creacin de la bitcora 2.4.2 Recuperacin a partir de la bitcora. 2.4.3 Respaldar bases de datos. 2.4.4 Recuperar bases de datos. 2.5 Diseo y procesamiento de transacciones. 2.5.1 Definicin de transacciones en un lenguaje husped.

3 Tecnologas de conectividad a bases de datos.

2.5.2 Ejecucin de transacciones planas en el gestor de bases de datos. 2.5.3 Ejecucin de transacciones anidadas. 3.1 ODBC. 3.1.1 Terminologa y conceptos 3.1.2 Administrador de orgenes de datos ODBC. 3.1.3 Instalacin y configuracin del driver acorde al gestor de bases de datos. 3.2 ADO.NET. 3.2.1 Terminologa y conceptos. 3.2.2 Componentes disponibles. 3.2.2.1 Connection. 3.2.2.2 Command. 3.2.2.3 Recordsource. 3.2.2.4 Error. 3.2.3 Prototipo de aplicaciones con conectividad a bases de datos. 3.3 JDBC. 3.3.1 Terminologa y conceptos. 3.3.2 SQL y JDBC. 3.3.2.1 Jerarqua de clases java.sql.*. 3.3.2.2 Interface java.sql.connection. 3.3.2.3 Interface java.sql.statement 3.3.2.4 Interface java.sql.resultset. 3.3.2.5 Jerarqua de clases javax.sql.* 3.3.3 Instalacin y configuracin del driver acorde al gestor de base de datos. 3.3.4 Prototipo de aplicaciones con conectividad a bases de datos.

6.- Aprendizajes requeridos. Dominio del diseo de bases de datos relacionales. Dominio del lenguaje SQL. Habilidad de programacin en un lenguaje orientado a objetos. Habilidades para utilizar software de sistemas. Conocimiento de redes de computadoras y arquitectura cliente/servidor.

7.- Sugerencias didcticas. Presentar al inicio del curso el objetivo de la asignatura y su relacin con otras del plan de estudios, as como el temario y las actividades de aprendizaje. Propiciar el trabajo en equipo para el desarrollo de las prcticas. Guiar y asesorar el desarrollo de las prcticas. Elaborar instructivos, manuales o material didctico que auxilie al estudiante. Propiciar la investigacin en diversas fuentes de informacin.

xi

Seleccionar en acuerdo de academia, un gestor de base de datos (diferente al utilizado en la asignatura de fundamentos de base de datos) de acuerdo a las necesidades del entorno, al contenido del programa y a los recursos disponibles. Conformar equipos de trabajo para el desarrollo de un proyecto de su inters, en el cual aplique las tecnologas de conectividad a bases de datos. Retomar el proyecto desarrollado en la asignatura de fundamentos de base de datos. Motivar la participacin en foros acadmicos.

8.- Sugerencias de evaluacin Aplicar un examen inicial para conocer en nivel de los aprendizajes requeridos. Establecer de comn acuerdo con los estudiantes, la ponderacin de las diferentes actividades del curso. Participar en clase y laboratorio. Realizar trabajos de investigacin en diversas fuentes de informacin. Elaborar reportes de prcticas Exponer temas especficos en aula. Dar seguimiento a los avances y documentacin del proyecto propuesto. Participar en foros acadmicos.

9.- Unidades de aprendizaje UNIDAD 1.- Gestor de bases de datos. Objetivo Educacional El estudiante conocer las caractersticas del gestor de bases de datos , sus herramientas disponibles y configurar su entorno operativo. Actividades de Aprendizaje Fuentes de Informacin 1, 3, 8, 9, 10 12, 13, 16, 17

Realizar prcticas de laboratorio de los temas descritos en la unidad. Elaborar el reporte de cada prctica realizada. Investigar en distintas fuentes de informacin las herramientas del gestor de bases de datos a utilizar, elaborar un informe escrito y discutirlo en el grupo. Identificar un problema, a partir del cual pueda definir el proyecto del curso de acuerdo con el profesor.

UNIDAD 2.- Administracin de bases de datos. Objetivo Educacional Utilizar las herramientas del Actividades de Aprendizaje Fuentes de Informacin 1, 2, 3, 4, 8, 9 10, 12, 15,

Realizar prcticas de laboratorio de los temas

xii

gestor para la creacin y administracin de bases de datos.

descritos en la unidad. Elaborar el reporte de cada prctica realizada. Identificar las herramientas del gestor para la administracin de bases de datos. Presentar el avance del proyecto.

16, 17

UNIDAD 3.- Tecnologas de conectividad a bases de datos. Objetivo Educacional Conocer y aplicar las tecnologas de conectividad a bases de datos en diferentes plataformas operativas. Actividades de Aprendizaje Fuentes de Informacin 3, 5, 6, 7, 8 14, 16, 18, 19

Realizar prcticas de laboratorio de los temas descritos en la unidad. Elaborar el reporte de cada prctica realizada. Investigar otras tecnologas de conectividad a bases de datos. Elaborar un informe escrito donde ejemplifique el uso de alguna de las tecnologas investigadas. Presentacin del proyecto.

10.- Fuentes de informacin 1. C. J. Date. Introduction to Data Base Systems, Volumen II. Addison Wesley Iberoamericana. 2. James R. Groff, Paul N. Weinberg. Aplique SQL. Mc Garw Hill. 3. Mukhar, Kevin, et.al. Fundamentos de bases de datos con Java. Wrox/Anaya Multimedia, 2002. 4. Navathe. Fundamentos de Bases de Datos. Addison Wesley 1999. 5. Deitel Harvey M., et.al. Visual Basic .NET for Experience Programmers. Microsoft Press, 2002. 6. Balena, Francesco. Programming Microsoft Visual Basic .NET. Microsoft Press, 2002. 7. Sceppa, David. Microsoft ADO.NET. Microsoft Press, 2002. 8. Worsley John.,et.al. Practical Postgresql. Command prompt Inc. 2002 9. Korry Douglas.,et.al. PostgreSQL. O'Reilly & Associates, 2003. 10. Nielsen Paul. Microsoft SQL Server 2000 Bible.John Wiley & Sons, 2002. 11. Houlette Forrest. Fundamentos de SQL.Para programadores. Mc Graw Hill, 2001. 12. Nielsen Paul. DeVry College of Technology and Monroe College. Database Systems Using Oracle: A Simplified Guide to SQL and PL/SQL. Prentice Hall. 13. Ray Ranking Paul Jensen Paul Bertucci. Microsoft SQL Server 2000. Unleashed, 2/E 2003. Que/Sams. 14. Steve Holzner. Microsoft Visual C#.NET 2003 Kick Start 2003. Que/Sams. 15. Buck Woody. Essential SQL Server 2000: An Administration Handbook 2002. Addison Wesley Professional.

xiii

16. Prez, C. Domine Microsoft SQL Server 2000 Administracin y Anlisis. de Bases de Datos. Alfaomega-RAMA. 17. Prez, C. ORACLE 9i Administracin y Anlisis de Bases de Datos. Alfaomega-RAMA. 18. Melton, Jim y Eisenberg, Andrew. SQL Y JAVA Gua para SQLJ, JDBC. y Tecnologas Relacionadas. Alfaomega-RAMA. 19. Jeffrey P. McManus Chris Kinsman. C# Developer's Guide to ASP.NET. XML, and ADO.NET 2002. Addison Wesley Professional. Referencias en Internet [20] www.bivitec.org.mx [21] www.javasun.com

11. Prcticas Unidad Prctica 1 Instalacin y configuracin del gestor de bases de datos. 2 Creacin de la estructura de base de datos (Base de datos, dominios, tipos de datos definidos por el DBA, tablas, relaciones, vistas, restricciones de integridad de entidad, integridad referencial y esquema de seguridad). 3 Creacin de disparadores (triggers). 4 Desarrollar una aplicacin que incluya el manejo de transacciones. 5 Creacin de procedimientos almacenados. 6 Diseo y creacin de la bitcora como medio de recuperacin.

xiv

UNIDAD 1. GESTOR DE BASES DE DATOS. Un Gestor de bases de datos, que en castellano se abrevia como SGBD (Sistema de gestin de bases de datos) y en ingls abreviado como DBMS (Data Base Manager System) o Sistema manejador de bases de datos es un software que permite la creacin, uso y administracin de una base de datos. Dependiendo de la fuente se usa la palabra gestor o administrador. Algunas definiciones de otras fuentes: Silberschatz y colaboradores indican: Un sistema de gestin de bases de datos consiste en una coleccin de datos interrelacionados y un conjunto de programas para acceder a dichos datos. La coleccin de datos, normalmente denominada base de datos, contiene informacin de una empresa particular. Notar que la declaracin anterior incluye en su concepto a los datos almacenados (base de datos). En Wikipedia: Los sistemas de gestin de base de datos son un tipo de software muy especfico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan. Se compone de un lenguaje de definicin de datos, de un lenguaje de manipulacin de datos y de un lenguaje de consulta. Notar que en la definicin, la base de datos est aparte del DBMS y se mencionan a los usuarios y a las aplicaciones. En adelante se usarn las iniciales DBMS por considerar que es lo ms comn para referirse al trmino. Los componentes principales de un DBMS son: 1. Un lenguaje de modelacin que permita definir el esquema de cada base de datos alojada en el DBMS. 2. Las estructuras de datos (campos, registros, archivos y objetos) optimizadas para tratar con una cantidad muy grande de datos, que se encuentran almacenados en un dispositivo de almacenamiento permanente. 3. Un lenguaje de consulta de bases de datos que permite a los usuarios consultar de manera interactiva la base de datos. 4. Un mecanismo de control de transacciones, que garantice las propiedades ACID (Atomicidad, Consistencia, Aislamiento -Isolation en ingls- y Durabilidad) de cada transaccin. Esto para asegurar la integridad de los datos, controlar el acceso concurrente de usuarios y ser tolerante a fallas. En el mercado se puede encontrar una gran variedad de software DBMS. Una clasificacin importante es segn el modelo de datos soportado. Los principales modelos son: Relacional. Jerrquico. Red. Orientado a Objetos

El temario de esta materia esta enfocado al modelo relacional de bases de datos. Y ser el modelo a usar en el libro. Segn el tipo de licencias, los DBMS se pueden clasificar de manera general en: Libres. Gratuitos. Comerciales. Es importante observar que algunas veces el software libre que una de sus caractersticas es que el usuario puede ver el cdigo fuente- es tambin gratuito (por ejemplo ciertas versiones de MySQL). Tambin estas versiones de MySQL tienen un soporte adecuado como DBMS, por lo que se convierte en un buen candidato para usar en este libro. Parece que es publicidad para este software, pero es solo un ejemplo y existen otros casos similares. Tambin es importante notar que empresas que tienen DBMS comerciales, cuentan con versiones gratuitas, por ejemplo: La empresa Oracle, tiene disponible para descarga y uso gratuito la versin Oracle Database 10g Express Edition. Ver la pgina de Oracle: http://www.oracle.com/technology/software/products/database/xe/index.html para detalles. La empresa Microsoft tiene la versin gratuita del DBMS Microsoft SQL Server 2005 Express Edition. Para detalles ver la pgina: http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=220549b50b07-4448-8848-dcc397514b41 Para detalles de las limitaciones de cada licencia de uso revisar los sitios oficiales. En el tema que sigue se mencionan las caractersticas generales que debe cumplir un buen DBMS y se incluyen un ejemplo de caractersticas tcnicas de un DBMS. 1.1 Caractersticas del gestor. Los DBMS deben poseer algunas caractersticas generales que garantizan su funcionamiento adecuado y eficiente. Por ejemplo, algunos de los mdulos o caractersticas que debe de proveer cualquier DBMS seran: El lenguaje de modelacin, llamado comnmente LDD (Lenguaje de definicin de datos). Como su nombre lo indica, permite a los usuarios crear los esquemas de las bases de datos. Algunas de las operaciones particulares: creacin de bases de datos, tablas, ndices, vistas, procedimientos almacenados, disparadores, etc. El lenguaje de consulta de la base de datos, conocido como LMD (Lenguaje de manipulacin de datos). Que en el caso del modelo relacional el lenguaje SQL (Structured Query Language), es de los ms usados. El LMD permite hacer consultas en la base de datos y realizar edicin de los datos (altas, bajas y cambios).

Mdulo para la administracin de la base de datos, que debe permitir a los administradores de la base de datos operaciones tales como: crear y editar usuarios y permisos, respaldos y recuperacin de la informacin, optimizar el funcionamiento de la base de datos, entre otros. Mdulo de control de transacciones, que es transparente al usuario. Garantiza la correcta ejecucin de las transacciones, y esta relacionado con el control de la concurrencia y tolerancia a fallas. Una interfaz grfica de usuario. Que permite a los administradores y usuarios interactuar con el sistema de manera ms sencilla y eficiente. Opciones de respaldo y recuperacin de datos. Interfaces de programacin de aplicaciones para diferentes lenguajes (API). Conectores de base de datos para diferentes plataformas de desarrollo (ejemplo: ODBC, JDBC, .NET).

Algunos DBMS tienen caractersticas adicionales, entre ellas puede mencionarse: Por ejemplo, el MySQL en su versin comercial incluye el: MySQL Network Monitoring and Advisory Service. Este proporciona informacin concentrada de todos los servidores MySQL en una red, la informacin proporcionada incluye por ejemplo: estado de los servidores, uso de recursos (CPU, RAM, Entrada/Salida), alertas y advertencias producidas, entre otros. Ver ejemplo en la Figura 1. Informacin de "MySQL Network Monitoring".

Figura 1. Informacin de "MySQL Network Monitoring".

Por otro lado se deben tomar en cuenta las caractersticas particulares del DBMS seleccionado. Para esto, la pregunta siempre es: Cul DBMS debo seleccionar para esta aplicacin?

No existe una respuesta sencilla a la pregunta anterior, cada DBMS tiene fortalezas y debilidades. No existe una respuesta absoluta: El DBMS XX es el mejor. Depende de muchos factores: costos (del software, entrenamiento, mantenimiento, soporte), necesidades particulares de la aplicacin, rendimiento, robustez, entre otras. Una buena noticia es que se tienen versiones gratuitas de MySQL, y de empresas que antes solo manejaban software comercial tales como el SQL Server Express Edition (de Microsoft) y Oracle Database Express Edition (de la empresa Oracle). Como en este libro se utilizar en su mayor parte el DBMS MySQL, se describen aqu las caractersticas de dicho software. Caractersticas generales de MySQL. MySQL es un software de marca registrada de la empresa MySQL AB. Es un DBMS relacional, tiene SQL (Structured Query Language) como lenguaje de definicin y manipulacin de datos. Es rpido, multi-hilos, multiusuario y robusto. Est diseado para entornos de produccin crticos, con alta carga de trabajo y puede integrarse en software para trabajar en ambientes distribuidos. El software MySQL tiene doble licencia. Por un lado se puede usar como producto Open source mediante la licencia GNU (General Public License). Y por otro lado puede adquirirse una licencia comercial estndar de MySQL AB. El software con la licencia comercial tiene facilidades adicionales. Caractersticas particulares de MySQL. De la pgina http://dev.mysql.com/doc/refman/5.0/es/features.html se toman las caractersticas ms particulares del DBMS MySQL 5.0, que se listan a continuacin:

Interioridades y portabilidad Escrito en C y en C++ Probado con un amplio rango de compiladores diferentes Funciona en diferentes plataformas. Usa GNU Automake, Autoconf, y Libtool para portabilidad. APIs disponibles para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, y Tcl. Uso completo de multi-threaded mediante threads del kernel. Pueden usarse fcilmente mltiples CPUs si estn disponibles. Proporciona sistemas de almacenamiento transaccionales y no transaccionales. Usa tablas en disco B-tree (MyISAM) muy rpidas con compresin de ndice. Relativamente sencillo de aadir otro sistema de almacenamiento. Esto es til si desea aadir una interfaz SQL para una base de datos propia. Un sistema de reserva de memoria muy rpido basado en threads. Joins muy rpidos usando un multi-join de un paso optimizado. Tablas hash en memoria, que son usadas como tablas temporales. Las funciones SQL estn implementadas usando una librera altamente optimizada y deben ser tan rpidas como sea posible. Normalmente no hay reserva de memoria tras toda la inicializacin para consultas. El cdigo MySQL se prueba con Purify (un detector de memoria perdida comercial) as como con Valgrind, una herramienta GPL (http://developer.kde.org/~sewardj/).

El servidor est disponible como un programa separado para usar en un entorno de red cliente/servidor. Tambin est disponible como biblioteca y puede ser incrustado en aplicaciones autnomas. Dichas aplicaciones pueden usarse por s mismas o en entornos donde no hay red disponible. Tipos de columnas Diversos tipos de columnas: enteros con/sin signo de 1, 2, 3, 4, y 8 bytes de longitud, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, y tipos espaciales OpenGIS.. Registros de longitud fija y longitud variable. Sentencias y funciones Soporte completo para operadores y funciones en las clusulas de consultas SELECT y WHERE. Por ejemplo: mysql> SELECT CONCAT(first_name, ' ', last_name) -> FROM citizen -> WHERE income/dependents > 10000 AND age > 30; Soporte completo para las clusulas SQL GROUP BY y ORDER BY. Soporte de funciones de agrupacin (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), y GROUP_CONCAT()). Soporte para LEFT OUTER JOIN y RIGHT OUTER JOIN cumpliendo estndares de sintaxis SQL y ODBC. Soporte para alias en tablas y columnas como lo requiere el estndar SQL. DELETE, INSERT, REPLACE, y UPDATE devuelven el nmero de filas que han cambiado (han sido afectadas). Es posible devolver el nmero de filas que seran afectadas usando un indicador al conectar con el servidor. El comando especfico de MySQL SHOW puede usarse para obtener informacin acerca de la base de datos, el motor de base de datos, tablas e ndices. El comando EXPLAIN puede usarse para determinar cmo el optimizador resuelve una consulta. Los nombres de funciones no colisionan con los nombres de tabla o columna. Por ejemplo, ABS es un nombre vlido de columna. La nica restriccin es que para una llamada a una funcin, no se permiten espacios entre el nombre de funcin y el '(' a continuacin. Puede mezclar tablas de distintas bases de datos en la misma consulta (como en MySQL 3.22). Seguridad Un sistema de privilegios y contraseas que es muy flexible y seguro, y que permite verificacin basada en el host. Las contraseas son seguras porque todo el trfico de contraseas est encriptado cuando se conecta con un servidor. Escalabilidad y lmites Soporte a grandes bases de datos. Usamos MySQL Server con bases de datos que contienen 50 millones de registros. Tambin conocemos a usuarios que usan MySQL Server con 60.000 tablas y cerca de 5.000.000.000.000 de registros. Se permiten hasta 64 ndices por tabla (32 antes de MySQL 4.1.2). Cada ndice puede consistir desde 1 hasta 16 columnas o partes de columnas. El mximo ancho de lmite son 1000 bytes (500 antes de MySQL 4.1.2).Un ndice puede usar prefijos de una columna para los tipos de columna CHAR, VARCHAR, BLOB, o TEXT.

Conectividad Los clientes pueden conectar con el servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Windows de la familia NT (NT,2000,XP, o 2003), los clientes pueden usar named pipes para la conexin. En sistemas Unix, los clientes pueden conectar usando ficheros socket Unix. En MySQL 5.0, los servidores Windows soportan conexiones con memoria compartida si se inicializan con la opcin --shared-memory. Los clientes pueden conectar a travs de memoria compartida usando la opcin --protocol=memory. La interfaz para el conector ODBC (MyODBC) proporciona a MySQL soporte para programas clientes que usen conexiones ODBC (Open Database Connectivity). Por ejemplo, puede usar MS Access para conectar al servidor MySQL. Los clientes pueden ejecutarse en Windows o Unix. El cdigo fuente de MyODBC est disponible. Todas las funciones para ODBC 2.5 estn soportadas, as como muchas otras. La interfaz para el conector J MySQL proporciona soporte para clientes Java que usen conexiones JDBC. Estos clientes pueden ejecutarse en Windows o Unix. El cdigo fuente para el conector J est disponible. Localizacin El servidor puede proporcionar mensajes de error a los clientes en muchos idomas. Soporte completo para distintos conjuntos de caracteres, incluyendo latin1 (ISO-8859-1), german, big5, ujis, y ms. Por ejemplo, los caracteres escandinavos '', '' y '' estn permitidos en nombres de tablas y columnas. El soporte para Unicode est disponible Todos los datos se guardan en el conjunto de caracteres elegido. Todas las comparaciones para columnas normales de cadenas de caracteres son caseinsensitive. La ordenacin se realiza acorde al conjunto de caracteres elegido (usando colacin Sueca por defecto). Es posible cambiarla cuando arranca el servidor MySQL. Para ver un ejemplo de ordenacin muy avanzada, consulte el cdigo Checo de ordenacin. MySQL Server soporta diferentes conjuntos de caracteres que deben ser especificados en tiempo de compilacin y de ejecucin. Clientes y herramientas MySQL server tiene soporte para comandos SQL para chequear, optimizar, y reparar tablas. Estos comandos estn disponibles a travs de la lnea de comandos y el cliente mysqlcheck. MySQL tambin incluye myisamchk, una utilidad de lnea de comandos muy rpida para efectuar estas operaciones en tablas MyISAM. Todos los programas MySQL pueden invocarse con las opciones --help o -? para obtener asistencia en lnea. Como resumen, todos los DBMS relacionales proporcionan caractersticas funcionales similares. Pero es til la revisin de las caractersticas tcnicas detalladas, ya que estas pueden inclinar hacia la eleccin de cierto DBMS en caso de necesidades muy particulares de la aplicacin. Por ejemplo, puede ser que una prioridad de la aplicacin sea la rapidez de las operaciones y aqu se puede elegir un DBMS que tenga esa fortaleza.

Adems de las caractersticas generales de los DBMS, estos proporcionan herramientas adicionales que se tratan en el tema que sigue.

1.2 Herramientas. Adems del soporte bsico de un DBMS relacional, los DBMS proporcionan un conjunto de herramientas que facilitan su uso. Es interesante ver la evolucin de los DBMS en cuanto a caractersticas tcnicas, eficiencia y opciones extras que se ofrecen con el objeto de ser el lder del mercado. Por mencionar algunos ejemplos, la disponibilidad de versiones gratuitas de DBMS por empresas que antes solo manejaban software comercial, interfases de usuario muy elegantes y en Web, opciones para que el administrador defina motores de almacenamiento, facilidad de instalacin y configuracin del DBMS usando asistentes y disponibilidad de informacin en Web, entre otros. En este tema se mencionan algunas herramientas generales de los DBMS, pero que deben estar siempre presentes, y que son las siguientes: Creacin y edicin de la base de datos. De administracin. Facilidades para crear y ejecutar consultas. De control, monitoreo y estadsticas de acceso a la base de datos. Utileras diversas.

Para ejemplificar la parte prctica de las herramientas, se utilizar el MySQL versin 5.0 en su versin gratuita, instalado en un equipo con sistema operativo Microsoft Windows XP Profesional.

1.2.1 De creacin de bases de datos. Se refiere a las facilidades de los DBMS para crear las bases de datos. Se sabe que para llegar a este punto, se tiene que tener un diseo previo de la base de datos. En este aspecto es til contar con herramientas de ayuda integradas al DBMS, por ejemplo, la opcin para crear diagramas de la base de datos (opcin que la he visto en SQL Server Express). Del software que he revisado, pienso que MySQL y SQL Server Express tienen una interfase muy sencilla y amigable para la creacin de las bases de datos. Enseguida se explica como crear una nueva base de datos, mediante el DBMS MySQL: En MySQL para crear una base de datos realizar los pasos que se indican enseguida. Tambin se puede realizar desde la lnea de comandos. Se asume que ya est instalado el software, para ver el proceso de instalacin, leer el tema 1.3. 1. Abrir el programa MySQL Query Browser, en la ruta: Inicio | Todos los programas | MySQL | MySQL Query Browser. Tal como se indica en la Figura 2. Ruta de acceso al "MySQL Query Browser".

Figura 2. Ruta de acceso al "MySQL Query Browser".

2. Indicar los datos necesarios para la conexin al servidor MySQL. Tal como se muestra en la Figura 3. Datos para ingreso al "MySQL Query Browser".

Figura 3. Datos para ingreso al "MySQL Query Browser".

Nota: los datos proporcionados arriba dependen de los datos escritos por el usuario al instalar el software y las bases de datos existentes. 3. Cuando se abre el QueryBrowser, se muestra una imagen como la mostrada en la Figura 4. Base de datos y objetos en "MySQL Query Browser".

Figura 4. Base de datos y objetos en "MySQL Query Browser". 4. Una vez abierto el Query Browser, para crear una nueva base de datos, se presiona el botn derecho del mouse sobre cualquier base de datos (al menos estn las del sistema) y en el men contextual que aparece se selecciona la opcin Create New Schema (ver Figura 5. Crear base de datos ("Schema") en "MySQL Query Browser"). Esta opcin crear una nueva base de datos vaca con el nombre indicado por el usuario.

Figura 5. Crear base de datos ("Schema") en "MySQL Query Browser".

A partir de aqu se pueden agregar objetos a la nueva base de datos. El usuario solo tendr que seleccionar la base de datos, presionar el botn derecho del mouse y

seleccionar el nuevo tipo de objeto a agregar. Se abre el mismo dilogo que se mostr en la Figura 5. Crear base de datos ("Schema") en "MySQL Query Browser". 1.2.2 De administracin de bases de datos. Aqu se incluyen las facilidades que proporciona el DBMS para que el administrador de la de la base de datos (BDA) pueda realizar sus tareas. Las tareas de administracin son muy amplias e incluyen aspectos como los siguientes (mencionados por Silberschatz y colaboradores): Definir el esquema o estructura general de la base de datos. Definir la estructura de almacenamiento y los mtodos de acceso. Modificar el esquema y la organizacin fsica, con objeto de hacer mas eficiente el acceso a los datos (por ejemplo, agregar ndices, modificar el motor de almacenamiento). Crear usuarios, permisos y roles. De esta manera concede autorizacin para el acceso a los datos. Aspecto que tiene que ver con la seguridad. Especificar las reglas de integridad para la base de datos (responsabilidad compartida con los desarrolladores de aplicaciones).

Adems de las tareas mencionadas, los administradores de la base de datos realizan otras tareas propias de su funcin: Realizar respaldos y recuperacin de la base de datos. Asegurar la disponibilidad de la base de datos. Ser un experto en bases de datos, ya que los desarrolladores de aplicaciones y los usuarios en general acudirn a el, para cualquier problema con la base de datos. Instalacin y configuracin de nuevos componentes de software del DBMS. Interaccin y coordinacin con el administrador del sistema. Prevencin de riesgos. Apoyar en la definicin de estndares de diseo y nomenclatura de objetos. Documentar y llevar registros peridicos de mantenimientos, actualizaciones, y cambios en las aplicaciones.

En este punto como en todos los tratados se debe evaluar las facilidades que otorga el DBMS para el administrador de la base de datos. Por ejemplo el MySQL incluye aparte del ncleo del DBMS un software adicional para su administracin, llamado MySQL Administrator que se descarga aparte del DBMS y se debe instalar despus de este. Este software incluye el Query Browser y todo el software adicional de apoyo para la administracin. Las opciones que proporciona el MySQL Administrator se muestran en la Figura 6. Pantalla de informacin del servidor de MySQL.

10

Figura 6. Pantalla de informacin del servidor de MySQL.

Las opciones del lado izquierdo de la Figura 6. Pantalla de informacin del servidor de MySQ, son para la administracin. Se menciona enseguida cada una de ellas y para que sirve: Server Information. Proporciona informacin general del servidor (que se despliega del lado derecho y muestra datos de la instancia del servidor (nombre de usuario, nombre del servidor MySQL y el puerto para la conexin), informacin del servidor y del cliente que est conectado. Service Control. Permite iniciar y detener el servicio de MySQL y configurar el servicio. Startup Variables. Permite ver y configurar los valores de las variables del servidor MySQL, por ejemplo: el puerto TCP, directorios de datos, uso de la memoria, la forma de almacenamiento, uso de archivos para bitcoras, replicacin y seguridad, entre otras. Estas variables pueden influir grandemente en la eficiencia del servidor de la base de datos. User Administration. Permite crear los usuarios y otorgarles permisos sobre los objetos de las bases de datos. Server Connections. Proporciona informacin sobre los usuarios conectados al servidor. Health. Proporciona informacin grfica sobre los recursos usados en el servidor, tales como uso de conexiones, trfico, nmero de consultas, uso de memoria, entre otras. Tambin muestra los valores actuales de las variables generales del sistema. Server Logs. Muestra las bitcoras del servidor. Estas tienen que ser definidas en la opcin Startup Variables.

11

Replication Status. Se muestra informacin sobre el estado de los datos que se han declarado para replicacin (repeticin). La replicacin debe configurarse antes en la opcin de Startup Variables. Backup. Permite realizar respaldos de las bases de datos. Da facilidad para programar de manera peridica los respaldos y que se ejecuten de manera automtica. Restore. Permite recuperar los datos que se han respaldado previamente. Catalogs. Permite administrar cada base de datos, permitiendo tareas como: crear, editar y dar mantenimiento a tablas, actualizar ndices, y administrar vistas y procedimientos almacenados.

Otras opciones del MySQL Administrador se pueden acceder mediante el men principal, opcin Tools. Como se muestra en la Figura 7. Men "Tools" de "MySQL Administrator".

Figura 7. Men "Tools" de "MySQL Administrator". En el caso del DBMS Microsoft SQL Server Management Studio Express, las opciones generales de administracin se muestran en la Figura 8. Opciones de administracin en Microsoft SQL Server Management Studio Express.

12

Figura 8. Opciones de administracin en Microsoft SQL Server Management Studio Express. En la Figura 8. Opciones de administracin en Microsoft SQL Server Management Studio Express se abri una tabla, que se puede editar tambin directamente desde el ambiente visual. Observar las opciones generales de administracin que incluyen: Administracin de las bases de datos. Seguridad. Que incluye la creacin de usuarios y permisos, roles de servidor y credenciales. Objetos de servidor (Server objects). Que incluye facilidades para realizar y programar respaldos, relacionar con otros servidores y definir disparadores de servidor. Facilidades de replicacin. La opcin de administracin general (Management). Que permite administrar las bitcoras e incluye el monitor de actividades en el servidor.

Por otro lado la versin gratuita de Oracle (Oracle Database 10g Express Edition) esta contenida en un solo archivo de 206 MB en su versin para Windows. Presenta una interfase elegante en Web y presenta opciones interesantes para la administracin. Ver Figura 9. Opciones de administracin de "Oracle Database Express Edition" donde se muestra la pantalla principal.

13

Figura 9. Opciones de administracin de "Oracle Database Express Edition".

Se muestran las opciones generales de la Administracin. Cada opcin tiene a su vez otras opciones. Incluye la seccin de enlaces y muestra a la vista el Monitor de Uso. En mi opinin personal es la interfase ms elegante de las tres que se han mostrado, permite tambin personalizar el ambiente de trabajo. La pantalla principal muestra 4 opciones generales, cada una representada por un icono. A continuacin se describe de manera general cada opcin: Administracin. Administrar cuentas de usuarios, administrar memoria, almacenamiento y conexiones de red, monitorear la actividad de la base de datos y ver la informacin de configuracin. Visor de Objetos. Ver, crear, modificar, explorar, y borrar objetos de base de datos. Usar el editor PL/SQL para editar y compilar paquetes, procedimientos, funciones, y disparadores usando como ayuda el reporte de errores. SQL. Accede a las siguientes herramientas SQL: o Comandos SQL. Ejecuta comandos SQL y bloques annimos de PL/SQL. Ejecuta scripts y consultas almacenadas. o Archivos de comandos SQL. Crear, editar, ver, ejecutar, y borrar archivos de scripts. Subir y descargar scripts del sistema de archivos local.

14

o Generador de consultas. Con poco o ningn conocimiento de SQL, construir consultas SQL usando una interfase grfica de usuario. Ver el resultado de consultas creadas y guardar las consultas. Utilidades. Cargar y descargar datos, generar archivos DDL, ver reportes de objetos, y restaurar objetos de base de datos borrados.

1.2.3 De edicin para crear esquemas y consultas de bases de datos. Esta parte se refiere a las facilidades otorgadas por el DBMS para crear los objetos de la base de datos (tales como tablas, vistas, procedimientos, etc.) y las facilidades para consultar y manipular dichos objetos. En este punto, tienen una gran ventaja los DBMS que mediante una interfase grfica de usuario, permiten dichas actividades. Enseguida se ejemplifica la manera de crear las tablas y consultarlas, mediante MySQL. Como se mencion antes, para crear esquemas (bases de datos) y escribir y ejecutar consultas se puede usar el MySQL Query Browser o la lnea de comandos (para MySQL), pero la primer opcin es ms amigable y sencilla. Por ejemplo, enseguida se muestra un ejemplo para crear una tabla. Para crear una tabla en MySQL, primero se abre el MySQL Query Browser, despus se selecciona la base de datos donde residir la tabla. Se hace clic con el botn derecho del mouse en la base de datos y en el men contextual que aparece se hace un clic en la opcin Create New Table (Crear nueva tabla), en ese momento aparece el editor de tablas de MySQL que se muestra en la Figura 10. Crear una tabla con "MySQL Table Editor".

Figura 10. Crear una tabla con "MySQL Table Editor".

15

El MySQL Table Editor permite agregar y modificar las tablas de la base de datos. Es decir, se puede modificar la estructura de una tabla ya creada, solo tomar en cuenta las relaciones que se hayan establecido entre ellas. En la Figura 10. Crear una tabla con "MySQL Table Editor" se indican las opciones principales: nombre de la tabla, la base de datos dnde se almacenar dicha tabla, la informacin de los campos, las llaves primarias y forneas, y los ndices. Observar que existen opciones ms particulares que se pueden usar. Una vez creadas las tablas de la base de datos y establecidas las relaciones entre ellas, se pueden editar los datos. El mismo Query Browser permite editar (altas, bajas y cambios) el contenido de las tablas. Para esto se selecciona la tabla a editar, y se hace doble clic sobre ella, de esta manera se abre la tabla para poder editar sus datos. Ver Figura 11. Editar datos de una tabla con "MySQL Query Browser".

Figura 11. Editar datos de una tabla con "MySQL Query Browser".

Por otra parte para realizar las consultas, se realiza un procedimiento similar al anterior, se selecciona y abre la tabla con doble clic. Si la consulta involucra a varias tablas, vistas, etc., no hay problema, se puede abrir cualquier tabla y la consulta SQL puede involucrar a otras tablas o vistas. Observar en la Figura 11. Editar datos de una tabla con "MySQL Query Browser", que en la parte superior se abre una ventana que contiene una consulta SQL, esta consulta se puede modificar directamente en esta ventana y ejecutarse. El resultado de la ejecucin se mostrar en la parte donde se despliegan los datos de la tabla. Ver Figura 12. Consulta con "MySQL Query Browser".

16

Figura 12. Consulta con "MySQL Query Browser".

Observar de la Figura 12. Consulta con "MySQL Query Browser", que en primer lugar (nmero 1.) se debe escribir la consulta. Si se requiere una tabla de otra base de datos se debe anteponer el nombre de la base de datos, un punto y despus el nombre de la tabla. En este caso no se incluye la base de datos, pues se trabaja con la base de datos actual. En las aplicaciones o programas ser muy conveniente siempre incluir el nombre de la base de datos para evitar un error. Como segundo paso (nmero 2.) se ejecuta la consulta haciendo clic en el botn Execute. Como resultado de la ejecucin, el sistema mostrar el resultado de la consulta (nmero 3.).

1.2.4 De control, monitoreo y estadsticas de acceso a bases de datos. Estas son opciones relacionadas y la informacin la debe proporcionar el DBMS. Las facilidades mencionadas en este punto, son una base fundamental para las tareas y responsabilidades que debe realizar el DBA. Por ejemplo, hablando del tema del control, el tema de roles que se desarrolla ms adelante, proporciona un mecanismo eficiente de control de los usuarios y la seguridad, sin embargo no todos los DBMS gratuitos mencionados en el libro los soportan. Tambin dentro del tema del control, es posible limitar el acceso y operaciones en la base de datos a ciertos horarios, por ejemplo, solo dentro del horario de trabajo de la gente. Limitar los accesos remotos. Identificar las computadoras desde las cuales se puede acceder al sistema y que solo desde ellas se pueda acceder. Limitar el nmero de accesos concurrentes de un mismo usuario, etc. Los DBMS proporcionan caractersticas de control de acceso que es conveniente revisar. Mencionando el monitoreo, son deseables las siguientes facilidades: Poder ver en el mismo sistema a los usuarios que estn conectados a la base de datos y las tareas que se encuentran realizando y los recursos que estn usando. Tener una informacin resumida de los recursos del sistema que se estn usando actualmente y los que se han usado histricamente.

17

Detectar operaciones que son comunes y que se pueden optimizar para un mejor rendimiento del sistema en general. Detectar operaciones costosas en cuanto a recursos. Si es una base de datos distribuida, poder revisar los accesos remotos y locales y sus implicaciones en la eficiencia y diseo de la base de datos.

Un ejemplo de herramienta de monitoreo es el MySQL Network Monitoring, que concentra la informacin de servidores de MySQL en una red. Oracle cuenta con el Monitor de uso, que proporciona informacin sobre el uso del almacenamiento permanente, de memoria, las sesiones, los usuarios, y sobre los archivos de bitcora. Se puede mostrar informacin de detalle de cada uno de ellos. Por otra parte, en cuanto a las estadsticas de acceso a la base de datos, es informacin que debe ser recopilada por el DBMS durante la operacin del sistema. Esta informacin es importante para que el BDA pueda tomar acciones encaminadas a un mejor rendimiento del sistema. Por ejemplo, mediante las estadsticas se puede detectar una consulta muy frecuente y que no puede usar ndices, de esta manera el BDA puede crear los ndices necesarios que hagan ms eficiente la consulta. Mediante las estadsticas se puede detectar tambin horas de uso menos concurridas, donde tal vez sea conveniente realizar tareas de mantenimiento y respaldos de informacin. En las estadsticas se pueden tener diferencias importantes sobre la informacin proporcionada por cada DBMS. Las diferentes bitcoras del DBMS sirven de base para obtener esta informacin. Por ejemplo por medio de las bitcoras se puede obtener informacin como la siguiente: Que usuario accedi a que datos, operaciones realizadas, fecha y hora. De dnde se conecto el usuario. Sentencias que cambian datos o pudieron haberlo hecho. Errores y advertencias del sistema. Consultas que se ejecutaron sobrepasando un tiempo lmite establecido. O consultas que no utilizaron ndices.

De lo anterior, el DBMS genera informacin para que el DBA pueda llevar un mejor control de la base de datos, al conocer exactamente los usuarios que se estn conectando y las operaciones realizadas. De la informacin de las bitcoras el DBMS puede generar informacin resumida o estadsticas que den una visin panormica del uso de la base de datos y los recursos del sistema utilizados. Por ejemplo Oracle en la opcin de estadsticas (se accede por la ruta: Administracin | Controlar | Estadsticas del sistema), se muestra la informacin de la Figura 13. Estadsticas del sistema en Oracle.

18

Figura 13. Estadsticas del sistema en Oracle.

Despus de revisar el tema de control, monitoreo y estadsticas, se tratar enseguida el tema de las utileras diversas. 1.2.5 Utileras diversas. Dentro de utileras diversas se deberan considerar opciones adicionales que no se han mencionado en los temas anteriores (del 1.2.1. al 1.2.4.). Es una clasificacin algo arbitraria, pues la mayora de las utileras diversas son apoyos adicionales para la administracin del DBMS, aunque existen utileras de apoyo a los desarrolladores y usuarios en general. Por mencionar algunas utileras diversas, se pueden incluir: El MySQL Network Monitoring and Advisory Service de MySQL, descrito antes. Replicacin de la base de datos. Facilidades grficas para establecer el diseo de la base de datos (relaciones entre tablas, definicin y manejo de llaves forneas, cardinalidades). Por ejemplo, esta opcin esta incluida en SQL Server Express y Access. Facilidades para automatizar tareas (por ejemplo, que los respaldos se hagan de manera automtica). Facilidad que he visto en MySQL y SQL Server. El MySQL Migration Toolkit, herramienta grfica para migrar esquemas y datos de otros sistemas relacionales a MySQL. Presente en la versin comercial, y solo en ambiente Microsoft Windows (al momento de escribir esto). El MySQL Workbench, es una aplicacin grfica para el diseo del esquema de la base de datos. Permite de manera grfica disear y modificar tablas y otros objetos de la base

19

de datos, y de manera automtica el diseo es implementado en MySQL. Es un software en versin beta. En la versin gratuita de Oracle, la opcin de Utilidades tiene las opciones mostradas en la Figura 14. Opcin "Utilidades" en Oracle.

Figura 14. Opcin "Utilidades" en Oracle. Observar las cuatro opciones de Utilidades. En este caso se muestran las opciones de Carga/Descarga de Datos. Oracle, en sus versiones comerciales cuenta con otras utileras de apoyo a los administradores, desarrolladores y usuarios en general. Aunque algunas son verdaderas aplicaciones de uso muy particular y que pueden ser comercializadas como algo extra al ncleo del DBMS. Algunas de ellas (mencionadas por Burbano) son: Enterprice Resource Planning (ERP). Enfocada a finanzas, proyectos, recursos humanos, nominas, distribucin y manufactura. Customer Relationship Management (CRM). Se usa en ventas, servicio, mercadotecnia, y Call Centers. Supply Chain Management (SCM). Administracin de la cadena de suministro, desarrollo y planeacin. Business Inteligence. Inteligencia Operativa, Portal ejecutivo. Oracle Developer. Diseador de formularios, grficos, reportes. Incluye el JDeveloper para usar Java. Oracle Designer. Herramienta CASE. Oracle WareHouseBuilder. Para aplicaciones de Warehouse o almacenes de datos. Oracle Enterprice Manager (OEM). Aplicacin grfica que usan los administradores para manejar las instancias de Oracle. Oracle Data Mining (ODM). Para aplicaciones de minera de datos.

Las utileras diversas pueden llegar a ser un aspecto que determine la adopcin de un DBMS particular. Especialmente cuando se tiene una necesidad muy especfica de la aplicacin. Por ejemplo, cuando la aplicacin requerir manejar almacenes de datos (data

20

warehouse) o minera de datos. Normalmente este tipo de utileras se comercializan aparte del ncleo del DBMS. Tome tambin en cuenta el lector, la disponibilidad actual de herramientas gratuitas para este tipo de requerimientos. 1.3 Instalacin y configuracin del entorno operativo. Este tema se refiere a la instalacin y configuracin del DBMS y los aspectos relacionados con el sistema operativo, el ambiente de red, servidores, ambiente Web, y en general de todo el entorno que tiene que ver con el funcionamiento del DBMS. Una arquitectura tpica puede ser el tener un servidor dedicado de base de datos (si la aplicacin lo requiere), un servidor de Web, un servidor Proxy, y los clientes locales y remotos que accedern a la aplicacin. El procedimiento de instalacin y la configuracin del entorno operativo varia mucho dependiendo del DBMS seleccionado, el sistema operativo, el ambiente de red, y el uso particular que se le dar al DBMS. Una caracterstica deseable, es que el DBMS permita que el administrador indique opciones transcendentes sobre la instalacin y configuracin, y permita hacer los ajustes necesarios durante la operacin del sistema. Por ejemplo, en MySQL durante la instalacin se puede seleccionar el motor de almacenamiento, que tendr impacto en el rendimiento del sistema. Como experiencia, cuando se instala el MySQL permite al usuario indicar muchas opciones sobre la instalacin, por ejemplo: el nmero de conexiones esperadas, la mquina o motor de almacenamiento, la manera de iniciar el servidor, entre otras. Cuando se instala el SQL Server (hablando de versiones gratuitas), solo permite al usuario indicar opciones mnimas de instalacin. En el caso de la versin gratuita de Oracle, solo solicita al usuario la contrasea del usuario SYS y SYSTEM que es el administrador y la ubicacin en disco de la instalacin, Oracle como novedad incluye una interfase Web para la administracin. Es importante notar que aunque en la instalacin de Oracle se solicitan pocos datos, el administrador podr configurar el DBMS mediante la interfase. Una ventaja de los DBMS como Oracle y MySQL es que se tienen versiones para los principales sistemas operativos (Windows y Linux), mientras que SQL Server solo funciona en el sistema operativo Windows. Algunos aspectos generales que deben considerarse sobre la instalacin y configuracin del entorno operativo seran: Verificar las restricciones de licenciamiento del DBMS. Por ejemplo, La versin gratuita de Oracle esta limitada a usarse en computadoras con un solo CPU. Tener permisos de administrador en la computadora donde se instalar el DBMS. Considerar los requisitos de hardware y software del DBMS a instalar. Por ejemplo SQL Server solo se puede instalar en el sistema operativo Windows. Considerar si es una instalacin definitiva en una computadora que funcionar como servidor de la base de datos, o en una instalacin de prueba.

21

Tener definidos previamente los aspectos generales de seguridad del DBMS. Por ejemplo nombre y contrasea del usuario administrador, la ubicacin fsica de los programas y datos del DBMS. Tener definidos previamente aspectos generales de la configuracin del DBMS. Por ejemplo, la estimacin de los usuarios que se conectarn de manera simultnea, y el tipo de almacenamiento (MySQL da esta opcin). Aspectos de configuracin de la computadora que funcionar como servidor de la base de datos, por ejemplo: o La seguridad del servidor (fsica, permisos de acceso al servidor, seguridad en la red, proxys y firewall, entre otros). o Software antivirus y antiespa (en general proteccin contra software malicioso malware) en el servidor. o Recursos del servidor que se destinarn para uso del DBMS. Tener en cuenta los aspectos relacionados a la red. Por ejemplo, el nmero de puerto que se usar para la conexin, la capacidad de transmisin de datos en la red local, si habr accesos remotos a la base de datos, y los aspectos de seguridad en la red.

Para ejemplificar la instalacin del DBMS es mas ilustrativo detallarla para MySQL. Se muestra la instalacin y configuracin del MySQL 5.0 (DBMS y herramientas visuales) en una computadora con sistema operativo Microsoft Windows XP Profesional para arquitectura de 32 bits. Los pasos son: 1. En primer lugar se debe descargar del sitio www.mysql.com, el MySQL Server y las herramientas visuales para la administracin. Para MySQL 5.0 se descargaron los archivos que se muestran en la Figura 15. Archivos para instalar servidor y herramienta grfica para MySQL 5.0.

Figura 15. Archivos para instalar servidor y herramienta grfica para MySQL 5.0.

El primer archivo corresponde al DBMS y el segundo archivo contiene el ambiente visual para interactuar con el DBMS. 2. Descomprimir y ejecutar el archivo que corresponde al DBMS. Al hacer esto, se muestra la primer pantalla del asistente para la instalacin, como se muestra en la Figura 16. Instalando MySQL Server 5.0., pantalla de bienvenida.

22

Figura 16. Instalando MySQL Server 5.0., pantalla de bienvenida.

En la siguiente pantalla (Figura 17. Instalando MySQL Server 5.0., tipo de instalacin) el usuario debe indicar el tipo general de instalacin (tpica, completa o personalizada).

Figura 17. Instalando MySQL Server 5.0., tipo de instalacin. Lo ms recomendable sera la opcin completa Complete, de manera que en un futuro no sea necesario agregar software que no estaba incluido. En la pantalla mostrada en la Figura 18. Instalando MySQL Server 5.0., confirmar informacin, el asistente indica el tipo general de instalacin seleccionado en el paso previo e indica la ubicacin en disco de los archivos del DBMS.

23

Figura 18. Instalando MySQL Server 5.0., confirmar informacin. Al hacer clic en el botn de instalar Install se instalar el DBMS. Y mostrar una pantalla que muestra el avance del proceso. Ver Figura 19. Instalando MySQL Server 5.0., copiando archivos.

Figura 19. Instalando MySQL Server 5.0., copiando archivos.

Al terminar el proceso anterior muestra una pantalla que permite crear una cuenta de usuario en el sitio de MySQL.com. Esto es opcional y una ventaja es que se puede solicitar el envo de correo electrnico a la cuenta del usuario, con informacin de MySQL. Ver Figura 20. Instalando MySQL Server 5.0., cuenta en MySQL.com.

24

Figura 20. Instalando MySQL Server 5.0., cuenta en MySQL.com.

En el caso de la pantalla de la Figura 20. Instalando MySQL Server 5.0., cuenta en MySQL.com., se decidi no hacer el proceso de crear una cuenta en el sitio Web de MySQL. Al presionar el botn para la siguiente pantalla (Next), muestra la pantalla que notifica el fin de la instalacin del MySQL Server. Como se ve en la Figura 21. Instalando MySQL Server 5.0., pantalla para confirmar configuracin.

Figura 21. Instalando MySQL Server 5.0., pantalla para confirmar configuracin.

En la pantalla de la Figura 21. Instalando MySQL Server 5.0., pantalla para confirmar configuracin es conveniente activar la opcin para configurar el DBMS MySQL (Configure

25

the MySQL Server now), que entre otras opciones permitir configurar los aspectos mencionados a continuacin: Generar un archivo de configuracin de MySQL optimizado. Configurarlo como un servicio de Windows ejecutndose en un puerto dedicado. Asignar la contrasea para el usuario administrador. Al hacer clic en el botn de terminar (Finish), aparecern las pantallas para la configuracin del DBMS. 3. Configuracin del DBMS MySQL mediante el asistente. Proporcionar la informacin adecuada segn el tipo de instalacin deseada. La primer pantalla del asistente de configuracin se muestra en la Figura 22. Configurando MySQL Server 5.0., pantalla de bienvenida.

Figura 22. Configurando MySQL Server 5.0., pantalla de bienvenida.

En la pantalla que sigue (ver Figura 23. Configurando MySQL Server 5.0., seleccionar tipo de configuracin) se debe indicar si la instalacin ser detallada (dada por el usuario) o si ser una instalacin estndar (usa una configuracin de propsito general), que posteriormente podr ser modificada por el administrador.

26

Figura 23. Configurando MySQL Server 5.0., seleccionar tipo de configuracin. Se seleccion la primer opcin Detailed Configuration, para analizar las opciones de configuracin disponibles. Despus de seleccionar la opcin indicada y presionar el botn de siguiente (Next), aparece la pantalla mostrada en la Figura 24. Configurando MySQL Server 5.0., seleccionar tipo de servidor.

Figura 24. Configurando MySQL Server 5.0., seleccionar tipo de servidor.

27

Las opciones de la pantalla de la Figura 24. Configurando MySQL Server 5.0., seleccionar tipo de servidor son: Developer Machine. Adecuada para una computadora que ejecutar muchas otras aplicaciones. Se asignar una cantidad baja de memoria para el MySQL. Recomedada para una computadora de usuario, que usar MySQL como prueba o desarrollo de aplicaciones. Server Machine. Adecuada para una computadora dedicada como servidor de base de datos y que ejecuta otras aplicaciones de servidor. MySQL usar una cantidad media de memoria para MySQL. Recomendada para servidores de aplicaciones Web. Dedicated MySQL Server Machine. Para una computadora dedicada exclusivamente como servidor de bases de datos. MySQL podr usar toda la memoria disponible.

En la pantalla de la Figura 25. Configurando MySQL Server 5.0., seleccionar uso de la base de datos se solicita el uso esperado de la base de datos.

Figura 25. Configurando MySQL Server 5.0., seleccionar uso de la base de datos.

Las opciones disponibles y su interpretacin son: Multifunctional Database. Para bases de datos de propsito general. El servidor se optimiza para usar la mquina de almacenamiento transaccional rpida llamada InnoDB (propiedad de MySQL) y la mquina de almacenamiento de alta velocidad llamada MyISAM. Transactional Database Only. Est optimizada para aplicaciones de servidor y aplicaciones web transaccionales. La principal mquina de almacenamiento ser InnoDB, pero tambin MyISAM podr ser usada.

28

Non-Transactional Database Only. Para bases de datos no transaccionales. (Ver nota sobre mquina transaccional) Recomendada para aplicaciones web simples. Solo se podr usar la mquina de almacenamiento no transaccional MyISAM.

Notas: Una mquina transaccional permite una mayor seguridad para la ejecucin de las transacciones. Por ejemplo: operaciones de recuperacin automtica, operaciones tipo commit y rollback y una mejor concurrencia. Una mquina no transaccional permite que las operaciones sean ms rpidas, tienen menor requerimiento de espacio y ocupan menos memoria para las actualizaciones.

La primer opcin es la ms comn, pero las otras opciones podrn ser muy eficientes en los casos particulares citados. En este caso se seleccion la primer opcin. La siguiente pantalla que se muestra aparece en la Figura 26. Configurando MySQL Server 5.0., seleccionar ruta para almacenar tablas. Las pantallas que aparecen pueden variar segn las selecciones hechas.

Figura 26. Configurando MySQL Server 5.0., seleccionar ruta para almacenar tablas.

En la pantalla de la Figura 26. Configurando MySQL Server 5.0., seleccionar ruta para almacenar tablas, el usuario puede aceptar la ruta de almacenamiento para la base de datos o bien podr cambiar su ubicacin. Se proporciona adems informacin sobre el sistema de archivos del sistema operativo y la cantidad de espacio en disco ocupado y libre. En este caso se acept la ruta predefinida y se pas a la siguiente pantalla que se muestra en la Figura 27. Configurando MySQL Server 5.0., seleccionar nmero de conexiones.

29

Figura 27. Configurando MySQL Server 5.0., seleccionar nmero de conexiones.

En la pantalla de la Figura 27. Configurando MySQL Server 5.0., seleccionar nmero de conexiones, se debe indicar el nmero aproximado de conexiones concurrentes al servidor, seleccionando una de las dos primeras opciones, o bien el usuario puede escribir directamente el nmero de conexiones en la tercer opcin. Enseguida aparece la pantalla que permite habilitar y definir el puerto para las conexiones de red, que se muestra en la Figura 28. Configurando MySQL Server 5.0., opciones de conexin en red.

Figura 28. Configurando MySQL Server 5.0., opciones de conexin en red.

30

En la pantalla de la Figura 28. Configurando MySQL Server 5.0., opciones de conexin en red, es necesario seleccionar la opcin Enable TCP/IP Networking ya sea para trabajar en modo local (cliente y servidor de MySQL en la misma computadora) o si se trabajar en red. Pues el acceso al servidor de MySQL se realizar por medio de puertos. Se puede aceptar el nmero de puerto propuesto, si este puerto no esta ya en uso. Anotar el nmero de puerto, pues adelante si la computadora tiene habilitado el Firewall ser necesario agregar ese puerto para el funcionamiento de MySQL. La segunda opcin Enable Strict Mode ayuda en la seguridad y es recomendable seleccionar la opcin. Al hacer clic en el botn de siguiente Next, aparece la pantalla para seleccionar el conjunto de caracteres. La primer opcin es adecuada como se muestra en la pantalla de la Figura 29. Configurando MySQL Server 5.0., seleccionar conjunto de caracteres.

Figura 29. Configurando MySQL Server 5.0., seleccionar conjunto de caracteres. Al hacer clic en el botn Next aparece la pantalla mostrada en la Figura 30. Configurando MySQL Server 5.0., opciones para Windows.

31

Figura 30. Configurando MySQL Server 5.0., opciones para Windows.

La pantalla de la Figura 30. Configurando MySQL Server 5.0., opciones para Windows, permite instalar el DBMS como un servicio de Windows, de manera que se podr administrar como un servicio mas del sistema operativo. Se puede escoger el nombre del servicio, es recomendable un nombre descriptivo, y tambin est la opcin para iniciar el servidor MySQL de manera automtica cuando inicia el sistema operativo. La opcin Incluye Bin Directory in Windows PATH, permite incluir los archivos ejecutables a nivel cliente y servidor en la variable PATH de Windows. De tal manera que los ejecutables puedan ser llamados desde la lnea de comandos. En Windows la variable PATH contiene rutas de directorios para ubicar y poder ejecutar archivos. Es recomendable activar la opcin. Enseguida aparece la pantalla mostrada en la Figura 31. Configurando MySQL Server 5.0., opciones de seguridad.

Figura 31. Configurando MySQL Server 5.0., opciones de seguridad.

32

En la pantalla de la Figura 31. Configurando MySQL Server 5.0., opciones de seguridad, se debe introducir la contrasea (password) para el usuario administrador cuyo nombre es root. Es posible habilitar un acceso remoto de este usuario administrador al servidor de MySQL con la opcin Enable root access from remote machines. Esto permitira al administrador controlar de manera remota al servidor. La opcin Create An Anonymous Account, permite crear un usuario que se pueda conectar al servidor sin necesidad de tener una cuenta creada (usuario annimo). Ah mismo se indica el riesgo de habilitar esta opcin. Por ltimo aparece la pantalla mostrada en la Figura 32. Configurando MySQL Server 5.0., preparado para ejecutar.

Figura 32. Configurando MySQL Server 5.0., preparado para ejecutar.

La pantalla de la Figura 32. Configurando MySQL Server 5.0., preparado para ejecutar indica que ya se termin de seleccionar las opciones de configuracin. Y presionando el botn de ejecutar (Execute) se aplicarn las opciones de configuracin seleccionadas. Al presionar ese botn y aplicar todos los pasos de manera exitosa aparece la pantalla de la Figura 33. Configurando MySQL Server 5.0., fin de la configuracin.

33

Figura 33. Configurando MySQL Server 5.0., fin de la configuracin.

La pantalla mostrada en la Figura 33. Configurando MySQL Server 5.0., fin de la configuracin indica el xito del proceso. Algunos problemas que pueden presentarse en algunas instalaciones son: Si la computadora tiene habilitado el servicio de Firewall debe de darse de alta el puerto que usar MySQL. En el caso de Windows XP la ruta para hacerlo es: Inicio | Panel de control | Firewall | Excepciones | Agregar puerto. Aqu se debe indicar un nombre descriptivo del puerto y su nmero. Cuando existe un error por este motivo lo indicar el asistente, entonces ir al Firewall y escoger la opcin de reintentar en la ltima pantalla. Cuando se desinstala y reinstala el MySQL, tambin puede producir un error en esta ltima pantalla. En este caso despus de desinstalar se debe borrar manualmente la carpeta de MySQL en la ruta de instalacin. Despus de hacer esto, ya se puede reinstalar de manera normal. Para otros posibles errores revisar el sitio de MySQL.com.

Como conclusin se puede indicar que un buen DBMS debe permitir al administrador de la base de datos, modificar las opciones de configuracin del DBMS en cualquier momento. De manera que el sistema trabaje de la mejor manera posible. Ejercicios de la unidad 1. Investigar caractersticas generales y particulares de tres DBMS que se usen actualmente. Instalar y configurar en una computadora tres DBMS de uso actual. Documentar la instalacin de los tres DBMS mencionados antes. Analizar y discutir las opciones de instalacin de los DBMS. Exponer en el grupo los puntos desarrollados anteriormente.

34

UNIDAD 2. ADMINISTRACIN DE BASES DE DATOS. Las opciones y facilidades que proporciona un DBMS para su administracin, son un punto de mucha importancia para la seleccin de un DBMS. El DBA ser la persona que ms tiempo invertir en la base de datos, por esto es importante que el DBMS le proporcione las herramientas adecuadas para que el DBA pueda realizar sus tareas en menor tiempo y de la mejor manera. As mismo sern muy importantes las herramientas adicionales para la administracin, para que el DBA las aproveche y lleve sus ventajas hasta los usuarios. Un buen DBA debe conocer todas las herramientas de administracin que le ofrece un DBMS particular y aprovechar las que le reportarn ventajas a el y a los usuarios de la base de datos. Otra tarea del DBA ser cuando sea posible, el de recomendar el DBMS a usar, haciendo un anlisis crtico de las ventajas y desventajas. Ya en el tema pasado se desarroll una introduccin al tema de la administracin de la base de datos. Se mencionaron las principales funciones de un administrador de base de datos y se analizaron las opciones de administracin de tres DBMS de uso comn. Los aspectos generales de la administracin de la base de datos que se explican en este captulo son: Creacin de la base de datos (estructura general, dominios definidos por el DBA, esquema general y vistas). Definicin del esquema de integridad (integridad de entidad y referencial, disparadores y procedimientos almacenados). Definicin del esquema de seguridad (creacin de usuarios, asignacin de privilegios, esquema de recuperacin y diseo de transacciones). Enseguida se desarrolla cada uno de estos temas. 2.1 Creacin de bases de datos. Las facilidades para la creacin de la base de datos, son un punto clave de cualquier DBMS. Y tal vez puede inclinar a los usuarios a seleccionar cierto DBMS. La tarea de la creacin de la base de datos corresponde al DBA y los desarrolladores de los sistemas que tienen los permisos adecuados. Los principales aspectos de la creacin de la base de datos incluyen: Creacin de la estructura de la base de datos. Creacin de dominios definidos por el DBA. Definir el esquema general de la base de datos (tablas, atributos, llaves primarias y llaves heredadas). Creacin de vistas de la base de datos.

De los tres DBMS mencionados con mayor frecuencia en este libro, todos ofrecen las opciones necesarias para la creacin de la base de datos de una manera sencilla. En el caso de MySQL, al menos en su versin gratuita y la revisada en este momento, le faltara la

35

opcin de creacin de dominios, pues no presenta la opcin de crear y administrar roles de usuarios. A continuacin se desarrolla cada uno de los temas. 2.1.1 Creacin de la estructura de la base de datos. Al mencionar estructura de la base de datos, adems de incluir a los datos propios de los usuarios y que normalmente conocemos como base de datos, se incluye tambin la estructura de todos los dems objetos que estarn tambin almacenados y que son necesarios para el uso de la base de datos. Muchos de los objetos nunca sern conocidos por los usuarios comunes de la base de datos. El DBA si debe estar conciente de todos los objetos que componen la estructura completa de la base de datos. Pues debe configurar las caractersticas generales de cada uno de ellos, para hacer un uso adecuado de los recursos disponibles y con el objeto de tener una base datos eficiente. La estructura de la base de datos comprende varios aspectos: Estructuras de almacenamiento. Este aspecto define la forma de bajo nivel de almacenamiento, manejo y recuperacin de la informacin. Asignacin de espacio en disco para diferentes estructuras de almacenamiento. Por ejemplo el espacio asignado para las bases de datos del sistema, bases de datos de usuarios, archivos de bitcoras, etc. Espacio asignado en memoria principal para diferentes objetos de la base de datos. Por ejemplo, en Oracle la memoria asignada al SGA (System Global Area, rea general de memoria asignada al DBMS) y al PGA (Program Global Area, rea de memoria asignada a un proceso simple de servidor). En MySQL espacios de memoria para buffers de almacenamiento de resultados de consultas. Creacin de ndices. Por este conducto el administrador de manera indirecta hace que el DBMS implemente estructuras de archivos y algoritmos para el mantenimiento y recuperacin de la informacin. Enseguida se ejemplifican los aspectos anteriores para diferentes DBMS. Estructuras de almacenamiento. Como se coment antes, las estructuras de almacenamiento definen la forma de bajo nivel de almacenamiento, manejo y recuperacin de la informacin. Algunas tcnicas de administracin del almacenamiento de bajo nivel son: ISAM, MyISAM, VSAM, InnoDB y Btree. Por ejemplo, en MySQL, la mquina de almacenamiento define la forma para almacenar, recuperar y administrar datos. El DBA puede definir de manera indirecta la estructura de almacenamiento, por ejemplo al crear ndices, y el DBMS por ejemplo puede crear una estructura de rbol B Btree para administrar los ndices. Por ejemplo, en MySQL el administrador puede seleccionar

36

diferentes opciones de mquina de almacenamiento (tambin traducido como motor de almacenamiento), entre ellas estn: InnoDB. Proporciona tablas transaccionales. Se incluye tambin por defecto en todas las distribuciones binarias de MySQL 5.0. En distribuciones fuente, se puede activar o desactivar este motor de almacenamiento configurando MySQL a las necesidades particulares. Para Windows es el motor por defecto. InnoDB es una tecnologa de almacenamiento de datos de fuente abierta para MySQL, incluido como formato de tabla estndar en todas las distribuciones de MySQL AB a partir de las versiones 4.0. Su caracterstica principal es que soporta transacciones de tipo ACID, bloqueo de registros e integridad referencial. InnoDB ofrece una fiabilidad y consistencia muy superior a MyISAM, la anterior tecnologa de tablas de MySQL, si bien el mejor rendimiento de uno u otro formato dependern de la aplicacin especfica. En octubre de 2005, Oracle Corp. desarrolla InnoDB. Adquiri a la compaa Innobase, compaa que

MyISAM. Trata con tablas no transaccionales. Proporciona almacenamiento y recuperacin de datos rpida, as como posibilidad de bsquedas de texto completo. Se soporta en todas las configuraciones MySQL, y es el motor de almacenamiento por defecto (sistemas que no son Windows). Se basa en el cdigo ISAM pero tiene extensiones tiles. ISAM son siglas de Indexed Sequential Access Method (Mtodo de Acceso Secuencial Indexado), se trata de un mtodo para almacenar informacin a la que se pueda acceder rpidamente. ISAM fue desarrollado originalmente por IBM y en la actualidad forma parte del almacenamiento bsico de muchos sistemas de bases de datos, tanto relacionales como de otros modelos.

Falcon. Es una mquina de almacenamiento transaccional reciente de MySQL. Actualmente es una versin alfa. Esta basada en la mquina de base de datos Netfrastructure (). Una de sus ventajas es que requiere de un mnimo de mantenimiento y est diseada para reconfigurarse de manera automtica para manejar de manera eficiente diferentes tipos de carga de trabajo. BDB. Proporciona tablas transaccionales. Se incluye en la distribucin binaria MySQLMax en aquellos sistemas operativos que la soportan. En distribuciones fuente, se puede activar o desactivar este motor de almacenamiento configurando MySQL a las necesidades particulares. Las tablas BDB pueden tener una gran probabilidad de sobrevivir a fallos del sistema y ser capaces de realizar commit y rollback en transacciones. La empresa Sleepycat Software proporcion a MySQL este motor de almacenamiento transaccional, llamado Berkeley DB y conocido tradicionalmente como BDB.

37

Heap o Memory. Es no transaccional. Como indica su nombre, las tablas MEMORY se almacenan en memoria y usan ndices hash por defecto. Esto las hace muy rpidas, y muy tiles para crear tablas temporales. Sin embargo, cuando se apaga el servidor, todos los datos almacenados en las tablas MEMORY se pierden. Las tablas por s mismas continan existiendo ya que sus definiciones se almacenan en archivos con extensin .frm en disco, pero estn vacas cuando se reinicia el servidor.

En una base de datos MySQL se pueden tener tablas que usen diferentes mquinas de almacenamiento. Cuando se crea una tabla, se puede indicar la mquina a usar, cuando no se indica, se usa la que esta seleccionada por defecto. Lo recomendable es que todas las tablas de una base de datos usen la misma mquina de almacenamiento. En MySQL 5.0 para ver las mquinas de almacenamiento disponibles se abre el programa MySQL Administrador (1), la opcin Startup variables (2), la ficha General Parameters (3) y en la opcin Default storage (4) se ven las opciones de mquinas de almacenamiento. La secuencia se indica en la Figura 34. Mquinas de almacenamiento en MySQL.

Figura 34. Mquinas de almacenamiento en MySQL.

Observar en la Figura 34. Mquinas de almacenamiento en MySQL las opciones de Default storage. Estas se describieron anteriormente. En este caso en la instalacin se seleccion InnoDB.

38

En MySQL se pueden tambin configurar los detalles de las mquinas de almacenamiento. En la Figura 34. Mquinas de almacenamiento en MySQL, observar las fichas MyISAM Parameters e InnoDB Parameters. Se muestran las opciones para ellas por ser las mquinas seleccionadas en la instalacin. En la Figura 35. Opciones para la mquina de almacenamiento InnoDB en MySQL se muestran algunas de las opciones de configuracin para InnoDB.

Figura 35. Opciones para la mquina de almacenamiento InnoDB en MySQL.

Con la Figura 35. Opciones para la mquina de almacenamiento InnoDB en MySQL se da una idea de todos los detalles de configuracin que el administrador puede manejar con el objeto de optimizar el funcionamiento de la base de datos. Se recomienda ser precavido, entender el significado de cada opcin y llevar un buen registro de las opciones que se han modificado. Lo recomendable tambin es usar la configuracin por defecto y modificarla solo en casos crticos. Un buen administrador de base de datos, debe ser conciente de estas opciones de configuracin y el impacto que tendrn en el funcionamiento de la base de datos. Estas opciones para definir y configurar las mquinas de almacenamiento son propias de MySQL y no estn disponibles de esa manera en las versiones gratuitas de SQL Server y Oracle.

39

2.1.1.2 Asignacin de espacio en disco para diferentes estructuras de almacenamiento. Todos los DBMS usan bases de datos del sistema donde almacenan informacin para un adecuado funcionamiento de este. Por ejemplo, deben almacenar y poder administrar informacin sobre: diccionarios de datos, usuarios y permisos, etc. Despus de que se instala y configura el sistema, se crean estas bases de datos, que solo el DBA podr ver. Algunos DBMS (como Oracle y SQL Server) permiten asignar y restringir el tamao que podrn tener las bases de datos de los usuarios. Por ejemplo las bases de datos de sistema de MySQL se muestran en la Figura 36. Bases de datos del sistema de MySQL.

Figura 36. Bases de datos del sistema de MySQL.

Observar en la Figura 36. Bases de datos del sistema de MySQL las bases de datos del sistema (information_schema y mysql), y se muestran algunas tablas de la base de datos mysql. Tambin se asigna espacio en disco para las bitcoras (archivos log) del sistema. Los archivos de bitcora permiten entre otros aspectos, que el sistema pueda llevar un registro de las actividades realizadas en la base de datos, se pueda conocer los usuarios que se han conectado y las operaciones realizadas, el sistema pueda realizar una recuperacin automtica despus de una cada, poder realizar operaciones de deshacer (rollback) y hacer (commit), etc.

40

Por ejemplo, MySQL permite al DBA definir los tipos de archivos de bitcora a mantener y sus caractersticas generales (nombre de archivo, como tamao mximo, datos a guardar, etc.). En la Figura 37. Archivos de bitcora en MySQL, se muestra la pantalla para configurar archivos de bitcora.

Figura 37. Archivos de bitcora en MySQL. La ruta para ingresar a la pantalla de bitcoras es: MySQL Administrador | Startup Variables y la ficha Log files. Observar los tipos de archivos de bitcora que se pueden activar y el DBA puede definir el nombre de cada archivo.

2.1.1.3 Espacio asignado en memoria principal para diferentes objetos de la base de datos. En este aspecto el DBA debe optimizar el uso de la memoria principal. Para esto se debe conocer la administracin general de la memoria principal por parte del DBMS a usar. Aqu ser necesario conocer los objetos de base de datos que requieren almacenamiento en memoria y la posibilidad de que el DBA asigne y pueda modificar el espacio de almacenamiento. Tal vez algunos de los detalles de requerimientos de espacio por parte de los objetos se conozcan hasta la operacin del sistema. Por ejemplo, que sean frecuentes los resultados de consultas con alto requerimiento de espacio y que el DBA puede asignar un espacio mayor para hacerlas mas eficientes.

41

En MySQL el DBA puede asignar espacio en memoria para diferentes objetos, tales como: buffers (espacio en memoria principal) para ndices, para ordenamientos, memoria cache para resultados de consultas, entre otros. Estas cantidades de memoria se pueden configurar en la opcin Startup Variables. Por otro lado la cantidad de memoria principal total que puede usar el DBMS MySQL se determina al momento de realizar la configuracin inicial del servidor. Recordar que la cantidad mxima de memoria (y de recursos como el CPU) se usar para un servidor dedicado de base de datos. Aunque esto se puede modificar posteriormente. Como se mencion antes, en Oracle la cantidad de memoria asignada al SGA y al PGA la puede definir el DBA en base de capacidades del equipo y requerimientos de la aplicacin. Aqu se debe conocer el manejo de memoria que hace Oracle y los conceptos principales. En la versin gratuita de Oracle se puede modificar el espacio asignado a esas reas mediante las opciones que se muestran en la Figura 38. Configuracin de memoria en Oracle.

Figura 38. Configuracin de memoria en Oracle.

Se puede observar en la Figura 38. Configuracin de memoria en Oracle, que las opciones Gestionar SGA y Gestionar PGA permitirn al DBA modificar la cantidad de memoria asignada a esas reas. Las cantidades asignadas aqu afectarn el rendimiento de la base de datos. Los valores iniciales para estas reas se asignan automticamente en la instalacin, en base a la cantidad de memoria del sistema. Tambin existe una cantidad mxima de memoria que puede asignarse por la limitacin de la licencia, para esta versin es de 1 gigabyte para la suma de ambas reas.

42

Por otro lado la cantidad de memoria que usa el DBMS MySQL se asigna en la configuracin inicial del sistema (ver Figura 24. Configurando MySQL Server 5.0., seleccionar tipo de servidor). En este caso la cantidad mayor de memoria se asigna para un servidor dedicado de base de datos (Dedicated MySQL Server Machine) en la pantalla de seleccin del tipo de servidor. Adems del uso general de la memoria para el DBMS y sus procesos, en MySQL se pueden configurar de manera particular cantidad de memoria para procesos particulares. Por ejemplo: para buffer de almacenamiento de resultados de consultas, buffer para bloques que contienen ndices, y resultados de consultas anteriores, entre otros. Para SQL Server Express, no se encontraron opciones para administrar el uso de la memoria principal. 2.1.2 Creacin de dominios definidos por el DBA. El concepto general de dominio tiene varios significados en el diccionario, algunos de los cules se mencionan: Poder que uno tiene de disponer de lo suyo. Poder que se ejerce sobre otro. Conocimiento grande en una materia. mbito de una actividad. Desde el punto de vista de los sistemas de bases de datos, creo que el enfoque ms adecuado para el concepto general de dominio es el ltimo mbito de una actividad. En Wikipedia se menciona la siguiente definicin de dominio: Es una parte identificable de un espacio fsico o abstracto donde algo existe, est actuando, o es vlido. El concepto de dominio se utiliza en muchos campos de la actividad humana. En este caso interesa el concepto aplicado a las tecnologas de la informacin. An dentro de esta rea, la palabra dominio se puede referir, entre otros a: Nombre de dominio. Es un nombre comn de una red de computadoras, bajo el cul una coleccin de dispositivos de red estn organizados. Domian Name System (DNS). Se usa en Internet. Es un sistema de nomenclatura jerrquica para computadoras, servicios y otros recursos que se encuentran en Internet. Dominio de una aplicacin. Es la clase de propsitos para los cules los usuarios usan un sistema de software. Dominio en la Ingeniera de software. Es un campo de estudio que define un conjunto comn de requerimientos, terminologa, y funcionalidad que debe tener cualquier programa de software que es construido para solucionar cierto problema. Dominio de datos. En la teora de bases de datos, se refiere al conjunto de los valores permitidos.

43

Creo que el enfoque ms adecuado del concepto para el tema Creacin de dominios definidos por el DBA es el de Dominio de una aplicacin. Pues en este contexto, el DBA debe: Identificar a todos los usuarios de la aplicacin. Conocer los objetos existentes en la bases de datos (tablas, vistas, procedimientos almacenados, funciones, ndices, clusters, bitcoras, diccionario de datos, etc.). Definir los propsitos o tareas que cada usuario podr realizar en los objetos de la base de datos. Establecer los niveles y tipos de permisos de cada usuario sobre cada objeto de la base de datos. Aqu se incluye la disponibilidad de cada objeto para cada usuario, partes visibles de cada objeto, los operaciones que cada usuario podr realizar en cada objeto (como lectura o escritura), etc. Definir grupos de usuarios con propsitos comunes. Por lo mencionado anteriormente, la creacin de dominios tiene que ver con la administracin de usuarios del sistema y la seguridad. Algunos DBMS permiten el uso de roles o funciones predefinidas para los usuarios (Oracle y SQL Server, entre otros), la posibilidad de crear nuevos roles y la modificacin de los roles. Los roles son una forma ms segura y rpida de asignar permisos a los grupos de usuarios. Es posible asignar un rol a otro rol, para heredar los permisos. Un rol tambin puede definirse como un grupo con nombre que contiene privilegios asignados, que se pueden otorgar como un grupo a los usuarios o a otros roles. Por ejemplo, algunos de los roles de base de datos predefinidos en SQL Server Express son: administrador, operador de respaldos, lector de datos, escritor de datos, propietario de datos y administrador de seguridad, entre otros. En este software, el administrador puede asignar los roles a los usuarios y configurar las propiedades de cada rol. De manera que si es necesario modificar algunos aspectos de un rol, esto se haga una sola vez, y los cambios se apliquen de manera automtica a todos los usuarios que tienen asignado dicho rol. Por otra parte en Oracle, se tienen predefinidos 3 roles: Connect, Resource y DBA. En general el rol de Connect es el ms restringido y debe asignarse a usuarios y aplicaciones que requieren acceder a la base de datos. El rol Resource permite a los usuarios crear ciertos objetos de esquema en el mismo esquema del usuario, este rol se asigna normalmente a los desarrolladores. El rol de DBA es para los administradores de la base de datos y se incluyen privilegios para crear usuarios y otorgar derechos, crear y asignar roles, crear y eliminar objetos en esquemas de los usuarios, entre otros. En la documentacin de Oracle se menciona que estos roles no se proporcionarn por omisin en las siguientes versiones del software y recomiendan que el administrador defina y cree los roles particulares de cada aplicacin. Oracle tiene dos tipos generales de roles: Roles de aplicacin. Se utilizan para administrar los privilegios de una aplicacin de base de datos. De esta forma se asignan todos los privilegios necesarios para ejecutar una aplicacin de base de datos.

44

Roles de usuario. Para administrar los privilegios para un grupo de usuarios con requerimientos comunes de privilegios.

Algunos DBMS como Oracle incluyen el concepto de Profile (perfil), estos se crean para limitar las posibilidades de los usuarios del sistema de base de datos. Oracle tiene predefinidos los perfiles: Administradores (acceso a recursos ilimitados del sistema), y Desarrolladores (pueden disponer de un nmero ilimitado de sesiones pero uso restringido de CPU). Un perfil permite por ejemplo indicar los ciclos de CPU que puede usar un usuario y el nmero de sesiones concurrentes que podr tener. El propsito principal de los perfiles es facilitar la administracin de la seguridad, manteniendo siempre bajo control los accesos a los recursos. En Oracle se pueden crear nuevos perfiles y modificarlos. Por lo desarrollado antes en este tema, pienso que los conceptos de dominio de base de datos y rol de base de datos son equivalentes. Entonces para que el BDA identifique los dominios necesarios en la aplicacin, requiere identificar a todos los usuarios del sistema y las actividades detalladas de cada uno. Se nota que esto depender de la aplicacin particular. Por ejemplo, para una aplicacin se podran definir los siguientes roles o dominios: Administrador. Responsable de respaldos y recuperacin. Responsable de seguridad y auditoria. Para los diferentes tipos de usuarios. Dentro de los usuarios se pueden tener varios roles, por ejemplo: Usuario gerente general. Gerente de departamento. Cajero. Vendedor. Generador de reportes.

Enseguida se muestra un ejemplo para crear un rol en Oracle, tambin se asignarn privilegios al rol, y por ltimo se asignar el rol a un usuario. No se desarrolla la sintaxis completa de las sentencias (para esto consultar la documentacin oficial de Oracle). Se usa el lenguaje Oracle PL/ SQL. Creacin de un rol. CREATE ROLE rol_usuario1 IDENTIFIED BY clave123; La sentencia anterior crea un nuevo rol llamado rol_usuario1 y estar protegido por contrasea, mediante la clave clave123. Conceder privilegios sobre una tabla a un rol. GRANT SELECT, INSERT, UPDATE, DELETE ON tabla_empleados TO rol_usuario1;

45

La sentencia concede los privilegios de consulta (select), altas (insert), actualizacin (update) y bajas (delete) en la tabla llamada tabla_empleados al rol con nombre de rol_usuario1. Conceder privilegios sobre una funcin o procedimiento a un rol. GRANT EXECUTE ON procedimiento1 TO rol_usuario1;

La sentencia permitir al rol con nombre rol_usuario1, poder ejecutar el procedimiento procedimiento1. Asignar el rol a un usuario. GRANT rol_usuario1 TO usuario1, usuario2, usuario3; La sentencia asigna el rol rol_usuario1 a los usuarios usuario1, usuario2 y usuario3. Oracle PL/SQL cuenta con otras sentencias para la administracin de roles. Por ejemplo, entre otros: Retirar privilegios en las tablas, funciones o procedimientos a los roles. Habilitar o deshabilitar un rol para la sesin actual. Eliminar un rol. Modificar un rol. Notar que no es indispensable tener creados los usuarios al momento de crear los roles. Mas bien la definicin y creacin de roles debe ser previo a la creacin de los usuarios. Los roles sern importantes para la seguridad del sistema y facilitar las tareas de administracin de la base de datos. 2.1.3 Definir el esquema general de la base de datos (tablas, atributos, llaves primarias y llaves heredadas). Una vez que se aplic el anlisis y diseo para un sistema de base de datos. El DBA o los desarrolladores pueden implementar el resultado del diseo de la base de datos en el DBMS seleccionado. La responsabilidad del diseo de la base de datos puede ser del DBA o de los desarrolladores. Sin embargo, el DBA debe asegurar que se cumplan los estndares de diseo y nomenclatura de objetos. El diseo previo de la base de datos normalmente incluye: Diagramas entidad relacin. Es un diagrama conceptual de alto nivel de la base de datos. Que incluye los nombres de las entidades del sistema, sus atributos y sus relaciones con otras entidades. Con nomenclatura especial se identifican atributos particulares como: multivalorados, calculados, llaves primarias, llaves forneas etc. El diagrama tambin debe indicar la cardinalidad de cada relacin. Toda esta informacin es necesaria para un buen diseo de la base de datos.

46

Diccionario de datos. Se describen los datos: tablas (que pueden describir entidades o relaciones) y atributos. Se identifican los atributos que son llaves primarias y llaves forneas. Se debe indicar el nombre del atributo, el tipo de datos y explicar el significado de cada uno de ellos. Diagramas de dependencias funcionales. Mediante diagramas se identifican relaciones entre los atributos. Informacin de base para el proceso de normalizacin. Normalizacin de la base de datos. Se deben aplicar las reglas formales de normalizacin del modelo relacional. Este proceso asegura que se eliminarn inconsistencias en la base de datos derivados de las operaciones de actualizacin y que toda la informacin se podr recuperar de la base de datos. La normalizacin esta fundamentada en las diferentes formas normales: o Primera forma normal (1FN). o Segunda forma normal (2FN). o Tercera forma normal (3FN). o Forma normal de Boyce-Codd (BCFN). o Cuarta formal normal (4FN). o Quinta forma normal (5FN). Diagrama de base de datos. Describe el detalle de las tablas de la base de datos, sus atributos, se identifican llaves primarias y forneas. Se indican las tablas relacionadas.

Una vez que se tiene el diseo completo se puede implementar en el DBMS. Para el diseo se pueden usar herramientas CASE (por ejemplo ERWIN). ERWIN permite crear los diagramas ER con toda la informacin necesaria, como resultado esta herramienta puede generar un script (programa) que se puede ejecutar en el DBMS deseado y como resultado se crear el esquema completo de la base de datos. Para ejemplificar la implementacin en el DBMS se usar un ejemplo sencillo, aplicando los criterios de diseo y se usar MySQL para su implementacin. Planteamiento del sistema. El Departamento de Informtica de la empresa Innovacin SA, desea un sistema de base de datos que le permita administrar los proyectos del departamento. En particular se desea tener registrados todos los proyectos, sus avances e informacin del responsable de cada proyecto. De cada proyecto se desea registrar: clave_proyecto, nombre_proyecto, descripcin_proyecto, departamento_que_solicita, estado, porcentaje_avance, fecha_inicio, fecha_terminacin, responsable. Como informacin de detalle de cada proyecto se desea tener: fecha_reporte, descripcin_avance. De los responsables se desea registrar: clave_responsable, nombre_responsable, puesto. Alguna informacin adicional obtenida es: Cada proyecto es asignado a un solo responsable. Una sola persona como responsable puede tener varios proyectos. De un proyecto particular se pueden tener varios reportes de avance.

47

Los responsables de proyectos deben reportar semanalmente los avances de los proyectos que se estn en proceso.

Como resultado del diseo se definen tres tablas, que se describen a continuacin (informacin que forma parte del diccionario de datos): Proyectos. Tendr la informacin general del los proyectos. Estar relacionada con la tabla de Responsables. Por la cardinalidad aplicada se agregar la clave de la persona responsable y de esta manera se asociar con el responsable. En la Tabla 1. Esquema de la tabla "Proyectos".

Descripcin de atributos de la tabla Proyectos. Nombre atributo Nombre corto Tipo de dato clave_proyecto cve_proy Nmero nombre_proyecto descripcin_proyecto nom_proy desc_proy Texto Texto Nmero Texto

Descripcin Es la clave del proyecto. Llave primaria. Nombre del proyecto. Descripcin del proyecto, ms completa que su nombre. Nmero del departamento que solicita este proyecto. Indica el estado del proyecto. Posibles valores: proceso, terminado, suspendido, cancelado. Indica en porcentaje el grado de avance del proyecto. Fecha (dd/mm/aaaa) de inicio del proyecto. Fecha (dd/mm/aaaa) de terminacin del proyecto. Clave del responsable del proyecto. Llave fornea que est definida en la tabla: Responsables.

departamento_que_solicita depto_proy Estado estado

porcentaje_avance fecha_inicio fecha_terminacin clave_responsable

avance_proy fecha_ini fecha_fin cve_res

Nmero Fecha Fecha Nmero

Tabla 1. Esquema de la tabla "Proyectos".

Responsables. Tendr la informacin general de las personas que pueden ser responsables de proyectos. Estar relacionada con la tabla Proyectos (la relacin se establece dentro de dicha tabla). En la Tabla 2. Esquema de la tabla "Responsables".

48

Descripcin de atributos de la tabla Responsables. Nombre atributo Nombre corto Tipo de dato clave_responsable cve_res Nmero nombre_responsable Puesto nom_res Puesto Texto Texto

Descripcin Clave del responsable del proyecto. Llave primaria. Nombre del responsable. Nombre del puesto del responsable. Posibles valores: Analista1, Analista2, Analista3.

Tabla 2. Esquema de la tabla "Responsables".

Proyectos_Avances Tendr la informacin de detalle e histrica de los avances reportados para cada proyecto. Incluir la descripcin del avance y la fecha del reporte. Ver la descripcin de los atributos en la Tabla 3. Esquema de la tabla "Proyectos_Avances".

Descripcin de atributos de la tabla Proyectos_Avances. Nombre atributo Nombre corto Tipo de Descripcin dato clave_proyecto cve_proy Nmero Es la clave del proyecto. Llave primaria. Es llave fornea que est definida en la tabla: Proyectos. fecha_avance Fecha_avance Fecha Fecha (dd/mm/aaaa) del reporte de avance. Llave primaria. Descripcin_avance desc_avance Texto Descripcin del avance del proyecto. Tabla 3. Esquema de la tabla "Proyectos_Avances".

Notar de la Tabla 3. Esquema de la tabla "Proyectos_Avances", la llave primaria compuesta (cve_proy, fecha_avance). Adems cve_proy es una llave fornea. Despus de aplicar el proceso de diseo se obtiene el diagrama de base de datos que se muestra en la Figura 39. Diagrama de base de datos del ejemplo prctico.

49

Figura 39. Diagrama de base de datos del ejemplo prctico. Para crear esta base de datos en MySQL (ver seccin 1.2.1), entrar al MySQL QueryBrowser, crear la nueva base de datos (Schema en MySQL) innovacin. Hacer clic en el nombre de la base de datos para agregar las tablas anteriores. El editor de tablas permite definir todos los datos necesarios, indicar el tipo de dato, definir llaves primarias (simples o compuestas) y definir las llaves forneas. En la Figura 40. Creacin de tabla con llave primaria y fornea en MySQL, observar el editor de tablas al crear la tabla Proyectos_Avances. Previamente se cre la tabla Proyectos.

Figura 40. Creacin de tabla con llave primaria y fornea en MySQL.

50

En la Figura 40. Creacin de tabla con llave primaria y fornea en MySQL, observar lo siguiente: o Se puede crear una llave primaria compuesta (varios atributos). Simplemente se hace un clic en el icono que esta antes del nombre de la columna para activar/desactivar la opcin de llave primaria. o En la ficha Foreing Keys (llaves forneas) se establecen las llaves forneas de la tabla. Para esto se hizo clic en el icono de +, esto crea una nueva definicin de llave fornea. MySQL asigna un nombre especial a la restriccin de llave fornea. Se tiene que definir el comportamiento (de borrado y actualizacin) de la llave, las opciones son: o No Action. o Cascade. o Set Null. o Restrict. o Se selecciona la tabla de relacin para la llave fornea (en este caso la tabla Proyectos, que se tuvo que crear primero) y MySQL lo relaciona automticamente con el campo que se llama igual y es del mismo tipo.

2.1.4 Creacin de vistas de la base de datos (view). Como el lector lo sabe, una vista de base de datos permite proporcionar a los usuarios diferentes datos que pueden ver, de tal manera que cada usuario solo pueda ver los datos a los que tiene derecho. Una vista se define en base a una sentencia SQL, que indica el nombre de la vista y la consulta que define los datos. Posteriormente se pueden otorgar permisos a los usuarios para las diferentes vistas creadas. Para el usuario final no existe una diferencia entre una tabla y una vista. Una vez definida una vista esta se puede consultar igual que una tabla. Una vista es una tabla lgica o virtual que esta formada del resultado de una consulta. A diferencia de las tablas ordinarias en una base de datos relacional, una vista no es parte del esquema fsico. La vista es dinmica o cambiante, es una tabla virtual computada o cotejada con los datos almacenados en la base de datos. Cuando se modifican los datos en una tabla, se alteran tambin los datos mostrados en la vista. La vista es un aspecto muy importante en la base de datos pues permite: Ocultar la complejidad de la base de datos a los usuarios finales, permitindoles ver datos mas comprensibles para ellos. Mejor manejo de la seguridad. Pues a los usuarios solo se les puede otorgar permisos a las vistas adecuadas. Las vistas puede limitar los riesgos a los cuales se expone una tabla que esta accesible a todos los usuarios. Definir un subconjunto de los datos almacenados en una tabla. Una vista puede reunir y simplificar mltiples tablas en una tabla virtual sencilla. Una vista puede actuar como tablas agregadas, donde los datos agregados (suma, promedio, desviacin estndar, etc.) son calculados y presentados como parte de los datos. Una vista requiere menos espacio de almacenamiento que una tabla, puesto que solo se almacena su definicin y no la copia de todos los datos.

51

Una vista se puede tambin definir en base a otras vistas, permitiendo de esta manera definiciones anidadas. Una vista puede ser actualizable o de solo lectura. Para que una vista sea actualizable, el DBMS debe ser capaz de mapear la estructura de la tabla subyacente a partir de la declaracin de la vista. Como algunas facilidades avanzadas de las vistas se pueden mencionar: La base de datos Oracle introduce el concepto de vista materializada, la cul es preejecutada, y son vistas no virtuales (se almacenan los datos) y se usan comnmente para aplicaciones de Data warehouse. Esta son instantneas estticas de los datos y pueden incluir datos de fuentes remotas. Microsoft SQL Server, introduce en la versin 2000, vistas indexadas, las cuales almacenan un ndice separado de la tabla, pero no almacenan los datos completos.

Para el ejemplo que se esta desarrollado, suponer que el rea de informtica desea que los diferentes departamentos de la empresa puedan consultar los avances de los proyectos que ellos han solicitado. Es decir, el departamento de Recursos Humanos (RH) solo podr consultar el avance de los proyectos solicitados por RH. De esta manera se crear una vista para cada departamento. En MySQL para crear una vista, entrar al MySQL Query Browser, en la base de datos donde se quiere crear la vista se hace clic con el botn derecho del ratn, y del men contextual que aparece se selecciona la opcin Create New View. Como se muestra en la Figura 41. Men para crear una vista en MySQL.

Figura 41. Men para crear una vista en MySQL.

Una vez hecho lo anterior se debe escribir la consulta que define a la vista, como se muestra en la Figura 42. Crear una vista en MySQL.

52

Figura 42. Crear una vista en MySQL. Una vez escrito el cdigo, hacer clic en el botn Continue que compilar y permite crear la vista. Despus la vista debe aparecer como un objeto en la base de datos y se puede ejecutar haciendo doble clic sobre ella y mostrar los datos obtenidos. La vista se puede modificar. Al ejecutar la vista anterior se muestra su resultado, como se ejemplifica en la Figura 43. Ejecutar una vista en MySQL.

Figura 43. Ejecutar una vista en MySQL.

De manera similar se puede crear una vista para cada departamento, y el administrador podr otorgar los permisos adecuados para cada vista a cada departamento.

2.2 Definicin del esquema de integridad. El esquema de integridad asegura que la base de datos siempre tendr un estado consistente sin importar las operaciones que se realicen en la base de datos. El esquema de integridad se implementa mediante las reglas de integridad que estarn almacenadas en la

53

base de datos. Las operaciones en la base de datos se realizan tomando en cuenta las reglas de integridad almacenadas. Una parte importante del diseo de la base de datos es definir las reglas de integridad que el sistema debe verificar y validar que se cumplan. Las reglas de integridad deben estar almacenadas en la misma base de datos y no depender de la aplicacin que accede a la base de datos. Las reglas de integridad aseguran que la base de datos siempre conservar un estado consistente. Ejemplos de reglas de integridad: Restricciones de dominios. Al definir cada atributo sobre un dominio se impone una restriccin sobre el conjunto de valores permitidos para cada atributo. Integridad de entidad. Asegura que no existen registros duplicados en una tabla, y que el campo (o campos) que identifica cada registro es nico y sin valor nulo. La existencia de una clave primaria es el fundamento de la integridad de entidad. Integridad referencial. Es la consistencia entre tablas relacionadas. Se aplica a las claves forneas: si en una relacin hay alguna clave fornea, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deben ser completamente nulos. Reglas de negocio. Son restricciones especficas sobre los datos, que puede definirlas el usuario o el DBA. Se pueden usar disparadores (triggers en ingls) o procedimientos almacenados para definir este tipo de reglas. En las secciones que siguen se desarrollan estos aspectos.

2.2.1 Validar y verificar integridad de entidad e integridad referencial. La declaracin de las reglas de integridad de entidad y referencial se deben establecer desde el diseo de la base de datos. Integridad de entidad. Se indica la llave primaria de la tabla y se debe establecer como valor no nulo. Recordar que esta integridad asegura que no existirn tuplas duplicadas en una tabla. Normalmente el DBMS construye un ndice basado en la clave primaria, de esta manera se pueden agilizar las consultas y la verificacin de no repeticin del valor de la clave. Por ejemplo en MySQL, se puede establecer la clave primaria con el diseador de tablas, como se indica en la Figura 44. Integridad de entidad en MySQL.

54

Figura 44. Integridad de entidad en MySQL.

Observar en la Figura 44. Integridad de entidad en MySQL, la llave primaria compuesta por dos atributos (cve_proy, fecha_avance) y la indicacin de valores obligatorios para estos atributos (NOT NULL). Para aplicar la regla de entidad a toda la base de datos, se debe aplicar este criterio al crear cada tabla (llaves primarias y valores obligatorios para ellas). El lenguaje SQL soporta la definicin de la integridad de entidad, que esta incluida en la sentencia para crear la tabla. Integridad referencial. Como se mencion, esta integridad mantiene la consistencia entre tablas relacionadas. La relacin se establece mediante las llaves forneas. Se pueden establecer diferentes comportamientos para el manejo de las relaciones. Recordar que una llave fornea en una tabla permite relacionar su informacin con otra tabla, en la segunda tabla esa misma llave es primaria. Para el ejemplo que se esta desarrollando (ver la Figura 39. Diagrama de base de datos del ejemplo prctico), observar que en la tabla Proyectos_Avances el atributo cve_proy es una llave fornea (tambin es parte de la llave primaria junto con el atributo fecha_avance). Este atributo cve_proy en la tabla Proyectos_Avances hace referencia al atributo con el mismo nombre en la tabla de Proyectos. En la tabla Proyectos el mismo atributo es la llave primaria. Esto implica que cada vez que se agregue o modifique un registro en la tabla de Proyectos_Avances, el campo de cve_proy debe tener un valor de una clave de proyecto que exista en la tabla de Proyectos. Este es el comportamiento general, las variantes que pueden manejarse se mencionan ms adelante. Existen otras implicaciones como: cundo se elimine un proyecto en la tabla Proyectos, que hacer con los registros de avance de ese proyecto en la tabla Proyectos_Avances?, si se actualiza una clave de proyecto en la tabla de Proyectos, se permite o como se actualizan los avances de ese proyecto en la tabla Proyectos_Avances?.

55

Para ver la forma de definir la integridad referencial en MySQL consultar el tema 2.1.3. Las variantes del comportamiento de borrado de una llave fornea en MySQL son: o No Action. No se realiza accin alguna en los registros que hacen referencia al registro referenciado. Es decir, si se elimina un registro de un proyecto en la tabla Proyectos, se permitir la operacin, y no se aplicar ninguna operacin en los registros de avance de ese proyecto en la tabla Proyectos_Avances. Notar que en la tabla Proyectos_Avances se podrn tener claves de proyectos que ya no existen en la tabla de Proyectos y sus implicaciones en la consistencia de la base de datos. o Cascade. Es el valor por omisin. Si se elimina el registro referenciado, se propaga el borrado a los registros que lo referencian mediante la clave fornea. Es decir, si se elimina un registro de un proyecto en la tabla Proyectos, todos los avances de ese proyecto tambin sern eliminados de la tabla Proyectos_Avances. o Set Null. Si se elimina el registro referenciado, los registros que lo referencian se ponen a nulo en la clave fornea (slo si acepta nulos). Es decir, si se elimina un registro de un proyecto en la tabla Proyectos, a todos los avances se ese proyecto se les asignar un valor nulo en su clave fornea (cve_proy). o Restrict. No se permite el borrado del registro referenciado. Es decir, si se trata de eliminar un registro de proyecto en la tabla Proyectos, pero ese proyecto tiene registros de avance en la tabla Proyectos_Avances, no se permitir la operacin de eliminar ese proyecto en la tabla Proyectos, ni sus registros relacionados en la tabla Proyectos_Avances. De manera similar, las variantes del comportamiento de actualizacin (o modificacin) de una llave fornea en MySQL son: o No Action. No se realiza accin alguna en los registros que hacen referencia al registro referenciado. Es decir, si se modifica una clave de proyecto (campo cve_proy) de un registro de un proyecto en la tabla Proyectos, se permitir la operacin, y no se aplicar ninguna operacin en los registros de avance de ese proyecto en la tabla Proyectos_Avances. Notar que en la tabla Proyectos_Avances se podrn tener claves de proyectos que ya no existen o no corresponden en la tabla de Proyectos y sus implicaciones en la consistencia de la base de datos. o Cascade. Es el valor por omisin. Si se modifica en valor de la clave primaria del registro referenciado, se propaga la modificacin a los registros que lo referencian mediante la clave fornea. Es decir, si se modifica la clave de un proyecto en un registro de un proyecto en la tabla Proyectos, todos los avances de ese proyecto tambin sern actualizados en su llave fornea en la tabla Proyectos_Avances. o Set Null. Si se modifica el valor de la clave primaria el registro referenciado, los registros que lo referencian se ponen a nulo en la clave fornea (slo si acepta nulos). Es decir, si se modifica la clave primaria de un proyecto en la tabla Proyectos, a todos los avances se ese proyecto se les asignar un valor nulo en su clave fornea (cve_proy). o Restrict. No se permite la actualizacin del registro referenciado. Es decir, si se trata de modificar la clave primaria de un registro de proyecto en la tabla Proyectos, pero ese proyecto tiene registros de avance en la tabla Proyectos_Avances, no se permitir la operacin de modificacin de ese proyecto en la tabla Proyectos, ni sus registros relacionados en la tabla Proyectos_Avances.

56

Las opciones de borrado y actualizacin de MySQL para el manejo de las llaves forneas se muestran en la Figura 45. Comportamientos de borrado y actualizacin de llave fornea.

Figura 45. Comportamientos de borrado y actualizacin de llave fornea.

2.2.2 Creacin de disparadores (triggers). Un disparador es una accin que se realiza de manera automtica en la base de datos como consecuencia de algn evento. El disparador contiene sentencias de programacin y puede tambin incluir sentencias SQL. En particular, el disparador responde a ciertos eventos que ocurren en una tabla de la base de datos. Los disparadores pueden restringir el acceso a datos especficos, realizar registro de eventos y auditar modificaciones de datos. Se tienen dos clases generales de disparadores: Disparador de rengln. Permite definir una accin para cada hilera o rengln de una tabla. Disparador de enunciado. Realiza una sola accin para las sentencias SQL Insert, Update y Delete.

Los disparadores no se pueden usar para auditar la consulta de datos en el enunciado Select de SQL.

57

De manera general, existen tres tipos de eventos que pueden iniciar la ejecucin de un disparador: Evento de agregar. Cuando se est agregando un nuevo registro en la base de datos. Evento de actualizar. Cando se est modificando un registro. Evento de borrar. Cuando se est eliminando un registro. Las restricciones generales de los disparadores son: No aceptan parmetros o argumentos. No pueden realizar operaciones de commit o rollback, puesto que son parte del enunciado SQL que lo produce. Pueden ocasionar errores en las tablas, si no se disean y escriben correctamente. Existen diferentes tipos de disparadores segn el DBMS, por ejemplo: Oracle en su versin 9i, adems de los disparadores de modificacin de datos, soporta disparadores que se pueden iniciar cuando se modifican objetos del esquema (como tablas) y cuando los usuarios ingresan o salen del sistema. A estos disparadores de les llama disparadores a nivel de esquema (en ingls Schema-level triggers). Microsoft SQL Server soporta disparadores en tablas y vistas. En la versin 2005 introdujo soporte de disparadores para el Lenguaje de Definicin de Datos (DDL).

Los disparadores son muy tiles para definir reglas especiales o particulares (de negocio) en la base de datos. Por ejemplo, suponer una base de datos de un inventario, se puede crear un disparador que realice de manera automtica un pedido si un artculo baja de cierto nivel de existencias.

Ejemplo prctico en MySQL. Para el ejemplo de Proyectos que se ha estado usando, suponer la necesidad de la siguiente validacin que se realizar por medio de un disparador. En la tabla de Proyectos se tiene un campo para registrar la fecha de inicio del proyecto (campo fecha_ini) y un campo para registrar la fecha de terminacin del proyecto (campo fecha_fin). Por definicin de tipos de datos, el sistema solo aceptar fechas vlidas para esos campos, pero de manera independiente en cada campo. Si el usuario por error introduce una fecha de terminacin anterior a la fecha de inicio de un proyecto, el sistema no tiene la informacin sobre lo que debe hacer. Una solucin viable sera que al ingresar un nuevo registro o modificar el existente, si la fecha de terminacin es una fecha anterior a la fecha de inicio. El sistema no acepte la fecha de terminacin que da el usuario y el valor definitivo para ese campo (fecha_fin) sea igual al de la fecha de inicio (fecha_ini) para ese proyecto. Observar que se tienen que crear dos disparadores (para cuando se agrega nuevo registro y para cuando se modifica un registro existente).

58

MySQL permite crear, eliminar y modificar disparadores. La sintaxis general para crear un disparador es: CREATE TRIGGER nombre_disp momento_disp evento_disp ON nombre_tabla FOR EACH ROW sentencia_disp Donde: Las palabras en maysculas son palabras reservadas. nombre_disp. Es el nombre asignado por el usuario al disparador. momento_disp. Es el momento en que se ejecuta el disparador. Las opciones son: BEFORE (antes) y AFTER (despus). evento_disp. Es el evento o sentencia que activa al disparador. Las opciones son: INSERT, UPDATE y DELETE. nombre_tabla. Es el nombre de la tabla donde se ejecutar el disparador. sentencia_disp. Es la sentencia o sentencias que se ejecutan. Si son varias sentencias se deben encerrar entre BEGIN y END.

Para crear el disparador de Update se entr en la lnea de comandos de MySQL (accesible desde la opcin de Programas | MySQL o desde el Query Browser, en el men Tools | MySQL Command Line Client), como se muestra en la Figura 46. Acceso a la lnea de comandos de MySQL.

Figura 46. Acceso a la lnea de comandos de MySQL. Ya en la lnea de comandos se muestra el prompt o indicador del sistema que es: mysql> Cambiarse a la base de datos donde estn las tablas del proyecto y donde quedar almacenado el disparador, para esto escribir: use innovacin, a lo que el sistema responde: Database changed

59

Como el delimitador de sentencias es el signo ; y el disparador incluir como parte de su sintaxis este signo, es necesario cambiar el delimitador, hacerlo escribiendo: Delimiter | Despus se puede crear el disparador con las siguientes sentencias como se muestra:
create trigger innovacion.validar_fechas before update on innovacion.proyectos for each row begin if new.fecha_fin < old.fecha_ini then set new.fecha_fin = old.fecha_ini; end if; end; |

Notar que en la ltima lnea se incluy el nuevo delimitador que indica a MySQL el final de la sentencia. La palabra reservada new hace referencia al nuevo valor que se desea para el campo, la palabra old hace referencia al valor actual almacenado en la base de datos para el campo indicado. Si todo esta correcto el sistema responde con un mensaje similar a este: Query OK, 0 rows affected (0.01 sec) La vista completa de la lnea de comandos se muestra en la Figura 47. Crear disparador de actualizacin desde la lnea de comandos.

Figura 47. Crear disparador de actualizacin desde la lnea de comandos. Una vez escrito el disparador de actualizacin, probarlo en el Query Browser. Recordar que por ser disparador de actualizacin, probar con un registro que ya exista modificando su fecha de fin de proyecto (campo fecha_fin), escribiendo una fecha que sea

60

anterior a la fecha de inicio de proyecto (fecha_ini). Para ver el resultado del disparador actualizar la vista de los datos de la tabla una vez hecho el cambio. Para crear el disparador que se ejecute al insertar nuevos registros quedara de la forma que se muestra en la Figura 48. Crear disparador de insercin desde la lnea de comandos.

Figura 48. Crear disparador de insercin desde la lnea de comandos.

Observar que en el segundo disparador se hace referencia a la fecha de inicio como new.fecha_ini, por ser un nuevo registro.

2.2.3 Creacin de procedimientos almacenados. Un procedimiento almacenado es un programa que se encuentra almacenado en la misma base de datos. El procedimiento almacenado puede recibir y regresar parmetros (a diferencia del disparador). Los procedimientos almacenados pueden mejorar el rendimiento del sistema, pues es posible tener un plan de ejecucin previo de parte del DBMS. Tambin se pueden usar para propsitos de seguridad del sistema, al permitir que solo los procedimientos almacenados tengan los permisos de ejecucin en el sistema. Esto evita la ejecucin de cdigo extrao en la base de datos. Un disparador puede invocar procedimientos almacenados. El procedimiento almacenado puede regresar conjuntos como resultado. Por ejemplo, el resultado de un enunciado SQL. Tales conjuntos de resultados se pueden procesar usando cursores por otros procedimientos almacenados o por aplicaciones. Los procedimientos almacenados pueden incluir declaracin de variables y cursores, que les permiten iterar a travs de mltiples renglones de una tabla. El SQL estndar proporciona enunciados IF, WHILE, LOOP, REPEAT y CASE entre otros. Los procedimientos almacenados pueden recibir variables, regresar resultados o modificar variables y regresarlas. La implementacin de los procedimientos almacenados vara de un DBMS a otro. Tambin dependiendo del sistema, se implementan en diferentes lenguajes de programacin, por ejemplo SQL, Java, C y C++.

61

Por el uso cada vez mayor de los procedimientos almacenados se han introducido elementos procedurales en SQL, en la parte del SQL/PSM (Structured Query Language/Persistent Stored Modules). Muchos sistemas de bases de datos ofrecen extensiones propietarias y especficas del fabricante, para extender el SQL/PSM, por ejemplo, en la Tabla 4. Relacin de DBMS y sus lenguajes para escribir procedimientos almacenados, se listan algunos DBMS relacionales y el lenguaje que usan para los procedimientos almacenados.

DBMS Lenguaje para los procedimientos almacenados. Microsoft SQL Server Transact-SQL Oracle PL/SQL DB2 SQL/PL PostgreSQL PL/pgSQL MySQL Estndar SQL:2003 Tabla 4. Relacin de DBMS y sus lenguajes para escribir procedimientos almacenados.
Algunos usos comunes de los procedimientos almacenados son: Validacin de los datos de la base de datos. Como mecanismo de control de acceso. De manera que los usuarios solo puedan interactuar con la base de datos por medio de los procedimientos almacenados. Consolidar y centralizar la lgica del sistema, que originalmente estaba implementada en las aplicaciones. De esta manera, un procesamiento largo y complejo que puede requerir de la ejecucin de algunos enunciados SQL, se pueden poner en un procedimiento almacenado y todas las aplicaciones invocan a los procedimientos. Mejorar la seguridad. Puesto que este cdigo est almacenado en la misma base de datos, se pueden controlar adecuadamente las operaciones de este en la base de datos. Mejor eficiencia de las operaciones. Se puede tener un cdigo ejecutable para cada procedimiento almacenado, sin necesidad de compilarlo y optimizarlo cada vez que se ejecute. Algunas consideraciones sobre los procedimientos almacenados: Los enunciados SQL implementados como procedimientos almacenados, en algunos casos se pueden ejecutar ms rpido. Los planes de ejecucin de los enunciados compilados pueden almacenarse en la base de datos, junto con el procedimiento. Esto puede reducir la sobrecarga de compilacin que se requiere en situaciones donde aplicaciones de software envan consultas SQL a la base de datos. Sin embargo, algunos sistemas de bases de datos usan caches (almacenamiento en memoria) para las sentencias para evitar compilacin repetitiva de enunciados SQL dinmicos. Aunque un enunciado SQL precompilado, puede evitar alguna sobrecarga, es ms compleja la creacin de un plan de ejecucin ptimo, puesto que no se conocen todos los argumentos al momento de la compilacin. El procedimiento almacenado puede ejecutarse directamente dentro de la mquina de base de datos. Lo que significa que el procedimiento almacenado se ejecuta completamente en el servidor de la base de datos. Con el beneficio de que se eliminan

62

costos de comunicacin en la red. Esto ser muy importante para enunciados SQL complejos. La ejecucin innecesaria o excesiva de procedimientos almacenados en el servidor puede afectar negativamente el rendimiento de todo el sistema.

Ejemplo prctico de un procedimiento almacenado en MySQL. Para el mismo ejemplo de proyectos que se ha trabajado, suponer que se requiere un procedimiento almacenado que obtenga y regrese la cantidad de proyectos que se encuentran en el estado de proceso para un departamento determinado. El procedimiento almacenado recibir como entrada el nombre del departamento y regresar como salida la cantidad de proyectos que se encuentran en el estado de proceso para ese departamento. Para crear un procedimiento almacenado, seleccionar la base de datos correspondiente y hacer clic con el botn derecho del Mouse, en el men contextual seleccionar la opcin Create new procedure/function, como se muestra en la Figura 49. Crear procedimiento almacenado, paso 1.

Figura 49. Crear procedimiento almacenado, paso 1.

Se abre el dialogo donde se tiene que indicar el nombre del procedimiento y para indicar si ser procedimiento o funcin, como se muestra en la Figura 50. Crear procedimiento almacenado, paso 2.

63

Figura 50. Crear procedimiento almacenado, paso 2.

En la siguiente pantalla (ver Figura 51. Escribir procedimiento almacenado) debe escribirse el procedimiento almacenado, que debe quedar como se muestra ah mismo.

Figura 51. Escribir procedimiento almacenado

Una vez escrito el procedimiento, verificado su sintaxis y almacenado en la base de datos, probarlo desde la lnea de comandos de MySQL, como se muestra en la Figura 52. Ejecutar procedimiento almacenado.

64

Figura 52. Ejecutar procedimiento almacenado.

Observar la llamada o invocacin al procedimiento mediante la sentencia: Call proyectos_cantidad(RH, @cantidad); Donde RH es el nombre del departamento del cual se quieren obtener el nmero de proyectos en proceso, la variable cantidad es la variable de salida donde el procedimiento regresa su resultado. Observar la sentencia select @cantidad;, para obtener y desplegar el resultado de la variable. Probar el procedimiento para otros departamentos. Escribir nuevos procedimientos almacenados diseados por usted.

2.3 Definicin del esquema de seguridad. Del diccionario, seguridad significa: calidad de seguro. A su vez, seguro se define como: Libre de todo dao, peligro o riesgo., Cierto, que no admite duda o error., Firme, estable., Que merece confianza, fiel, leal., Confianza, certeza.. El trmino seguridad informtica, se define como: La seguridad informtica consiste en asegurar que los recursos del sistema de informacin (material informtico o programas) de una organizacin sean utilizados de la manera que se decidi y que el acceso a la informacin all contenida as como su modificacin slo sea posible a las personas que se encuentren acreditadas y dentro de los lmites de su autorizacin.

65

Otra definicin de seguridad informtica: Garantizar que los recursos informticos de una compaa estn disponibles para cumplir sus propsitos, es decir, que no estn daados o alterados por circunstancias o factores externos. El tema de la seguridad informtica ha ido creciendo y han surgido varias reas de especializacin, entre ellas se pueden mencionar: Auditoria de sistemas de informacin. Ciencia forense digital. Planeacin continua de negocios. Existen muchos factores que pueden afectar la seguridad informtica, se pueden mencionar: El usuario: causa del mayor problema ligado a la seguridad de un sistema informtico. Programas maliciosos: programas destinados a perjudicar o a hacer un uso ilcito de los recursos del sistema. Es instalado (por inatencin o maldad) en el ordenador abriendo una puerta a intrusos o bien modificando los datos. Estos programas pueden ser un virus informtico, un gusano informtico, un troyano, una bomba lgica o un programa espa, entre otros. Un intruso: persona que consigue acceder a los datos o programas de los cuales no tiene acceso permitido (hacker, cracker, etc.). Un siniestro (robo, incendio, por agua): una mala manipulacin o una mal intencin derivan a la prdida del material o de los archivos. El personal interno de Sistemas. Las pugnas de poder que llevan a disociaciones entre los sectores y soluciones incompatibles para la seguridad informtica. Por medio de Internet: ataques de negacin de servicio y amenazas combinadas, como integracin de herramientas automticas de hackeo, accesos no autorizados a los sistemas y capacidad de identificar y explotar las vulnerabilidades de los sistemas operativos o aplicaciones para daar los recursos informticos. Un esquema de seguridad, consiste de polticas, planes y procedimientos que permiten garantizar una seguridad adecuada para la base de datos. Un esquema completo de seguridad debe considerar todos los factores de riesgo para la seguridad. Las polticas de seguridad deben considerar el monitoreo de la infraestructura de la red, los enlaces de telecomunicaciones, la realizacin del respaldo de datos, y el reconocimiento de las propias necesidades de seguridad. El establecimiento de las polticas permitir establecer una arquitectura de seguridad basada en soluciones tecnolgicas, as como el desarrollo de un plan de accin para el manejo de incidentes y recuperacin. Cada plan de accin se detalla mediante uno o ms procedimientos, que indican las acciones concretas a realizar. Cada dispositivo que conforma la red necesita de un nivel de seguridad apropiado y la administracin del riesgo implica una proteccin en varias dimensiones (firewall, autenticacin, antivirus, controles, polticas, procedimientos, anlisis de vulnerabilidad, entre otros), y no nicamente tecnologa. El esquema de seguridad debe considerar la seguridad fsica (proteccin contra robo o dao), y la seguridad lgica (proteccin de la informacin).

66

Hablando en particular de las bases de datos, se puede definir la seguridad de la base de datos como: el sistema, procesos y procedimientos que protegen una base de datos de actividad no prevista. La actividad no prevista puede ser de varios tipos: mal uso de usuarios autorizados, ataques mal intencionados o equivocaciones de individuos o procesos autorizados. Las bases de datos proporcionan varias capas y formas para la seguridad de la informacin, tpicamente especificada en el diccionario de datos, que incluye: Control de acceso. Es la habilidad de permitir o denegar el uso de un recurso a una entidad. Auditoria. Se realiza para asegurar la validez y fiabilidad de la informacin. Autenticacin. Es el acto para establecer o confirmar que alguien o algo es autntico. Encriptacin. Proceso para transformar la informacin (como texto plano o legible directamente) usando un algoritmo para lograr que la informacin no pueda leerse, excepto por quien posee una clave. Controles de integridad. Son los mecanismos establecidos por los creadores de la base de datos para asegurar la consistencia de la informacin, tales como: llaves primarias, llaves forneas, reglas de validacin, reglas de dominio, disparadores, etc. Una parte del esquema de seguridad de la base de datos, es la definicin de los usuarios que tendrn acceso a la base de datos, definir a que objetos se tiene acceso y los tipos de permisos sobre los objetos. Tarea que normalmente realiza el administrador de la base de datos. Una facilidad que proporcionan algunos sistemas de bases de datos es crear un grupo o tipo de usuarios, a cada grupo se le asigna los permisos y caractersticas deseadas y posteriormente cada usuario se asocia a un grupo. De esta manera el usuario hereda los permisos de ese grupo. La anterior facilidad no esta disponible en MySQL Server en la versin gratuita, por lo que es necesario asignar a cada usuario individual sus objetos y permisos. El esquema de seguridad planteado en este libro contendr los siguientes puntos y que se desarrollan ms adelante: Creacin de usuarios de la base de datos. Asignacin de privilegios sobre los objetos de informacin. 2.3.1 Creacin de usuarios de la base de datos. Una vez establecido el esquema de seguridad, se crean los usuarios que tendrn acceso a la base de datos. Para llegar a este punto se deben tener definidos de manera previa los dominios creados por el DBA. Recordar que los dominios sirven para hacer una clasificacin general de los tipos de usuarios de la base de datos y de las operaciones permitidas para cada dominio. Para crear los usuarios se debe tener previamente una lista precisa de todos ellos y su clasificacin de dominio. Aunque siempre ser necesario administrar a los usuarios, al agregar y eliminar usuarios, y modificar permisos de ellos.

67

En este caso se ejemplificar la creacin de usuarios para MySQL Server. En el MySQL Administrador entrar a la opcin de User Administration, que permite crear los usuarios y asignar permisos. Como se ve en la Figura 53. Opcin para administrar usuarios en MySQL.

Figura 53. Opcin para administrar usuarios en MySQL. Observar las opciones de User Administration: User information. Permite agregar, modificar o eliminar usuarios. Es la pantalla mostrada en la figura anterior. Para crear un nuevo usuario, hacer clic en el botn de Add new user. Schema Privileges. Permite asignar privilegios a cada usuario. Se selecciona la base de datos particular y se asignan los permisos deseados. Resources. Permite asignar recursos al usuario, tales como el nmero de consultas, actualizaciones, conexiones, etc., que podr realizar. Nota: esta ficha aparece hasta que se selecciona un usuario de la lista o se acaba de crear uno nuevo.

Del lado izquierdo y la parte inferior de la pantalla de la Figura 53. Opcin para administrar usuarios en MySQL, notar la lista de usuarios que ya estn creados, de aqu se puede seleccionar un usuario para modificar sus datos o darlo de baja. Al hacer clic en el botn de Add new user, se escriben los datos del usuario, como un ejemplo se muestra la Figura 54. Crear usuario en MySQL.

68

Figura 54. Crear usuario en MySQL.

Es recomendable llenar todos los campos de datos, una vez hecho esto, se hace clic en el botn de Apply changes, para crear el nuevo usuario. Una vez creado el usuario se le pueden asignar sus privilegios, como se ejemplifica en el tema que sigue. Recordar que una alternativa a asignar privilegios de manera individual a cada usuario, es asignar cada usuario a un dominio (rol). Y solo modificar una vez los privilegios dentro del rol.

2.3.2 Asignacin de privilegios sobre los objetos de informacin. Los privilegios establecen las operaciones que el usuario podr realizar en la base de datos. Este es un aspecto de mucha importancia para la seguridad de la base de datos. Pues elimina la posibilidad de que de manera intencional o accidental un usuario pueda hacer operaciones indebidas en la base de datos. Los usuarios pueden tener varios tipos de privilegios para el acceso a los datos de la base de datos: De lectura. Se pueden leer datos, pero no modificarlos. De insercin. Se pueden agregar nuevos datos. De actualizacin. Se pueden modificar datos. De borrado. Se pueden eliminar o borrar datos.

69

Adems de los privilegios para el acceso a los datos, se tienen privilegios para modificar el esquema de la base de datos, estos son: De ndices. Permite crear y borrar ndices. De recursos. Para la creacin de nuevas relaciones y objetos. De alteracin. Para aadir o borrar atributos de las relaciones. De eliminacin. Para borrar relaciones. El DBA debe asegurarse de tener siempre a la mano la relacin de usuarios, el dominio al que pertenece cada uno y los privilegios asignados sobre cada objeto, una herramienta administrativa del DBMS que proporcione esta informacin ser de gran utilidad. El mayor nivel de privilegios lo tiene el DBA. Ya que es su responsabilidad la administracin de los usuarios, reestructurar la base de datos, etc. Los privilegios se pueden asignar escribiendo de manera directa las sentencias SQL o bien usando la interfase grfica que proporcione el DBMS. Enseguida se ejemplifica la asignacin de privilegios en MySQL. Para asignar los privilegios, en la misma opcin User Administration se selecciona el usuario al cul se desea asignar privilegios. Seleccionar la ficha Schema Privileges y aqu seleccionar los privilegios que previamente se definieron para este usuario en el esquema de seguridad. Ver Figura 55. Asignar privilegios en modo grfico a usuarios en MySQL.

Figura 55. Asignar privilegios en modo grfico a usuarios en MySQL.

Observar los pasos para la asignacin de privilegios:

70

1. Seleccionar la base de datos. Aparece la lista de las bases de datos en el servidor. En este caso se seleccion la base de datos innovacin. 2. Seleccionar el privilegio deseado. Observar la lista de privilegios disponibles y su significado. Para este caso particular, se asignaron privilegios para que el usuario pueda consultar (SELECT), actualizar (UPDATE), borrar (DELETE) y agregar (INSERT) registros en la base de datos innovacin. 3. Agregar el privilegio. Con los botones se puede agregar o quitar cualquier privilegio. Observar los botones para agregar todos (<<) y quitar todos (>>) los privilegios. 4. Aplicar los cambios. Los privilegios asignados al usuario son almacenados de manera permanente en la base de datos. En cualquier momento se pueden modificar los privilegios de los usuarios. Una limitacin en MySQL Server en su versin gratuita, es que los privilegios se definen sobre la base de datos completa (al menos desde la interfase grfica). Lo ms deseable es poder asignar privilegios sobre objetos particulares de la base de datos, por ejemplo, sobre ciertas vistas, que como se ha mencionado antes, se usan para mejorar la seguridad del sistema. Para asignar privilegios de manera individual sobre ciertos objetos de la base de datos, se hace desde la ventana de MySQL Command Line Client, usando la sentencia GRANT de SQL. Revisar la sintaxis y opciones de dicha sentencia. En el ejemplo que sigue (ver Figura 56. Asignar privilegios con la lnea de comandos en MySQL) se crea un nuevo usuario llamado luis con la contrasea luis123 y se le asigna permiso de consultar la tabla Proyectos de la base de datos innovacin. Tener en cuenta que los usuarios los puede crear el usuario root u otro usuario con permisos de administracin.

Figura 56. Asignar privilegios con la lnea de comandos en MySQL. Si el privilegio se asign correctamente, se muestra el mensaje Query OK, . Para probar que se realiz correctamente, hacer una conexin al servidor de MySQL con este usuario y contrasea para verificar que este podr consultar la tabla Proyectos de la base de datos correspondiente. Se puede usar el MySQL Query Browser. Verificar si el usuario podr modificar los datos de la tabla La sentencia GRANT tiene muchas opciones que es conveniente revisar y analizar las posibles consecuencias de ciertos tipos de privilegios. Una recomendacin de seguridad

71

es asignar los privilegios mnimos a los usuarios. Para retirar privilegios a un usuario se usa la sentencia SQL REVOKE. En MySQL se tienen que definir los recursos asignados al usuario, de otra manera el usuario no podr usar la base de datos. Para ello entrar a ficha de Resources y asignar los recursos necesarios. Como ejemplo, ver la Figura 57. Asignar recursos a usuarios en MySQL.

Figura 57. Asignar recursos a usuarios en MySQL.

De la pantalla de la Figura 57. Asignar recursos a usuarios en MySQL, observar que el nmero mximo de consultas, actualizaciones y conexiones estn por hora. En la ltima opcin se puede limitar el nmero de conexiones simultneas al servidor para ese usuario. Tomar en cuenta que si el usuario accede a la base de datos desde el MySQL Query Browser, cada vez que se abre una tabla, se cuenta como una consulta.

2.4 Definicin del esquema de recuperacin. El esquema de recuperacin en una base de datos, debe contener polticas, planes y procedimientos que aseguren la consistencia, disponibilidad y funcionalidad adecuada de la base de datos. Por ejemplo, la falla en un dispositivo de almacenamiento permanente donde este almacenada la base de datos, no debe ser motivo para que esta quede fuera de servicio. Y en el esquema de recuperacin debe estar contemplada esta posibilidad, tener las alternativas viables de respuesta y los procedimientos detallados para solucionar y responder de manera adecuada a dicha situacin.

72

Silberschatz y colaboradores mencionan tres tipos generales de fallas, que requerirn del uso del esquema de recuperacin: Falla en la transaccin. La transaccin no puede terminar correctamente su operacin. Esto se puede deber a un error lgico de la misma (alguna condicin interna como entrada incorrecta, datos no encontrados, desbordamiento, etc.), o se puede deber a un error del sistema (como un interbloqueo). Cada del sistema. Se origina por un mal funcionamiento del hardware, un error en el software de la base de datos, o un error del sistema operativo. Este tipo de falla ocasiona la prdida del contenido de la memoria principal y se abortan las transacciones que se estaban procesando. Falla del disco. Se pierde una parte (o todo) del contenido de la base de datos. Se deben usar los respaldos de la base de datos y las bitcoras para la recuperacin. La recuperacin de este tipo de falla requiere de la intervencin del DBA. El sistema de recuperacin de fallas incorporado en el DBMS, debe realizar una recuperacin automtica del sistema en caso de falla en la transaccin y de cada del sistema. De manera que despus de presentadas estas fallas, el sistema verifica el estado de las transacciones que se estaban ejecutando y realiza una recuperacin automtica sin una solicitud explcita del DBA o de cualquier otro usuario. Los DBMS incorporan el sistema de recuperacin para asegurar que se cumplan las propiedades de atomicidad y durabilidad de las transacciones. La atomicidad de una transaccin indica que se debe tratar a todas las operaciones de una transaccin como una unidad, de manera que el sistema asegura que se realicen todas las operaciones de la transaccin adecuadamente o ninguna de ellas. La durabilidad significa que una vez que una transaccin finaliza con xito, los cambios realizados por ella en la base de datos son permanentes. Los DBMS incorporan algunas facilidades para asegurar que la base de datos siga siendo consistente, disponible y funcional a pesar de diversas situaciones de falla. Por ejemplo: Bitcoras. Son archivos que se almacenan en la base de datos y registran las operaciones realizadas, versiones de los datos antes y despus de actualizaciones, usuario que accede a cierto dato, fechas, identificacin de las transacciones, eventos, errores, etc. Permiten la administracin de las transacciones en la base de datos y sirven de apoyo para la recuperacin de la base de datos. En caso de una falla, el DBMS puede usar la informacin de la bitcora para dejar la base de datos en un estado consistente. Normalmente se usan varios archivos de bitcora. Respaldo. Se proporcionan facilidades de respaldo de las bases de datos. De tal manera que se pueden tener copias de seguridad, con la frecuencia que requiera el sistema. Recuperacin. Facilidades para restaurar la informacin de la base de datos en base a los respaldos e informacin de la bitcora.

Un esquema de recuperacin es indispensable en cualquier base de datos. De esta manera el administrador de la base de datos y los responsables de los sistemas pueden responder de manera adecuada a cualquier falla del sistema.

73

Enseguida se describen algunas facilidades de los DBMS que sirve de apoyo para el esquema de recuperacin. Algunos DBMS proporcionan facilidades adicionales como la posibilidad de tener dispositivos de almacenamiento redundantes, como los sistemas RAID (Disposicin redundante de discos independientes), crear servidores de replicacin, etc.

2.4.1 Diseo y creacin de la bitcora. Recordar que una bitcora es un archivo del DBMS, y donde se registran eventos y cambios realizados en la base de datos. Normalmente los DBMS tienen sus archivos de bitcora base que son necesarios para la recuperacin automtica en caso de fallas, estos son administrados por el DBMS y los usuarios no requieren estar concientes de ellos. Tambin algunos DBMS permiten al DBA definir y crear nuevos archivos de bitcora. La manera de crear los archivos de bitcora depende del DBMS. Algunos DBMS proporcionan facilidades para que el administrador pueda definir los archivos de bitcora a crear y el contenido que tendr cada uno de ellos. En este caso se ejemplificar el tema usando MySQL Server 5.0 en su versin gratuita. Cuando se instala y configura el servidor no se crean de manera automtica todos los archivos de bitcora. Con el MySQL Administrator se pueden crear los archivos de bitcora adicionales. Tener en cuenta que los archivos de bitcora que se crean dependern del motor o mquina de almacenamiento usada, para este ejemplo se est usando InnoDB como mquina de almacenamiento, que tiene soporte para transacciones e incluye recuperacin automtica de fallas. MySQL permite crear cinco archivos de bitcora (pero uno de ellos ya est en desuso) que se describen de manera breve en la Tabla 5. Tipos de archivos de bitcora de MySQL.. Para mas detalles consultar el manual del software correspondiente. Debe quedar claro que estos archivos de bitcora no eliminan la necesidad de que el administrador o responsables tengan que realizar las copias de seguridad necesarias para la base de datos. Es recomendable que las copias de seguridad estn en un lugar fsico diferente a la base de datos, lo que se aplica tambin para los archivos de bitcora. Pues por ejemplo en caso de falla del disco duro se perderan todos ellos. Una vez creados los archivos de bitcora es necesario darles mantenimiento. Un motivo es para asegurarse que no ocupen demasiado espacio, y las actualizaciones que ya estn incluidas en las copias de seguridad ya no ser necesario mantenerlas en las bitcoras. Es conveniente tambin indicarle a MySQL el usar archivos de bitcora nuevos, para esto consultar la sentencia mysqladmin flush-logs o con la sentencia FLUSH LOGS. En MySQL para crear los archivos de bitcora (nombrados log files en MySQL), entrar al programa MySQL Administrator, en la lista de opciones del lado izquierdo seleccionar la opcin Startup Variables y la ficha Log files, ver Figura 58. Pantalla para ver archivos de bitcora en MySQL..

74

Archivo de bitcora Registro de error (Error log)

Tipo de informacin almacenada en el archivo Registra problemas encontrados iniciando, ejecutando o parando mysqld (mysqld se refiere a mysql daemon o el servidor de MySQL). Registro de consultas (Query Registra las conexiones de clientes establecidas, y las log) sentencias ejecutadas. Contiene todas la sentencias, incluidas las que no actualizan datos. Registro de actualizaciones Registra las sentencias que cambian datos. En desuso (Update log) actualmente. Registro binario (Binary log) Registra todas las sentencias que cambian datos. Tambin se usa para replicacin. Usa un formato eficiente y de una manera que es segura para las transacciones. Sustituye al registro Update log. Registro de lentitud (Show Registra todas las sentencias que tardaron mas de cierto query log) tiempo en ejecutarse (establecido en la variable long_query_time), o que no usaron ndices. Tabla 5. Tipos de archivos de bitcora de MySQL.

Figura 58. Pantalla para ver archivos de bitcora en MySQL.

En la pantalla de la Figura 58. Pantalla para ver archivos de bitcora en MySQL., se puede activar cada casilla de verificacin para crear cada tipo de archivo de bitcora deseado. Observar las opciones adicionales disponibles que por ejemplo permiten: Configuracin cuando se tienen servidores de replicacin de la base de datos. Nombres de archivos. Tamao mximo de archivos. Establecer el valor para la variable long_query_time. Formato de archivos de bitcora.

75

Registrar consultas que no usan ndices. Registro de advertencias (warnings) del sistema. Especificar rotacin de archivos de bitcora despus de ciertos das, etc.

Como se puede observar se pueden indicar los nombres de los archivos de bitcora, para el ejemplo, se usaron los nombres que se muestran en la Figura 59. Crear archivos de bitcora en MySQL..

Figura 59. Crear archivos de bitcora en MySQL.

Despus de escribir los nombres de los archivos de bitcora y seleccionar las opciones deseadas hacer clic en el botn de aplicar cambios (Apply changes). Para que se creen los archivos y se aplique la configuracin seleccionada es necesario reiniciar el servidor. Para hacer esto ltimo, desde el mismo programa de MySQL Administrador seleccionar la opcin Service Control para detener y reiniciar el servidor MySQL. Despus de reiniciar el servidor, verificar la carpeta data de MySQL, que en la instalacin comn tendr una ruta semejante a: C:\Archivos de programa\MySQL\MySQL Server 5.0\data, aqu se podrn observar los archivos de bitcora creados. Ver Figura 60. Ver archivos de bitcora creados en MySQL..

76

Figura 60. Ver archivos de bitcora creados en MySQL.

Una vez hecho esto los archivos de bitcora registrarn lo correspondiente a cada uno de ellos. Algunos son archivos de texto y el usuario podr revisar su contenido. Para crear nuevos archivos de bitcora (se aplica a Binary log y Error log), entrar a la lnea de comandos de MySQL y escribir la sentencia Flush logs, como se muestra en la Figura 61. Crear nuevos archivos de bitcora en MySQL..

Figura 61. Crear nuevos archivos de bitcora en MySQL. Observar nuevamente la carpeta data. El sistema crea un nuevo archivo con una numeracin secuencial (para la bitcora Binary log). Como se muestra en la Figura 62. Ver nuevos archivos de bitcora creados en MySQL..

77

Figura 62. Ver nuevos archivos de bitcora creados en MySQL. Una vista parcial de la bitcora Query log, en este caso nombrada como bitacora_query_log1, se muestra en la Figura 63. Vista parcial del contenido del archivo de bitcora Query log" en MySQL..

Figura 63. Vista parcial del contenido del archivo de bitcora Query log" en MySQL.

78

Enseguida se mostrar la manera de recuperar informacin usando los archivos de bitcora.

2.4.2 Recuperacin a partir de la bitcora. Cuando existe una falla, dependiendo del tipo de ella se puede usar la bitcora para la recuperacin. Los tipos de fallas que se pueden presentar, se pueden clasificar en: Del sistema operativo. De energa. Del sistema de archivos. Problema de hardware (disco duro, tarjeta madre, etc.) A continuacin se describen las acciones a realizar de acuerdo al tipo de falla. Del sistema operativo. Se asume que el servidor MySQL est bajo carga de trabajo en el momento del fallo. Si no fuera as, no se necesitara ninguna recuperacin. Para casos de fallos de energa o de sistema operativo, se puede asumir que el disco de datos (base de datos) de MySQL est disponible tras el reinicio. Puede que entonces los archivos de datos de InnoDB no contengan datos consistentes debido al fallo, pero InnoDB lee sus registros y encuentra en ellos la lista de transacciones confirmadas y no confirmadas que todava no han sido volcadas a sus archivos de datos, y los vuelca. La informacin sobre este proceso de recuperacin de errores se le muestra al usuario a travs del registro de errores de MySQL. Es decir, el sistema se recupera de manera automtica usando sus archivos de bitcora. An cuando el sistema se recupera de manera automtica usando los archivos de bitcora, el administrador o responsable del sistema puede ejecutar de manera explcita los archivos de bitcora para asegurarse que las actualizaciones registradas en ellos se escriban de manera permanente hacia la base de datos. Para esto solo se requiere rotar los archivos de bitcora, este procedimiento escribe todos los cambios registrados en los archivos de bitcora hacia la base de datos, cierra esos archivos y genera nuevos archivos de bitcora con nmeros secuenciales. Para esto se usa la sentencia FLUSH LOGS explicada en el tema 2.4.1 Diseo y creacin de la bitcora. De energa. Se maneja igual que una falla del sistema operativo. Del sistema de archivos. En casos de fallas del sistema de archivos o de hardware, se puede asumir que el disco de datos de MySQL no est disponible tras el reinicio. Esto significa que MySQL no puede arrancar normalmente porque algunos bloques de datos del disco no son legibles. En este caso, es necesario reformatear el disco, instalar uno nuevo, o en cualquier caso, corregir el problema subyacente. Despus es necesario recuperar los datos de MySQL desde copias de seguridad, lo que significa que se tiene que tener copias ya realizadas. Problema de hardware. Se maneja igual que una falla del sistema de archivos.

79

2.4.3 Respaldar bases de datos. Como se ha mencionado antes, es indispensable en cualquier sistema que use una base de datos, hacer los respaldos (copias de seguridad) necesarios, para poder realizar la recuperacin de la base de datos en caso de fallas. Para esto es necesario tener establecida una poltica de respaldos de la base de datos y llevarla a cabo. Dicha poltica deber contener como mnimo: las fechas y horas de los respaldos, los responsables, la verificacin de la realizacin de los respaldos, y la verificacin de que la base de datos se puede recuperar a partir del respaldo. Un respaldo completo de la base de datos puede ser un proceso que consume tiempo y puede ser necesario cerrar la base de datos para los usuarios. Es comn programar y automatizar los respaldos en horarios en que hay pocos (o ningn usuario) trabajando con la base de datos. Por ejemplo, en SQL Server Express, la opcin para realizar los respaldos se encuentra en la opcin Server Objetcs | Backup Device | Back Up to Database. Como se muestra en la Figura 64. Pantalla para respaldar base de datos en SQL Server Express..

Figura 64. Pantalla para respaldar base de datos en SQL Server Express.

Una vista de algunas opciones de respaldo se muestran en la Figura 65. Opciones de respaldo de base de datos en SQL Server.. Observar que se puede seleccionar una base de datos completa o parcial, y que el respaldo es almacenado en un archivo con extensin .bak.

80

Figura 65. Opciones de respaldo de base de datos en SQL Server. En el caso del DBMS Oracle en su versin gratuita, la opcin para respaldos se encuentra en Inicio | Utilidades | Carga/descarga de Datos, como se muestra en la Figura 66. Pantalla para respaldar base de datos en Oracle Database Express.. En el caso de MySQL, la opcin para respaldos est en el men principal, opcin Backups, como se muestra en la Figura 67. Pantalla para respaldar base de datos en MySQL.. Observar en la Figura 67. Pantalla para respaldar base de datos en MySQL., las tres fichas disponibles para respaldos. En este caso para llevar a cabo un respaldo es necesario primero crear un nuevo proyecto de respaldo, haciendo clic en el botn New Project de la ficha Backup Project. Una vez hecho esto se proporciona la informacin para el respaldo. Considerar el ejemplo que se indica en la Figura 68. Opciones de respaldo en MySQL.

81

Figura 66. Pantalla para respaldar base de datos en Oracle Database Express.

Figura 67. Pantalla para respaldar base de datos en MySQL.

82

Nota: En MySQL se recomienda antes de realizar el respaldo, rotar los archivos de bitcora para asegurar que los cambios registrados en los ltimos archivos de bitcora se escriban a la base de datos, y el nuevo archivo de bitcora (o archivos) solo contengan los nuevos cambios a partir de la copia de seguridad. El procedimiento para hacer esto para MySQL se explica en el tema 2.4.1 Diseo y creacin de la bitcora.

Figura 68. Opciones de respaldo en MySQL.

En la pantalla mostrada en la Figura 68. Opciones de respaldo en MySQL, se indic un nombre descriptivo para el respaldo, haciendo mencin a la base de datos correspondiente. Enseguida se seleccion la base de datos a respaldar. Observar que es posible seleccionar solo ciertos objetos de la base de datos o completa (opcin por omisin). Es recomendable salvar la informacin descriptiva del respaldo con el botn Save Project. Esta opcin, almacena la definicin del respaldo. Para realizar el respaldo hacer clic en el botn Execute Backup Now, por omisin MySQL agrega al nombre del archivo que contiene el respaldo, la fecha y hora de este. El respaldo genera un archivo de texto en la ubicacin seleccionada por el usuario, y el archivo contiene sentencias SQL para crear los objetos necesarios (tablas, vistas, procedimientos, etc.) y su contenido actual. Al hacer clic en el botn Execute Backup Now, y la accin se realiza con xito, se muestran mensajes como se ve en la Figura 69. Pantalla de avance de respaldo en MySQL..

83

Figura 69. Pantalla de avance de respaldo en MySQL. Por otra parte, en la ficha Advanced Options, se tienen las opciones mostradas en la Figura 70. Opciones de respaldo avanzadas en MySQL..

Figura 70. Opciones de respaldo avanzadas en MySQL.

84

Notar que hay opciones que dependen del motor de almacenamiento usado. En el caso de InnoDB, la opcin por omisin es la ms recomendada. Tambin esta la opcin Complete backup que es til cuando es frecuente que se agreguen nuevos objetos (tablas, vistas, etc.) a la base de datos que se respalda. El contenido y un ejemplo con datos de la ficha Schedule se muestra en la pantalla de la Figura 71. Calendarizacin de un respaldo en MySQL.

Figura 71. Calendarizacin de un respaldo en MySQL. La ficha Schedule, como su nombre lo indica permite calendarizar y automatizar la realizacin de los respaldos. Es una opcin muy til, sin embargo el administrador debe estar revisando que estos respaldos se estn generando de manera adecuada. Para este ejemplo, se habilit la opcin para generar respaldos automticos en la opcin Schedule this backup Project y se seleccion la ubicacin para el almacenamiento de los respaldos. Se usa el mismo nombre de archivo, no se sobrescribirn los respaldos, pues recordar que MySQL agregar al nombre del archivo la fecha y hora de realizacin. Por otro lado se defini que ser un respaldo semanal, que se realizar dos das de la semana (mircoles y viernes) a las 23:00 horas.

85

Despus de cada cambio en la especificacin del proyecto de respaldo es necesario salvar los cambios, haciendo clic en el botn Save Project. Ya contado con los respaldos adecuados, se puede recuperar la base de datos de cualquier falla presentada. La recuperacin se trata en el tema que sigue. 2.4.4 Recuperar bases de datos. Ya en el tema 2.4.2. se mencionaron los tipos de fallas y las acciones del sistema y de los administradores para la recuperacin de la base de datos. Cuando es una falla del sistema operativo o de energa elctrica, normalmente se tiene disponible la base de datos, y basado en los archivos de bitcora el DBMS realiza una recuperacin automtica de la base de datos. El DBMS completa las transacciones pendientes de actualizar la base de datos. En fallas del sistema de archivos y de hardware, se requerir la intervencin del administrador de la base de datos o los responsables de la recuperacin. Para esto ser indispensable contar con los respaldos de seguridad. Tambin se requerirn los archivos de bitcora que no han escrito sus modificaciones hacia la base de datos. Un ejemplo tpico de este tipo de falla es un dao permanente en el dispositivo de almacenamiento de la base de datos, donde se requerir reinstalar y configurar todo el software necesario en otro dispositivo de almacenamiento permanente. Los DBMS proporcionan facilidades para la recuperacin de la base de datos. Adems de la recuperacin automtica, se tienen opciones explcitas para aplicar la recuperacin. Enseguida se explicar la recuperacin de la base de datos en MySQL, usando los respaldos y los archivos de bitcora. A partir de una falla, el procedimiento general consiste en: Recuperar la base de datos a partir de la ltima copia de seguridad. Ejecutar los ltimos archivos de bitcora que se han generado a partir de la ltima copia de seguridad y terminando con el archivo de bitcora ms reciente.

Ya en el tema 2.4.3 se explic la manera de realizar las copias de seguridad. Una vez teniendo las copias de seguridad se puede realizar la recuperacin de la base de datos. En MySQL para hacer la recuperacin ir a la opcin Restore, como se muestra en la Figura 72. Pantalla para recuperar base de datos en MySQL..

86

Figura 72. Pantalla para recuperar base de datos en MySQL. Observar las dos fichas de la opcin Restore, que son General y Restore Content. En la ficha General se puede seleccionar un archivo de backup para la recuperacin y realizarla. En la segunda opcin Restore Content, tambin permite seleccionar un archivo de backup, pero adems es posible analizar el contenido del archivo y seleccionar de manera particular los objetos a recuperar. Para realizar una recuperacin de un archivo de copia de seguridad completo, en la primer ficha, se selecciona el archivo de copia de seguridad, haciendo clic en el botn Open Backup File, el cul abre un dilogo para que el usuario seleccione el archivo a usar, como se muestra en la Figura 73. Seleccionar archivo para recuperacin en MySQL.

87

Figura 73. Seleccionar archivo para recuperacin en MySQL.

Aqu es necesario ubicar el directorio de los archivos de respaldo y debe seleccionarse el ms reciente. Recordar que MySQL agrega al nombre del archivo, la fecha y hora de su realizacin. Para el ejemplo actual, notar que se tienen dos archivos de respaldo del mismo da (15 de abril del 2008), pero el seleccionado es ms reciente (13:11 hrs.), comparado con el primer archivo (12:36 hrs.). El formato que est usando MySQL para la fecha y hora concatenada al archivo es: aaaammdd hh:mm Donde: aaaa. Son los cuatro dgitos del ao. mm. Es el nmero de mes. dd. Es el da hh. Es la hora. mm. Son los minutos. Una vez seleccionado el archivo, se vuelve a mostrar la pantalla de la ficha General, semejante a como se muestra en la Figura 74. Pantalla para recuperacin con informacin completa en MySQL..

88

Figura 74. Pantalla para recuperacin con informacin completa en MySQL.

Notar que se habilitan las opciones que permitirn configurar las opciones para la recuperacin. En la opcin Target Schema el usuario podr seleccionar una base de datos para colocar los objetos recuperados, y dejando la opcin por omisin Original Schema los objetos de base de datos se colocarn en la base de datos con el mismo nombre que la base de datos original al momento de hacer el respaldo. Se encuentran otras opciones, por ejemplo para especificar el tipo de archivo del respaldo (por omisin es .sql), para ignorar los errores que ocurran y seguir procesando las siguientes sentencias del archivo de respaldo, para crear la base de datos si esta no existiera y para seleccionar el formato del archivo de respaldo (opcin File Charset). En este momento se est preparado para realizar la recuperacin de la base de datos, para esto hacer clic en el botn correspondiente Star Restore. Si la operacin tiene xito, se muestra un dialogo como en la Figura 75. Pantalla de avance de recuperacin en MySQL..

89

Figura 75. Pantalla de avance de recuperacin en MySQL.

Quiere decir que en este momento ya se tiene recuperada la base de datos, tal y como se tena en el momento de realizar este respaldo. Pero normalmente se habrn realizado nuevas actualizaciones en la base de datos despus de la fecha del respaldo. Ests actualizaciones se encuentran almacenadas en los archivos de bitcora que se han creado despus de la copia de respaldo hasta el archivo de bitcora mas reciente. Lo que hace falta para recuperar la base de datos de manera completa es asegurarse que los cambios almacenados en los archivos de bitcora se almacenen en la base de datos. Para ejecutar los archivos de bitcora escribir la sentencia de MySQL en la lnea de comandos: mysql> mysqlbinlog nombre_archivo.[0-9]* | mysql donde, nombre_archivo es el nombre por omisin del archivo de bitcora o el nombre asignado por el administrador.

2.5 Diseo y procesamiento de transacciones. Recordando el concepto de transaccin en el contexto de las bases de datos: Una transaccin es un conjunto de instrucciones que pueden modificar la base de datos. An cuando se pueden tener varias instrucciones, por el hecho de pertenecer a la misma transaccin, estas son tratadas como una unidad. Es decir, cuando la transaccin se ejecuta el sistema debe asegurar que todas las instrucciones se aplicaron correctamente y en caso de una falla en la ejecucin de la transaccin, el sistema debe asegurar que el estado de la base de datos es el mismo antes de que iniciara dicha transaccin. Otra forma de decir lo anterior es la proposicin todo o nada, indicando que una transaccin es terminada completamente o esta no tendr ningn efecto en la base de datos.

90

A las transacciones tambin se les conoce como Unidades lgicas de trabajo (en ingls abreviadas como LUWs Logical Units of Work). Por definicin una transaccin debe ser: Atmica. Tratada como una unidad. El sistema debe asegurar que se ejecutan todas las instrucciones o tareas de la transaccin, o bien ninguna de estas es ejecutada. Consistente. Se debe asegurar que la base de datos esta en un estado correcto antes del inicio de la transaccin y despus de que la transaccin termina. Aislada. Aunque varias transacciones se ejecuten de manera concurrente, el resultado en la base de datos es el mismo, que si estas transacciones se ejecutaran una tras otra de manera secuencial. Durable. Una transaccin terminada debe dejar sus cambios en la base de datos de manera permanente. En resumen, las transacciones proporcionan una ejecucin atmica y confiable en presencia de fallas, una ejecucin correcta en presencia de accesos de usuario mltiples y un manejo correcto de rplicas (en el caso de que se soporten). Clasificacin de las transacciones. Las transacciones se pueden clasificar por diferentes criterios, algunos de ellos son: 1. Por su rea de aplicacin. Se pueden ejecutar en aplicaciones no distribuidas y en aplicaciones distribuidas. Tambin existen las transacciones compensatorias, que son transacciones que ya ejecutaron un commit y deben deshacerse mediante otra transaccin. Otro tipo son las transacciones heterogneas, que se ejecutan en ambientes heterogneos (diferentes DBMS). 2. Tiempo de duracin. Pueden ser de tipo batch y en lnea. Las transacciones en lnea tienen tiempos de respuesta muy cortos y acceden a una porcin relativamente pequea de la base de datos. Una transaccin batch toma un tiempo relativamente largo y accede a grandes porciones de la base de datos. 3. Estructura. Se considera si una transaccin puede contener subtransacciones (transaccin anidada) o sin subtransacciones (transaccin plana). Adems tambin se considera el orden de las operaciones de lectura y escritura. En los sistemas reales es fcil obtener ejemplo del porqu varias operaciones deben ser agrupadas en una sola transaccin. Imagine el lector una transaccin simple: Se desea transferir $1000 de una cuenta A, a una cuenta B. Se tiene dos operaciones bsicas, por un lado descontar $1000 de la cuenta A y agregar $1000 a la cuenta B. Si se tratarn como operaciones independientes, que puede pasar si existe una falla del sistema despus de descontar $1000 de A y antes de agregarlos a B? Se pierden $1000 de A y no se agregaron a B. Si simplemente se repiten las operaciones, se puede llegar a descontar de A dos veces la cantidad de $1000.

Las situaciones anteriores pueden llevar a la base de datos a un estado inconsistente o errneo.

91

Por esto es importante que los administradores y responsables de los sistemas identifiquen de manera correcta todas las operaciones de la aplicacin que deben ser tratadas como transacciones y hacer un diseo adecuado de cada una de ellas. Las sentencias de SQL bsicas para el manejo de transacciones son: Commit. Cuando se ejecuta un commit, se asegura que todas las transacciones que han terminado con xito, escriben sus cambios de manera permanente en la base de datos. Rollback. Cuando se ejecuta un rollback, se deshacen los cambios que han realizado todas las transacciones hasta antes del ltimo commit ejecutado. De manera resumida es el comportamiento de estas sentencias, pero se tienen detalles que deben conocerse, tales como los puntos de revisin, sentencias con commit implcito, etc., que deben ser revisadas en detalle de acuerdo al DBMS utilizado.

2.5.1 Definicin de transacciones en un lenguaje husped. Una vez definidas y diseadas las transacciones para una aplicacin, el paso siguiente es escribirlas en un lenguaje que soporte el DBMS para las transacciones. El lenguaje soportado tambin se aplica normalmente para otras facilidades como: procedimientos almacenados, disparadores, etc. (ver tema 2.2.3 Creacin de procedimientos almacenados). Algunos lenguajes que se soportan para escribir transacciones segn el DBMS son: Oracle usa el lenguaje PL/SQL. SQL Server usa el lenguaje Transact-SQL. MySQL usa el estndar de SQL 2003.

Ejemplo prctico. En este caso se pondr un ejemplo de cmo definir una transaccin para MySQL, por lo tanto se usar el lenguaje Estndar SQL 2003. Para detalles especficos revisar el manual correspondiente. Recordar que MySQL soporta diferentes motores de almacenamiento, y algunos soportan manejo de transacciones y otros no. El motor InnoDB soporta transacciones y es el motor seleccionado por omisin. An dentro de una misma base de datos, MySQL puede permitir que las tablas usen diferentes motores de almacenamiento, y por lo tanto se tendrn diferencias en la administracin de transacciones en cada tabla. Sin embargo no es recomendable usar diferentes motores en la misma base de datos. Para este ejemplo, suponer una aplicacin sencilla para un banco, donde se tenga en una tabla la informacin de cuentas, asumir la estructura para la tabla Cuentas, mostrada en la Tabla 6. Esquema de la tabla "Cuentas"..

92

Nombre atributo clave_cuenta clave_cliente

Nombre corto cve_cta cve_clie

Tipo de dato Nmero Nmero Nmero Fecha

Descripcin Clave de la cuenta. Llave primaria. Clave del cliente. Llave fornea. Con referencia a la tabla Clientes. Saldo de la cuenta Fecha de apertura de la cuenta.

Saldo Saldo fecha_apertura fecha_aper Tabla 6. Esquema de la tabla "Cuentas".

Notar que para la tabla Cuentas se esta asumiendo que una cuenta solo puede pertenecer a un cliente. Los atributos de la tabla Clientes se describen en la Tabla 7. Esquema de la tabla "Clientes"..

Nombre atributo

Nombre corto

clave_cliente cve_clie nombre_cliente nom_clie direccion_cliente dir_clie Tabla 7. Esquema de la tabla "Clientes".

Tipo de dato Nmero Texto Texto

Descripcin Clave del cliente. Llave primaria. Nombre completo del cliente. Direccin del cliente.

Una vez creadas las tablas, junto con sus restricciones de llaves primarias y forneas se pueden poner algunos datos de prueba, para revisar el correcto funcionamiento de la transaccin diseada. Se desea tener en una transaccin la operacin que permita transferir un saldo de una cuenta a otra y de est manera asegurar el funcionamiento correcto de la operacin. En el diseo de la transaccin deben tomarse en cuenta las condiciones posibles que pueden presentarse en la transferencia de un saldo de una cuenta (llamarle cuenta1) a otra (llamarle cuenta2), algunas de las situaciones pueden ser: La cuenta1 no existe. La cuenta1 no tiene la cantidad solicitada de saldo a transferir. La cuenta2 no existe.

Observar que cualquiera de las situaciones anteriores que se presente, debe hacer que el sistema no realice la transaccin. La sintaxis de MySQL para especificar transacciones es:
START TRANSACTION | BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET AUTOCOMMIT = {0 | 1}

93

Lo ms adecuado es que la transaccin quede diseada de una manera flexible, para que funcione para cualquier par de claves de cuenta y se pueda indicar el saldo a transferir. Una opcin, es que la transaccin este incluida dentro de un procedimiento almacenado que permita el uso de parmetros. Entonces para el ejercicio anterior, se crea un procedimiento almacenado usando el MySQL Query Browser, como se explic en el tema 2.2.3 Creacin de procedimientos almacenados. El procedimiento quedara de la forma en que se ve en la Figura 76. Escritura de una transaccin plana en MySQL.

Figura 76. Escritura de una transaccin plana en MySQL.

Observar en la Figura 76. Escritura de una transaccin plana en MySQL, los parmetros de entrada del procedimiento, que son las cuentas involucradas y el saldo a transferir. Los tipos de datos de los parmetros deben ser consistentes con los tipos de datos de los campos de las tablas. Notar la condicin if que valida una situacin para llevar a cabo la transaccin. Si la transaccin tiene xito, se escriben de manera permanente los cambios realizados a la base de datos mediante la sentencia commit. Las estructuras condicionales permiten ejecutar un commit o un rollback dependiendo de las situaciones revisadas. Para probar el procedimiento se edit la tabla cuentas con los siguientes datos, mostrados en la Figura 77. Contenido de la tabla "Cuentas".

94

Figura 77. Contenido de la tabla "Cuentas". Despus se ejecut el procedimiento almacenado desde la ventana del MySQL Query Browser, como se muestra en la Figura 78. Ejecutar la transaccin en MySQL.

Figura 78. Ejecutar la transaccin en MySQL.

Para este ejemplo, observar que se est solicitado una transferencia de $1000, de la cuenta 500 a la cuenta 600. Despus de ejecutar el procedimiento, observar el nuevo estado de la tabla, que se muestra en la Figura 79. Contenido de la tabla "Cuentas" despus de ejecutar la transaccin.

95

Figura 79. Contenido de la tabla "Cuentas" despus de ejecutar la transaccin.

Probar el procedimiento almacenado para las situaciones que deben llevar a que no se ejecute y que pudieran llevar la base de datos a un estado inconsistente.

2.5.2 Ejecucin de transacciones planas en el gestor de bases de datos. Una transaccin plana consiste entonces en una secuencia de operaciones primitivas. En MySQL una vez que las transacciones estn escritas, por ejemplo dentro de un procedimiento almacenado, para su ejecucin solo tiene que invocarse el procedimiento almacenado mediante la sentencia call. Al finalizar la ejecucin de la transaccin el DBMS tiene dos opciones generales: Si tiene xito y termina correctamente, hacer los cambios permanentes en la base de datos (mediante un commit). Si la transaccin falla, se deben deshacer los cambios que la transaccin haya realizado en la base de datos (mediante un rollback).

Una transaccin puede incluir sentencias SQL, parmetros (si esta incluida en un procedimiento almacenado), declaracin de variables y estructuras de programacin (secuenciales, de decisin y repeticin). Para verificar las opciones completas ver el manual del software. Podra pensarse que una transaccin plana tiene una ejecucin lineal simple en el DBMS, pero recuerde el lector la amplitud del uso actual de las bases de datos distribuidas y los protocolos necesarios para ejecutar transacciones en tales ambientes.

96

2.5.3 Ejecucin de transacciones anidadas. Una transaccin anidada incluye internamente una o varias transacciones. Se puede tener cualquier nivel de anidamiento. Un punto clave en el funcionamiento de las transacciones anidadas es que el xito de una subtransaccin solo llega a ser permanente (con una operacin de commit) si todos sus ancestros tambin han tenido xito. Lo inverso no aplica: si un hijo falla, el padre es libre para intentar una tarea alternativa, para de esta manera rescatar el trabajo global. Las transacciones anidadas tienen dos ventajas importantes: La falla de una subtransaccin, tiene claramente delimitado el mbito de la falla, permitiendo una clara definicin de polticas alternativas. Las subtransacciones definen lmites claros de aislamiento entre las partes de la misma tarea global. Esto puede ser explotado por el sistema para permitir paralelismo dentro de la misma transaccin global.

Un ejemplo de la estructura de una transaccin anidada se muestra en la Figura 80. Estructura de una transaccin anidada.

Figura 80. Estructura de una transaccin anidada.

97

En la Figura 80. Estructura de una transaccin anidada, la transaccin principal es Reservacin, que contiene dos transacciones anidadas (en el mismo nivel una respecto a la otra), la transaccin Vuelo y la transaccin Hotel. El significado general sera que para realizar una reservacin completa para el viaje de una persona, es necesario realizar la reservacin de su vuelo y la reservacin de su hotel. Algunos aspectos sobre el funcionamiento de transacciones anidadas: Una transaccin anidada (hija) dentro de otra transaccin (padre) conserva las mismas propiedades que las de sus padres. Lo que implica que puede contener transacciones dentro de ella. La transaccin anidada debe empezar despus que su padre y debe terminar antes que l. El commit de una transaccin hija es condicional al commit de su padre, es decir, si el padre de una o varias transacciones aborta, las transacciones hijas tambin sern abortadas. Las transacciones anidadas permiten mayor concurrencia, ya que es posible tener concurrencia dentro de ella. Esto hace posible que la recuperacin de fallas sea independiente para cada transaccin hija. Esto limita el dao o la falla a una parte ms pequea de la transaccin, haciendo que el costo de la recuperacin sea menor.

La capacidad de anidar transacciones es un prerrequisito para las aplicaciones con arquitectura basada en componentes. Guy Pardon (2000), menciona tres paradigmas transacciones anidadas: para la administracin de

Transacciones anidadas cerradas (Closed nested transactions). Los bloqueos se adquieren como en el protocolo de bloqueo de dos fases, pero polticas adicionales determinan el comportamiento de las subtransacciones con respecto a las otras subtransacciones. De manera ms precisa, conforme una transaccin termina sus bloqueos estos son pasados a su padre. Un hijo del mismo padre puede heredar estos bloqueos si este necesita acceder a los mismos datos. Sin esta facilidad, los hijos del mismo padre podran bloquearse unos a otros, obteniendo un sistema ineficiente. El manejo de la herencia de bloqueos plantea algunas dificultades y en el momento de la referencia (2000) el autor menciona que no existen sistemas comerciales que implementen este enfoque. Transacciones anidadas abiertas (Open nested transactions). Difiere del enfoque anterior, en que los bloqueos de una subtransaccin son liberados tan pronto como la subtransaccin termina (pueden ser liberados completamente o reemplazados por un bloqueo semntico dependiendo de la variante). Si los bloqueos son liberados completamente, estonces se hace difcil garantizar las propiedades de aislamiento y atomicidad de la transaccin global. Cuando se introdujo este enfoque, los sistemas prcticos (basados en un DBMS relacional comercial) tuvieron que usar tareas compensatorias. Estas son tareas que deshacen los efectos de una tarea determinada, despus de que esta tarea ha liberado sus bloqueos y ha realizado un commit. Esto es necesario debido a que en las bases de datos relacionales actuales la nica manera para que el DBMS libere los bloqueos, es haciendo un commit a la transaccin. Con el objeto de hacer una compensacin correcta (deshacer todas las actualizaciones correctamente),

98

se aplican ciertas restricciones, y es aqu donde se pueden aplicar los bloqueos semnticos. Transacciones multinivel (Multilevel transactions). Es una variante de las transacciones anidadas abiertas, en donde las estructuras de la transaccin son rboles perfectamente balanceados, todos de la misma profundidad. Esto permite que la ejecucin sea descompuesta en capaz o niveles.

El soporte de las transacciones anidadas depende del DBMS. Y por la literatura revisada pocos sistemas tienen dicho soporte. En este momento se especifica que SQL Server soporta la declaracin y ejecucin de estas, mientras que en Oracle y MySQL no soportan directamente transacciones anidadas.

Ejemplo prctico. Para el caso prctico, suponer una aplicacin simplificada para una agencia de viajes. La aplicacin registrar datos generales del cliente, y realizar dos operaciones: la reservacin de hotel y de vuelo. Si ambas operaciones son exitosas, se realizar la reservacin completa y se almacenar la informacin en la base de datos. Considerar la siguiente estructura simplificada de las tablas: Reservacion_general (id_res_gral, nombre_clien, tel_clien) Reservacion_vuelo (id_res_gral, id_vuelo, num_asiento) Reservacion_hotel (id_res_gral, id_hotel, ciudad_hotel, fecha_llegada, fecha_salida) El esquema de cada tabla se explica enseguida. Tabla: reservacion_general Almacena informacin del cliente y la clave de la reservacin general. Nombre atributo Nombre corto Tipo de Descripcin dato id_reservacion_general id_res_gral Nmero Clave de la reservacin. Llave primaria. nombre_cliente nombre_clien Texto Nombre del cliente a quin se le hace la reservacin. telefono_cliente tel_clien Texto Telfono del cliente a quin se le hace la reservacin.

En un diseo ms completo se deberan tener los catlogos con informacin de detalle de los vuelos y los hoteles, informacin que no se incluye aqu. Para esto se incluye en la tabla reservacin_vuelo el atributo id_vuelo y en la tabla reservacin_hotel el atributo id_hotel. Tambin en una tabla aparte se tendra la informacin de detalle de cada cliente y se relacionara con la tabla reservacin_general mediante la identificacin del cliente. En la Figura 81. Diseo de la base de datos para el ejemplo de transacciones anidadas., se muestra la base de datos creada, las tablas y las relaciones que incluyen las restricciones de llaves primarias y forneas.

99

Tabla: reservacion_vuelo Almacena informacin sobre la reservacin del vuelo. Nombre atributo Nombre corto Tipo de dato id_reservacion_general id_res_gral Nmero

Descripcin Clave de la reservacin. Llave primaria. Llave fornea, declarada en la tabla reservacion_general. Identificacin del vuelo. Nmero de asiento en el avin para el cliente que hace la reservacin.

id_vuelo numero_asiento

id_vuelo num_asiento

Nmero Nmero

Tabla: reservacion_hotel Almacena informacin sobre la reservacin del vuelo. Nombre atributo Nombre corto Tipo de dato id_reservacion_general id_res_gral Nmero

Descripcin Clave de la reservacin. Llave primaria. Llave fornea, declarada en la tabla Reservacion_general. Identificacin del hotel. Ciudad donde se encuentra el hotel. Fecha de llegada del cliente al hotel. Fecha de salida del cliente del hotel.

id_hotel Ciudad_hotel fecha_llegada fecha_salida

id_hotel ciudad_hotel fecha_llegada fecha_salida

Nmero Texto Fecha Fecha

Figura 81. Diseo de la base de datos para el ejemplo de transacciones anidadas.

100

Notar que en la figura anterior se asume una cardinalidad de 1:1 entre las tablas. Recordar que esto depende de las necesidades particulares cada aplicacin. El diseo general de la transaccin anidada es mostrado en la Figura 80. Estructura de una transaccin anidada., donde la transaccin padre registrar datos del cliente y las subtransacciones (hijas) realizarn la reservacin del vuelo y la otra la reservacin del hotel. Para el ejemplo se usar SQL Server en su versin gratuita. Para crear aqu una transaccin anidada se puede escribir dentro de un procedimiento almacenado. Para esto, en la ventana del Explorador de Objetos (Object Explorer), abrir las carpetas: Databases | Nombre_de_base_de_datos | Programability | Stored Procedures. En la carpeta Stored Procedures, hacer clic con el botn derecho del ratn y en el men contextual seleccionar la opcin New Stored Procedure. Esta opcin genera un nuevo procedimiento almacenado con una estructura predefinida como se aprecia en la Figura 82. Crear un procedimiento almacenado en SQL Server Express.

Figura 82. Crear un procedimiento almacenado en SQL Server Express. Recordar que el lenguaje soportado por SQL Server es el Transact SQL. Para entender correctamente el funcionamiento de las transacciones anidadas en este lenguaje se har una mencin de las sentencias bsicas y con las opciones principales (consultar el sitio http://msdn.microsoft.com/es-es/library/bb510741.aspx para una referencia completa de Transact SQL): BEGIN TRANSACTION [nombre_transaccin]

101

Indica el punto de inicio de una transaccin local explcita. La ejecucin de la instruccin incrementa a @@TRANCOUNT en 1. Donde nombre_transaccin es opcional pero recomendable para indicar claramente el nivel de anidamiento de la transaccin. Si se producen errores, se pueden deshacer todas las modificaciones realizadas en los datos despus de BEGIN TRANSACTION para devolver los datos al estado conocido de coherencia. La transaccin dura hasta que se completa sin errores y se emite un COMMIT TRANSACTION para hacer que los cambios sean permanentes en la base de datos, o hasta que se produzcan errores y se deshagan las modificaciones con ROLLBACK TRANSACTION. COMMIT TRANSACTION [nombre_transaccin] Indica el trmino de una transaccin correcta. Si @@TRANCOUNT es 1, COMMIT TRANSACTION hace que todos los cambios de la transaccin sean permanentes en la base de datos, libera los recursos obtenidos y pone a @@TRANCOUNT en 0. Si @@TRANCOUNT es mayor que 1, COMMIT TRANSACTION reduce a @@TRANCOUNT en 1 y la transaccin sigue activa. La instruccin se asocia a la sentencia BEGIN TRANSACTION ms reciente. Notar que para el caso de las transacciones anidadas, una terminacin con xito de las subtransacciones no liberan recursos ni hacen permanentes sus cambios. Las modificaciones permanentes en la base de datos y la liberacin de recursos solo se aplica con la terminacin exitosa de la transaccin ms externa. ROLLBACK TRANSACTION [nombre_transaccin | savepoint_name] Deshace todas las modificaciones de datos realizadas desde el inicio de la transaccin o hasta un punto de retorno. Y libera los recursos ocupados por la transaccin. En transacciones anidadas, esta sentencia se asocia a la instruccin BEGIN TRANSACTION ms reciente. ROLLBACK TRANSACTION sin savepoint_name o nombre_transaccion deshace todos los cambios hasta el principio de la transaccin. En transacciones anidadas, se deshacen todas las transacciones internas hasta la instruccin BEGIN TRANSACTION ms reciente. Pone el valor de @@TRANCOUNT en 0, a excepcin cuando existe un savepoint_name en que no disminuye a @@TRANCOUNT.

SAVE TRANSACTION [savepoint_name] Permite establecer un punto de retorno dentro de una transaccin. El punto de retorno define una ubicacin a la que la transaccin puede volver si se cancela parte de la transaccin de forma condicional. Si se deshace una transaccin hasta su punto de retorno, se debe continuar hasta su finalizacin con mas instrucciones Transact-SQL si es necesario y una instruccin COMMIT TRANSACTION o se debe cancelar completamente al deshacer la transaccin hasta su inicio. Para cancelar una transaccin completa, usar ROLLBACK TRANSACTION nombre_transaccion. Esto deshace todas las operaciones de la transaccin.

102

@@TRANT Devuelve un valor entero con el nmero de transacciones activas de la conexin actual. Recordar que la instruccin BEGIN TRANSACTION incrementa en 1 a @@TRANCOUNT. ROLLBACK TRANSACTION pone en cero a @@TRANCOUNT, excepto para ROLLBACK TRANSACTION savepoint_name, que no cambia el valor de @@TRANCOUNT. La instruccin COMMIT TRANSACTION disminuye en 1 a @@TRANCOUNT. Para el ejemplo, el cdigo fuente dentro del procedimiento almacenado quedara de la forma:
USE [AgenciaTurismo] GO /****** Object: StoredProcedure [dbo].[reservacion] SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[reservacion] @id_res int, @nombre_cliente text, @tel_cliente text, @id_vuelo int, @num_asiento int, @id_hotel int, @ciudad_hotel text = "Chihuahua", @fecha_llegada datetime = "10-30-2008", @fecha_salida datetime = "11-05-2008" AS BEGIN SET NOCOUNT ON; BEGIN TRANSACTION Reservacion_general; insert into reservacion_general values(@id_res, @nombre_cliente, @tel_cliente); BEGIN TRANSACTION Reservacion_vuelo; insert into reservacion_vuelo values (@id_res, @id_vuelo, @num_asiento); COMMIT TRANSACTION Reservacion_vuelo; BEGIN TRANSACTION Reservacion_hotel; insert into reservacion_hotel values (@id_res, @id_hotel, @ciudad_hotel, @fecha_llegada,@fecha_salida); COMMIT TRANSACTION Reservacion_hotel; COMMIT TRANSACTION Reservacion_general; END

Date: 10/28/2008 14:20:17 ******/

SQL Server incluye la opcin para revisar la sintaxis del cdigo (botn parse). Guardar el procedimiento almacenado. Existen varias formas para ejecutarlo, una de ellas es seleccionar el procedimiento almacenado en el Object Explorer hacer clic con el botn derecho del ratn, y en men contextual que se abre seleccionar la opcin de Execute Stored Procedure (Ejecutar procedimiento almacenado). Al hacer esto se abre un dilogo para la ejecucin, donde el usuario debe proporcionar los parmetros para la ejecucin del procedimiento y hacer clic en el botn de OK, ver Figura 83. Ejecutar procedimiento con transacciones anidadas en SQL Server..

103

Figura 83. Ejecutar procedimiento con transacciones anidadas en SQL Server.

Lo ms comn ser invocar el procedimiento desde una aplicacin, donde la mayora de los lenguajes e IDE soportan esta capacidad. Probar el procedimiento en diferentes situaciones para analizar la ejecucin de la transaccin anidada, por ejemplo: Qu hace el sistema en una falla de una subtransaccin? Esto se puede probar, proporcionando un tipo de dato equivocado para una tabla involucrada en una subtransaccin. Si existe una falla en la transaccin padre? Se puede probar de manera similar al caso anterior.

Ejercicios de la unidad 2. Investigar las facilidades generales para la administracin de la base de datos de tres DBMS que se usen actualmente. Investigar herramientas adicionales para la administracin de algunos DBMS. Desarrollar e implementar una aplicacin de base de datos (con unas 3 o 4 tablas relacionadas) que incluya los temas vistos en la unidad.

104

Investigar el concepto, usos, implementacin y ventajas y desventajas de vista materializada que se implementa en Oracle. Investigar las opciones de automatizacin de los respaldos en algn DBMS. Exponer en el grupo los puntos desarrollados anteriormente.

105

UNIDAD 3. TECNOLOGAS DE CONECTIVIDAD A BASES DE DATOS. Un conector (se usa el trmino driver, y normalmente se traduce como controlador o manejador) de base de datos es un programa o conjunto de programas que permiten que programas a nivel cliente se puedan conectar con el servidor de la base de datos. Un conector es necesario entonces para que las aplicaciones que usen los usuarios finales, y que pueden estar desarrolladas en diferentes plataformas y lenguajes de programacin se puedan conectar y trabajar con bases de datos en diferentes DBMS. No confundir el concepto de conector con el de API (Application Programming Interface, en espaol: Interfaz de Programacin de Aplicaciones) que es el conjunto de funciones y procedimientos (o mtodos si se refiere a programacin orientada a objetos) que ofrece cierta biblioteca para ser utilizada por otro software como una capa de abstraccin. Bsicamente una API representa una interfaz de comunicacin entre componentes de software.

Entonces, por lo mencionado antes, se puede decir que un conector es un tipo de API que esta enfocado a las bases de datos. Los conectores pueden ser proporcionados por el proveedor del DBMS, el ambiente de desarrollo (por ejemplo, NetBeans que es un IDE para programar en Java, incluye el conector JDBC para MySQL) y el propio sistema operativo. Por ejemplo en el sitio Web de MySQL, se tiene la pgina de acceso a los diferentes conectores, como se ve en la Figura 84. Pgina de descarga de conectores para MySQL.
Por ejemplo, en el caso de MySQL, este proporciona cinco conectores: Conector ODBC. Proporciona el manejador o controlador (driver en ingls) de soporte para conectarse al servidor de MySQL usando la API ODBC. ODBC son las siglas en ingls de Open Database Connectivity que en espaol se puede decir como Conectividad abierta de base de datos. ODBC soporta conectividad para los sistemas operativos Windows, Unix, Linux y Mac OS X. Conector .NET. Permite a los desarrolladores crear aplicaciones .NET que usan datos almacenados en una base de datos MySQL. Implementa una funcionalidad completa para la interfase ADO.NET. Las aplicaciones que usen este conector pueden ser escritos en cualquiera de los lenguajes .NET que son soportados. Adems existe un programa plugin (programa de computadora que interacta con una aplicacin principal con el objeto de proporcionar una funcionalidad especfica) llamado MySQL Visual Studio Plugin, que trabaja con el conector .NET y Microsoft Visual Studio 2005. Este plugin proporciona herramientas para manipular y definir datos de una base de datos MySQL, dentro de Visual Studio .NET. Conector J. Conector Java, el cul proporciona un manejador que soporta la conexin a MySQL desde aplicaciones con el lenguaje Java. Se usa la API estndar JDBC (Java Data Base Connectivity). Conector MXJ. Es una herramienta que facilita la implementacin y administracin del servidor MySQL y la base de datos, mediante la aplicacin Java.

106

Conector PHP. Es un conector solo para el sistema operativo Windows que permite usar el lenguaje PHP.

Figura 84. Pgina de descarga de conectores para MySQL.

Por lo mencionado anteriormente, se observa que el conector a usar depender del IDE y lenguaje de programacin usado. Por ejemplo, si se esta utilizando Microsoft Visual Studio .NET como IDE y se desea acceder a una base de datos en MySQL, se debe usar el conector .NET. Por otro lado si la aplicacin se programar en lenguaje Java, se requerir el conector JDBC para conectarse a cualquier DBMS. Hablando de los conectores ODBC y .NET, es ms nuevo el conector .NET y el ms adecuado a usar, si el IDE y el lenguaje permiten escoger. Este es el caso de cuando se programa en Microsoft Visual Studio .NET. Enseguida se describirn tres de los principales conectores y se ejemplificar su uso. 3.1 ODBC. 3.1.1 Terminologa y conceptos. Qu es ODBC?

107

ODBC (Open Database Connectivity) es un software que proporciona una va para que los programas cliente puedan acceder a un amplio rango de bases de datos o fuentes de datos. ODBC es una API estandarizada que permite conexiones a servidores de bases de datos que usan el lenguaje SQL. ODBC fue desarrollado de acuerdo a las especificaciones de la organizacin SQL Access Group y define un conjunto de llamadas de funciones, cdigos de error y tipos de datos que pueden ser usados para desarrollar aplicaciones independientes de las bases de datos empleadas. Usualmente ODBC es usado cuando se requiere independencia de la base de datos o accesos simultneos a diferentes fuentes de datos. ODBC es una API ampliamente aceptada para acceso a bases de datos. ODBC esta basada en las especificaciones de la interfase CLI (Call Level Interface) de X/OPen y ISO/IEC para APIs de bases de datos, y usa el lenguaje SQL como su lenguaje de acceso a la base de datos. CLI es un software estndar definido en la especificacin ISO/IEC 9075-3:2003. CLI define como un programa debe enviar sentencias SQL al DBMS y como los conjuntos de registros regresados deben ser manejados por la aplicacin de una manera consistente. X/OPen y ISO/IEC, definen estndares para los sistemas de software abiertos. Para una especificacin completa de ODBC, consultar el sitio MSDN de Microsoft en el artculo ODBC Programmer's Reference ubicado en la direccin http://msdn.microsoft.com/en-us/library/ms714177.aspx. Para usar ODBC se requieren de tres componentes bsicos que se muestran en la Figura 85. Componentes bsicos de ODBC. Los componentes interactan de la siguiente manera: El Cliente ODBC usa un lenguaje o vocabulario de comandos para solicitar datos o enviar datos al servidor DBMS. El servidor DBMS se encuentra en el back-end (parte del software que procesa la entrada desde el front-end). El Driver ODBC traslada o traduce el comando a un formato que puede entender el Servidor ODBC. El Driver ODBC es un software que reside en el front-end (parte del software que interacta con el usuario). El Servidor ODBC ejecuta el comando y enva la respuesta de regreso al Driver ODBC, el cul traslada la respuesta a un formato que puede entender el Cliente ODBC.

Por otro lado, en el sitio MSDN de Microsoft Corporation se menciona que la arquitectura ODBC esta compuesta de cuatro componentes, que se describen a continuacin de manera resumida: Aplicacin. El programa que hace la interfase con los usuarios. Realiza procesamiento y llamadas a funciones ODBC para enviar comandos SQL y recibir resultados. Driver Manager. Carga y descarga drivers en nombre de una aplicacin. Procesa llamadas a funciones ODBC o pasa estas funciones al componente Driver. Driver. Procesa llamadas a funciones ODBC, enva requerimientos SQL hacia una fuente de datos especfica, y regresa resultados a la aplicacin. Si es necesario, el

108

driver modifica un requerimiento de la aplicacin para que sea conforme a la sintaxis soportada por el correspondiente DBMS. Data Source. Es la fuente de los datos. Consiste de los datos que el usuario quiere acceder y su sistema operativo correspondiente, el DBMS, y la plataforma de red (si existe) que es usada para acceder al DBMS.

Figura 85. Componentes bsicos de ODBC.

En esta arquitectura es importante observar lo siguiente: Mtiples drivers y mltiples fuentes de datos pueden existir, lo cual permite que la aplicacin pueda de manera simultnea acceder a datos de ms de una fuente de datos. La API ODBC es usada en dos lugares. Primero entre la Aplicacin y el Drive Manager, y el segundo lugar entre el Driver Manager y cada Driver.

3.1.2 Administrador de orgenes de datos ODBC. El administrador de orgenes de datos ODBC debe permitir crear, eliminar y modificar conexiones ODBC en un equipo de cmputo. En el sistema operativo Microsoft Windows se proporciona este administrador de ODBC. En los sistemas operativos de Microsoft Windows como Windows 2000 y Windows XP, esta aplicacin se localiza en el Panel de control de Windows y en la opcin de

109

Herramientas Administrativas. Su icono se llama Orgenes de Datos (ODBC). En las versiones previas de sistemas operativos de Windows, el icono del administrador ODBC es llamado 32 bit ODBC o simplemente ODBC. Ver Figura 86. Ubicacin del Administrador ODBC en Windows.

Figura 86. Ubicacin del Administrador ODBC en Windows.

Una vez abierto el programa se muestra una pantalla como la mostrada en la Figura 87. Pantalla principal del Administrador ODBC.

Figura 87. Pantalla principal del Administrador ODBC.

110

Observar las fichas con las opciones: DSN de usuario, DSN de sistema y DSN de archivo. DSN son las siglas en ingls de Data Source Name o Nombre de fuente de datos. Y son conexiones predefinidas o creadas por los usuarios para acceder a base de datos o archivos de datos. Estas almacenan la informacin necesaria para conectarse al proveedor de datos indicado. Dicha informacin puede ser: ruta de la base de datos, nombre de la base de datos, nombre de usuario y contrasea, etc. La diferencia entre ellas es: DSN de usuario. Es una conexin solo visible y utilizable solo por el usuario que creo la conexin. DSN de sistema. Es una conexin visible y utilizable para todos los usuarios en este equipo. DSN de archivo. Es una conexin que pueden usar los usuarios que tengan el mismo controlador instalado. La descripcin general de las otras fichas: Controladores. Tiene informacin acerca de los controladores ODBC instalados en el equipo. Solo es informacin descriptiva y no se puede realizar ninguna accin desde esta ficha. Trazas. Permite crear archivos de registro de llamadas a los controladores ODBC, esto se puede usar por personal de soporte o para depurar las aplicaciones. Se proporcionan herramientas adicionales como el Visual Studio Tracing, que realiza la traza o registro de las llamadas. Otra herramienta es Visual Studio Analyzer que se puede utilizar para depurar y analizar una aplicacin distribuida. Agrupacin de conexiones. Se puede modificar el tiempo de espera para volver a intentar la conexin y el intervalo del tiempo de espera de la conexin para un controlador seleccionado cuando se utiliza un conjunto de conexiones. Tambin permite habilitar y deshabilitar el control del rendimiento, que registra un nmero de estadsticas de conexin. El conjunto de conexiones permite que la aplicacin utilice una de las conexiones del conjunto de conexiones sin tener que establecerla cada vez. Cuando se crea una conexin y se incluye en un conjunto, una aplicacin puede reutilizar la conexin sin realizar todo el proceso de conexin; as puede mejorar el rendimiento. Acerca de. Es solo informativa y presenta informacin acerca de los componentes principales de ODBC: incluye el Administrador de controladores, la biblioteca de cursores, la DLL de instalacin y los dems archivos que forman parte de los componentes principales.

Para cada ficha se puede consultar la ayuda detallada con el botn de Ayuda en la parte inferior de la ventana. Una ventaja de tener conexiones ODBC a este nivel, es que cualquier aplicacin puede usar la conexin, sin necesidad de tener que crearla para cada aplicacin. Consultar la direccin: http://msdn.microsoft.com/en-us/library/ms714024(VS.85).aspx para ms informacin sobre este tema.

111

3.1.3 Instalacin y configuracin del driver acorde al gestor de bases de datos. Cuando se requiere usar una conexin ODBC, es necesario instalar el driver segn el DBMS a utilizar y tambin debe configurarse la conexin con los datos especficos (por ejemplo, la ruta de la base de datos, nombre de la base de datos, nombre de usuario, contrasea del usuario, etc.). El sistema operativo puede incluir algunos drivers ya instalados, en los cuales solo sera necesario crear la conexin particular y configurarla. Por ejemplo, en esta computadora que tiene Windows XP como sistema operativo se tienen instalados los controladores mostrados en la Figura 88. Vista de la ficha "Controladores" del Administrador ODBC.. Los controladores mostrados en la Figura 88. Vista de la ficha "Controladores" del Administrador ODBC., son los que ya estn incluidos en el sistema operativo o bien algunos se instalan cuando se instala el software correspondiente. En la Figura 89. Controladores ODBC adicionales a los preinstalados, observar controladores adicionales.

Figura 88. Vista de la ficha "Controladores" del Administrador ODBC.

112

Figura 89. Controladores ODBC adicionales a los preinstalados. El controlador Microsoft ODBC Oracle, como su nombre lo indica es proporcionado por la compaa Microsoft y permite hacer conexiones ODBC al DBMS Oracle. Este controlador ya esta instalado desde un inicio. Notar el otro controlador para Oracle (Oracle in XE), este es proporcionado por la compaa Oracle y se instal al momento de hacer la instalacin de la versin del DBMS de Oracle Oracle 10g Express Edition. Es una facilidad til esta instalacin automtica del controlador ODBC de Oracle. Lo que le restar al usuario es crear un DSN para hacer la conexin a una base de datos particular para cierto usuario. Una pregunta podra ser: Si se tienen dos controladores ODBC para Oracle, cul usar? La respuesta es que se debe usar el ms reciente y el recomendado por el proveedor del DBMS, de acuerdo a la versin de este. Notar el controlador MySQL ODBC 3.51 Driver propiedad de la compaa MySQL y el cul se tuvo que descargar del sitio MySQL.com. Es una instalacin sencilla, pero tiene que hacerse despus de instalar el DBMS MySQL en el equipo y de manera independiente al DBMS MySQL. Tambin estn los controladores SQL Native Client y el SQL Server (no se ve en la imagen), que se instalaron de manera automtica al instalar la versin gratuita de Microsoft SQL Server (Microsoft SQLServer 2005 Management Studio Express).

113

Una vez que si tiene el controlador para el DBMS al cul se desea conectar la aplicacin, se debe crear el DSN con los datos particulares necesarios para hacer una conexin exitosa.

Ejemplo de instalacin, configuracin y uso de un controlador ODBC. En este caso se ejemplificar la instalacin y configuracin de un controlador ODBC para hacer la conexin de una aplicacin Web hecha en Microsoft Visual Studio 2005 que usar una base de datos que estar en el DBMS MySQL Server 5.0. Tener en cuenta que se usaron estas versiones del software que son de las ms recientes. Dependiendo de las versiones se pueden tener algunas diferencias. Y tambin pueden cambiar las versiones de los controladores ODBC. Pasos generales. 1. Instalar primero el software para la aplicacin (Microsoft Visual Studio 2005) y el DBMS a usar (MySQL Server 5.0). 2. Descargar del sitio de MySQL.con el controlador ODBC, en este caso el MySQL ODBC 5.1 Driver. En este caso se obtuvo de la pgina http://dev.mysql.com/downloads/connector/ , mostrada anteriormente. En esta pgina al seleccionar la opcin Connector/ODBC como se muestra en la Figura 90. Conector ODBC en la pgina de MySQL.

Figura 90. Conector ODBC en la pgina de MySQL.

114

En la pgina que se muestra enseguida se muestran las versiones del conector ODBC, segn el sistema operativo y su versin. Para la computadora particular donde se tiene instalado el Microsoft Visual Studio 2005 y el DBMS MySQL Server 5.0, es una computadora con el sistema operativo Microsoft Windows XP Profesional en una arquitectura de 32 bits. Por lo tanto se seleccion la opcin Windows como se muestra en la Figura 91. Seleccionar el conector ODBC adecuado al sistema operativo. En la imagen de la Figura 91. Seleccionar el conector ODBC adecuado al sistema operativo, no se aprecian todos los sistemas operativos disponibles, pero es una variedad muy amplia. Al hacer clic en la opcin de Windows se muestra el detalle de la opcin como se ve en la Figura 92. Seleccionar el tipo de archivo para el conector ODBC.

Figura 91. Seleccionar el conector ODBC adecuado al sistema operativo.

La primer opcin es la ms sencilla de usar, pues incluye un instalador que asiste en todo el proceso para instalar el controlador del conector en la computadora. Al seleccionar la opcin de Pick a mirror permite seleccionar un servidor de descarga, el cul conviene que sea el ms cercano geogrficamente. Tambin se le sugiere al usuario el registrarse en el sitio de MySQL.com, con la ventaja de poder recibir informacin del sitio, poder participar en foros, etc. Despus del registro o no aceptarlo se muestran los servidores de descarga para seleccionar uno de ellos y poder realizar la descarga, como se muestra en la Figura 93. Seleccionar un servidor de descarga para el conector ODBC..

115

Figura 92. Seleccionar el tipo de archivo para el conector ODBC.

Figura 93. Seleccionar un servidor de descarga para el conector ODBC.

3. Instalar el controlador ODBC en el equipo. Una vez descargado el archivo, este se ejecuta en el equipo siguiendo las indicaciones del instalador. Al ejecutar el archivo descargado, se pregunta al usuario la confirmacin para la instalacin. Despus de aceptarla, aparece la primer pantalla del asistente de instalacin, como se muestra en la Figura 94. Instalacin del conector ODBC, pantalla de inicio.

116

Figura 94. Instalacin del conector ODBC, pantalla de inicio. Al hacer clic en el botn Next aparece la pantalla donde se selecciona el tipo de instalacin (Setup Type), en este caso se seleccion la opcin completa (Complete), que instala todas las facilidades del programa y requiere de mayor espacio en disco. Ver Figura 95. Instalacin del conector ODBC, seleccionar tipo de instalacin.

Figura 95. Instalacin del conector ODBC, seleccionar tipo de instalacin.

117

Enseguida aparece la pantalla donde indica al usuario que ya se esta preparado para instalar y le muestra las opciones seleccionadas. Se puede aceptar o regresar a cambiar opciones. Esto se ve en la Figura 96. Instalacin del conector ODBC, aceptar opciones de instalacin.

Figura 96. Instalacin del conector ODBC, aceptar opciones de instalacin. Al hacer clic en el botn Install se realiza la instalacin. Al terminar correctamente el proceso se muestra la pantalla que indica la instalacin exitosa. Ver ejemplo en la Figura 97. Instalacin del conector ODBC, fin de instalacin.

Figura 97. Instalacin del conector ODBC, fin de instalacin.

118

Al terminar la instalacin se puede verificar la lista de controladores ODBC instalados en el equipo. Como se muestra en la Figura 98. Verificar controlador ODBC instalado.

Figura 98. Verificar controlador ODBC instalado. Observar el controlador MySQL ODBC 5.1 Driver ya instalado. Recordar que este controlador permitir crear conexiones ODBC al DBMS MySQL para cualquier aplicacin instalada en este equipo. 4. Configurar una conexin ODBC particular a una base de datos. El Administrador de orgenes de datos ODBC, permite crear conexiones particulares mediante la opcin de crear DNS. En este caso particular se creara una conexin a la base de datos innovacin en el DBMS MySQL que esta instalado en el mismo equipo donde se encuentra instalado el software para desarrollo de la aplicacin. Claro que el servidor de base de datos puede estar en un equipo diferente al de la aplicacin, y la conexin se puede crear sin problemas si dichos equipos estn en una red. Entonces la base de datos se llama innovacin, el servidor MySQL tiene por nombre localhost y el usuario para hacer la conexin y que debe tener los permisos adecuados en la base de datos tiene como usuario y contrasea root/leonardo. El primer paso ser abrir el Administrador de orgenes de datos ODBC y activar la ficha DSN sistema, aqu seleccionar el botn de Agregar para crear un nuevo DSN, como se muestra en la Figura 99. Crear una nueva conexin ODBC.

119

Figura 99. Crear una nueva conexin ODBC.

En la pantalla de la Figura 99. Crear una nueva conexin ODBC., al hacer clic en el botn de Agregar aparece la pantalla que se muestra en la Figura 100. Seleccionar controlador para conexin ODBC.

Figura 100. Seleccionar controlador para conexin ODBC.

120

En la pantalla de la Figura 100. Seleccionar controlador para conexin ODBC., se debe seleccionar el controlador adecuado al DBMS a usar y hacer clic en el botn de Finalizar. Aparece la pantalla de la Figura 101. Proporcionar informacin para conexin ODBC, donde se deben proporcionar los datos para la conexin y crearla.

Figura 101. Proporcionar informacin para conexin ODBC. Una vez proporcionados los datos y probada la conexin, el botn de OK crea la conexin. Si esto tiene xito se debe mostrar en la lista de DSN sistema la conexin recin creada, como se muestra en la Figura 102. Ver conexin ODBC recin creada.

Figura 102. Ver conexin ODBC recin creada.

121

Notar que si es seleccionada una conexin se activan los botones de Quitar y Configurar, que permiten eliminar y modificar una conexin respectivamente. Aqu ya esta lista la conexin para ser usada por las diferentes aplicaciones que se encuentren en el equipo donde esta creada la conexin ODBC. 5. Usar la conexin en una aplicacin. En este caso se ejemplificar usando el software para desarrollo de aplicaciones Microsoft Visual Studio 2005. En el Microsoft Visual Studio 2005 (de ahora en adelante se abreviar como VS 2005), se cre un proyecto Web. Una vez creado el proyecto, se debe agregar una conexin ODBC hacia el servidor de base de datos (DBMS) MySQL. VS 2005 incluye la ventana Server Explorer. Mediante esta se pueden establecer conexiones a diversos DBMS. Esta ventana est a un lado de la caja de herramientas Toolbox. En la Figura 103. Ventana "Server Explorer" de Microsoft Visual Studio .NET, se muestra la ventana Server Explorer con algunas conexiones ya creadas. Ahora es necesario dentro del proyecto crear la conexin de la aplicacin (VS 2005) al servidor MySQL. Aunque en la Figura 103. Ventana "Server Explorer" de Microsoft Visual Studio .NET., ya se muestra configurado, se describir paso a paso como hacerlo.

Figura 103. Ventana "Server Explorer" de Microsoft Visual Studio .NET. En la ventana Server Explorer, seleccionar la opcin Data Connections y hacer clic con el botn derecho del ratn. En el men de contexto que aparece, seleccionar la opcin

122

Add Connection, como se muestra en la Figura 104. Agregar una nueva conexin de datos en Visual Studio .NET..

Figura 104. Agregar una nueva conexin de datos en Visual Studio .NET.

Enseguida aparece el asistente para configurar la conexin de base de datos. En la primer pantalla, si la fuente de datos es diferente a ODBC, presionar el botn Change para seleccionar la fuente de datos adecuada, como se ve en la Figura 105. Cambiar la fuente de datos de una conexin en Visual Studio .NET.

Figura 105. Cambiar la fuente de datos de una conexin en Visual Studio .NET.

123

Como resultado aparece la ventana donde debe seleccionarse la fuente de datos necesaria, en este caso una fuente de datos ODBC, como se muestra en la Figura 106. Seleccionar la nueva fuente de datos de una conexin en Visual Studio .NET.

Figura 106. Seleccionar la nueva fuente de datos de una conexin en Visual Studio .NET.

Una vez aceptada la opcin anterior aparece la pantalla que es mostrada en la Figura 107. Seleccionar la conexin ODBC como fuente de datos en Visual Studio .NET. En la pantalla de la Figura 107. Seleccionar la conexin ODBC como fuente de datos en Visual Studio .NET, verificar que est activada la opcin Use user or system data source name. En la lista de conexiones DSN disponibles seleccionar el DSN que se requiere usar (en este caso el DSN DSNSistemaMySQL). Recordar que este DSN es una conexin ODBC a la base de datos innovacin que esta en el DBMS MySQL. Proporcionar el nombre de usuario (User name) y contrasea (password), que tienen que ser iguales a los proporcionados cuando se cre el DSN, para este ejemplo: root/leonardo. Antes de presionar el botn de OK, probar la conexin con el botn de Test Connection, para asegurar que la conexin esta funcionando correctamente.

124

Figura 107. Seleccionar la conexin ODBC como fuente de datos en Visual Studio .NET. Si la conexin es creada correctamente, esta se debe visualizar en la ventana Server Explorer. Desde esta ventana se puede tener acceso a la base de datos para hacer consultas, editar datos, ver estructura de las tablas, etc. Ver Figura 108. Ver conexin de datos creada en Visual Studio .NET.

Figura 108. Ver conexin de datos creada en Visual Studio .NET.

125

Para poder visualizar la tabla proyectos en una pgina Web, es necesario agregar un objeto DataSet al proyecto. Para esto en el explorador de soluciones Solution Explorer abrir la carpeta App_Code del proyecto, hacer un clic con el botn derecho del Mouse y seleccionar en el men contextual la opcin para agregar un nuevo elemento Add New Item, donde se abre la pantalla que se muestra en la Figura 109. Agregar un nuevo "DataSet" en Visual Studio .NET.

Figura 109. Agregar un nuevo "DataSet" en Visual Studio .NET. En VS 2005, un objeto tipo DataSet permite almacenar datos para que pueden ser mostrados en objetos que despliegan datos para la aplicacin. Despus de presionar el botn para agregar el objeto DataSet, aparece la ventana para configurarlo, como se muestra en la Figura 110. Configurar un "DataSet", seleccionar conexin de datos. Observar en la Figura 110. Configurar un "DataSet", seleccionar conexin de datos., que es posible visualizar una lista de conexiones disponibles (solo si la conexin se cre como una Cadena de conexin (en ingles Connection String), que bsicamente es un texto con la informacin de la conexin. Las cadenas creadas como Cadena de conexin estn almacenadas en el archivo web.config del proyecto de Web. En caso contrario (que no se tenga almacenada la cadena de conexin), se puede crear aqu la conexin con el botn New Connection, que abre el asistente visto anteriormente para crear una nueva conexin de datos.

126

Figura 110. Configurar un "DataSet", seleccionar conexin de datos. Despus con el botn de siguiente Next aparece la pantalla que se muestra en la Figura 111. Configurar un "DataSet", seleccionar tipo de comando para el "TableAdapter".

Figura 111. Configurar un "DataSet", seleccionar tipo de comando para el "TableAdapter".

127

En la pantalla de la Figura 111. Configurar un "DataSet", seleccionar tipo de comando para el "TableAdapter", verificar que este seleccionada la opcin Use SQL statements, pues se escribir una consulta SQL que obtenga el contenido completo de la tabla. Al presionar el botn de Next > (siguiente) aparece la pantalla de la Figura 112. Configurar un "DataSet", escribir la consulta SQL para el "TableAdapter"..

Figura 112. Configurar un "DataSet", escribir la consulta SQL para el "TableAdapter".

En la pantalla de la Figura 112. Configurar un "DataSet", escribir la consulta SQL para el "TableAdapter"., se puede escribir la consulta SQL de manera directa, o bien entrar al constructor de consultas mediante el botn de Query Builder, que permite ir construyendo la consulta y probarla (algo muy conveniente, por los detalles de sintaxis). Una vez escrita la consulta y estando seguro de que es correcta, con el botn de siguiente Next se pasa a la pantalla de la Figura 113. Configurar un "DataSet", seleccionar mtodos a generar para el "TableAdapter".

128

Figura 113. Configurar un "DataSet", seleccionar mtodos a generar para el "TableAdapter"

Revisar que las opciones seleccionadas en la Figura 113. Configurar un "DataSet", seleccionar mtodos a generar para el "TableAdapter", se apliquen y presionar el botn de siguiente Next, donde se mostrar la Figura 114. Configurar un "DataSet", mostrando resultados de la configuracin.

Figura 114. Configurar un "DataSet", mostrando resultados de la configuracin.

En la pantalla de la Figura 114. Configurar un "DataSet", mostrando resultados de la configuracin., se comprueba la correcta configuracin y funcionalidad. Notar la palabra Adapter, en VS 2005, un adaptador de datos es un objeto que permite definir la tabla o la consulta para extraer los datos de la base de datos. El adaptador pasa esos datos al objeto DataSet quien los almacena para la aplicacin y los hace disponibles a objetos como los GridView.

129

Una vez creado el DataSet, el paso siguiente ser visualizar la tabla proyectos en una pgina Web. Para esto se agrega al proyecto una nueva pgina tipo Web Forms (que tienen extensin .aspx). Para esto se selecciona en el Solution Explorer la raz del proyecto o una carpeta (o subcarpeta) del proyecto. Como se muestra en la Figura 115. Agregar una "Web Form" en Visual Studio .NET..

Figura 115. Agregar una "Web Form" en Visual Studio .NET.

Una vez creada la pgina, esta se puede editar como cualquier documento HTML. En la pgina usando la vista de diseo, agregar desde el Toolbox y la ficha Data un objeto tipo ObjectDataSource. Como se muestra en la Figura 116. Agregar un objeto "ObjectDataSource" a una "WebForm".

130

Figura 116. Agregar un objeto "ObjectDataSource" a una "WebForm". Hacer clic el la opcin para configurar la fuente de datos Configure Data Source. Al hacerlo se muestra la pantalla que aparece en la Figura 117. Configurar un "ObjectDataSource", seleccionar el objeto "Business Object".

Figura 117. Configurar un "ObjectDataSource", seleccionar el objeto "Business Object".

131

En la pantalla de la Figura 117. Configurar un "ObjectDataSource", seleccionar el objeto "Business Object"., se debe seleccionar el DataSet adecuado (para este ejemplo el DataSet5.TableAdapters) y hacer clic en el botn de Next. Se mostrar la pantalla que se muestra en la Figura 118. Configurar un "ObjectDataSource", seleccionar los mtodos que regresan datos. Observar aqu que es importante seleccionar el objeto DataSet adecuado pero que incluye su adaptador de tabla (TableAdapters).

Figura 118. Configurar un "ObjectDataSource", seleccionar los mtodos que regresan datos.

En la pantalla de la Figura 118. Configurar un "ObjectDataSource", seleccionar los mtodos que regresan datos., solo se necesita terminar el asistente con el botn adecuado Finish. Con lo que el objeto ObjectDataSource que configurado completamente. Este objeto estar relacionado con el DataSet y el Adapter configurados previamente. Enseguida agregar a la pgina un objeto tipo GridView, como se muestra en la Figura 119. Agregar un objeto "GridView" a una "Web Form".

132

Figura 119. Agregar un objeto "GridView" a una "Web Form". En el asistente para configurar el objeto GridView, observar la propiedad para escoger la fuente de datos Choose Data Source, aqu debe seleccionarse el nombre del objeto ObjectDataSource recin agregado en la misma pgina ObjectDataSource1. Al hacer lo anterior se muestra la pantalla de la Figura 120. Configurar un objeto "GridView", seleccionar su fuente de datos.

Figura 120. Configurar un objeto "GridView", seleccionar su fuente de datos.

Observar en la Figura 120. Configurar un objeto "GridView", seleccionar su fuente de datos., que el objeto GridView incluye ahora los nombres de los campos de la tabla de proyectos, y esta terminada la configuracin completa. Al guardar todos los archivos del proyecto Web recin creados y visualizar la pgina en el navegador Web se ver el

133

resultado. Que se muestra en la Figura 121. Resultado de ejecutar la "Web Form" de acceso a la base datos.

Figura 121. Resultado de ejecutar la "Web Form" de acceso a la base datos.

En este ejemplo solo se muestra el contenido de la tabla. Pero de manera muy similar se pueden agregar pginas que permitan diversas operaciones en la base de datos, tales como la edicin de datos (altas, bajas y actualizaciones), bsqueda de informacin, generacin de contenido dinmico en las pginas, etc. Por ejemplo, el objeto GridView se puede configurar para permitir la edicin de datos, y el objeto DetailsView permite hacer alta de nuevos registros. El objeto GridView tiene mltiples opciones para configurar su aspecto y su funcionalidad. Respecto a su aspecto se pueden mencionar opciones para: Definir colores. Tipos y tamaos de letra. Nombres de columnas. Columnas adicionales. Diseos predefinidos. Respecto a la funcionalidad del objeto GridView, algunas de ellas son: Definir capacidad para ordenar por columnas.

134

Edicin de datos. Paginacin.

3.2 ADO.NET. ADO.NET es un conjunto de componentes de software de la empresa Microsoft. Los programadores lo usan para el desarrollo de aplicaciones que acceden a datos y a servicios de datos. Es una parte de la biblioteca de clases base que estn incluidas en el Microsoft .NET Framework. Enseguida se dan ms detalles de este tema.

3.2.1 Terminologa y conceptos. ADO.NET, significa en ingls ActiveX Data Objects .NET, que en espaol se puede traducir como Objetos de Datos ActiveX de la tecnologa .NET. Forma parte de la biblioteca de clases de Microsoft .NET Framework. El sitio Web MSDN de la compaa Microsoft (http://msdn.microsoft.com/eses/library/e80y5yhx(VS.80).aspx), describe a ADO.NET como: ADO.NET es un conjunto de clases que exponen servicios de acceso a datos para el programador de .NET. ADO.NET ofrece abundancia de componentes para la creacin de aplicaciones de uso compartido de datos distribuidas. Constituye una parte integral de .NET Framework y proporciona acceso a datos relacionales, XML y de aplicaciones. ADO.NET satisface diversas necesidades de desarrollo, como la creacin de clientes de base de datos de aplicaciones para usuario y objetos empresariales de nivel medio que utilizan aplicaciones, herramientas, lenguajes o exploradores de Internet. Tambin se puede describir a ADO:NET como un modelo de acceso a datos para las aplicaciones .NET. En cierto sentido ADO.NET representa la ms reciente evolucin de la tecnologa ADO. Sin embargo, ADO.NET introduce cambios mayores e innovaciones orientadas principalmente a la naturaleza de las aplicaciones Web, tales como bajo acoplamiento y ambientes desconectados. Uno de los principales cambios que introduce ADO.NET es la sustitucin del objeto RecordSet de ADO, con una combinacin de objetos de ADO.NET, tales como DataSet, DataTable, DataAdapter y DataReader. ActiveX, es modelo de objeto de componente (COM) desarrollado por Microsoft para sistemas operativos Windows. Usando COM en tiempo de ejecucin, los desarrolladores pueden crear componentes de software que realicen una funcin particular o un conjunto de funciones. Algn software particular puede entonces estar formado por uno o ms componentes con el objeto de proporcionar la funcionalidad que se espera de este. Muchas de las aplicaciones de Microsoft Windows, tales como Internet Explorer, Office, Visual Studio, etc., usan controles ActiveX para construir su conjunto de facilidades y encapsular su

135

funcionalidad. De esta manera, la funcionalidad de los controles ActiveX pueden ser embebidos en otras aplicaciones. Internet Explorer tambin permite que los controles ActiveX puedan ser embebidos dentro de pginas Web. En resumen, un control ActiveX es un componente de software reutilizable el cul implementa una interfase estndar que le permite comunicarse con la aplicacin y con otros controles. Un control ActiveX no es una aplicacin completa, sino que proporciona un pequeo bloque de construccin que puede ser compartido por software diferente. Microsoft .NET Framework. Es un componente de software que puede ser aadido al sistema operativo Windows. Consta de una biblioteca de clases muy grande, que contienen soluciones predefinidas para necesidades generales de la programacin de aplicaciones, y administra la ejecucin de los programas escritos especficamente para el Framework. Las soluciones predefinidas que forman la librera de clases base del Framework cubren un rango muy amplio de necesidades de programacin en gran nmero de reas, tales como: Interfases de usuario. Acceso a datos. Conectividad a bases de datos. Criptografa. Desarrollo de aplicaciones Web. Algoritmos numricos. Comunicaciones en red. La librera de clases es usada por los programadores, quienes combinan esta con su propio cdigo para producir aplicaciones. Los programas escritos para el .NET Framework se ejecutan en un ambiente de software que administra los requerimientos de tiempo de ejecucin de los programas. Tambin siendo parte del .NET Framework, este ambiente de tiempo de ejecucin es conocido como el Common Language Runtime (CLR) que puede traducirse como Entorno comn de ejecucin para lenguajes. El CLR provee la funcionalidad de una mquina virtual de la aplicacin para que los programadores no necesiten considerar las capacidades especficas del CPU que ejecutar el programa. El CLR tambin proporciona otros servicios importantes tales como la seguridad, administracin de memoria y manejo de excepciones. La librera de clases y el CLR juntos, componen el .NET Framework. Como cualquier software, se han liberado diferentes versiones de .NET Framework, iniciando con la versin 1.0 liberada en el ao 2002, y al momento de hacer este escrito la mas reciente es la versin 3.5 liberada a finales del ao 2007. Un diagrama de la arquitectura bsica del .NET Framework se muestra en la Figura 122. Arquitectura bsica de .NET Framework.

136

Figura 122. Arquitectura bsica de .NET Framework.

Analizando la arquitectura, de abajo hacia arriba. Como base se encuentra el sistema operativo. Observar los dos componentes bsicos del .NET Framework (CLR y la librera de clases). La librera de clases es muy extensa y en esta imagen se muestran algunos componentes de la librera que se describen de manera breve: ASP.NET parte de la librera que proporciona clases, interfases, etc., para el desarrollo de aplicaciones para Web. ADO.NET, para el acceso a datos. WinForms, para el desarrollo de aplicaciones que se ejecutarn en ambientes de Windows. Y por ltimo en la capa superior y sin formar parte del .NET Framework se encuentra la aplicacin, que son los programas que interactan con el usuario y pueden ser escritos en diferentes lenguajes de programacin. Se mencionan algunos lenguajes como Visual BASIC (VB), C#, Perl y COBOL.

3.2.2 Componentes disponibles. ADO.NET tiene una gran cantidad de clases que le permiten acceder y administrar datos. En la literatura se reporta a ADO.NET con una arquitectura con dos partes principales: 1. El proveedor de datos (Data Provider). Contiene clases que permiten el acceso a la fuente de datos. Dentro de las clases principales se pueden mencionar: Connection. Proporciona una conexin para comunicarse con la fuente de datos.

137

Command. Se usa para realizar alguna accin en la base de datos, como lectura, actualizacin o borrado de datos. Normalmente son sentencias SQL o la ejecucin de un procedimiento almacenado. Parameter. Permite especificar un parmetro simple para un objeto de la clase command. Por ejemplo, para un procedimiento almacenado. DataAdapter. Funciona como un puente para transferir datos entre una fuente de datos y un objeto de la clase DataSet. DataReader. Es una clase que se usa para procesar de manera eficiente una lista grande de resultados.

2. DataSets. Es un grupo de clases que permiten describir una simple base de datos relacional en memoria. Las clases de este grupo estn organizadas en una jerarqua de contencin. Y se describen enseguida. DataSet. Clase que permite representar un esquema (o una base de datos completa o un subconjunto de esta). Puede contener tablas y sus relaciones. o DataTable. Clase que permite representar una sola tabla de la base de datos. Tiene un nombre, filas y columnas. DataView. Permite el tener el equivalente a una vista de la base de datos. Toma como base un objeto de la clase DataTable, permite ordenar datos y aplicar filtros sobre los datos. DataColumn. Representa una columna de una tabla, incluye su nombre y tipo. DataRow. Representa una sola fila en la tabla. Permite leer y actualizar los valores de esa fila. Permite recuperar tambin cualquier fila que este relacionada con la fila original por medio de una relacin clave primaria / clave fornea. DataRowView. Representa una sola fila de un DataView. o DataRelation. Permite establecer una relacin entre las tablas, tales como una relacin clave primaria / clave fornea. Esto permite al DataRow la funcionalidad de recuperar filas relacionadas. o Constraint. Describe una propiedad de la base de datos que se debe cumplir. Por ejemplo, que los valores de una clave primaria sean nicos. Un diagrama general que muestra las relaciones entre las principales clases se muestra en la Figura 123. Clases principales de .NET Framework para bases de datos.

138

Figura 123. Clases principales de .NET Framework para bases de datos. Un DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades Connection y Command han sido iniciadas. Observar que Command y DataReader (usando a Connection) pueden proveer directamente con datos a los consumidores. Siempre el acceso a la fuente de datos es por medio de Connection. Como ejemplos de consumidores de datos de mencionan WinForm (formas para aplicaciones de Windows) y WebForm (formas para aplicaciones de Web). Otra manera de visualizar la arquitectura de ADO.NET, reportada en la biblioteca MSDN de Microsoft se muestra en la Figura 124. Arquitectura de ADO.NET.

Figura 124. Arquitectura de ADO.NET.

139

De la Figura 124. Arquitectura de ADO.NET., observar las dos partes principales de la arquitectura (el Data Provider en la figura como Proveedor de datos de .NET Framework- y el DataSet). Notar que el DataAdapter puede contener comandos de manipulacin de datos. En la figura se indica la estructura jerrquica de las clases contenidas en el DataSet. Se resalta que el DataSet usa de manera interna el formato XML para representar los datos y de esta manera puede fcilmente leer y escribir datos en ese formato. Desde el DataSet (y pasando por el DataAdapter) es posible actualizar la base de datos o guardar su contenido a XML (con opcin de crear tambin un esquema XSD). Tambin es posible llenar el DataSet desde archivos XML, esto es muy til cuando se usan servicios Web, computacin distribuida, y aplicaciones conectadas ocasionalmente. Por experiencia propia el uso de los DataSet, es fcil y til, guardar y escribir su contenido como XML. Internamente los DataSet representan sus datos en formato XML. Por ejemplo, en una aplicacin de Web, el usuario final puede recuperar datos en formato XML (recordar que es un formato estndar para compartir informacin) y los puede procesar. Un DataSet, es la evolucin de la clase RecordSet mencionado mas adelante, el DataSet es una clase con ms propiedades y mtodos, lo que deriva en mayor funcionalidad y flexibilidad. Enseguida se describirn las clases de ADO.NET mencionadas en el temario. Con la observacin de que no son todas las disponibles (revisarlas para cada versin particular de .NET Framework). Tambin observar que existen clases ms recientes, por ejemplo la clase RecordSet ha sido extendida por la clase DataSet.

3.2.2.1 Connection. Proporciona una conexin para comunicarse con la fuente de datos y administrar las transacciones en una base de datos. Los comandos viajan por las conexiones y devuelven conjuntos de resultados en forma de secuencias que puede leer un objeto DataReader o que se pueden insertar en un objeto DataSet.

3.2.2.2 Command. Para emitir comandos SQL a una base de datos, y ejecutar procedimientos almacenados. Los comandos contienen la informacin que se enva a una base de datos y se representan mediante clases especficas de un proveedor, como SQLCommand (clase que se usa cuando el proveedor de datos es Microsoft SQL Server). Un comando podra ser una llamada a un procedimiento almacenado, una instruccin UPDATE o una instruccin que devuelve resultados. Tambin es posible utilizar parmetros de entrada o de resultados y devolver valores como parte de la sintaxis del comando.

140

3.2.2.3 Recordsource. En ADO.NET, RecordSource se refiere ms bien a una propiedad de las clases de ADO.NET que las vinculan con su fuente de datos (o registros). En la librera MSDN se describe a RecordSource como: La propiedad RecordSource especifica el origen de los registros accesibles a travs de los controles enlazados del formulario En ADO (ActiveX Data Objects) que es el antecedente de ADO.NET, la funcionalidad para contar con datos para las aplicaciones la proporciona la clase RecordSet. En ADO.NET esta funcionalidad es provista y ampliada por la clase DataSet. La clase RecordSet, representa el conjunto entero de registros de una tabla base o el resultado de un comando ejecutado. En el momento de la ejecucin, el objeto RecordSet hace referencia a un solo registro dentro del conjunto y se conoce como el registro actual. Se usan objetos RecordSet para manipular datos de un proveedor de datos (SQL Server, Oracle, MySQL, etc.). Cuando se usa el modelo ADO, los datos se manipulan casi completamente mediante objetos RecordSet. Un objeto RecordSet consiste de registros (filas) y campos (columnas). Dependiendo de la funcionalidad soportada por el proveedor, es posible que algunos mtodos y propiedades de RecordSet no estn disponibles. La funcionalidad de RecordSet comparada con la de DataSet es ms limitada, por ejemplo en un RecordSet solo se pueden representar un solo conjunto de registros (una tabla o resultado de una consulta), mientras que en un DataSet es posible almacenar una base de datos completa, relaciones y restricciones de integridad. An ms, un DataSet se puede alimentar con fuentes de datos diversas. Por lo anterior considero mas adecuado describir aqu la clase DataSet. En la librera MSDN de Microsoft se describe a la clase DataSet de la siguiente manera: El objeto DataSet es esencial para admitir escenarios de datos distribuidos de ADO.NET sin mantener una conexin. El DataSet es una representacin residente en memoria de datos que proporciona un modelo de programacin relacional coherente independientemente del origen de datos. Se puede utilizar con mltiples y distintos orgenes de datos, con datos XML o para administrar datos locales de la aplicacin. El DataSet representa un conjunto completo de datos entre los que se incluyen tablas relacionadas, restricciones y relaciones entre las tablas. En la misma librera MSDN de Microsoft, se muestra el modelo de objeto de la clase DataSet mediante la Figura 125. Modelo de objeto de la clase "DataSet".

141

Figura 125. Modelo de objeto de la clase "DataSet".

Los mtodos y objetos contenidos en un DataSet son coherentes con los del modelo de base de datos relacional. El DataSet tambin puede persistir y volver a cargar su contenido como XML y su esquema como esquema XSD (Lenguaje de definicin de esquemas XML). Enseguida se describen las clases contenidas en la clase DataSet: DataTableCollection

Un DataSet de ADO.NET contiene una coleccin de cero o ms tablas representadas por objetos DataTable. La DataTableCollection contiene todos los objetos DataTable de un DataSet. Un DataTable se define en el espacio de nombres System.Data y representa una nica tabla de datos residentes en memoria. Contiene una coleccin de columnas representadas por una DataColumnCollection y restricciones representadas por una ConstraintCollection que, juntas, definen el esquema de la tabla. Un DataTable tambin contiene una coleccin de filas representadas por la DataRowCollection, que contiene los datos de la tabla. Junto con su estado actual, un DataRow conserva tanto la versin original como la actual para identificar los cambios realizados en los valores almacenados en la fila.

142

DataRelationCollection

Un DataSet contiene relaciones en su objeto DataRelationCollection. Una relacin, representada por el objeto DataRelation, asocia las filas de un DataTable con las filas de otro DataTable. Es anlogo a una ruta de unin que podra existir entre las columnas de claves externas y principales en una base de datos relacional. Un DataRelation identifica columnas coincidentes en dos tablas de un DataSet. Las relaciones permiten pasar de una tabla a otra dentro de un mismo DataSet. Los elementos esenciales de un DataRelation son el nombre de la relacin, el nombre de las tablas relacionadas y las columnas relacionadas de cada tabla. Se pueden establecer relaciones con ms de una columna por tabla, para lo que debe especificar una seleccin de objetos DataColumn como columnas clave. Cuando se agrega una relacin al DataRelationCollection, se puede agregar tambin un UniqueKeyConstraint y un ForeignKeyConstraint para imponer restricciones de integridad cuando se realicen cambios en los valores de las columnas relacionadas. ExtendedProperties

El DataSet (as como el DataTable y el DataColumn) tiene una propiedad ExtendedProperties. ExtendedProperties es un PropertyCollection en el que se puede colocar informacin personalizada, como la instruccin SELECT que sirve para generar el conjunto de resultados, o una marca de fecha y hora de cundo se generaron los datos. La coleccin ExtendedProperties se conserva con la informacin del esquema del DataSet (as como el DataTable y el DataColumn).

3.2.2.4 Error. Error como objeto est definido en ADO, en este contexto, el objeto Error contiene detalles acerca de los errores de acceso a datos que pertenecen a una nica operacin relacionada con el proveedor de datos. En ADO, el objeto Error es parte de la coleccin Errors, que a su vez pertenece al objeto Connection, tal como se muestra en la Figura 126. Ubicacin del objeto "Error" de ADO.

Figura 126. Ubicacin del objeto "Error" de ADO.

Cualquier operacin donde participan objetos ADO puede generar uno o ms errores del proveedor. Cuando cada error ocurre, uno o ms objetos Error son colocados en la coleccin Errors que pertenece al objeto Connection. Cuando otra operacin ADO genera

143

un error, la coleccin Errors es limpiada, y un nuevo conjunto de objetos Error son colocados en la coleccin Errors. Cabe aclarar que cada objeto Error representa un error del proveedor particular, no un error de ADO. Los errores de ADO se pasan al mecanismo de control de excepciones de ejecucin. Por ejemplo, en Microsoft Visual BASIC, la presencia de un error concreto de ADO, desencadena un evento On Error y aparecer en el objeto Err. Es posible leer las propiedades de un objeto Error para obtener detalles especficos sobre cada error, dichas propiedades se muestran en la Tabla 8. Propiedades del objeto "Error".

Nombre propiedad. Description Number

de

la Descripcin.

Contiene el texto descriptivo del error. Contiene un valor entero largo que corresponde al valor numrico constante del error. Source Identifica el objeto que ha provocado el error. Esto es muy til cuando se tienen varios objetos Error en la coleccin Errors despus de una peticin a un origen de datos. SQLState, NativeError Son dos propiedades que proporcionan informacin desde orgenes de datos SQL. Tabla 8. Propiedades del objeto "Error".

En ADO.NET el manejo de los errores es algo diferente a ADO. En ambos casos, los errores estn asociados al objeto Connection. En ADO.NET el objeto Connection tiene dos eventos que se pueden utilizar para recuperar mensajes informativos de un origen de datos o para determinar si ha cambiado el estado de un objeto Connection. Para esto ver la Tabla 9. Propiedades del objeto "Connection" de ADO.NET.

Nombre del evento. InfoMessage

Descripcin. Se produce cuando se devuelve un mensaje informativo desde un origen de datos. Los mensajes informativos son aquellos procedentes de orgenes de datos que no inician una excepcin. StateChange Se produce cuando cambia el estado del objeto Connection. Tabla 9. Propiedades del objeto "Connection" de ADO.NET. El evento InfoMessage recibe un objeto InfoMessageEventArgs que contiene en su propiedad Errors una coleccin de los mensajes del origen de datos. Se puede consultar los objetos Error de esa coleccin para conocer el nmero de error y el texto del mensaje, as como el origen del error. El proveedor de datos de .NET Framework para SQL Server incluye asimismo datos acerca de la base de datos, el procedimiento almacenado y el nmero de lnea donde se origin el mensaje.

144

El evento StateChange se produce cuando se cambia el estado de un objeto Connection. El evento StateChange recibe StateChangeEventArgs que permiten determinar el cambio de estado de Connection por medio de las propiedades OriginalState y CurrentState. La propiedad OriginalState es una enumeracin ConnectionState que indica el estado del objeto Connection antes del cambio. CurrentState es una enumeracin ConnectionState que indica el estado del objeto Connection despus del cambio. En ADO.NET Error es tambin una propiedad de ambas clases, por ejemplo en las clases Console, HttpContext, IDataErrorInfo, PassportIdentity y SystemIcons.

3.2.3 Prototipo de aplicaciones con conectividad a bases de datos. En este caso se ejemplificar la instalacin y configuracin de un controlador ADO.NET para hacer la conexin de una aplicacin Web hecha en Microsoft Visual Studio 2005 que usar una base de datos que estar en el DBMS MySQL Server 5.0 De manera similar a como se explicaron los pasos para establecer una conexin de una aplicacin a una base de datos mediante ODBC, se explicarn aqu los pasos para establecer y usar la conexin de la aplicacin a una base de datos mediante el conector ADO.NET. Pasos generales. 1. Instalar primero el software para la aplicacin (Microsoft Visual Studio 2005) y el DBMS a usar (MySQL Server 5.0). 2. Descargar del sitio de MySQL.com el controlador ADO.NET, en este caso el Connector/Net. Que se obtuvo de la pgina http://dev.mysql.com/downloads/connector/ , en esta pgina seleccionar la opcin Connector/Net como se muestra en la Figura 127. El conector .NET en la pgina de descarga de conectores de MySQL.

Figura 127. El conector .NET en la pgina de descarga de conectores de MySQL.

145

Al seleccionar la opcin de Connector/Net se muestra la pgina donde se puede seleccionar el tipo de descarga, como se muestra en la Figura 128. Pgina de descarga del conector .NET 5.1.

Figura 128. Pgina de descarga del conector .NET 5.1. Notar las tres opciones de descarga Downloads, la segunda opcin Windows Binaries (ZIP) es la ms sencilla para instalar. Esta incluye un software que asiste en la instalacin. En el momento de escribir este texto, la opcin del conector ADO.NET es la 5.1.6. Observar que se puede seleccionar la opcin de descargar en este momento (Download) o bien el de seleccionar un servidor de descarga. Al seleccionar la opcin para descarga, aparece la pantalla de descarga que se muestra en la Figura 129. Seleccionar tipo de archivo de descarga del conector .NET 5.1.

146

Figura 129. Seleccionar tipo de archivo de descarga del conector .NET 5.1. En la pantalla de dilogo de Descarga de archivo hacer clic en el botn de Guardar para almacenar el conector en la computadora del usuario. Al hacer esto, se le solicita al usuario que indique ubicacin donde se almacenar el archivo e inicia la descarga del conector, y se muestra la pantalla que indica el avance de la descarga, como se muestra en la Figura 130. Avance de descarga del conector .NET 5.1.

Figura 130. Avance de descarga del conector .NET 5.1.

3. Instalar el controlador ADO.NET en el equipo. Una vez descargado el archivo, se ejecuta el programa de instalacin (archivo MySql.Data), como se muestra en la Figura 131. Instalar el conector .NET, ejecutar archivo de instalacin.

147

Figura 131. Instalar el conector .NET, ejecutar archivo de instalacin.

Al ejecutar el archivo descargado, se pregunta al usuario la confirmacin para la instalacin. Despus de aceptarla con el botn Next, aparece la siguiente pantalla del asistente de instalacin, como se muestra en la Figura 132. Instalar el conector .NET, seleccionar tipo de instalacin.

Figura 132. Instalar el conector .NET, seleccionar tipo de instalacin.

148

En este caso se seleccion la opcin de instalacin completa (botn Complete). Y se muestra la pantalla de Figura 133. Instalar el conector .NET, preparado para instalar. .

Figura 133. Instalar el conector .NET, preparado para instalar.

En esta pantalla ya se tiene la informacin para instalar el programa, y al hacer clic en el botn Install se inicia la instalacin. Enseguida se muestra una pantalla (ver Figura 134. Instalar el conector .NET, avance de instalacin) que indica el avance de la instalacin.

Figura 134. Instalar el conector .NET, avance de instalacin.

149

Al terminar el proceso de instalacin se muestra la pantalla que indica el fin del proceso, como se muestra en la Figura 135. Instalar el conector .NET, fin de instalacin.

Figura 135. Instalar el conector .NET, fin de instalacin.

Una vez terminada la instalacin, verificar en la opcin de Inicio | Programas | MySQL que esta instalado el conector, como se muestra en la Figura 136. Ver conector .NET instalado.

Figura 136. Ver conector .NET instalado. Observar en este caso el programa con el nombre de MySQL Connector Net 5.1.6, aqu se encuentra entre otras cosas, una documentacin extensa del producto que es adecuado revisar. En la Figura 137. Ver documentacin instalada del conector .NET, se muestra un ejemplo de la documentacin existente.

150

Figura 137. Ver documentacin instalada del conector .NET.

En la pantalla de la Figura 137. Ver documentacin instalada del conector .NET., donde se muestra una parte de la ayuda se despliega la ayuda para establecer una conexin de base de datos de Microsoft Visual Studio.NET hacia el DBMS MySQL, usando el conector recin instalado. Que es el paso que sigue. Por lo anterior es muy importante revisar y apoyarse en la documentacin del producto, lo que ayudar a hacer un uso ms eficiente de este. La documentacin normalmente incluye ejemplos y cdigo que se podrn aplicar al desarrollo de una aplicacin. Una revisin general de la documentacin proporciona al desarrollador una visin de las posibilidades del software. 4. Realizar la conexin de base de datos en una aplicacin. En este caso se ejemplificar usando el software para desarrollo de aplicaciones Microsoft Visual Studio 2005. En el Microsoft Visual Studio 2005 (VS 2005), se cre un proyecto Web. Una vez creado el proyecto, se debe agregar una conexin ADO.NET hacia el servidor de base de datos (DBMS) MySQL. Para realizar la conexin se siguieron los pasos indicados en el manual de documentacin del conector. Para ver ms detalles y solucionar posibles problemas ver dicha documentacin.

151

Recordar que VS 2005 incluye la ventana Server Explorer. Mediante esta se pueden establecer conexiones a diversos DBMS. Esta ventana est a un lado de la caja de herramientas Toolbox. El primer paso ser crear una nueva conexin en la ventana Server Explorer, como se mostr en la Figura 104. Agregar una nueva conexin de datos en Visual Studio .NET.. Aparece la primer pantalla para crear la nueva conexin, como se mostr en la Figura 105. Cambiar la fuente de datos de una conexin en Visual Studio .NET, aqu es necesario presionar hacer clic en el botn Change para cambiar la fuente de datos, si en la opcin Data Source no aparece la base de datos MySQL Database. Al hacer esto, se muestra la pantalla de la Figura 138. Seleccionar la base de datos MySQL como fuente de datos.

Figura 138. Seleccionar la base de datos MySQL como fuente de datos.

En la pantalla de la Figura 138. Seleccionar la base de datos MySQL como fuente de datos, seleccionar en la opcin Data source como fuente de datos la base de datos de MySQL MySQL Database y despus hacer clic en el botn de OK. Esta opcin aparece aqu por la instalacin previa del conector en el equipo. Con lo que aparece la pantalla para configurar la conexin al servidor de MySQL. Como se muestra en la Figura 139. Configurar y probar la conexin a la base de datos de MySQL.

152

Figura 139. Configurar y probar la conexin a la base de datos de MySQL.

En la pantalla de la Figura 139. Configurar y probar la conexin a la base de datos de MySQL., se deben proporcionar los datos necesarios para establecer la conexin de base de datos al servidor de MySQL, Es recomendable probar la conexin mediante el botn de Test Connection para asegurar que los datos son correctos y se establece la conexin. Una vez hecho lo anterior, hacer clic en el botn de OK para crear la conexin. Al crear la conexin verificar que ya esta incluida en la lista de conexiones del explorador de servidores como se muestra en la Figura 140. Ver la conexin a MySQL en el "Server Explorer" de Visual Studio .NET.

Figura 140. Ver la conexin a MySQL en el "Server Explorer" de Visual Studio .NET.

Una vez establecida la conexin esta se puede usar en la aplicacin. Es el mismo procedimiento que ya se trat en el tema de ODBC. En este caso se ejemplificar para mostrar el contenido de la tabla proyectos de la base de datos innovacin de MySQL en una aplicacin Web.

153

Como es el mismo procedimiento visto antes, solo se resumirn los pasos, para detalles ver el tema 5. Usar la conexin en una aplicacin dentro del tema de ODBC 3.1.3 Instalacin y configuracin del driver acorde al gestor de bases de datos. Los pasos se resumen de la siguiente manera: 1. Agregar un nuevo objeto DataSet al proyecto, configurarlo para que use la conexin a MySQL recien creada y definir una consulta SQL que permita obtener todos los datos de la tabla proyectos de la base de datos innovacin de MySQL. 2. Agregar al proyecto Web una nueva pgina tipo Web Forms. 3. En la pgina Web agregar un objeto de la clase ObjectDataSource de la ficha Data de la caja de herramientas (ToolBox) de Visual Studio. 4. Configurar el objeto ObjectDataSource para asociarlo con el objeto DataSet recin creado. Recordar asociarlo al DataSet ms el TableAdapter. 5. Agregar a la pgina Web un objeto GridView de la misma ficha Data del ToolBox. 6. Configurar el objeto GridView y mediante la propiedad Data Source asociarlo al objeto ObjectDataSource que se agreg y configur para esta pgina. 7. Salvar los archivos y ejecutar el proyecto.

3.3 JDBC. JDBC significa Java Database Connectivity o en castellano Conectividad de base de datos para Java. JDBC es una API que permite ejecutar operaciones en bases de datos usando el lenguaje Java. JDBC es independiente del sistema operativo donde se ejecuta y de la base de datos que se accede. Esta enfocado a bases de datos relacionales y utiliza el dialecto de SQL del DBMS en uso. A continuacin se explican mas detalles sobre JDBC y conceptos relacionados. 3.3.1 Terminologa y conceptos. En este tema se describen conceptos de base sobre JDBC y temas relacionados. Java. Es un lenguaje de programacin orientado a objetos desarrollado por la empresa Sun Microsystems. Su sintaxis es muy parecida a C y C++, sin embargo su modelo de objetos es ms simple y no incluye herramientas de bajo nivel. Una caracterstica sobresaliente del lenguaje es ser independiente de la plataforma, esto permite que un programa Java escrito en una plataforma pueda ser ejecutado sin necesidad de cambios en otras plataformas. Existen actualmente muchos IDE (Ambiente de desarrollo integrado) para Java, algunos son comerciales, otros son gratuitos y otros como software libre. Para mencionar algunos de ellos: NetBeans, JBuilder y Eclipse.

154

JSP. JSP significa Java Server Pages o en castellano Pginas de Servidor de Java. Permite desarrollar aplicaciones para Web en el lenguaje Java y la lgica de la aplicacin se ejecuta en el servidor Web. Permite generar contenido dinmico para Web, en forma de documentos HTML, XML o de otros tipos. JSP permite el uso de cdigo Java mediante scripts. Tambin se puede usar algunas acciones JSP predefinidas mediante etiquetas. JSTL. JSTL significa JavaServer Pages Standard Tag Library y es una tecnologa que es un componente de Java EE. Extiende las JSP proporcionando cuatro libreras de etiquetas (Tag Libraries) con utilidades ampliamente utilizadas en el desarrollo de pginas web dinmicas. Estas libreras de etiquetas extienden de la especificacin de JSP (la cal a su vez extiende de la especificacin de Servlet). Su API permite adems desarrollar libreras de etiquetas personalizadas. Las libreras englobadas en JSTL son: core, iteraciones, condicionales, manipulacin de URL y otras funciones generales. xml, para la manipulacin de XML y para XML-Transformation. sql, para gestionar conexiones a bases de datos. fmt, para la internacioalizacin y formateo de las cadenas de caracteres como cifras.

JavaBeans. Es un modelo de componentes creado por la empresa Sun Microsystems para la construccin de las aplicaciones en Java. Por este medio se pueden encapsular varios objetos en un nico objeto, para hacer uso de un solo objeto en vez de varios. Son componentes de software reutilizables que se pueden manipular visualmente en una herramienta de construccin. Applet. Es un programa escrito en el lenguaje Java y que se ejecuta dentro del explorador Web, es decir se ejecuta del lado del cliente. Para ejecutarse requiere de la mquina virtual de Java (JVM). Proporcionan facilidades interactivas que no las puede proporcionar HTML. Paquete de Java. Un paquete (package) de Java es un mecanismo para organizar las clases de Java dentro de espacios de nombres. Pueden ser almacenados en archivos comprimidos llamados archivos JAR, lo que permite que las clases se descarguen en grupo de una manera ms rpida en lugar de una a la vez. Un paquete esta formado por clases (tambin interfases y otros elementos) de una cierta categora o que proporcionan una funcionalidad similar. Por ejemplo, el paquete de Java java.sql contiene clases e interfases que se requieren para trabajar con bases de datos. Un paquete Java puede contener los siguientes elementos: otros paquetes, clases, interfases, tipos enumerados y anotaciones.

155

Archivo .jar de Java. Un archivo .jar (por Java Archive) de Java se utiliza para agregar muchos archivos en uno solo. Generalmente se usa para distribuir clases de Java y los metadatos asociados. Los archivos .jar estn basados en el formato de archivos ZIP (es un formato para almacenamiento y compresin de datos). Los archivos .jar se pueden crear y extraer mediante el comando jar que esta incluido en el JDK (Java Development Kit). Interfase de Java. En Java una interface (trmino en ingls) es una clase abstracta pura, es decir donde todos los mtodos son abstractos (no se implementa ninguno). Sirve para establecer la forma de una clase, que incluye: atributos, nombres de mtodos, listas de argumentos y tipos de retorno, pero no bloques de cdigo. Una interfase sirve para establecer un protocolo (una forma de comunicacin) entre clases. Clase. En el contexto de la programacin orientada a objetos, una clase es una construccin de un lenguaje de programacin que se usa como una fbrica de objetos. La clase incluye atributos y mtodos que comparten todos los objetos creados. La clase describe las reglas para el comportamiento de los objetos. Los objetos son instancias de la clase. Una clase tiene una interfase y una estructura. La interfase describe como la clase y sus instancias pueden interactuar con otras mediante los mtodos. La estructura describe la manera en que los datos estn acomodados en atributos dentro de una instancia. Las clases estn organizadas mediante jerarquas de herencia. Objeto. Es una instancia de una clase. El objeto contiene valores para los atributos y las instrucciones que operan en los datos. Esto hace al objeto capaz de recibir mensajes, procesar datos, y enviar mensajes a otros objetos. JDBC Como se mencion antes, esta es una API que se usa en Java para aplicaciones que requieren usar bases de datos. El controlador JDBC debe ser especfico de acuerdo al DBMS a usar, como se muestra en la Figura 141. Controlador JDBC segn el DBMS.

156

Figura 141. Controlador JDBC segn el DBMS.

Por ejemplo, si se requiere un controlador JDBC para acceder a una base de datos en el servidor de MySQL, se requiere el controlador que proporciona la empresa MySQL AB, y en este caso el controlador se llama MySQL Connector/J. JDBC permite realizar las siguientes actividades de programacin: 1. Conectarse a una fuente de datos. 2. Enviar consultas y enunciados de actualizacin a la base de datos. 3. Recuperar y procesar los resultados recibidos de la base de datos en respuesta a una consulta. JDBC incluye cuatro componentes bsicos: 1. La API JDBC. Permite acceso mediante programacin a bases de datos relacionales mediante el lenguaje de programacin Java. Por medio de l, las aplicaciones pueden ejecutar enunciados SQL, recuperar resultados, y propagar cambios hacia la fuente de datos. Esta API puede tambin interactuar con mltiples fuentes de datos en un ambiente distribuido y heterogneo. La API JDBC es parte de la plataforma Java, la cul incluye las marcas registradas Java Standard Edition (Java SE) y Java Enterprise Edition (Java EE). La API JDBC 4.0 esta dividida en dos paquetes: java.sql y javax.sql. Ambos paquetes estn incluidos en las plataformas de Java SE y Java EE.

157

2. JDBC DriverManager. La clase DriverManager de JDBC define objetos que pueden conectar aplicaciones Java a un controlador JDBC. Esta clase es la columna vertebral de la arquitectura JDBC. 3. JDBC Test Suite. O Suite de prueba JDBC es una ayuda para determinar que controladores JDBC ejecutar un programa 4. JDBC ODBC Bridge. O Puente JDBC ODBC este proporciona acceso JDBC por medio de controladores ODBC. JNDI. El significado en ingls de JNDI es Java Naming and Directory Interface. Es una API de Java para servicio de directorios que permite que clientes de software Java puedan descubrir y buscar datos y objetos por medio de un nombre 3.3.2 SQL y JDBC. JDBC fue creado para acceso a datos en representacin tabular, tales como las bases de datos relacionales, archivos planos, y hojas electrnicas. Del modelo relacional de base de datos el lenguaje de manipulacin y definicin de datos ms usado es el SQL. Por este motivo, JDBC est diseado para usar SQL como su lenguaje para interactuar con la base de datos. De hecho los paquetes del lenguaje Java dnde esta contenida la funcionalidad del JDBC llevan sql en su nombre de paquete. La funcionalidad de JDBC esta comprendida en dos paquetes: java.sql. javax.sql. Para la documentacin de JDBC explicada de aqu en adelante se utiliz la versin de marca registrada Java Plataform Standard Edition 6. Esta es la versin en uso ms reciente al momento de escribir este material. Enseguida se har una descripcin general de las jerarquas de clases de los paquetes de Java para uso de bases de datos, as como una descripcin general de las interfaces ms importantes de JDBC. Para una descripcin completa consultar el sitio Web de la empresa Sun Microsystems.

3.3.2.1 Jerarqua de clases java.sql.*. Este paquete proporciona la API JDBC para acceder y procesar datos almacenados en una fuente de datos (normalmente una base de datos relacional) mediante el lenguaje de programacin Java. Para una descripcin oficial y completa del paquete java.sql consultar el sitio Web de la empresa Sun Microsystems, en particular la pgina: http://java.sun.com/javase/6/docs/api/java/sql/package-summary.html.

158

El paquete java.sql contiene la mayor parte de la funcionalidad de JDBC. Las clases que componen dicho paquete estn organizadas en una jerarqua de clases, recuerde el lector las implicaciones de lo anterior y la posibilidad de crear nuevas clases hijas a partir de las existentes. En la Figura 142. Jerarqua de clases del paquete "java.sql", se muestra la jerarqua de clases de dicho paquete (tomado del sitio Web de la empresa Sun Microsystems).

Figura 142. Jerarqua de clases del paquete "java.sql".

Una descripcin general de las principales clases del paquete se muestra en la Tabla 10. Descripcin de clases del paquete java.sql.

159

Nombre de la clase Date

Descripcin de la clase

Para representar fechas y permite a JDBC asociar este con un valor DATE de SQL. DriverManager Proporciona el servicio bsico para manejar un conjunto de controladores JDBC. DriverPropertyInfo Contiene las propiedades del driver que permiten hacer la conexin. SQLPermission Contiene datos sobre los permisos que el SecurityManager revisar cuando el cdigo que se est ejecutando en una applet invoque a los mtodos DriverManager.setLogWriter o DriverManager.setLogStream. Time Permite representar valores de hora y permite que JDBC lo pueda identificar como un valor TIME de SQL. Timestamp Permite representar valores de hora y permite que JDBC lo pueda identificar como un valor TIMESTAMP de SQL. Types Es una clase que define las constantes que sern usadas para identificar tipos de datos genricos de SQL, llamados tipos JDBC. Tabla 10. Descripcin de clases del paquete java.sql. En el mismo paquete se encuentran varias interfaces de Java para soporte al manejo de datos, la jerarqua de dichas interfases se muestra en la Figura 143. Jerarqua de interfases del paquete java.sql.

Figura 143. Jerarqua de interfases del paquete java.sql.

Se hace una lista de las interfases ms significativas y se describe de manera breve el uso de cada una (ver Tabla 11. Descripcin de interfases del paquete java.sql.).

160

Nombre de la interface Array

Descripcin

Es la representacin del tipo ARRAY de SQL, en el lenguaje de programacin Java. Blob Es la representacin del valor BLOP de SQL, en el lenguaje de programacin Java. CallableStatement Se usa para ejecutar procedimientos almacenados de SQL. Clob Es la representacin del tipo CLOP de SQL, en el lenguaje de programacin Java. Connection Representa una conexin (sesin) con una base de datos especfica. DatabaseMetaData Contiene informacin compresible sobre la base de datos como un todo. Driver Es la interface que cada clase driver debe implementar. ParameterMetaData Permite tener un objeto que puede ser usado para obtener informacin de los tipos y propiedades de los parmetros en un objeto PreparedStatement PreparedStatement Permite tener un objeto que representa un enunciado precompilado SQL. Ref Es la representacin del valor REF de SQL, en el lenguaje de programacin Java. En SQL el valor REF es una referencia a un valor de tipo estructurado SQL en la base de datos. ResultSet Permite tener una tabla de datos que representa un resultado obtenido de la base de datos, que es usualmente generado por la ejecucin de un enunciado que consulta la base de datos. ResultSetMetaData Permite tener un objeto que puede ser usado para obtener informacin sobre los tipos y propiedades de las columnas en un objeto ResulSet. Savepoint Es la representacin de un Savepoint de la base de datos, el cul es un punto dentro de la transaccin actual que puede ser referenciado desde el mtodo Connection.rollback. SQLData Es la interface usada para la representacin de un tipo definido por el usuario (UDT en ingls) de SQL a una clase de Java. SQLInput Representa un flujo de entrada que contiene valores que representan una instancia de un tipo estructurado de SQL o un tipo distinct de SQL. SQLOutput Representa un flujo de salida para escribir los atributos de un tipo definido por el usuario de regreso a la base de datos. Statement Representa el objeto usado para ejecutar una sentencia esttica SQL y regresar los resultados que este produce. Struct Permite la representacin de un tipo estructurado SQL en Java. Tabla 11. Descripcin de interfases del paquete java.sql.

Un diagrama que ejemplifica la relacin funcional entre las clases e interfases ms sobresalientes del paquete java.sql se muestra en la Figura 144. Relacin funcional de clases e interfases del paquete java.sql.

161

Figura 144. Relacin funcional de clases e interfases del paquete java.sql. Observar que se inicia con la clase DriverManager, quin crea un objeto tipo Connection y as poder realizar la conexin a una base de datos especfica. Mediante el objeto Connection se crea un objeto tipo Statement que contiene la sentencia SQL a ejecutar en la base de datos. El objeto Statement enva la sentencia SQL al Driver JDBC quin a su vez la hace llegar a la base de datos. El objeto Statement tambin crea un objeto ResultSet quien ser el encargado de recibir el resultado de la consulta (datos) de la base de datos va el Driver JDBC En el sitio de Sun el lector puede consultar una especificacin ms detallada de cada clase e interfase, as como de sus mtodos y atributos. Enseguida se dan ms detalles de las interfases ms comunes.

3.3.2.2 Interface java.sql.connection. Representa una conexin (sesin) con una base de datos especfica. Los enunciados SQL son ejecutados y los resultados son regresados dentro del contexto de una conexin. Un objeto que es una conexin de base de datos, es capaz de proporcionar informacin que describe sus tablas, su gramtica de SQL soportada, sus procedimientos almacenados, y las capacidades de esta conexin, entre otros. Esta informacin es obtenida con el mtodo getMetaData. Cuando se configura una conexin, las aplicaciones JDBC deben usar el mtodo de conexin apropiado para la administracin de las transacciones, tal como SetAutoCommit o setTransactionIsolation. Las aplicaciones no deben invocar de manera directa sentencias SQL para cambiar la configuracin de la conexin, cuando exista un mtodo JDBC disponible para ello.

162

Por omisin un objeto Connection est en modo de auto-commit, lo cul significa que este automticamente realizar un commit (escribe de manera permanente sus cambios en la base de datos) despus de ejecutar cada enunciado. Si el modo auto-commit es deshabilitado, el mtodo commit se debe de llamar de manera explcita para escribir los cambios de manera permanente en la base de datos; en caso contrario los cambios no sern guardados. Algunos de los mtodos que me parecen ms significativos se mencionan en la Tabla 12. Algunos mtodos de la interfase "Connection".

Nombre de mtodo close()

Descripcin

Libera de manera inmediata el objeto de conexin de base de datos y los recursos JDBC, en vez de esperar que se liberen de manera automtica. commit() Hace que sean permanentes los cambios hasta el anterior commit/rollback y libera los bloqueos actuales en la base de datos que actualmente estn retenidos por este objeto Connection. createstatement() Es un mtodo sobrecargado. Crea un objeto Statement enviando enunciados SQL a la base de datos. En algunas implementaciones del mtodo podr generar objetos tipo ResulSet. preparecall(string sql) Crea un objeto CallableStatement para invocar a procedimientos almacenados de la base de datos. Es mtodo sobrecargado. preparestatement(string Crea un objeto PrepareStatement para enviar enunciados SQL sql) con parmetros a la base de datos. Esta sobrecargado y en algunas implementaciones puede auto generar claves y generar objetos ResultSet. rollback() Deshace todos los cambios realizados en la transaccin actual y libera los bloqueos de base de datos retenidos por este objeto Connection Tabla 12. Algunos mtodos de la interfase "Connection".

Para obtener una descripcin detallada de todos los atributos y mtodos de la interface consultar la pgina: http://java.sun.com/javase/6/docs/api/java/sql/Connection.html.

3.3.2.3 Interface java.sql.statement. Esta interfase representa al objeto usado para ejecutar un enunciado esttico SQL y regresar los resultados que este produce. Por omisin, solo un objeto ResultSet por objeto Statement puede estar abierto en cierto momento. Por lo tanto, si la lectura de un objeto ResultSet esta intercalado con la lectura de otro, cada uno debe ser generado por diferentes objetos Statement. La ejecucin

163

de mtodos en la interfase Statement de manera implcita cierra un objeto actual ResulSet si existe uno que este abierto. Algunos de los mtodos que me parecen ms significativos se muestran en la Tabla 13. Algunos mtodos de la interfase "Statement"..

Nombre de mtodo close()

Descripcin

Libera de manera inmediata el objeto Statement de base de datos y los recursos JDBC, en vez de esperar que se liberen de manera automtica. execute(String sql) Ejecuta el enunciado SQL especificado, el cul puede regresar mltiples resultados. Es mtodo sobrecargado, y en algunas implementaciones puede indicarle al driver que cualquier clave auto generada debe estar disponible para recuperacin. executeQuery(String Ejecuta el enunciado SQL indicado y regresa un objeto simple tipo sql) ResulSet. ExecuteUpdate(String Ejecuta el enunciado SQL indicado, el cul puede ser un enunciado sql) INSERT, UPDATE, o DELETE o un enunciado SQL que no regresa resultados. Es sobrecargado. getResultSet() Recupera el resultado actual como un objeto ResultSet. Tabla 13. Algunos mtodos de la interfase "Statement".

Para obtener una descripcin detallada de los atributos y mtodos de la interfase Statement consultar la pgina: http://java.sun.com/javase/6/docs/api/java/sql/Statement.html.

3.3.2.4 Interface java.sql.resultset. Es una tabla de datos que representa un conjunto de resultados de la base de datos., el cul es generado normalmente por la ejecucin de un enunciado que consulta la base de datos. Un objeto ResultSet mantiene un cursor (o indicador) que apunta a su hilera actual de datos. En un inicio el cursor est posicionado antes de la primer hilera. El mtodo next mueve el cursor a la siguiente hilera, este mtodo regresa false cuando no hay ms hileras en el objeto ResultSet, por lo anterior se puede usar un ciclo while para iterar a travs del conjunto de resultados. Por omisin el objeto ResultSet no es actualizable y tiene un cursor que solo se desplaza hacia delante. De esta manera, se puede iterar en el conjunto solo una vez y solo de la primer a la ltima hilera. Pero es posible producir objetos ResultSet que sean navegables (hacia delante y atrs) y actualizables.

164

La interfase ResultSet contiene mtodos tipo get (como getBoolean, getLong, etc., estos son mtodos que leen valores) que permiten recuperar valores de columna de la hilera actual. Los valores se pueden recuperar por medio de un ndice numrico de la columna o por el nombre de la columna. En general, el uso del ndice de columna ser ms eficiente. Las columnas estn numeradas a partir del 1. Para mxima portabilidad, el conjunto de columnas dentro de cada hilera debe ser ledo en orden de izquierda a derecha, y cada columna debe ser leda solo una vez. Para los mtodos tipo get, el driver JDBC intenta convertir el dato subyacente a un tipo de datos de Java que se ha especificado en el mtodo tipo get y regresa un valor adecuado para Java. La especificacin JDBC tiene una tabla que muestra las correspondencias permitidas de tipos de datos SQL a tipos de datos de Java que pueden ser usadas. Los nombres de columnas que se usan como entrada en los mtodos tipo get no son sensibles a minsculas y maysculas. Cuando un mtodo tipo get es llamado con un nombre de columna y algunas columnas tienen el mismo nombre, se regresa el valor de la primer columna que corresponda con el nombre. La opcin de nombre de columna esta diseada para ser usada cuando los nombres de columna son usados en consultas SQL que generan el conjunto de resultados. Para las columnas que no son nombradas de manera explcita en la consulta, es mejor usar nmeros de columna. En nuevas versiones de JDBC se han agregado mtodos tipo update, que permiten la actualizacin de los datos contenidos en el objeto ResultSet y la actualizacin de la base de datos. En la Tabla 14. Algunos mtodos de la interfase "ResultSet", se describen de manera general los mtodos ms significativos de la interfase. Para obtener una descripcin detallada de los atributos y mtodos de la interfase ResultSet consultar la pgina: http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html.

165

Nombre de mtodo absolute(int row) close() deleteRow() first() getDate(int columnindex) getMetadata() getObject(int columnindex) getRow() insertRow() last() next() previous() updateDate(int columnIndex, Date x) updateRow()

Descripcin Mueve el cursor al nmero de hilera indicado. Libera el objeto ResultSet y los recursos JDBC. Borra la hilera actual del objeto ResultSet y de la base de datos. Mueve el cursor a la primera hilera en este objeto ResultSet. Recupera el valor de la columna designada en la hilera actual de este objeto ResultSet como un objeto java.sql.Date en el lenguaje Java. Es mtodo sobrecargado. Recupera el nmero, tipos y propiedades de las columnas de este objeto ResultSet. Obtiene el valor de la columna designada en la hilera actual de este objeto ResultSet como un objeto en el lenguaje Java. Es mtodo sobrecargado. Recupera el nmero de hilera actual. Inserta una hilera en este objeto ResultSet y en la base de datos. Mueve el curso a la ltima hilera del objeto ResultSet. Mueve al cursor a la siguiente hilera del objeto ResultSet.. Mueve el cursor a la hilera previa del objeto ResultSet. Actualiza la columna designada con un valor java.sql.Date.

Actualiza la base de datos con el nuevo contenido de la hilera actual de este objeto ResultSet. Tabla 14. Algunos mtodos de la interfase "ResultSet".

3.3.2.5 Jerarqua de clases javax.sql.* El paquete javax.sql es una API para acceder y procesar fuentes de datos del lado del servidor desde el lenguaje de programacin Java. El paquete javax.sql es un suplemento del paquete java.sql. Algunas caractersticas del paquete son: 1. Tiene a la interfase DataSource como una alternativa al DriverManager de java.sql para establecer una conexin con una fuente de datos. 2. Connection pooling. Permite administrar un grupo de conexiones. Tambin incluye el Statement pool. En computacin el trmino connection pool (agrupamiento de conexiones) se refiere a la administracin de una coleccin de conexiones abiertas a una base de datos, para que las conexiones puedan ser reutilizadas y poder hacer mltiples conexiones o actualizaciones. 3. Soporta transacciones distribuidas. 4. Maneja conjuntos de hileras (Rowsets).

166

Las aplicaciones usan de manera directa las API DataSource y RowSet, pero las API del pool de conexiones y transacciones distribuidas se usan internamente por una capa intermedia de la infraestructura. La jerarqua de clases del paquete javax.sql se muestra en la Figura 145. Jerarqua de clases del paquete "javax.sql".

Figura 145. Jerarqua de clases del paquete "javax.sql".

Se muestra un resumen de las clases del paquete en la Tabla 15. Descripcin de clases del paquete "javax.sql".

Nombre de la clase ConnectionEvent

Descripcin

Permite tener un objeto tipo Event que proporciona informacin sobre la fuente de un evento relacionado a la conexin. RowSetEvent Permite tener un objeto tipo Event que se genera cuando ocurre un evento en un objeto RowSet. StatementEvent Permite tener un objeto StatementEvent que es enviado a todos los objetos tipo StatementEventListeners que se encuentran registrados con un objeto PooledConnection. Tabla 15. Descripcin de clases del paquete "javax.sql". La jerarqua de interfases del paquete javax.sql se muestra en la Figura 146. Jerarqua de interfases del paquete "javax.sql".

167

Figura 146. Jerarqua de interfases del paquete "javax.sql".

En la Tabla 16. Descripcin de interfases del paquete "javax.sql", se hace una descripcin general de las interfases ms significativas del paquete.

Nombre de la interfase CommonDataSource

Descripcin

Es una interfase que define cuales mtodos estn en comn entre DataSource, XADataSource y ConnectionPoolDataSource. ConnectionPoolDataSource Es la fbrica para objetos PooledConnection. DataSource Es la fbrica para conexiones a la fuente de datos fsica que este objeto DataSource representa. RowSet Es la interfase que incluye el soporte de la API JDBC para el modelo de componentes de JavaBeans. XAConnection Permite tener objetos que proporcionan soporte para transacciones distribuidas. Tabla 16. Descripcin de interfases del paquete "javax.sql". La especificacin completa de clases e interfases del paquete javax.sql, incluyendo sus atributos y mtodos, se puede consultar en el sitio Web de la empresa Sun Microsystems, en particular en la direccin http://java.sun.com/javase/6/docs/api/javax/sql/package-summary.html. Una vez cubierta la parte terica de JDBC, en el tema que sigue se explicar la instalacin y configuracin del driver JDBC en un caso prctico.

168

3.3.3 Instalacin y configuracin del driver acorde al gestor de base de datos. Como se ha comentado antes, para conectarse a un DBMS mediante una aplicacin con el lenguaje Java se requiere del conector JDBC. En el mercado existen muchos ambientes de desarrollo integrado (IDE) para desarrollo en Java. Una buena noticia es que existen buenos IDE de fuente abierta y gratuitos. Algunos de los IDE (entre comerciales, de fuente abierta y gratuitos) para Java son: o NetBeans (www.netbeans.org). o Eclipse (www.eclipse.org). o JCreator (www.jcreator.com). o IntelliJ IDEA (www.jetbrains.com/idea). o JBuilder (http://www.codegear.com/products/jbuilder). En este caso se utilizar el IDE NetBeans, que se puede descargar de manera gratuita del sitio www.netbeans.org. En el momento de escribir este tema, la versin de NetBeans que se ofrece en la pgina de inicio del sitio Web, es la versin 6.1. Una de las caractersticas importantes de este software, es que ya incluye un conector JDBC para conectarse al DBMS de MySQL. Por lo cual se puede usar el conector JDBC integrado en el NetBeans o bien descargar el conector JDBC que se encuentra en la pgina de descarga de conectores del sitio Web de MySQL. Haciendo una prueba con el conector JDBC integrado de NetBeans, no se tuvo ningn problema para hacer la conexin hacia MySQL. NetBeans en su ambiente de trabajo incluye la ficha Services que permite entre otras actividades, administrar conexiones de bases de datos. La ficha Services esta al mismo nivel que las fichas Projects y Files. Para este ejemplo, se utilizar NetBeans como ambiente de desarrollo integrado para Java y como DBMS el MySQL. Se explicar la descarga y configuracin del conector JDBC para el software mencionado. Si una aplicacin Java requiere conectarse al DBMS MySQL, se puede descargar del sitio de MySQL el conector JDBC, llamado por MySQL como el conector Connector/J. Ver Figura 147. Pgina de descarga del conector JDBC en el sitio Web de MySQL. Al ingresar a la pgina de descarga del conector, se muestran las diferentes versiones de este, lo recomendable es descargar la versin ms reciente. En este momento la versin ms reciente es la 5.1. Desde esta pgina se puede realizar la descarga o bien seleccionar un servidor especfico para la descarga. Ver Figura 148. Versiones del conector JDBC y enlace para descarga.

169

Figura 147. Pgina de descarga del conector JDBC en el sitio Web de MySQL.

Figura 148. Versiones del conector JDBC y enlace para descarga.

170

Lo que sigue es guardar el archivo de descarga en la computadora local, descomprimir el archivo segn su formato de compresin, ubicar el archivo en la carpeta donde ser utilizado e incluir la ruta del archivo en la variable classpath de Java. Es importante mencionar que el archivo .jar del controlador no es un archivo ejecutable de Java, sino que funciona ms bien como una librera para las clases, interfases, etc., que incluye el JDBC de Java. Por ejemplo, si el controlador se va a usar para una aplicacin Web, el archivo .jar se debe ubicar en un directorio del servidor Web, de manera que el servidor pueda establecer la conexin a la fuente de datos. El autor, trat de ejecutar el archivo .jar del controlador, pero indica un error al no ser archivo ejecutable y se comprob en el tema que sigue el uso del conector para una aplicacin Web usando Java.

3.3.4 Prototipo de aplicaciones con conectividad a bases de datos. Para el ejemplo prctico se usar el ambiente integrado de desarrollo Netbeans IDE 6.1 que es una marca registrada de la empresa Netbeans.org. Netbeans permite el desarrollo de aplicaciones mediante el lenguaje de programacin Java. Este es un software gratuito. Como DBMS se usar el MySQL Server 5.0. NetBeans 6.1, incluye el JDBC para conectarse con MySQL, por lo que usando este IDE no es necesario instalar aparte el controlador JDBC. Para facilitar la administracin de las bases de datos NetBeans tiene la ficha Services, ubicada junto a la ficha de proyectos Projects, archivos Files y favoritos Favorites, fichas ubicada en la parte superior izquierda del IDE, como se muestra en la Figura 149. Ficha "Services" en NetBeans.. Observar en dicha figura las dos opciones disponibles para conectarse con MySQL, y al hacer un clic con el botn derecho del ratn se abre el men contextual que permite la configuracin de la conexin JDBC. Para este ejemplo se mostrar la forma para conectarse a la BD innovacin que esta en servidor de MySQL. Recordar las tablas que forman la base de datos, y que se muestran en la Figura 150. La base de datos "innovacion" en MySQL.. Para recordar el diseo de la base de datos innovacin y las relaciones de las tablas ver la Figura 39. Diagrama de base de datos del ejemplo prctico.. Para configurar la conexin se abre el men contextual de la conexin jdbc:mysql://localhost (ver Figura 149. Ficha "Services" en NetBeans.), y se selecciona la opcin de propiedades Properties, en esta pantalla proporcionar los datos adecuados para la conexin, tal como la ubicacin URL del servidor de base de datos, el nombre del esquema (base de datos) a usar, etc., para este caso solo se cambio el nombre del esquema a usar. No se cambio la direccin URL del servidor de la base de datos, porque el servidor y el IDE estn en la misma computadora (ver Figura 151. Propiedades de la conexin JDBC.).

171

Figura 149. Ficha "Services" en NetBeans.

Figura 150. La base de datos "innovacion" en MySQL.

172

Figura 151. Propiedades de la conexin JDBC.

Despus de proporcionar los datos para la conexin y aceptar los cambios, en el mismo men contextual para la conexin se debe establecer la conexin fsica, para esto hacer clic en la opcin Connect, como se muestra en la figura Figura 152. Opcin "Connect" para JDBC.. Esta opcin solicitar el nombre y contrasea del usuario de MySQL que debe tener los permisos adecuados en la base de datos correspondiente.

173

Figura 152. Opcin "Connect" para JDBC. Si la conexin tiene xito, se abre la base de datos y en la ficha Services cambia el icono que indica cuando la conexin esta abierta o cerrada. Ver Figura 153. Vista de conexin JDBC exitosa..

Figura 153. Vista de conexin JDBC exitosa.

174

Una vez realizada la conexin se pueden escribir y ejecutar sentencias SQL para interactuar con la base de datos. Para esto se abre el men contextual de la conexin, se selecciona la opcin Execute Command, este abre una ventana que permite escribir sentencias SQL, ejecutarlas y visualizar el resultado de la sentencia (ver Figura 154. Ejecutar sentencia SQL en NetBeans).

Figura 154. Ejecutar sentencia SQL en NetBeans. Es recomendable, probar mediante la ficha Services las sentencias SQL que se usarn en la aplicacin. De esta manera se puede asegurar que la sintaxis y la semntica de las sentencias es la correcta y evitar un mayor esfuerzo al depurar errores de la aplicacin.

Desarrollo del caso prototipo. Para el prototipo del caso prctico se desarrollar una aplicacin Web. Se usar el siguiente software: o IDE Netbeans 6.1. o JDK (Java Development Kit). o El DBMS MySQL. o Conector de base de datos para aplicaciones en Java (MySQL Connector/J). Es un controlador JDBC y se incluye en el IDE de Netbeans. o GlassFish V2. Este es un software que funciona como servidor de Web y esta incluido (si el usuario lo decide) en el IDE de NetBeans 6.1. La base de datos a usar es la de innovacin (ubicada en el DBMS MySQL), que contiene informacin de los proyectos que el rea de Tecnologas de la Informacin desarrolla para toda la empresa, dicha base de datos cuenta con tres tablas:

175

o Proyectos. Con la informacin general de los proyectos. o Responsables. Con la informacin general de los responsables de los proyectos. o Proyectos_avances. Con la informacin semanal de cada avance de proyecto. Ver la Figura 39. Diagrama de base de datos del ejemplo prctico., para recordar el diseo de cada tabla y las relaciones entre ellas. Para el prototipo se usarn las tablas proyectos y responsables. La tabla de proyectos incluye como clave fornea la clave del responsable de ese proyecto, y es como ambas tablas estn relacionadas. Cada proyecto tiene un solo responsable, y una persona responsable puede tener a su cargo varios proyectos. La aplicacin Web consistir en dos pginas JSP que mostrarn informacin de los proyectos y de las personas responsables de cada uno de ellos. En la primer pgina (proyectos.jsp) se mostrar al usuario una lista con el nombre de los proyectos, donde el usuario podr seleccionar uno de ellos. En la segunda pgina (proyectoDetalle.jsp) se mostrar la informacin de detalle del proyecto seleccionado por el usuario e informacin del responsable de ese proyecto. Toda la informacin de los proyectos se obtiene de la base de datos mediante una conexin JDBC. La primer pgina enva como parmetro a la segunda pgina el valor de la clave primaria del proyecto seleccionado. La segunda pgina lee el valor del parmetro y mediante este construye una consulta SQL que extrae de la base de datos la informacin del proyecto particular y lo muestra en la misma pgina. El diagrama de la Figura 155. Arquitectura del prototipo que usa JDBC., muestra lo explicado en este prrafo.

Figura 155. Arquitectura del prototipo que usa JDBC.

Recuerde el lector el funcionamiento de una pgina JSP que incluye cdigo del lado del servidor. Cuando un usuario en su navegador Web solicita una pgina con extensin .jsp, el servidor Web ejecuta primero dicha pgina en el servidor y despus el resultado de la ejecucin es enviada al cliente (en su navegador) en un formato HTML. Posteriores

176

operaciones en una pgina .jsp pueden realizar mas peticiones de procesamiento al servidor. La primer pgina tendr una apariencia similar a la mostrada en la Figura 156. Primer pgina del prototipo que usa JDBC..

Figura 156. Primer pgina del prototipo que usa JDBC.

Cuando el usuario seleccione un nombre de proyecto y haga un clic en el botn de submit, se abre la pgina que muestra la informacin de detalle de ese proyecto y del responsable del mismo, como se muestra en la Figura 157. Segunda pgina que usa JDBC..

Los pasos generales para el desarrollo del prototipo sern los siguientes: 1. Creacin del proyecto. 2. Preparacin de la interfase. 3. Construir un conjunto de conexiones (Connection Pool). 3.1. Construir una fuente de datos (Datasource) JNDI. 3.2. Hacer referencia a la fuente de datos desde la aplicacin. 3.3. Agregar el archivo JAR del controlador de la base de datos al servidor de Web. 4. Agregar cdigo para contenido dinmico a las pginas. 4.1. Agregar la librera JSTL a la variable CLASSPATH del proyecto. 4.2. Agregar directivas taglib a las pginas JSP. 4.3. Agregar cdigo JSP y JSTL. 5. Implantar y ejecutar el proyecto.

177

Figura 157. Segunda pgina que usa JDBC.

1. Creacin del proyecto. Iniciar el IDE Netbeans y seleccionar File | New Project del men principal. En Categories seleccionar Web; en Projects seleccionar Web Application. Hacer clic en el botn de siguiente Next. En el dialogo para asignar nombre y localizacin del proyecto, en el campo para nombre de proyecto (Project Name), escribir AplicacionWeb_JSP_JDBC (puede ser cualquier nombre vlido para el proyecto). Dejar los valores de los dems campos con los datos por omisin y presionar el botn de siguiente Next. Aparece el dialogo de Server and Settings (Servidor y configuraciones). En la lista para seleccionar valor para el campo Server (servidor de Web) seleccionar GlassFish V2. Los dems campos dejarlos con los valores por omisin y hacer clic en el botn de terminar Finish. Realizado lo anterior se crea un formato de proyecto Web y se abre una pgina vaca JSP (index.jsp). 2. Preparacin de la interfase. Se realizar una interfase simple para las dos pginas del proyecto. Las pginas proyectos.jsp y proyectoDetalle.jsp tendrn una tabla HTML para mostrar los datos. La pgina proyectos.jsp tendr una forma HTML que incluye una lista drop-drown. Crear la pgina proyectos.jsp. En la ficha Projects seleccionar el proyecto Web recin creado, hacer clic con el botn derecho del ratn y en el men contextual seleccionar las opciones: New | JSP. En el campo para el nombre del archivo (JSP File Name) escribir proyectos.

178

En el editor del cdigo fuente, cambiar el texto que est entre las etiquetas <title> a Pgina de nombres de proyectos. Escribir el texto para la pgina. Puede ser como el texto mostrado en la Figura 156. Primer pgina del prototipo que usa JDBC., o un texto ms corto como Listado de proyectos. Abrir la paleta de componentes del IDE (Palette), seleccionando del men principal Window | Palette. En la ficha HTML localizar el componente tabla Table. Hacer clic en el icono Table y arrastrar y soltar la tabla dentro de la pgina, abajo del texto que se agreg para la tabla (y antes de la etiqueta </body>). Se abre el dialogo de propiedades de la tabla, escoger un 1 para renglones (rows) y un 1 para columnas (columns), y hacer clic en OK. Despus del texto recin escrito y dentro de las etiquetas <td></td>, agregar una forma Form de la paleta HTML Forms, en la caja de texto para el valor de la propiedad Action, escribir proyectoDetalle.jsp, y hacer clic en el botn OK. Dentro de las etiquetas <form> escribir el texto Seleccionar un proyecto:. Agregar un objeto Drop-down List de la paleta de componentes HTML Forms dentro de las etiquetas <form>. Escribir cve_proy como valor para la propiedad Name y hacer clic en el botn de OK. Ms adelante se agregar cdigo para generar de manera dinmica el contenido para este objeto. Agregar un botn de Submit dentro de la forma y despus del objeto tipo Drop-down List. Escribir submit en los campos de texto para los valores Label y Name, y hacer clic en el botn de OK.

Para ejecutar la pgina y verla en el navegador de Internet, hacer clic derecho en el editor de cdigo fuente (Source Editor) y escoger la opcin Run proyectos.jsp (Shift-F6). Con esto la pgina se compila y es implantada en el servidor Web. El IDE de Netbeans abrir el navegador Web para desplegar la pgina desde su localizacin de implantacin, como se ve en la Figura 158. Avance de la pgina "proyectos.jsp"..

Figura 158. Avance de la pgina "proyectos.jsp".

179

Crear la pgina proyectoDetalle.jsp. Hacer clic con el botn derecho del ratn en el nodo del proyecto AplicacinWeb_JSP_JDBC en la ventana de Proyectos Projects y seleccionar New | JSP. Se abre el dilogo de New JSP File. Para el campo nombre Name del archivo escribir proyectoDetalle. Aceptar todos los dems valores por omisin para la pgina y hacer clic en el botn para terminar Finish. En el editor de cdigo fuente Source Editor, cambiar su ttulo a: Proyecto: -{placeholder} y datos del responsable Cambiar el texto entre las etiquetas <h2> con lo siguiente: Informacin del proyecto y su responsable. Copiar la siguiente tabla HTML debajo de las etiquetas <h2> y antes de cerrar el cuerpo de la pgina (etiqueta </body>).
<table border="1"> <thead> <tr> <th colspan="2">Proyecto: {placeholder}</th> </tr> </thead> <tbody> <tr> <td><strong>Descripcin </strong></td> <td bgcolor="gray">{placeholder}</td> </tr> <tr> <td><strong>Para el departamento </strong></td> <td bgcolor="gray">{placeholder}</td> </tr> <tr> <td><strong>Estado del proyecto</strong></td> <td bgcolor="gray">{placeholder}</td> </tr> <tr> <td><strong>Porcentaje de avance</strong></td> <td bgcolor="gray">{placeholder}</td> </tr> <tr> <td><strong>Fecha de inicio</strong></td> <td bgcolor="gray">{placeholder}</td> </tr> <tr> <td><strong>Fecha de terminacin</strong></td> <td bgcolor="gray">{placeholder}</td> </tr> <tr> <td><strong>Nombre del responsable</strong></td> <td bgcolor="gray">{placeholder}</td> </tr> <tr> <td><strong>Puesto del responsable</strong></td> <td bgcolor="gray">{placeholder}</td> </tr> </tbody> </table>

180

Para ver la pgina en el navegador Web, hacer clic derecho con el ratn en el editor de cdigo fuente (Source Editor) y seleccionar Run proyectoDetalle.jsp Shift + F6. La pgina tendr una apariencia similar a la mostrada en la Figura 159. Avance de la pgina proyectoDetalle.jsp..

Figura 159. Avance de la pgina proyectoDetalle.jsp. Dentro de las etiquetas {placeholder} se escribir ms adelante cdigo del lado del servidor para mostrar valores extrados de la base de datos. 3. Construir un conjunto de conexiones (Connection Pool). Un connection pool o conjunto de conexiones es una manera eficiente para implementar la comunicacin entre el servidor de Web y la base de datos. El crear una nueva conexin para cada requerimiento de un cliente puede consumir mucho tiempo, en especial para aplicaciones que de manera continua reciben un gran nmero de requerimientos. Para remediar esta situacin, se crean numerosas conexiones y se mantienen en un connection pool. As, cualquier requerimiento que llega y que requiere acceso a los datos de la aplicacin, usa una conexin ya creada y preparada que se encuentra en el pool. Asimismo, cuando un requerimiento se termina, no se elimina esa conexin, sino que es regresada al pool. 3.1. Construir una fuente de datos (Datasource) JNDI. El servidor Web GlassFish V2 contiene librerias de Database Conection Pooling (DBCP) que proporcionan la funcionalidad de un connection pool en una forma que es transparente

181

a los desarrolladores. Para esto se requiere configurar una fuente de datos JNDI para el servidor, esto crea una interfase que la aplicacin puede usar para el connection pool. GlassFish. El IDE de NetBeans 6.1 proporciona un soporte mejorado para GlassFish, permitiendo que se puedan especificar recursos mediante un asistente (wizard en ingls). El procedimiento es el siguiente: En la ventana de proyectos Proyects, hacer clic derecho en el nodo de recursos del servidor (Server Resources) y escoger New | Other. Como se ve en la Figura 160. Crear nuevo recurso de servidor en Netbeans.. Esto abre el asistente de New File. Bajo categoras Categories, seleccionar GlassFish. Bajo tipos de archivo File Types, seleccionar JDBC Resource. Hacer clic en el botn Next. Como se muestra en la Figura 161. Crear un recurso JDBC para GlassFish.

Figura 160. Crear nuevo recurso de servidor en Netbeans.

182

Figura 161. Crear un recurso JDBC para GlassFish. En la pantalla que se muestra al hacer clic en el botn Next, realizar: Bajo atributos generales General Attributes, seleccionar la opcin Create New JDBC Connection Pool, entonces en el campo de texto para la propiedad JNDI Name escribir jdbc/tallerBD. Hacer clic en el botn Next. Hacer clic otra vez en Next para saltar la ventana Additional Properties, entonces en el paso 4, escribir tallerBDconnectionPool para el campo JDBC Connection Pool Name. Asegurar que la opcin Extract from Existing Connection est seleccionada y escoger jdbc:MySQL://localhost:3306/innovacin de la lista drop-down. Hacer clic en Next. En la pantalla de Add Connection Pool Properties, escribir el password del usuario que tiene los permisos para acceder a la base de datos de MySQL. Dejar los dems campos con los valores por omisin y hacer clic en Finish para terminar el asistente. Al completar el asistente, se declar una nueva fuente de datos y pool de conexiones para la aplicacin. En la ventana de Projects, abrir el archivo recin creado en Server Resources | sun-resources.xml y observar que las etiquetas <resources> se han agregado para incluir los datos que se han especificado con el asistente. Para confirmar que una nueva fuente de datos y pool de conexiones estn registrados en GlassFish, se debe implantar el proyecto en el servidor, y entonces localizar los recursos en la ventana Services del IDE. Los pasos sern: En la ventana de Projects, hacer clic derecho en el nodo del proyecto AplicacinWeb_JSP_JDBC y seleccionar la opcin Undeploy and Deploy.

183

Abrir la ventana Services y expandir los nodos Servers | GlassFish | Resources | JDBC | JDBC Resources y Connection Pools. Se debe desplegar la nueva fuente de datos y el pool de conexiones, como se muestra en la Figura 162. JDBC y pool de conexiones agregados a GlassFish..

Figura 162. JDBC y pool de conexiones agregados a GlassFish.

3.2. Hacer referencia a la fuente de datos desde la aplicacin. Es necesario hacer una referencia al recurso JNDI recin configurado desde la aplicacin Web. Para esto se puede crear una entrada en el archivo descriptor de implantacin de la aplicacin (web.xml). Los descriptores de implantacin son archivos de texto basados en XML y contienen informacin que describen la manera en que una aplicacin fue implantada en un ambiente especfico. Por ejemplo, se usan normalmente para especificar parmetros de contexto de la aplicacin y patrones de comportamiento, configuraciones de seguridad, as como mapeo para servlets y filtros, entre otros. Los pasos para hacer la referencia al recurso JNDI en el descriptor de implantacin de la aplicacin son: En la ventana de Projects, expandir la carpeta Web Pages | WEB-INF y hacer doble clic en el archivo web.xml. Se abre un editor grfico para el archivo, que se despliega en el espacio del editor de cdigo fuente (Source editor).

184

Hacer clic en la ficha References localizada en la parte superior del Source Editor. Expandir el encabezado Resource References, hacer clic en el botn Add. Esto abre el dilogo Add Resource Reference. Para el campo Resource Name escribir el nombre del recurso que se us antes, cuando se configur la fuente de datos JNDI para el servidor (jdbc/tallerBD). Para el campo Description, escribir la URL del recurso (jdbc:mysql://localhost:3306/innovacin). Observar que el valor por omisin para el tipo de recurso (Resource type) es javax.sql.DataSource. Dejar los dems campos con los valores proporcionados por omisin y hacer clic en el botn de OK. El nuevo recurso es agregado bajo el encabezado de Resource References, como se muestra en la Figura 163. Referencia a un recurso JNDI desde la aplicacin..

Figura 163. Referencia a un recurso JNDI desde la aplicacin. Para verificar que el recurso se agreg al archivo web.xml, hacer clic en la ficha XML localizada en la parte superior y a la derecha del Source Editor Observar las nuevas etiquetas <resource-ref> y su contenido que corresponden al recurso recin agregado. Ver Figura 164. Contenido del archivo web.xml despus de agregar un recurso JNDI.. 3.3. Agregar el archivo JAR del controlador de la base de datos al servidor de Web. Agregar el controlador JAR para la base de datos es otro paso fundamental para permitir que el servidor Web se puede comunicar con el DBMS. De manera ordinaria se requerira localizar el archivo mysql-connector-java-5.x-bin.jar y copiar este dentro de la carpeta de libreras del servidor Web en uso. Afortunadamente el IDE Netbeans es capaz de detectar en la implantacin si el archivo JAR se ha incluido en el servidor, y si no es as, lo realiza de manera automtica.

185

Figura 164. Contenido del archivo web.xml despus de agregar un recurso JNDI.

Para demostrar lo anterior, implantar la aplicacin al servidor Web en uso (en la ventana Projects, seleccionar la opcin Undeploy and deploy, haciendo un clic derecho en el nodo del proyecto) y, para el caso del servidor Web GlassFish hacer lo siguiente: Localizar el directorio de instalacin de GlassFish y navegar a la carpeta domains | domain1 | lib. Observar que ah se encuentra el archivo MySQL-connector-java-5.x-bin.jar. Cuando se hace una conexin a GlassFish en el IDE Netbeans, se realiza una conexin a una instancia del servidor de aplicacin. Cada instancia se ejecuta aplicaciones en un dominio nico, as el archivo JAR es localizado en domain1, el cul es el dominio por omisin creado en la instalacin de GlassFish.

4. Agregar cdigo para contenido dinmico a las pginas. Recordar las dos pginas del proyecto. La primera de ellas (proyectos.jsp) debe obtener de la base de datos los nombres de los proyectos y mostrarlos en el navegador del cliente. En la segunda pgina (proyectoDetalle.jsp ) se uso de manera temporal la palabra placeholder para colocar ms adelante el cdigo que obtendr de la base de datos, informacin particular de cierto proyecto. En la segunda pgina el contenido dinmico depende de la seleccin hecha por el usuario en la primer pgina. Para lograr lo anterior se debe agregar cdigo JSP y JSTL para que las pginas puedan generar ese contenido dinmico. Esto se realiza mediante los tres siguientes pasos. 4.1. Agregar la librera JSTL a la variable CLASSPATH del proyecto. Para hacer un mejor uso de los recursos JSP que se tienen, se puede usar JSTL para acceder y desplegar datos extrados de la capa lgica. Esta librera ya esta incluida en el IDE Netbeans. Lo que es necesario es asegurar que la librera JSTL es agregada al classpath de compilacin del proyecto Web, y despus agregar las directivas taglib

186

necesarias a cada pgina JSP. Esto permite al servidor Web identificar las etiquetas cuando las lee en las pginas JSP. Para el caso de GlassFish, este ya incluye la librera JSTL en su propia librera. De esta manera no es necesario que el programador realice alguna accin. Para verificar esto, en la ficha Projects ver el nodo Libraries | GlassFish Ah el archivo appserv-jstl.jar define todas las etiquetas estndar de la librera JSTL. Ver Figura 165. Librera JSTL en GlassFish..

Figura 165. Librera JSTL en GlassFish. 4.2. Agregar directivas taglib a las pginas JSP. En este paso se agregarn las directivas taglib necesarias a las pginas JSP: Abrir ambas pginas JSP en el Source Editor. Agregar las siguientes directivas como las primeras lneas de cdigo de ambas pginas: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

4.3. Agregar cdigo JSP y JSTL. Para terminar, es necesario agregar el cdigo a cada pgina. Ambas pginas implementan una consulta SQL que usa las etiquetas <sql:query> y la fuente de datos (datasource) creada al inicio del desarrollo del prototipo.

187

Pgina proyectos.jsp Para desplegar de manera dinmica el contenido de la forma HTML en la pgina proyectos.jsp, se requiere acceder a todos los nombres de proyectos de la tabla proyectos de la base de datos innovacin. Agregar la siguiente consulta SQL debajo de las directivas taglib incluidas en el paso anterior:

<sql:query var="proyecto" dataSource="jdbc/tallerBD"> SELECT cve_proy, nom_proy FROM proyectos </sql:query> Las etiquetas <sql:query> permiten el uso de una consulta en el lenguaje SQL de manera directa en una pgina JSP. Se genera un conjunto de resultados (resultset) de la consulta, y los datos obtenidos se pueden insertar dentro de la pgina usando una etiqueta de iterador (<c:forEach>) de la librera JSTL. Reemplazar las etiquetas vacas <option> en la forma HTML, con el iterador. De manera que el cdigo completo para la etiqueta <select> quedara de la siguiente forma:

<select name="cve_proy"> <c:forEach var="proyectos" items="${proyecto.rows}"> <option value="${proyectos.cve_proy}">${proyectos.nom_proy}</option> </c:forEach> </select> La etiqueta forEach itera a travs de todos los valores de cve_proy (clave de proyecto) y nom_proy (nombre de proyecto) del conjunto de resultados generado, e inserta cada par en las etiquetas <option> de HTML. De esta manera, la lista drop-down de la forma es llenada con datos. Guardar los cambios (Ctrl + S), hacer clic derecho en el Source Editor y seleccionar Run File (Shift-F6). El archivo se compila, se implanta en el servidor, y proyectos.jsp se muestra en el navegador Web. La lista drop-down ahora contiene los nombres de proyectos que fueron recuperados de la base de datos.

Pgina proyectoDetalle.jsp Para la pgina proyectoDetalle.jsp, es necesario acceder a datos de dos tablas de la base de datos (proyectos y responsables), que corresponde a la cve_proy (clave de proyecto) enviada por el usuario mediante la pgina proyectos.jsp. Esto se logra usando una consulta SQL y la fuente de datos (datasource) creada ai inicio del desarrollo del prototipo. Agregar la siguiente consulta SQL debajo de las directivas taglib incluidas en el paso previo con esta pgina:

<sql:query var="conjuntoPR" maxRows="1" dataSource="jdbc/tallerBD"> SELECT p.nom_proy, p.desc_proy, p.depto_proy, p.estado, p.avance_proy, p.fecha_ini, p.fecha_fin, r.nom_res, r.puesto

188

FROM proyectos as p, responsables as r WHERE p.cve_res = r.cve_res AND p.cve_proy = ? <sql:param value="${param.cve_proy}"/> </sql:query> La consulta anterior genera un conjunto de resultados (resultset) nombrado conjuntoPR, el cul contiene todos los datos asociados con la cve_proy (clave de proyecto) enviada por el usuario mediante la pgina proyectos.jsp. Agregar la siguiente declaracin debajo de la consulta SQL del paso anterior: <c:set var="conjunto" scope="request" value="${conjuntoPR.rows[0]}"/> La etiqueta <c:set> permite asignar el conjunto de resultados a una variable de mbito, de manera que se pueda recuperar su contenido posteriormente. En el documento HTML reemplazar todas las ocurrencias de la palabra placeholder con cdigo JSP que recuperar y desplegar los datos retenidos del conjunto de resultados mediante la variable conjunto. De manera que el cdigo HTML quedar de la siguiente manera:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Proyecto: ${conjunto.nom_proy} y datos del responsable</title> </head> <body> <h2>Informacin del proyecto y su responsable</h2> <table border="1"> <thead> <tr> <th colspan="2">Proyecto: ${conjunto.nom_proy}</th> </tr> </thead> <tbody> <tr> <td><strong>Descripcin </strong></td> <td bgcolor="gray">${conjunto.desc_proy}</td> </tr> <tr> <td><strong>Para el departamento </strong></td> <td bgcolor="gray">${conjunto.depto_proy} </td> </tr> <tr> <td><strong>Estado del proyecto</strong></td> <td bgcolor="gray"> ${conjunto.estado} </td> </tr> <tr> <td><strong>Porcentaje de avance</strong></td>

189

<td bgcolor="gray"> ${conjunto.avance_proy} </td> </tr> <tr> <td><strong>Fecha de inicio</strong></td> <td bgcolor="gray"> ${conjunto.fecha_ini} </td> </tr> <tr> <td><strong>Fecha de terminacin</strong></td> <td bgcolor="gray"> ${conjunto.fecha_fin} </td> </tr> <tr> <td><strong>Nombre del responsable</strong></td> <td bgcolor="gray"> ${conjunto.nom_res} </td> </tr> <tr> <td><strong>Puesto del responsable</strong></td> <td bgcolor="gray"> ${conjunto.puesto} </td> </tr> </tbody> </table> </body> </html>

5. Implantar y ejecutar el proyecto. Si se instal el servidor GlassFish por medio de la descarga del IDE Netbeans, el servidor ya est registrado en el IDE. Si es necesario realizar algn cambio a configuraciones del servidor o se desea registrar un diferente servidor Web en el IDE, entonces escoger del men principal las opciones Tools | Servers para abrir el Server Manager. Para implantar el proyecto en el servidor: Desde la ventana Projects, hacer clic derecho en el nodo del proyecto y seleccionar Undeploy and Deploy. El IDE compila de manera automtica el proyecto, inicia el servidor, e implanta el proyecto en el servidor. Se puede ver la salida generada en la ventana Output. Si todo va bien se debe mostrar el mensaje BUILD SUCCESSFUL en esta ventana. Para verificar que la aplicacin a sido adecuadamente implantada en el servidor, abrir la ventana Services y expandir el nodo Servers. Aqu se muestran todos los servidores registrados en el IDE. Para GlassFish, expander Applications | Web Applications para ver la aplicacin.

190

Para ejecutar la aplicacin. Seleccionar el archivo proyectos.jsp, hacer clic derecho y en el men contextual seleccionar Run File. Nota: por omisin la pgina de inicio de un proyecto Web se llama index.jsp, como no se us la pgina por omisin, no se corre en este caso el proyecto con la opcin Run Project. Cuando la pgina proyectos.jsp se muestra en el navegador, seleccionar un nombre de proyecto de la lista drop-down y hacer clic en submit. Se enva al usuario a la pgina proyectoDetalle.jsp, mostrando los detalles que corresponden al proyecto seleccionado. Ver Figura 166. Ejecucin de las pginas del proyecto Web..

Figura 166. Ejecucin de las pginas del proyecto Web.

En este punto se tiene el prototipo completo y de manera similar se pueden agregar pginas para que el usuario realice otras consultas y realice edicin de datos. Como un resumen del tema de conectores. Se puede notar que la documentacin sobre estos es muy amplia, yo recomiendo hacer una lectura rpida de las principales facilidades de cada uno de ellos en los sitios Web oficiales. Y posteriormente hacer lectura y anlisis mas detallados de las clases, mtodos y objetos que se van requiriendo para la aplicacin particular.

191

Ser un especialista en todos los conectores es muy difcil, pero si es conveniente conocerlos, saber implementarlos y saber sus ventajas y limitaciones. Si es posible escoger solo uno de ellos, profundizar su estudio y obtener toda la ventaja posible de este.

Ejercicios de la Unidad 3. 1. Implementar un prototipo de aplicacin sencillo (que muestre contenido de la base de datos) usando cada conector. 2. Investigar caractersticas generales de otros conectores no explicados en esta unidad.

192

BIBLIOGRAFA. Burbano Proao Diego Javier. Analisis comparativo de bases de datos de codigo abierto vs codigo cerrado (determinacion de indices de comparacion) Quito-Ecuador, 5 de mayo del 2006. MySQL AB. Manual de referencia de MySQL 5.0. 2007. USA. Pardon Guy, Composite Systems: Decentralized Nested Transactions. 2000. Disertacin para obtener el grado de: Doctor of Technical Sciences. Trabajo enviado al: Swiss Federal Institute of Technology Zurich. 129 pginas. Oracle Corporation. Oracle Database Express Edition, 2 Day DBA 10g Release 2 (10.2) , B25107-01, February 2006 Oracle Database Security Guide 10g Release 2 (10.2). Part Number B14266-03, Oracle Corporation, 2008. Silberschatz A., Korth H. y Sudarshan S. Fundamentos de bases de datos. Tercera edicin. Mc Graw Hill. 1998. Espaa. Internet Sitio oficial de MySQL. http://dev.mysql.com/doc/refman/5.0/es/features.html Consultado: 4 de febrero de 2008 Sitio de Oracle Pgina de descarga del software: Oracle Database 10g Express Edition (Universal) http://www.oracle.com/technology/software/products/database/xe/htdocs/102xewinsoft.html Consultado: 6 de febrero del 2008 http://en.wikipedia.org/wiki/Falcon_%28storage_engine%29 Falcon (storage engine) Consultado: 11 de febrero del 2008. Actualizada: 9 de febrero del 2008. Wikipedia en Ingls. Artculo: View (database) http://en.wikipedia.org/wiki/View_%28database%29 Consultada: 20 de febrero de 2008 Actualizada: 31 de enero del 2008 Wikipedia en Ingls. Artculo: Nested transaction http://en.wikipedia.org/wiki/Nested_transaction Consultada: 7 de mayo del 2008 Actualizada: 6 de enero del 2008

193

Wikipedia en Ingls. Artculo: Database transaction http://en.wikipedia.org/wiki/Database_transaction Consultada: 15 de abril del 2008 Actualizada: 11 de abril del 2008 Wikipedia en ingls. Artculo: ActiveX http://en.wikipedia.org/wiki/ActiveX Consultada: 11 de junio del 2008 Actualizada: 6 de junio del 2008. CINVESTAV, Mxico. Captulo 5. Manejo de transacciones distribuidas. http://www.cs.cinvestav.mx/SC/prof_personal/adiaz/Disdb/Cap_5.html Arturo Daz Prez Consultado: 3 de mayo del 2008. Artculo: General Information About ODBC and Connector/ODBC http://dev.mysql.com/doc/refman/4.1/en/myodbc-general-information.html Consultado: 12 de mayo del 2008. Actualizado: Autor: MySQL.com Artculo: ODBC--Open Database Connectivity Overview http://support.microsoft.com/kb/110093/en-us/ Consultado: 12 de mayo del 2008. Actualizado: 29 de marzo del 2007 Autor: Microsoft Corporation Artculo: ODBC Programmers Reference http://msdn.microsoft.com/en-us/library/ms714177.aspx Consultado: 12 de mayo del 2008. Actualizado: 2008 Autor: Microsoft Corporation Artculo: ADO.NET http://msdn.microsoft.com/es-es/library/e80y5yhx(VS.80).aspx Autor: Microsoft Corporation Consultado: 17 de junio del 2008 Monografas.com Artculo: Informacin general de ADO.NET. http://www.monografias.com/trabajos14/informe-ado-net/informe-ado-net.shtml Consultado: 17 de junio del 2008 Actualizado: Autor: Miguel Tito

194

Artculo: SQL Server manual en lnea. Tema: Objetos ADO. http://www.sqlmax.com/centro/moduloV_3.asp?MX= Consultado: 26 de junio del 2008 Actualizado: Autor: Articulo: Eventos de conexin (ADO.NET) http://msdn.microsoft.com/es-es/library/a0hee08w.aspx Consultado: 26 de junio del 2008 Actualizado: 2008 Autor: Microsoft MSDN Articulo: JDBC Introduction http://java.sun.com/docs/books/tutorial/jdbc/overview/index.html Consultado: 14 de agosto del 2008 Actualizado: 14 de febrero del 2008 Autor: Sun Microsystems Articulo: Package java.sql http://java.sun.com/javase/6/docs/api/java/sql/package-summary.html Consultado: 19 de agosto del 2008 Actualizado: 2006 Autor: Sun Microsystems Articulo: Interface Connection http://java.sun.com/javase/6/docs/api/java/sql/Connection.html Consultado: 19 de agosto del 2008 Actualizado: 2006 Autor: Sun Microsystems Articulo: Interface Statement http://java.sun.com/javase/6/docs/api/java/sql/Statement.html Consultado: 19 de agosto del 2008 Actualizado: 2006 Autor: Sun Microsystems Articulo: Interface ResultSet http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html Consultado: 20 de agosto del 2008 Actualizado: 2006 Autor: Sun Microsystems Articulo: Package javax.sql http://java.sun.com/javase/6/docs/api/javax/sql/package-summary.html Consultado: 22 de agosto del 2008 Actualizado: 2006 Autor: Sun Microsystems Articulo: Creating a Simple Web Application Using a MySQL Database

195

http://www.netbeans.org/kb/60/web/mysql-webapp.html Consultado: 7 de octubre del 2008 Actualizado: Autor: Netbeans.org

196

Anda mungkin juga menyukai