1.1 Características del gestor Bases de Datos. Recordemos antes que: una Bases de Datos es una colección de datos organizados bajo normas establecidas en un modelo seleccionado. y que la base de datos es un conjunto de información almacenada bajo la estructura diseñada e implementada en el SGBD y relacionada con un asunto o con una finalidad, tal como el seguimiento de los pedidos de clientes o una colección de música. Generalmente nos referimos a los datos de los usuarios y de la organización, que apoyan el negocio modelado y soportado por el Sistema de Gestión de Bases de Datos. En la etapa de diseño lógico, la arquitectura de los datos es independiente del motor donde se montará finalmente. Ahora bien, debemos de tener en cuenta que la gestión de los datos implica: Definición de estructuras para almacenar información Mecanismos para manipulación de la información Sistema de Gestión de Bases de Datos (SGBD) en Español o Data Base Manager System (DBMS) en Ingles. Veamos una primera definición: Si existe una colección de datos interrelacionados, y para poder acceder a ellos requiere un medio electronico para ello, entonces entendamos que un SGBD es un conjunto de programas para acceder dichos datos. Es decir son productos de software desarrollados por diferentes proveedores y con diferentes características, las cuales los diferencian unos de otros; ejemplos de estos SGBD tenemos: Dbase, Fox, Access, Informix, Unify, Oracle, Interbase, entre otros. Objetivo de un SGBD. El Objetivo primordial de un SGBD es proporcionar un entorno que sea a la vez conveniente y eficiente para ser utilizado al extraer y almacenar información de la base de datos. (KORTH, 1995) ―El sistema de gestión de la base de datos (SGBD) es una aplicación que permite a los usuarios definir, crear y mantener la base de datos, y proporciona acceso controlado a la misma. ” (MÁRQUES, 2001) Funciones Básicas de un SGBD Un SGBD debe incluir por lo menos las siguientes funciones (DATE, 1993): Definición de los Datos. El SGBD debe ser capaz de aceptar las definiciones de datos en versión fuente y convertirlas en la versión objeto. El SGBD debe incluir componentes procesadores para cada uno de los lenguajes de definición de datos (LDD). (DATE, 1993). Manipulación de los Datos. El SGBD debe atender las solicitudes de los usuarios para extraer, actualizar, adicionar o suprimir datos. El SGBD debe incluir un componente procesador del Lenguaje de manipulación de datos (LMD). (DATE, 1993). Seguridad e Integridad de los Datos. El SGBD debe supervisar las solicitudes de los usuarios y rechazar los intentos de violar las medidas de seguridad e integridad definidas por el Administrador de la Base de Datos DBA. (DATE, 1993). Recuperación y concurrencia de los datos. El principal objetivo de la implantación de una base de datos es poner a disposición de un gran numero de usuarios en conjunto integrado de datos, estos datos podrán ser manipulados por los diferentes usuarios y es ahora cuando se debe garantizar la coherencia de los datos después de las diversas manipulaciones. (DATE, 1993). Diccionario de Datos. Desempeño. El SGBD debe ejecutar todas las funciones en la forma eficiente. Componentes de un Sistema de Gestión de Base de Datos. Un Sistema de Gestión de Base de Datos se divide en módulos que tratan cada una de las responsabilidades del sistema general. Los componentes funcionales de un SGBD (KORTH, 1995) incluyen: 1.2 HERRAMIENTAS De creación de bases de datos. Manejador de Bases de Datos El sistema manejador de bases de datos es la porción más importante del software de un sistema de base de datos. Un DBMS es una colección de numerosas rutinas de software interrelacionadas, cada una de las cuales es responsable de alguna tarea específica. Las funciones principales de un DBMS son: Crear y organizar la Base de datos. Establecer y mantener las trayectorias de acceso a la base de datos de tal forma que los datos puedan ser accesados rápidamente. Manejar los datos de acuerdo a las peticiones de los usuarios. Registrar el uso de las bases de datos. Interacción con el manejador de archivos. Esto a través de las sentencias en DML al comando de el sistema de archivos. Así el Manejador de base de datos es el responsable del verdadero almacenamiento de los datos. Respaldo y recuperación. Consiste en contar con mecanismos implantados que permitan la recuperación fácilmente de los datos en caso de ocurrir fallas en el sistema de base de datos. Control de concurrencia. Consiste en controlar la interacción entre los usuarios concurrentes para no afectar la inconsistencia de los datos. Seguridad e integridad. Consiste en contar con mecanismos que permitan el control de la consistencia de los datos evitando que estos se vean perjudicados por cambios no autorizados o previstos. El DBMS es conocido también como Gestor de Base de datos. En sí, un sistema manejador de base de datos es el corazón de la base de datos ya que se encarga del control total de los posibles aspectos que la puedan afectar. Administración de bases de datos Rápidamente surgió la necesidad de contar con un sistema de administración para controlar tanto los datos como los usuarios. La administración de bases de datos se realiza con un sistema llamado DBMS (Database management system [Sistema de administración de bases de datos]). El DBMS es un conjunto de servicios (aplicaciones de software) para administrar bases de datos, que permite: • un fácil acceso a los datos • el acceso a la información por parte de múltiples usuarios • la manipulación de los datos encontrados en la base de datos (insertar, eliminar, editar) El DBMS puede dividirse en tres subsistemas: • El sistema de administración de archivos: para almacenar información en un medio físico • El DBMS interno: para ubicar la información en orden • El DBMS externo: representa la interfaz del usuario Los DBMS principales Los principales sistemas de administración de bases de datos son: • Borland Paradox • Filemaker • IBM DB2 • Ingres • Interbase • Microsoft SQL server • Microsoft Access • Microsoft Foxpro • Oracle • Sybase • My SQL • Postgre SQL • mSQL • SQL Server 11 1.2.3 De edición para crear Esquemas y Consultas de Base de Datos Un esquema es un conjunto lógico de tablas, como la base de datos. Usualmente, se piensa en él simplemente como ―la base de datos‖, pero una base de datos puede contener más de un esquema. Por ejemplo, un esquema estrella está compuesto de tablas, donde una gran y central tabla tiene toda la información importante, con la que se accede, vía claves ajenas, a tablas dimensionales, las cuales tienen información de detalle, y pueden ser usadas en una unión para crear informes detallados. Un esquema en estrella es aquel que tiene una tabla fact de hechos que contiene los datos de análisis, rodeada de las tablas lookup o de dimensiones. Este aspecto, de tabla de hechos (o central) más grande rodeada de radios o tablas más pequeñas es lo que asemeja con una estrella. Una tabla fact o tabla de hechos es la tabla central de un esquema dimensional y contiene los valores de las medidas de negocio. Cada medida se toma mediante la intersección de las dimensiones que la definen. Este esquema es ideal por su simplicidad y velocidad para ser usado para análisis: Data Marts? (Mercado de datos) y EIS (Sistemas de información ejecutiva). Permite acceder tanto a datos agregados como de detalle. Además, permite reducir el número de joins entre tablas y deja a los usuarios establecer jerarquías y niveles entre las dimensiones. Finalmente, es la opción con mejor rendimiento y velocidad pues permite indexar las dimensiones de forma individualizada sin que repercuta en el rendimiento de la base de datos en su conjunto. Esquema Snowflake La diferencia del esquema snowflake comparado con el esquema estrella, está en la estructura de las tablas lock_up: las tablas lock_up en el esquema snowflake están normalizadas. Cada tabla lock_up contiene sólo el nivel que es clave primaria en la tabla y la foreign key de su parentesco del nivel más cercano del diagrama. Esquema de relación y esquema relacional En un esquema de relación debemos especificar los atributos y dominios sobre los que se define la relación, así como las restricciones de integridad que se deben cumplir para que la relación constituya una ocurrencia válida del esquema; es decir, aquellas restricciones que afectan a cada uno de los elementos que forman parte del correspondiente esquema de relación (restricciones intraelementos). Por tanto, podremos definir un esquema de relación como: R Siendo R el nombre de la relación, A la lista de atributos, D los dominios sobre los que están definidos los atributos y S las restricciones de integridad, intraelementos. El esquema de la base de datos relacional será una colección de esquemas de relación y de restricciones de integridad ínter elementos. Esto se puede representar: E < {Ri}, {Ii}> Donde E es el nombre del esquema relacional, {Ri} es el conjunto de esquemas de relación, e {Ii} representa el conjunto de restricciones de integridad ínter elementos. Podemos definir una base de datos relacional –―variable relacional‖ siguiendo la terminología de DATE (1995) –como un esquema relacional junto con una ocurrencia válida de dicho esquema, es decir, una ocurrencia que cumple todas las restricciones descritas en el esquema. La creación de esquemas se lleva a cabo mediante la sentencia: ::= CREATE SCHEMA [] […] ::= | AUTHORIZATION 100000 Se utiliza sólo la frase: Buen_Vendedor En las vistas remotas y en las vistas sin conexión puede crear reglas a nivel de campo y de registro para validar datos introducidos localmente antes de enviarlos al origen de datos remoto. Puesto que el objetivo de estas reglas es impedir que se envíe al origen de datos cualquier dato que pueda ser rechazado por las reglas de Integridad del servidor, debe reproducir las reglas del origen de datos en las reglas que se crean para la vista remota. Por ejemplo, si la clave de un vendedor está formada por cuatro dígitos y así lo establecen las restricciones de Integridad de la tabla Vendedores, entonces en la vista, cuando un vendedor se dé de alta, también se deberá cumplir con esa restricción. Existen funciones en los DBMS para crear reglas para las vistas, y es precisamente así como una vista puede implementarse para garantizar la Integridad de la base de datos; también, mediante las vistas, es posible determinar si existen datos referenciados que pudieran comprometer la Integridad relacional. 2.2.2 Creación de disparadores (Trigger‘s). CONCEPTO Un disparador define una acción que la base de datos debe llevar a cabo cuando se produce algún suceso relacionado con la misma. Los disparadores (triggers) pueden utilizarse para completar la integridad referencial, también para imponer reglas de negocio complejas o para auditar cambios en los datos. El código contenido en un disparador, denominado cuerpo del disparador, está formado por bloques PL/SQL. La ejecución de disparadores es transparente al usuario. Para crear un disparador (trigger) en una tabla, el usuario con el que accedamos a Oracle deberá ser propietario de la misma, teniendo así el privilegio ALTER para la tabla ó ALTER ANY TABLE. Además, dicho usuario, debe disponer del privilegio CREATE TRIGGER. Existen varios tipos de disparadores, dependiendo del tipo de transacción de disparo y el nivel en el que se ejecuta el disparador (trigger): 1.- Disparadores de nivel de fila: se ejecutan una vez para cada fila afectada por una instrucción DML. Los disparadores de nivel de fila se crean utilizando la cláusula for each row en el comando create trigger. 2.- Disparadores de nivel de instrucción: se ejecutan una vez para cada intrucción DML. Por ejemplo, si una única intrucción INSERT inserta 500 filas en una tabla un disparador de nivel de instrucción para dicha tabla sólo se ejecutará una vez. Los disparadores de nivel de instrucción son el tipo predeterminado que se crea con el comando create trigger. 3.- Disparadores Before y After: puesto que los disparadores son ejecutados por sucesos, puede establecerse que se produzcan inmediatamente antes (before) o después (after) de dichos sucesos. 4.- Disparadores Instead Of: puede utilizar INSTEAD OF para indicar a Oracle lo que tiene que hacer en lugar de realizar las acciones que invoca el disparador. Por ejemplo, podría usar un disparador INSTEAD OF en una vista para gestionar las inserciones en una tabla o para actualizar múltiples tablas que son parte de una vista. 5.- Disparadores de esquema: puede crear disparadores sobre operaciones en el nivel de esquema tales como create table, alter table, drop table, audit, rename, truncate y revoke. Puede incluso crear disparadores para impedir que los usuarios eliminen sus propias tablas. En su mayor parte, los disparadores de nivel de esquema proporcionan dos capacidades: impedir operaciones DDL y proporcionar una seguridad adicional que controle las operaciones DDL cuando éstar se producen. 6.- Disparadores en nivel de base de datos: puede crear disparadores que se activen al producirse sucesos de la base de datos, incluyendo errores, inicios de sesión, conexiones y desconexiones. Puede utilizar este tipo de disparador para automatizar el mantenimiento de la base de datos o las acciones de auditoría. EJEMPLO DE CREACIÓN DE TRIGGER (DISPARADOR) DE NIVEL DE FILA 1.- En primer lugar abriremos la Consola de Oracle Enterprise Manager: seleccionaremos "Iniciar en Modo Autónomo" y pulsaremos en "Aceptar": Selecionaremos la Base de Datos del árbol e introduciremos un usuario y contraseña con permisos suficientes para crear trigger en la tabla de ejemplo (en nuestro caso accederemos como "system"): 2.- En el árbol accederemos a "Esquema" y a continuación seleccionaremos el usuario propietario de la tabla en la que crearemos el trigger, en nuestro caso "ALONSO". Después pulsaremos en "Tablas", seleccioremos la tabla a la que queramos aplicarle el disparador y, sobre la carpeta "Disparadores" pulsaremos con el botón derecho del ratón, nos aparecerá un menú emergente, pulsaremos "Crear...": 3.- En "Nombre" introduciremos el nombre del disparador y en "Cuerpo del Disparador" introduciremos el código PL/SQL que queramos que se ejecute, en nuestro caso queremos que el disparador añada un registro otra tabla llamada "resultadodisparador" cuando el valor que introduzca el usuario en el campo CAMPO2 de la tabla PRUEBA (después de insertar una nueva fila) sea superior a 1000: En la pestaña "Evento" de la ventana de "Crear Disparador" marcaremos "Disparador en Tabla", marcaremos "Después" y marcaremos también en "Arrancar Disparador:" "Insertar": Pulsaremos en "Crear" y, si no ha habido errores el el código PL/SQL nos aparecerá un mensaje como este "Disparador se ha creado correctamente": Nota: también se pueden crear disparadores sin necesidad de utilizar la interfaz gráfica (Consola de Oracle Enterprise Manager). Se pueden crear mediante SQL. La consulta SQL que crea el disparador anterior es la siguiente: CREATE OR REPLACE TRIGGER "ALONSO"."INSERCIONNUMEROMAYOR1000" AFTER INSERT ON "ALONSO"."PRUEBA" FOR EACH ROW WHEN (new.CAMPO2 > 1000) BEGIN insert into resultadodisparador (fecha, aviso, tabla) values (Sysdate, 'Registro con CAMPO2 superior a 1000', 'PRUEBA'); END; Con este disparador, cuando un usuario inserte un registro en la tabla PRUEBA cuyo CAMPO2 tenga un valor superior a 1000 se insertará automáticamente (transparente para el usuario) otro registro en la tabla "resultadodisparador" con la fecha de la inserción (sysdate), el aviso "Registro con CAMPO2 superior a 1000" y el nombre de la tabla origen del disparador "PRUEBA". Obviamente, para que este disparador funcione correctamente deberán existir las tablas PRUEBA (origen del disparador) y "resultadodisparador" (donde se insertará el registro si se cumple la condición CAMPO2 > 1000. La consulta SQL necesaria para crear la tabla "PRUEBA": CREATE TABLE "ALONSO"."PRUEBA" ( "CAMPO1" VARCHAR2(10) NOT NULL, "CAMPO2" NUMBER) La consulta SQL necesaria para crear la tabla "resultadodisparador": CREATE TABLE "ALONSO"."RESULTADODISPARADOR" ("FECHA" DATE NOT NULL, "AVISO" VARCHAR2(100) NOT NULL, "TABLA" VARCHAR2(50) NOT NULL) En nuestro ejemplo estamos trabajando en todo momento utilizando el usuario ALONSO para la creación del disparador y de las tablas, puesto que es el propietario de dichos objetos. Posibles errores: Si tras crear el disparador aparece con un icono rojo con una X en medio es porque el código PL/SQL no es correcto: En ocasiones Oracle introduce algún "END" y ";" de más al final. Para solucionarlo es suficiente con quitar los "END" y ";" sobrantes y volver a compilar y guardar el disparador hasta que quede con el siguiente icono: Para comprobar que el disparador funciona adecuadamente, realizamos una inserción en la tabla PRUEBA: insert into alonso.prueba values ('PRUEBA 1', 10) con esta inserción el disparador no se ejecutará pues CAMPO2 es inferior a 1000, para comprobarlo hacemos un SELECT a la tabla RESULTADODISPARADOR (no nos debería devolver ningún registro): select * from alonso.resultadodisparador Ahora realizamos una inserción en la tabla PRUEBA con el valor del CAMPO2 superior a 1000: insert into alonso.prueba values ('PRUEBA 2', 1500) Ahora comprobamos con un SELECT que la tabla "resultadodisparador" tiene una nueva fila: select * from alonso.resultadodisparador AjpdSoft Administración BD ALGUNAS CONSULTAS SQL PARA MODIFICAR EL ESTADO DE UN TRIGGER Para eliminar un trigger mediante SQL: drop trigger nombretrigger Para deshabilitar temporalmente un trigger (dejará de realizar su función): alter trigger nombretrigger disable Para habilitar un trigger deshabilitado: alter trigger nombretrigger enable Para deshabilitar todos los triggers asociados a una tabla: alter table nombretabla disable all triggers Para habilitar todos los triggers asociados a una tabla: alter table nombretabla enable all triggers 2.2.3 Creación de procedimientos almacenados. Puede crear procedimientos almacenados mediante la instrucción CREATE PROCEDURE de Transact-SQL. Antes de crearlos, tenga en cuenta lo siguiente: Las instrucciones CREATE PROCEDURE no se pueden combinar con otras instrucciones SQL en el mismo lote. Para crear procedimientos, debe disponer del permiso CREATE PROCEDURE en la base de datos y del permiso ALTER en el esquema donde se crea el procedimiento. En procedimientos almacenados CLR, debe ser propietario del ensamblado al que se hace referencia en o disponer del permiso REFERENCES en dicho ensamblado. Los procedimientos almacenados son objetos de ámbito de esquema y sus nombres deben ajustarse a las reglas para los identificadores. Sólo puede crear un procedimiento almacenado en la base de datos actual. Cuando cree un procedimiento almacenado, deberá especificar lo siguiente: Todos los parámetros de entrada y de salida del lote o del procedimiento que realiza la llamada. Las instrucciones de programación que realicen operaciones en la base de datos, incluidas las llamadas a otros procedimientos. El valor de estado devuelto al lote o al procedimiento que realiza la llamada, a fin de indicar que la operación se ha realizado correctamente o que se ha producido un error (y el motivo del mismo). Las instrucciones de control de errores necesarias para detectar y administrar posibles errores. Las funciones de control de errores tales como ERROR_LINE y ERROR_PROCEDURE se pueden especificar en el procedimiento almacenado. Se recomienda que no cree procedimientos almacenados con el prefijo sp_. SQL Server utiliza el prefijo sp_ para indicar procedimientos almacenados del sistema. El nombre que elija puede entrar en conflicto con algún procedimiento futuro del sistema. Si la aplicación utiliza referencias de nombre completo que no son de esquema y el nombre de su procedimiento entra en conflicto con un procedimiento del sistema, la aplicación generará un error ya que el nombre se enlaza con el procedimiento del sistema, no con el suyo. Un procedimiento almacenado definido por el usuario, con el mismo nombre que un procedimiento almacenado del sistema y que no esté calificado o se encuentre en el esquema dbo no se ejecutará nunca; siempre se ejecutará el procedimiento almacenado del sistema. En el ejemplo siguiente se muestra este comportamiento. USE AdventureWorks2008R2; GO CREATE PROCEDURE dbo.sp_who AS SELECT FirstName, LastName FROM Person.Person; GO EXEC sp_who; EXEC dbo.sp_who; GO DROP PROCEDURE dbo.sp_who; GO Si se utiliza un calificador de esquema explícito también se consigue una ligera mejora del rendimiento. La resolución de nombres es un poco más rápida si Motor de base de datos no tiene que buscar en varios esquemas para encontrar el procedimiento. Para obtener más información, vea Ejecutar procedimientos almacenados (motor de base de datos). De forma similar a las tablas temporales, los procedimientos almacenados temporales (tanto privados como globales) se pueden crear agregando los prefijos # y ## delante del nombre del procedimiento. # denota un procedimiento almacenado temporal local; ## denota un procedimiento almacenado temporal global. Estos procedimientos dejan de existir cuando se cierra SQL Server. Los procedimientos almacenados temporales son útiles para conectarse a versiones anteriores de SQL Server que no permiten volver a utilizar los planes de ejecución para instrucciones o lotes de Transact-SQL. Las aplicaciones que se conecten a SQL Server 2000 y versiones posteriores deben utilizar el procedimiento almacenado del sistema sp_executesql, en vez de procedimientos almacenados temporales. Sólo puede ejecutar un procedimiento temporal local la conexión que lo creó; el procedimiento se elimina automáticamente cuando se cierra la conexión. Cualquier conexión puede ejecutar un procedimiento almacenado temporal global. Éste existe hasta que se cierra la conexión que el usuario utilizó para crearlo, y hasta que se completan todas las versiones del procedimiento que se estuvieran ejecutando mediante otras conexiones. Una vez cerrada la conexión que se utilizó para crear el procedimiento almacenado temporal, éste ya no se puede volver a ejecutar. Sólo podrán finalizar las conexiones que hayan empezado a ejecutar el procedimiento almacenado. Si se crea directamente en la base de datos tempdb un procedimiento almacenado sin el prefijo # o ##, el procedimiento en cuestión se eliminará automáticamente cuando se cierre SQL Server, ya que tempdb se vuelve a crear cada vez que se inicia SQL Server. Los procedimientos creados directamente en tempdb existen incluso después de haber finalizado la conexión en que se crearon. Nota Nota Utilizar excesivamente los procedimientos almacenados temporales puede causar conflictos en las tablas del sistema de tempdb y afectar de forma negativa al rendimiento. Se recomienda que utilice en su lugar sp_executesql. El procedimiento sp_executesql no almacena datos en las tablas del sistema y, por tanto, evita el problema. Los procedimientos almacenados CLR no se pueden crear como procedimientos almacenados temporales. A. Utilizar un procedimiento sencillo con una instrucción SELECT compleja El siguiente procedimiento almacenado devuelve todos los empleados (nombre y apellidos), sus puestos y los nombres de sus departamentos a partir de una vista. Este procedimiento almacenado no utiliza ningún parámetro. B. Utilizar un procedimiento simple con parámetros El siguiente procedimiento almacenado sólo devuelve el empleado especificado (nombre y apellidos), su puesto y el nombre de su departamento a partir de una vista. Este procedimiento almacenado acepta coincidencias exactas de los parámetros pasados. C. Utilizar un procedimiento simple con parámetros comodín El siguiente procedimiento almacenado sólo devuelve los empleados especificados (nombre y apellidos), sus puestos y los nombres de sus departamentos a partir de una vista. Este patrón de procedimiento almacenado coincide con los parámetros pasados o, si éstos no se proporcionan, utiliza los valores predeterminados (apellidos que comienzan por la letra D). D. Utilizar parámetros OUTPUT El siguiente ejemplo crea el procedimiento almacenado uspGetList, que devuelve una lista de productos con precios que no superan un importe especificado. El ejemplo muestra la utilización de varias instrucciones SELECT y varios parámetros OUTPUT. Los parámetros OUTPUT permiten a un procedimiento externo, un proceso por lotes o más de una instrucción Transact-SQL tener acceso a un conjunto de valores durante la ejecución del procedimiento. 2.3 Definición del esquema de seguridad. SEGURIDAD 4.1. Concepto El objetivo es proteger la Base de Datos contra accesos no autorizados. Se llama también privacidad. INCLUYE ASPECTOS DE: Aspectos legales, sociales y éticos Políticas de la empresa, niveles de información publica y privada Controles de tipo físico, acceso a las instalaciones Identificación de usuarios: voz, retina del ojo, etc. Controles de sistema operativo En relación al SGBD, debe mantener información de los usuarios, su tipo y los accesos y operaciones permitidas a éstos. TIPOS DE USUARIOS: · DBA, están permitidas todas las operaciones, conceder privilegios y establecer usuarios Usuario con derecho a crear, borrar y modificar objetos y que además puede conceder privilegios a otros usuarios sobre los objetos que ha creado. Usuario con derecho a consultar, o actualizar, y sin derecho a crear o borrar objetos. Privilegios sobre los objetos, añadir nuevos campos, indexar, alterar la estructura de los objetos, etc. Los SGBD tienen opciones que permiten manejar la seguridad, tal como GRANT, REVOKE, etc. También tienen un archivo de auditoria en donde se registran las operaciones que realizan los usuarios. MEDIDAS DE SEGURIDAD Físicas: Controlar el acceso al equipo. Tarjetas de acceso, etc Personal: Acceso sólo del personal autorizado. Evitar sobornos, etc. SO: Seguridad a nivel de SO SGBD: Uso herramientas de seguridad que proporcione el SGBD. Perfiles de usuario, vistas, restricciones de uso de vistas, etc. Un SMBD cuenta con un subsistema de seguridad y autorización que se encarga de garantizar la seguridad de porciones de la BD contra el acceso no autorizado. Identificar y autorizar a los usuarios: uso de códigos de acceso y palabras claves, exámenes, impresiones digitales, reconocimiento de voz, barrido de la retina, etc Autorización: usar derechos de acceso dados por el terminal, por la operación que puede realizar o por la hora del día. Uso de técnicas de cifrado: para proteger datos en Base de Datos distribuidas o con acceso por red o internet. Diferentes tipos de cuentas: en especial del ABD con permisos para: creación de cuentas, concesión y revocación de privilegios y asignación de los niveles de seguridad. Manejo de la tabla de usuarios con código y contraseña, control de las operaciones efectuadas en cada sesión de trabajo por cada usuario y anotadas en la bitácora, lo cual facilita la auditoría de la Base de Datos. Discrecional: Se usa para otorgar y revocar privilegios a los usuarios a nivel de archivos, registros o campos en un modo determinado (consulta o modificación). El ABD asigna el propietario de un esquema, quien puede otorgar o revocar privilegios a otros usuarios en la forma de consulta (select), modificación o referencias. A través del uso de la instrucción grant option se pueden propagar los privilegios en forma horizontal o vertical. Ejemplo: grant select on Empleado to códigoUsuario revoke select on Empleado from códigoUsuario Obligatoria: sirve para imponer seguridad de varios niveles tanto para los usuarios como para los datos. El problema de la seguridad consiste en lograr que los recursos de un sistema sean, bajo toda circunstancia, utilizados para los fines previstos. Para eso se utilizan mecanismos de protección. Los sistemas operativos proveen algunos mecanismos de protección para poder implementar políticas de seguridad. Las políticas definen qué hay que hacer (qué datos y recursos deben protegerse de quién; es un problema de administración), y los mecanismos determinan cómo hay que hacerlo. Esta separación es importante en términos de flexibilidad, puesto que las políticas pueden variar en el tiempo y de una organización a otra. Los mismos mecanismos, si son flexibles, pueden usarse para implementar distintas políticas. Un aspecto importante de la seguridad es el de impedir la pérdida de información, la cual puede producirse por diversas causas: fenómenos naturales, guerras, errores de hardware o de software, o errores humanos. La solución es una sola: mantener la información respaldada, de preferencia en un lugar lejano. Otro aspecto importante de la seguridad, es el que tiene que ver con el uso no autorizado de los recursos: Lectura de datos. Modificación de datos. Destrucción de datos. Uso de recursos: ciclos de CPU, impresora, almacenamiento. Principios básicos para la seguridad Suponer que el diseño del sistema es público. El defecto debe ser: sin acceso. Chequear permanentemente. Los mecanismos de protección deben ser simples, uniformes y construidos en las capas más básicas del sistema. Los mecanismos deben ser aceptados sicológicamente por los usuarios. SEGURIDAD: Fallos lógicos o físicos que destruyan los datos. - Evitar pérdidas de datos por fallos hardware o software (fallo disco, etc.). Normalmente suelen ser fallos de disco o pérdida de memoria RAM. - Aparte del punto de vista de los SGBD, intervienen otros niveles (ej: discos replicados, etc.) - A pesar de estos posibles fallos la base de datos debe quedar siempre en un estado consistente. El concepto de seguridad, según Date (1992), se puede entender como la protección de los datos contra acceso, alteración o destrucción no autorizados. LAS TRES PRINCIPALES CARACTERÍSTICAS DE LA SEGURIDAD Que se deben mantener en una base de datos son la confidencialidad, la integridad y la disponibilidad de la información. - Los datos contenidos en una Base de Datos pueden ser individuales o de una Organización. Sean de un tipo o de otro, a no ser que su propietario lo autorice, no deben ser desvelados. Si esta revelación es autorizada por dicho propietario la confidencialidad se mantiene. Es decir, asegurar la confidencialidad significa prevenir/ detectar/ impedir la revelación impropia de la información. Los siguientes siete requisitos son esenciales para la seguridad de la base de datos: La base de datos debe ser protegida contra el fuego, el robo y otras formas de destrucción. Los datos deben ser reconstruibles, porque por muchas precauciones que se tomen, siempre ocurren accidentes. Los datos deben poder ser sometidos a procesos de auditoria. La falta de auditoria en los sistemas de computación ha permitido la comisión de grandes delitos. El sistema debe diseñarse a prueba de intromisiones. Los programadores, por ingeniosos que sean, no deben poder pasar por alto los controles. Ningún sistema puede evitar de manera absoluta las intromisiones malintencionadas, pero es posible hacer que resulte muy difícil eludir los controles. El sistema debe tener capacidad para verificar que sus acciones han sido autorizadas. Las acciones de los usuarios deben ser supervisadas, de modo tal que pueda descubrirse cualquier acción indebida o errónea. SERVICIOS DE SEGURIDAD Existen varios servicios y tecnologías relacionadas con la seguridad. Accede a cada una de ellas para conocer qué tecnologías son las más interesantes: Autenticación: Se examinan las capacidades de logon único a la red, autenticación y seguridad. Además, se proporciona información sobre el interfaz Security Support Provider Interface (SSPI) para obtener servicios de seguridad integrados del sistema operativo. Kerberos es el protocolo por defecto en Windows 2000 para autenticación en red. Sistema de Archivos Encriptado: El Sistema de Archivos Encriptado (Encrypted File System EFS) proporciona la tecnología principal de encriptación de archivos para almacenar archivos del sistema de archivos NTFS de Windows NT encriptados en disco. Seguridad IP: Windows IP Security, del Internet Engineering Task Force, proporciona a los administradores de redes un elemento estratégico de defensa para la protección de sus redes. Servicios de seguridad en Windows 2000: se examinan los procedimientos relacionados con la gestión de cuentas, autenticación de red a nivel corporativo, así como el Editor de Políticas de Seguridad. Tarjetas Inteligentes: se examinan los procesos de autenticación utilizando tarjetas inteligentes y los protocolos, servicios y especificaciones asociadas. Tecnologías de Clave Pública: se revisa la infraestructura de clave pública incluida en los sistemas operativos de Microsoft y se proporciona información sobre criptografía. Un SMBD cuenta con un subsistema de seguridad y autorización que se encarga de garantizar la seguridad de porciones de la BD contra el acceso no autorizado. Identificar y autorizar a los usuarios: uso de códigos de acceso y palabras claves, exámenes, impresiones digitales, reconocimiento de voz, barrido de la retina, etc. Autorización: usar derechos de acceso dados por el terminal, por la operación que puede realizar o por la hora del día. Uso de técnicas de cifrado: para proteger datos en BD distribuidas o con acceso por red o internet. Diferentes tipos de cuentas: en especial la del ABD con permisos para: creación de cuentas, concesión y revocación de privilegios y asignación de los niveles de seguridad. Manejo de la tabla de usuarios con código y contraseña, control de las operaciones efectuadas en cada sesión de trabajo por cada usuario y anotadas en la bitácora, lo cual facilita la auditoría de la BD. Discrecional: se usa para otorgar y revocar privilegios a los usuarios a nivel de archivos, registros o campos en un modo determinado (consulta o modificación). El ABD asigna el propietario de un esquema, quien puede otorgar o revocar privilegios a otros usuarios en la forma de consulta (select), modificación o referencias. A través del uso de la instrucción grant option se pueden propagar los privilegios en forma horizontal o vertical. Ejemplo: grant select on Empleado to códigoUsuario revoke select on Empleado from códigoUsuario. Obligatoria: sirve para imponer seguridad de varios niveles tanto para los usuarios como para los datos. Problemas de seguridad. La información de toda empresa es importante, aunque unos datos lo son más que otros, por tal motivo se debe considerar el control de acceso a los mismos, no todos los usuarios pueden visualizar alguna información, por tal motivo para que un sistema de base de datos sea confiable debe mantener un grado de seguridad que garantice la autenticación y protección de los datos. En un banco por ejemplo, el personal de nóminas sólo necesita ver la parte de la base de datos que tiene información acerca de los distintos empleados del banco y no a otro tipo de información. 2.3.1 Creación de usuarios de la base de datos. http://www.youtube.com/watch?v=tCHw_xBvnSM 2.4.2 Recuperación a partir de la bitácora. RECUPERACION DE TRANSACCIONES Una transacción es una unidad lógica de trabajo. Supongamos, que la tabla P, la de partes, contiene un campo adicional CANTTOTAL que representa la cantidad total enviada de la parte en cuestión; el valor de CANTTOTAL para una parte dada es igual a la suma de todos los valores SP.CANT de todos los registros SP correspondientes a esa parte. Consideremos ahora la siguiente secuencia de operaciones, cuya intención es añadir un nuevo envío (S5, P1, 1000) a la BD: EXEC SQL WHENEVER SQLERROR GO TO ANUAR; EXEC SQL INSERT INTO SP (S#, P#, CANT) VALUES (‗S5‘, ‗P1‘, 1000); EXEC SQL UPDATE P SET CANTTOTAL = CANTTOTAL + 100 WHERE P# = P1; EXEC SQL COMMIT; GO TO TERMINAR; ANULAR: EXEC SQL ROLLBACK; TERMINAR: RETURN; La proposición INSERT (insertar) agrega el nuevo envío a la tabla SP, la proposición UPDATE (actualizar) pone al día en forma apropiada el campo CANTOTAL de la parte P1. Esta operación implica en realidad 2 modificaciones de la BD. La BD ni siquiera es consistente entre esas 2 modificaciones; viola en forma temporal el requerimiento según el cual el valor de CANTTOTAL para la parte P1 debe ser igual a la suma de todos los valores SP.CANT correspondientes a esa parte. En una situación ideal, nos gustaría tener una garantía absoluta de que se realizarán las 2 modificaciones. Por desgracia, es imposible ofrecer tal garantía; siempre existe la posibilidad de una falla y, además, de una falla en el peor momento posible. Pero si el sistema maneja el procesamiento de transacciones, podrá ofrecer lo más cercano a esa garantía. Garantizará que si la transacción ejecuta algunas modificaciones y después presenta una falla antes de que llegue el término normal de la transacción, se anularán esas modificaciones. Así, o bien la transacción se lleve a cabo en su totalidad, o se cancela en su totalidad. De esta manera puede lograrse que una secuencia de operaciones, la cual en esencia no es atómica, aparente serlo desde un punto de vista externo. El componente del sistema encargado de lograr la atomicidad se conoce como manejador de transacciones, y las operaciones COMMIT (comprometer) y ROLLBACK (retroceder) son la clave de su funcionamiento: La operación COMMIT señala el término exitoso en la transacción: le dice al manejador de transacciones que se ha finalizado l con éxito una unidad lógica de trabajo, que la BD está de nuevo en un estado consistente, y que pueden ―comprometer‖, todas las modifi caciones efectuadas por esa unidad de trabajo. La operación ROLLBACK, en cambio, señala el término no exitoso de la transacción: dice al manejador de transacciones que algo salió mal, que la BD podría estar en un estado inconsistente, y que todas las modificaciones efectuadas hasta el momento por la unidad lógica del trabajo deben ―retroceder‖ o anularse. 2.4.3 Respaldar bases de datos. Respaldar bases de datos MySQL A pesar de no ser comunes los errores en bases de datos MySQL, la omision de un respaldo puede ocasionar severas perdidas de informacion para su empresa o negocio. Le recomendamos realizar respaldos regularmente de acuerdo a la cantidad de informacion y periodicidad de actualizacion de la misma. 1.- Ingrese a su panel de control desde la direccion web https://www.su-dominio.com:8443, elija idioma español y luego coloque su usuario (login) y password tal como se lo proporcionamos por correo electronico al activar su plan de web hosting. 2.- Haga click sobre el nombre de dominio al que pertenece la base de datos que quiere respaldar, que esta en la seccion Dominios. Respaldar una base de datos MySQL 3.- Pulse sobre el icono Bases de datos que se encuentra en la seccion Servicios. Respaldar una base de datos MySQL 4.- Haga click sobre el nombre de la base de datos que quiere respaldar y luego sobre el icono Adm. Web-BD. Tenga en cuenta que la interfase web de administracion (phpmyadmin) a traves de la cual realizara su respaldo se abre en una ventana emergente por lo que debera deshabilitar el bloqueador de ventanas emergentes de su navegador web (Internet Explorer, Mozilla Firefox, Opera, etc.). Para poder utilizar este administrador de bases de datos debe de haber como minimo un usuario creado. Si hay varios usuarios, el primero de la lista sera seleccionado por defecto para administrar la base de datos. Respaldar una base de datos MySQL 5.- Para realizar la copia de seguridad de su base de datos haga click en el icono Exportar que se encuentra en la columna izquierda bajo el encabezado MySQL. (Puede consultar la documentacion oficial (en ingles) de phpmyadmin a traves del icono ? que se encuentra en la tercera posicion del menu lateral de la izquierda.) Respaldar una base de datos MySQL 6.- Seleccione las caracteristicas deseadas segun los requerimientos de su respaldo: Seleccione SQL si desea las opciones de inserts directos a bases de datos o bien CSV para datos de MS Excel si desea aplicar su respaldo en una tabla de modificacion externa como "Excel". Le sugerimos la seleccion del resto de las opciones como se muestra en la siguiente pantalla. Respaldar una base de datos MySQL 7.- Con esto su base de datos habra quedado respaldada. Le recomendamos guardar los archivos en un lugar seguro y conservar, como minimo, los dos ultimos. Los demas podra borrarlos para ahorrar espacio en disco a menos que sean requeridos como historial. 2.4.4 Recuperar bases de datos. Recuperación base de datos SQL Microsoft® SQL Server es un paquete de software para empresas que gestiona los datos mediante una base de datos que trabaja en modo cliente-servidor. Hay cuatro aspectos fundamentales de un servidor SQL (Structured Query Language): 1. 2. 3. 4. Archivos de bases de datos Concepto de base de datos relacional Sistema cliente-servidor Sistema de gestión de bases de datos (DBMS) Por archivo de base de datos nos referimos físicamente al archivo que contiene los datos que el servidor SQL gestiona. Pero el archivo es más que un contenedor de datos. Los archivos SQL o MDF son extremadamente complejos y con una gran organización interna. El archivo está diseñado de modo que el servidor SQL puede gestionar un gran número de transmisiones de datos de una sola vez. El concepto de bases de datos relacionales es el método empleado para organizar los datos y se encuentra separado de la organización interna del archivo. Los sistemas de concepto de bases de datos relacionales utilizan un conjunto de teorías matemáticas para organizar los datos del modo más eficiente. La organización de datos es muy importante para mantener la velocidad del servidor de bases de datos. El sistema cliente-servidor se refiere a la parte del servidor SQL que se comunica con el sistema operativo. Esta parte del sistema necesita gestionar los recursos del servidor, las conexiones y la gestión de varias bases de datos al mismo tiempo. Un sistema de gestión de gases de datos interactúa y combina todos los elementos anteriores. Pero no sólo gestiona la estructura interna del archivo .MDF, el DBMS también controla las bases de datos relacionales y organiza los datos. El DBMS de un servidor SQL es el corazón de su sistema. Qué hacer en una situación de pérdida de datos Las situaciones de pérdidas de datos pueden darse en un gran número de niveles. El primer nivel de pérdida de datos comienza en la unidad de almacenamiento, que puede ser un disco duro o una matriz de almacenamiento (o Array) SAN o RAID. Si la pérdida se produce a este nivel, la meta de Ontrack es conseguir que la unidad vuelva a ser operativa para poder copiar los datos. Los ingenieros de habitación limpia de Ontrack trabajan a nivel electrónico y mecánico para hacer que el dispositivo vuelva a estar operativo. Si el dispositivo de almacenamiento es una matriz de almacenamiento SAN o RAID, la meta será hacer que el dispositivo vuelva a estar operativo y extraer los datos. Las matrices de almacenamiento SAN y RAID añaden una nueva complejidad al trabajo. Ontrack ha mejorado sus especificaciones técnicas para poder solucionar los problemas en este tipo de dispositivos. El segundo nivel de **pérdida de datos** puede empezar a nivel sistema de archivos. El sistema de archivos es un método de almacenamiento y organización de los archivos del sistema de los usuarios. El sistema operativo contrala el sistema de archivos. Si la información acerca de la ubicación de los archivos de datos se encuentra en el volumen que está dañado o perdido, los ajustes o reparaciones deberán realizarse a nivel del sistema de archivos. Una vez reparado el sistema de archivos se podrá acceder correctamente al flujo de datos de archivo. La mayoría de los sistemas operativos dispone de una herramienta que automáticamente arregla el sistema de archivos. Estas herramientas hacen que el volumen sea accesible. Sin embargo, también pueden dañar permanentemente el flujo de datos del archivo. El tercer nivel de la pérdida de datos puede ocurrir en el archivo. Como hemos mencionado anteriormente, los archivos .MDF son muy complejos. La estructura interna puede estar corrupta hasta hacer que el DBMS no pueda utilizar la base de datos. Aquí es donde Ontrack marca la diferencia al proporcionar una solución total de recuperación de datos. Soluciones de Ontrack para situaciones de pérdidas de datos Ontrack tiene la solución para los archivos de bases de datos corruptos o dañados y disponemos de la tecnología **Remote Data Recovery** para recuperar los datos a distancia tan pronto como sea posible. El conjunto de herramientas de recuperación interna para SQL de Ontrack ha sido diseñado para recuperar los datos contenidos en archivos .MDF. El proceso de una recuperación de SQL comienza con la localización del archivo de base de datos requerido. Si el archivo de base de datos no se encuentra accesible debido a problemas con el dispositivo de almacenamiento, intentamos extraer los datos. Si no se encuentra el archivo, está borrado o truncado por problemas con el sistema de archivo, intentamos ajustar o reparar el sistema de archivos para dirigirlo correctamente al flujo de datos del archivo. Si finalmente el sistema de archivos no dispone en absoluto de vínculos hacia el archivo, buscamos en toda la unidad todos los datos SQL. La siguiente fase es trabajar sobre la misma base de datos. En este punto entra en juego el conjunto de herramientas de SQL. Estas herramientas analizan la compleja estructura interna de un archivo .MDF y proporciona informes sobre qué tablas son recuperables. Los informes también muestran el número de listas de datos que se pueden recuperar. Una vez que se ha terminado el proceso de evaluación y se ha recibido la autorización para recuperar los datos, el conjunto de herramientas para SQL copiará los datos en otra base de datos de servidor de SQL. Al terminar esta fase, podemos realizar una copia de seguridad o guardar los datos recuperados. La recuperación de datos a distancia es la solución más rápida para las recuperaciones de SQL. Los procesos de recuperación de datos a distancia copiarán los datos recuperados en un servidor SQL que esté instalado en su sitio o en el de su cliente. Sólo es necesario que el servidor SQL esté encendido. Para obtener los mejores resultados recomendamos que el dispositivo de almacenamiento en el que se trabaja se encuentre conectado a un servidor SQL, de este modo todo el tránsito de datos sucede en un solo equipo. Versiones compatibles de SQL Generalmente uno o más archivos DAT de gran tamaño. Extraemos la tabla de Microsoft información de la base de datos con errores y creamos nuevas tablas en una nueva SQL 6.5 base de datos. Ontrack da completa cobertura a esta versión, incluidas las tablas y listas de información borradas. Microsoft Igual que SQL 6.5, los nombre de archivos de base de datos son generalmente .MDF. SQL 7,0 Microsoft Igual que SQL 7.0 SQL 2000 Microsoft Igual que SQL 7.0 SQL 2005 Términos importantes Tabla eliminada Tabla en una base de datos SQL que ha sido borrada. Base de datos eliminada Base de datos SQL que ha sido borrada. Fila borrada Fila de información en una tabla de SQL que ha sido borrada. Funciones de recuperación Archivo corrupto Archivo borrado Objetos eliminados 2.5 2.5.1 Definición de transacciones en un lenguaje huésped. 2º Evaluación El lenguaje SQL como lenguaje Huésped El lenguaje SQL puede actuar como si fuera un lenguaje huésped, es decir, que puede interactuar dentro de un lenguaje distinto como puede ser el cobol, el visual Basic, el C++, etc. Un ejemplo de esto en c sería: #include EXEC SQL BEGIN DECLARE SECTION; CHAR dni[6]; CHAR cod_cli[7]; CHAR user_name[7]; CHAR password[8]; FLOAT cuota; EXEC SQL END DECLARE SECTION; VOID sql_error ( ); MAIN ( ) { EXEC SQL WHENEVER sqlerror DO sql_error (―Error Oracle‖) ... ... EXEC SQL CONNECT :username IDENTIFY BY :password; EXEC SQL SELECT cod_cli INTO :cod_cli FROM clientes WHERE dni = :dni; ... ... EXEC SQL COMMIT RELEASE; EXIT(0) } VOID sql_error (CHAR *msg) { PRINTF (―\N%S‖,msg) EXEC SQL ROLLBACK RELEASED EXIT(1); } El oracle mantiene una variable llamada SQLSTATE en la cual guarda codigos de retorno cuando se interactua con el. De esta forma se puede saber si se ha producido un error a la hora de manejar el oracle. Otras variables de este tipo son SQLCODE y SQLERR. Para hacer el control de errores se ha escrito la linea: EXEC SQL WHENEVER sqlerror DO sql_error (―Error Oracle‖) Con esta linea le especificamos al oracle que en el momento en el que ocurra un error ejecute la función SQL_ERROR. También le podíamos haber dicho que hiciera otras cosas como: Archivo de base de datos que el motor de la base de datos no puede abrir. Ya sea directamente por el cliente, después de que el archivo haya sido restaurado desde una recuperación de cinta, o después de que el archivo se haya copiado tras la recuperación de una unidad. Base de datos que ha sido eliminada por el motor de la base de datos. Se trata primeramente de una recuperación de archivo borrado. Si el archivo no se encuentra después de la recuperación se trata de una recuperación de página perdida ( Lost Page recovery). Tablas eliminadas en SQL que son compatibles. Listas eliminadas en SQL que son compatibles. CONTINUE GOTO etiqueta Función También se puede controlar con esta sentencia que cuando no halla error haga algo, cambiando SQLERROR por NOTFOUND después de la palabra WHENEVER. El nombre de las variables que van a intervenir en las sentencias de SQL van siempre precedidas por el carácter `:'. A la hora de hacer un select tenemos que especificarle a donde van a ir a parar las filas que son el resultado. Para ello tenemos la palabra INTO, con el cual le especificamos a donde va a ir el resultado del select. 2.5.3 Ejecución de transacciones anidadas. Otra de las posibilidades que nos ofrece el SQL Server es utilizar transacciones anidadas. Esto quiere decir que podemos tener transacciones dentro de transacciones, es decir, podemos empezar una nueva transacción sin haber terminado la anterior. Asociada a esta idea de anidamiento existe una variable global @@TRANCOUNT que tiene valor 0 si no existe ningún nivel de anidamiento, 1 si hay una transacción anidada, 2 si estamos en el segundo nivel de anidamiento… y así sucesivamente. La dificultad de trabajar con transacciones anidadas está en el comportamiento que tienen ahora las sentencias ‗COMMIT TRAN‘ y ‗ROLLBACK TRAN‘ ROLLBACK TRAN: Dentro de una transacción anidada esta sentencia deshace todas las transacciones internas hasta la instrucción BEGIN TRANSACTION más externa. COMMIT TRAN: Dentro de una transacción anidada esta sentencia únicamente reduce en 1 el valor de TRANCOUNT, pero no ―finaliza‖ ninguna transacción ni ―guarda‖ los cambios. En el caso en el que TRANCOUNT=1 (cuando estamos en la última transacción) COMMIT TRAN hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, libera los recursos mantenidos por la conexión y reduce @@TRANCOUNT a 0. Quizás estos dos gráficos nos ayuden a entender el comportamiento de estas sentencias cuando hay varios niveles de anidamiento Comportamiento del COMMIT TRAN Comportamiento de ROLLBACK TRAN Como siempre un ejemplo es lo mejor para entender como funciona. CREATE TABLE Test (Columna int) GO BEGIN TRAN Tran Externa? — @@TRANCOUNT ahora es 1 SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (1) BEGIN TRAN Tran Interna 1? — @@TRANCOUNT ahora es 2. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (2) BEGIN TRAN Tran Interna 2? — @@TRANCOUNT ahora es 3. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (3) COMMIT TRAN Tran Interna 2 — Reduce @@TRANCOUNT a 2. — Pero no se guarda nada en la base de datos. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT COMMIT TRAN Tran Interna 1 — Reduce @@TRANCOUNT a 1. — Pero no se guarda nada en la base de datos. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT COMMIT TRAN Tran Externa — Reduce @@TRANCOUNT a 0. — Se lleva a cabo la transacción externa y todo lo que conlleva. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT SELECT * FROM Test Por cierto que lo de usar nombre para las transacciones es por claridad, puesto que COMMIT TRAN como ya hemos dicho solamente reduce en 1 el valor de @@TRANCOUNT. Veamos ahora un ejemplo de transacción anidada con ROLLBACK TRAN BEGIN TRAN Tran Externa — @@TRANCOUNT ahora es 1 SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (1) BEGIN TRAN Tran Interna 1 — @@TRANCOUNT ahora es 2. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (2) BEGIN TRAN Tran Interna 2 — @@TRANCOUNT ahora es 3. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (3) ROLLBACK TRAN —@@TRANCOUNT es 0 y se deshace —la transacción externa y todas las internas SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT SELECT * FROM Test En este caso no se inserta nada puesto que el ROLLBACK TRAN deshace todas las transacciones dentro de nuestro anidamiento hasta la transacción más externa y además hace @@TRANCOUNT=0 ¿Supone este funcionamiento asimétrico del COMMIT y del ROLLBACK un problema? Pues la verdad es que no. La manera de tratar las transacciones por el SQL Server es la que nos permite programar de manera natural los anidamientos. De todos modos, si queremos ir un poco más lejos hay una cuarta sentencia para trabajar con transacciones: SAVE TRAN SAVE TRAN Esta sentencia crea un punto de almacenamiento dentro de una transacción. Esta marca sirve para deshacer una transacción en curso sólo hasta ese punto. Por supuesto nuestra transacción debe continuar y terminar con un COMMIN TRAN (o los que hagan falta) para que todo se guarde o con un ROLLBACK TRAN para volver al estado previo al primer BEGIN TRAN. Otra de las posibilidades que nos ofrece el SQL Server es utilizar transacciones anidadas. Esto quiere decir que podemos tener transacciones dentro de transacciones, es decir, podemos empezar una nueva transacción sin haber terminado la anterior. Asociada a esta idea de anidamiento existe una variable global que tiene valor 0 si no existe ningún nivel de anidamiento, 1 si hay una transacción anidada, 2 si estamos en el segundo nivel de anidamiento… y así sucesivamente. La dificultad de trabajar con transacciones anidadas está en el comportamiento que tienen ahora las sentencias ‗COMMIT TRAN‘ y ‗ROLLBACK TRAN‘ ROLLBACK TRAN: Dentro de una transacción anidada esta sentencia deshace todas las transacciones internas hasta la instrucción BEGIN TRANSACTION más externa. COMMIT TRAN: Dentro de una transacción anidada esta sentencia únicamente reduce en 1 el valor de TRANCOUNT, pero no ―finaliza‖ ninguna transacción ni ―guarda‖ los cambios. En el caso en el que TRANCOUNT=1 (cuando estamos en la última transacción) COMMIT TRAN hace que todas las modificaciones efectuadas sobre los datos desde el inicio de la transacción sean parte permanente de la base de datos, libera los recursos mantenidos por la conexión y reduce. Quizás estos dos gráficos nos ayuden a entender el comportamiento de estas sentencias cuando hay varios niveles de anidamiento Comportamiento del COMMIT TRAN Comportamiento de ROLLBACK TRAN Como siempre un ejemplo es lo mejor para entender como funciona. CREATE TABLE Test (Columna int) GO BEGIN TRAN Tran Externa? — @@TRANCOUNT ahora es 1 SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (1) BEGIN TRAN Tran Interna 1? — @@TRANCOUNT ahora es 2. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (2) BEGIN TRAN Tran Interna 2? — @@TRANCOUNT ahora es3. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (3) COMMIT TRAN Tran Interna 2 — Reduce @@TRANCOUNT a 2. — Pero no se guarda nada en la base de datos. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT COMMIT TRAN Tran Interna 1 — Reduce @@TRANCOUNT a 1. — Pero no se guarda nada en la base de datos. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT COMMIT TRAN Tran Externa — Reduce @@TRANCOUNT a 0. — Se lleva a cabo la transacción externa y todo lo que conlleva. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT SELECT * FROM Test Por cierto que lo de usar nombre para las transacciones es por claridad, puesto que COMMIT TRAN como ya hemos dicho solamente reduce en 1 el valor de @@TRANCOUNT. Veamos ahora un ejemplo de transacción anidada con ROLLBACK TRAN BEGIN TRAN Tran Externa — @@TRANCOUNT ahora es 1 SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (1) BEGIN TRAN Tran Interna 1 — @@TRANCOUNT ahora es 2. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (2) BEGIN TRAN Tran Interna 2 — @@TRANCOUNT ahora es 3. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (3) ROLLBACK TRAN —@@TRANCOUNT es 0 y se deshace —la transacción externa y todas las internas SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT SELECT * FROM Test En este caso no se inserta nada puesto que el ROLLBACK TRAN deshace todas las transacciones dentro de nuestro anidamiento hasta la transacción más externa y además hace @@TRANCOUNT=0 ¿Supone este funcionamiento asimétrico del COMMIT y del ROLLBACK un problema? Pues la verdad es que no. La manera de tratar las transacciones por el SQL Server es la que nos permite programar de manera natural los anidamientos. De todos modos, si queremos ir un poco más lejos hay una cuarta sentencia para trabajar con transacciones: SAVE TRAN SAVE TRAN Esta sentencia crea un punto de almacenamiento dentro de una transacción. Esta marca sirve para deshacer una transacción en curso sólo hasta ese punto. Por supuesto nuestra transacción debe continuar y terminar con un COMMIN TRAN (o los que hagan falta) para que todo se guarde o con un ROLLBACK TRAN para volver al estado previo al primer BEGIN TRAN. BEGIN TRAN Tran Externa — @@TRANCOUNT ahora es 1 SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (1) BEGIN TRAN Tran Interna 1 — @@TRANCOUNT ahora es 2. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (2) SAVE TRAN Guadada BEGIN TRAN Tran Interna 2 — @@TRANCOUNT ahora es 3. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT INSERT INTO Test VALUES (3) ROLLBACK TRAN Guadada — se deshace lo hecho el punto guardado. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT —Ahora podemos decidir si la transacción se lleva a cabo —o se deshace completamente —Para deshacerla un ROLLBACK bastará como hemos visto —Pero para guardar la transacción hace falta reducir @@TRANCOUNT a 0 COMMIT TRAN Tran Interna 1 — Reduce @@TRANCOUNT a 2. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT COMMIT TRAN Tran Interna 1 — Reduce @@TRANCOUNT a 1. — Pero no se guarda nada en la base de datos. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT COMMIT TRAN Tran Externa — Reduce @@TRANCOUNT a 0. — Se lleva a cabo la transacción externa y todo lo que conlleva. SELECT ‗El nivel de anidamiento es‘, @@TRANCOUNT SELECT * FROM Test Si no ponemos el nombre del punto salvado con SAVE TRAN al hacer un ROLLBACK TRAN se deshace la transacción más externa y @@TRANCOUNT se pone a 0. Como podemos ver el uso de transacciones no es complicado, e incluso las transacciones anidadas si se tratan con cuidado son fáciles de manejar. Como siempre si hay alguna duda la mejor fuente de ejemplos y soluciones son los BOL del SQL Server. 3.1 ODBC. ¿Qué es el ODBC? Open Data Base Conectivity O lo que es lo mismo, conectividad abierta de bases de datos. Si escribimos una aplicación para acceder a las tablas de una DB de Access, ¿qué ocurrirá si después queremos que la misma aplicación, y sin reescribir nada, utilice tablas de SQL Server u otra DB cualquiera? La respuesta es sencilla: no funcionará. Nuestra aplicación, diseñada para un motor concreto, no sabrá dialogar con el otro. Evidentemente, si todas las DB funcionaran igual, no tendríamos este problema.... aunque eso no es probable que ocurra nunca. Pero si hubiera un elemento que por un lado sea siempre igual, y por el otro sea capaz de dialogar con una DB concreta, solo tendríamos que ir cambiando este elemento, y nuestra aplicación siempre funcionaría sin importar lo que hay al otro lado... algo así como ir cambiando las boquillas de una manguera. A esas piezas intercambiables las llamaremos orígenes de datos de ODBC Casi todas las DB actuales tienen un ODBC. Debido a que este elemento impone ciertas limitaciones, ya que no todo lo que la DB sabe hacer es compatible con la aplicación, como velocidad de proceso, tiempos de espera, máxima longitud de registro, número máximo de registros, versión de SQL, etc., está cayendo en desuso a cambio de otras técnicas de programación, pero aún le quedan muchos años de buen servicio. Todo lo referido aquí funciona con Windows NT Server 4.0 con el Service Pack 4 o superior instalado (el último publicado es el 6). El Option Pack 4 para actualizar el IIS y las extensiones ASP. SQL Server 6.5 y Access 97. Por supuesto, también funciona con las versiones modernas de servidores como 2003 Server, y también XP PRO, que lleva un IIS 5.0 de serie. Igualmente es posible utilizar bases de datos de Access 2000 o 2003. Esas otras técnicas de programación antes mencionadas, se utilizan ya en el nuevo Windows 2003, Office 2003 y SQL Server 2000, que además de ODBC pueden utilizar.... pero esa es otra historia. Esta es la idea: por un lado el ODBC provee de unas caracteríisticas siempre homogéneas, y por el otro permite distintos controladores que aseguran la conectividad de la aplicación con diferentes bases de datos. Ahora que ya sabemos qué es y para lo que sirve, procedamos a su instalación: es un proceso sencillo, pero según la base de datos elegida sea Access o SQL Server, cambian un poco, y como no podía ser menos, hay algunos trucos que conviene conocer. 3.1.2 Use el Administrador de orígenes de datos ODBC para crear y administrar los orígenes de datos ODBC. El Administrador de orígenes de datos ODBC es un componente de Windows. Para abrir el Administrador de orígenes de datos ODBC en Windows Server 2003 En el menú Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Orígenes de datos (ODBC). Para abrir el Administrador de orígenes de datos ODBC en Windows 2000 Server 1. En el menú Inicio, seleccione Configuración y, a continuación, haga clic en Panel de control. 2. En el Panel de control, haga clic en Herramientas administrativas. 3. En Herramientas administrativas, haga clic en Orígenes de datos (ODBC). Para abrir el Administrador de orígenes de datos ODBC en Windows XP Professional 1. En el menú Inicio, haga clic en Panel de control. 2. En el Panel de control (Vista por categorías), haga clic en Rendimiento y mantenimiento y, a continuación, haga clic en Herramientas administrativas, o bien en el Panel de control (Vista clásica), haga clic en Herramientas administrativas. 3. En Herramientas administrativas, haga clic en Orígenes de datos (ODBC). 3.3.1 TERMINOLOGÍA La terminología estudia la lengua, como la lingüística, pero se centra en los lenguajes especializados; es la base de la comunicación especializada. La terminología es una ciencia interdisciplinar, esto no significa que sea una rama de otra ciencia sino que toma elementos de diferentes disciplinas (lingüística, ciencias de especialidad, filosofía) y elabora su propio campo de trabajo. Terminología es una palabra polisémica: por una parte denomina la disciplina teórica, pero también se usa para referirse a la práctica terminológica, y además, se llama terminología al producto de esta práctica, es decir diccionarios, glosarios, bases de datos etc. Para algunos, es una disciplina independiente, sin embargo, otros opinan que se trata de una rama de la lingüística. En caso de considerarla como una rama de la lingüística, debemos situarla dentro de la lingüística aplicada y no de la teórica. La terminología estudia los términos, los conceptos y su relación. La terminografía es la práctica terminológica: recopilar, clasificar y representar términos. Los pasos preliminares y posteriores al trabajo terminográfico se denominan práctica terminológica: determinar a quién va dirigido, cómo se va a hacer, releer, etc. La terminología trata únicamente los lenguajes especializados. La semántica estudia la relación entre las palabras y su significado. La morfología estudia cómo se forman las palabras. La lexicología estudia el léxico de una manera diacrónica, a lo largo de la historia, la terminología, sin embargo, estudia los términos con un enfoque sincrónico, se interesa por el significado de los términos en el presente. La lexicografía estudia los términos y la terminología, los conceptos. Los lexicógrafos elaboran diccionarios generales y los terminógrafos, diccionarios terminológicos. Los redactores técnicos se encargan de redactar y corregir textos especializados. La terminología nació con Eugen Wüster que nació en 1898. Blampain opina que nació en Francia gracias a los lexicógrafos. Según van apareciendo nuevas ciencias y conceptos, surgen nuevos términos, los propios científicos se ocupaban de recopilar los términos relacionados con una ciencia determinada, por ejemplo, Limmé recopilaba términos zoológicos. En 1931 el ingeniero austríaco Eugen Wüster hace una tesis sobre términos electrotécnicos. En 1938 elabora el diccionario Machine Tool. Wüster sostiene que la terminología tiene varios padres: Schloman que elaboró un diccionario sistemático en seis lenguas, Ferdinand de Saussure, fundador de la lingüística estructuralista, E. Dressen que fue el impulsor de la ISA (International Standarization Asociation) que fue la primera organización de normalización, actualmente se llama ISO (International Standarization Organization), J. Holmstrom que dijo que debía crearse un centro de estudio terminológico. Wüster es el padre de la práctica terminológica, Lotte es el padre de la teoría terminológica. ETAPAS DE LA TERMINOLOGÍA 1ª 1930-1960. Se empieza a caracterizar la terminología. Wüster, Lotte. 2ª 1960-1975. Nace la macroinformática (grandes ordenadores para almacenar información) y los bancos de datos. Se fija la teoría. 3ª 1975-1985. Expansión de la terminología. Aparece la microinformática (ordenador como herramienta). 4ª 1985-? Lingüística computacional. Para Rondeau la terminología es un fenómeno socioeconómico: el avance de las ciencias crea nuevos conceptos a los que hay que dar nombre. Algunos conceptos se conocen con diferentes nombres. Esto crea problemas de comunicación y se soluciona con la univocidad de los conceptos. Los medios de comunicación necesitan equivalentes de inmediato. El comercio internacional también necesita de la terminología. TESAUROS Para facilitar la recuperación de la información los términos deben ser unívocos, hay que evitar la sinonimia. Esto se consigue gracias a los tesauros. Los tesauros son listas de términos en las que se especifica cuales son descriptores (términos normalizados preferentes) y cuales no lo son. Un no descriptor debe remitir siempre a un único descriptor. Sin embargo, a un descriptor le pueden corresponder varios no descriptores. Por ejemplo: Educación No descriptor: enseñanza, aprendizaje. Término genérico: formación. Término específico: formación. La utilidad de los tesauros es facilitar la recuperación de la información. Un término puede estar formado por una sola palabra (Internet) o por varias (mensaje de correo electrónico) y debe tener un único significado, mientras que una palabra es un solo vocablo y puede tener varios significados. EXPANSIÓN DE LA TERMINOLOGÍA La terminología surge en Austria, Unión Soviética y Checoslovaquia sobre los años 30. Se expande hacia el norte (Dinamarca, Bélgica) y el oeste (Francia, Canadá) durante los años 60. Más adelante llega al sur (España, Sudamérica, Portugal) y al este (China y Japón). Tanto la escuela de Viena, fundada por Wüster, como la de Moscú y Praga son de tendencia lingüístico-terminológica (normalización, sistemas de conceptos). También está la escuela traduccionalista y la normalizadora. Normalizar es buscar la univocidad, fijar el concepto y buscar un solo término para referirse a él. Un diccionario prescriptivo o normativo es aquel que contiene palabras cuyo uso se considera correcto y rechaza las que considera incorrectas, mientras que un diccionario descriptivo o de uso es aquel que se basa en el uso de las palabras para su elaboración, incluye todas aquellas palabras que formen parte de una lengua al margen de su corrección. ESCUELAS Escuela de Viena (Wüster, Felber, Galinski) (orientación lingüística). Escuela de Moscú (Lotte, Caplygin) (orientación lingüística). Escuela de Praga (Drodz) (orientación lingüística). Escuela de Canadá (orientación traduccionalista). Escuela de Quebec (orientación normalizadora). LSP: Lenguages for Special Purpouses. (Lenguajes para fines específicos). ENTRADA DE UN DICCIONARIO TERMINOLÓGICO Número de ficha: 21 Dominio: 1.3.2. Término 1: cefalea. Término 2: dolor de cabeza. Marca gramatical: 1) sustantivo femenino singular. 2) locución de sustantivo masculino singular. Definición: Dolencia física que se produce en la cabeza. Referencia: DRAE, 1992. Notas de uso: El primer término se usa en el ámbito médico, el segundo es más coloquial. Equivalentes: Headache (inglés). Mal à la tête (francés). Cada una de las secciones se denomina campo, el conjunto es un registro. La terminología es la base de la comunicación especializada que es precisa y concisa en oposición a la comunicación general que es rica y consta de palabras polisémicas y sinónimos. El traductor especializado suele ayudarse de diccionarios terminológicos a la hora de realizar sus traducciones. La terminología se ha visto modificada por la informática ya que esta última permite almacenar datos en soporte electrónico y trabajar con ellos de forma rápida. La lengua general se divide en lengua común, no marcada, y lengua especializada, marcada por una temática determinada, unos usuarios determinados y una terminología específica. La banalización o desterminologización consiste en el uso de términos especializados en la lengua común. La terminologización es lo contrario. El vocabulario jurídico, por ejemplo, consta de términos que se usan exclusivamente en dicho campo (anticresis), términos que en principio pertenecían exclusivamente al lenguaje jurídico pero que ahora se han banalizado (hipoteca) y términos que en principio pertenecían al lenguaje común y se han terminologizado. A su vez, estos últimos términos pueden dividirse en los que mantienen su significado original o similar (recurso) y los que tienen un significado en el ámbito jurídico diferente del que tienen en la lengua común (prescripción). Todos los lenguajes especializados tienen características comunes, se sitúan en un marco determinado, tienen un número de usuarios limitado que conoce ese lenguaje por voluntad propia y características peculiares a cada uno de ellos, reglas. FRASEOLOGÍA Es el conjunto de giros de un lenguaje especializado o su estudio. Los giros son una combinación de dos o más elementos pertenecientes al léxico especializado cuyo significado se basa en su relación de combinación. «Emitir una acción» es un giro ya que existe una combinación de conceptos. «Propiedad horizontal» es un término ya que se trata de una combinación de palabras. En el giro existe una relación sintáctica entre los conceptos («acción» es el CD de «emitir»). En el término no hay relación sintáctica. Un tecnolecto es un lenguaje especializado, un tecnicismo es un término perteneciente a un campo de especialidad. TERMINOLOGÍA Y DOCUMENTACIÓN En primer lugar es necesario aclarar que la documentación es un campo especializado con terminología propia. La terminología y la documentación son dos ciencias que están muy ligadas. Por una parte, es imprescindible que todo aquel que quiera llevar a cabo un trabajo terminológico se documente previamente. El terminólogo no inventa los términos que aparecen en los diccionarios especializados, por eso debe realizar un trabajo de investigación previo a la redacción del texto final apoyándose en los trabajos de los documentalistas. Existen diferentes fuentes de documentación: 1ª Documentación textual (textos, tesis, publicaciones técnicas, etc.) 2ª Terminología elaborada (diccionarios, glosarios, etc.) 3ª Documentación factográfica (centros de documentación, expertos, instituciones, etc.) Por otra parte, los documentalistas también se benefician del trabajo de los terminólogos a la hora de llevar a cabo su trabajo. Dicho trabajo incluye la indización de los textos, es decir, la extracción de los descriptores que facilitarán la búsqueda de los documentos. Es en este punto en el que el documentalista se apoya en los trabajos de normalización realizados por los terminólogos para obtener los descriptores más apropiados. Todo esto nos lleva a afirmar que estas dos disciplinas mantienen una relación de intercambio. TERMINOLOGÍA Y LEXICOGRAFÍA Aunque algunos terminólogos opinan que la terminografía es una rama de la lexicografía, es necesario destacar que existen diferencias entre los métodos de estas ciencias. Los diccionarios generales elaborados por lexicógrafos constan de entradas organizadas según el orden alfabético de la palabra que definen, mientras que los artículos de los diccionarios terminológicos elaborados por terminógrafos están ordenados conceptualmente mediante un sistema organizado jerárquicamente en el que se puede ver a qué rama de un determinado campo de especialidad pertenece cada término. Normalmente, se asigna un código a cada artículo para facilitar su búsqueda. Los lexicógrafos se encargan de definir todas las acepciones de una palabra, los terminógrafos, sin embargo, se centran en el significado que los términos tienen en un campo de especialidad determinado e intentan eliminar la polisemia. Cada ficha de un diccionario terminológico trata un concepto, no un término. Por eso, si alguno de los tecnicismos contenidos en la obra es polisémico debe constar de una entrada diferente para cada uno de los significados; en los diccionarios de lengua general, en cambio, se definen todas las acepciones de una palabra en el mismo artículo. Los terminólogos trabajan con términos que pertenecen a lenguajes de especialidad, y los definen según su significado en un ámbito especializado, mientras que los lexicógrafos definen palabras de la lengua general. Por eso, los diccionarios terminológicos contienen principalmente sustantivos, verbos y algunos adjetivos, no como los lexicográficos que se ocupan de cualquier palabra de uso generalizado. Los tecnicismos que estudian los terminógrafos no suelen aparecer en los diccionarios generales a no ser que se hayan banalizado. Por otra parte, los lexicógrafos, a excepción de los que elaboran diccionarios normativos, sólo describen, o recomiendan, el uso de las palabras; los terminógrafos, en cambio, intentan normalizar el uso de los tecnicismos priorizando los más adecuados. Algunos diccionarios y glosarios especializados indican qué términos se deben usar según la legislación lingüística vigente. Elementos Graficos en HTML ¿COMO CREAR DIFERENTES ELEMENTOS GRÁFICOS DE CAPTURA DE DATOS EN HTML? Applets Nada más fácil que usar la etiqueta ... que HTML tiene previsto para ello: (Contenido alternativo) Parece que ya es hora de poner un ejemplo, para ver si está claro el tema este. He buscado un pequeño applet en la web, y he encontrado uno bastante simple llamado NervousText.class que pongo en este ejemplo: NervousText.class Applet: NervousText.class Muestra un insoportable texto bailando como un histérico. Este applet solo tiene un parámetro, llamado text, que sirve para especificar el texto que quieres que aparezca en el applet. Tu navegador no soporta Applets, de modo que has tenido la suerte de librarte de ver la soberana estupidez de un texto que pone Allan Psicobyte con cada una de sus letras moviendose como una loca. . Objets Contenido alternativo Por ejemplo, para escuchar un sonodo al cargarse la página deberíamos usar, en principio, el siguiente código: Una primera aproximación al sonido con OBJECT Ejemplo no muy bueno (Sonido de un Tiranosaurio enfadado) Utilización de la etiqueta La etiqueta BUTTON se utiliza con una apertura de etiqueta y una de cierre . Entre las dos etiquetas, de apertura y cierre, se coloca el contenido que irá dentro del botón. Tiene la particularidad que se pueden colocar dentro del botón los contenidos que se desee, es decir, entre la etiqueta de apertura y cierre se puede colocar texto a voluntad, pero también otras etiquetas HTML, como imágenes, saltos de línea, negritas o lo que podamos necesitar. Veamos un ejemplo: Hola esto es un botónPuedo poner saltos de línea en él!Y otras cosas Que tendría este aspecto: Hola esto es un botón Puedo poner saltos de línea en él! Instalacion de apache INSTALACION DE APACHE*** Comprobar si Apache está instalado Antes de empezar con la instalación, podemos ver si ya lo tenemos instalado. Y si lo está qué versión de Apache es. Hay varias formas de hacerlo, por ejemplo ejecutando los siguientes comandos: 1. updatedb 2. locate apachectl Para ver si se está ejecutando alguna instancia del servidor Apache podemos usar el comando ps para ver si hay algún proceso referente al servidor ps aux | grep httpd ps aux | grep httpd También podemos usar el comando nmap en nuestro sistema (localhost) para ver si hay algun puerto http abierto. 1. nmap 127.0.0.1 Se puede obtener la versión instalada con el siguiente comando. La rutadeinstalación puede ser la ruta que hemos encontrado en el paso anterior utilizando locate. 1. /rutadeinstalacion/apache2/bin/httpd -v JDBC JAVA DATABASE CONNECTIVITY Java Database Connectivity, más conocida por sus siglas JDBC, es una API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el dialecto SQL del modelo de base de datos que se utilice. JDBC es usado para enviar comandos SQL hacia una base de datos relacional, que puede ser Oracle, Infomix, SyBase, etc. Qué hace JDBC? Establece una conexión con una BD Envía sentencias SQL Procesa los resultados Connection con = DriverManager.getConnection ( "jdbc:odbc:wombat", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } El API JDBC se presenta como una colección de interfaces Java y métodos de gestión de manejadores de conexión hacia cada modelo específico de base de datos. Un manejador de conexiones hacia un modelo de base de datos en particular es un conjunto de clases que implementan las interfaces Java y que utilizan los métodos de registro para declarar los tipos de localizadores a base de datos (URL) que pueden manejar. Para utilizar una base de datos particular, el usuario ejecuta su programa junto con la biblioteca de conexión apropiada al modelo de su base de datos, y accede a ella estableciendo una conexión, para ello provee el localizador a la base de datos y los parámetros de conexión específicos. A partir de allí puede realizar con cualquier tipo de tareas con la base de datos a las que tenga permiso: consulta, actualización, creación, modificación y borrado de tablas, ejecución de procedimientos almacenados en la base de datos, etc. JDBC es una API de bajo nivel para API´s de alto nivel Una integración de SQL hacia Java, es decir que las sentencias SQL se puedan mezclar con Java, por ejemplo, que una variable de Java pueda ser usada en una sentencia SQL para recibir o dar valores. Un mapeo directo de las tablas de la BD hacia las clases de Java, donde cala fila de la tabla se convierte en una instancia de la clase, y donde cada columna se corresponde a un atrubuto de esa instancia. JDBC v/s ODBC y otras API´s ODBC no es apropiado para usar directamente con Java por que usa una interfaz en C. Una traducción literal de la API ODBC en C, no es deseable. Por ejemplo Java no tiene punteros y la ODBC hace gran uso de ellos. ODBC es muy difícil de aprender , hace una mezcla de acciones simples y avanzadas. Una API como JDBC es necesario para poder desarrollar una solución ―puramente de Java‖ Modelos de dos capas y tres capas Conformación de SQL El SQL es el idioma normal por acceder las bases de datos correlativas. Una dificultad es que aunque la mayoría del DBMSs (los Sistemas de Dirección de Base de datos) use un formulario normal de SQL para la funcionalidad básica, ellos no conforman la sintaxis de SQL normal más recientemente definida para la funcionalidad más avanzada. Por ejemplo no todas las BD soportar procedimientos almacenados. Una manera que el API de JDBC trata de este problema es permitir cualquier sentencia sea pasada a un driver de DBMS subyacente. Para las aplicaciones complejas, JDBC trata la conformación de SQL de otra manera. Proporciona la información descriptiva sobre el DBMS por medio del DatabaseMetaData para que las aplicaciones puedan adaptar a los requisitos y capacidades de cada DBMS. El Armazón de JDBC JavaSoft proporciona tres componentes JDBC como la parte de la JDK: el JDBC driver manager, la JDBC driver test suite el puente JDBC-ODBC. El JDBC driver manager es el espinazo de la arquitectura de JDBC. Realmente es bastante pequeño y simple; su función primaria es conectar las aplicaciones de Java al chófer de JDBC correcto y entonces salir de la manera. La JDBC driver test suite proporciona un poco de confianza en que drivers de JDBC ejecutarán su programa. Pueden designarse sólo drivers que pasan la JDBC driver test suite El Armazón de JDBC El puente de JDBC-ODBC les permite a los drivers de ODBC ser usado como drivers de JDBC. Y a largo plazo proporcionará una manera de acceder alguno del DBMSs menos popular si no se crean los drivers de JDBC para ellos. Paquete java.sql JDBC ofrece el paquete java.sql, en el que existen clases muy útiles para trabajar con bases de datos. Clase Descripción DriverManager Para cargar un driver Connection Para establecer conexiones con las bases de datos Statement Para crear consultas SQL y enviarlas a las BBDD ResultSet Para almacenar el resultado de la consulta Ejemplos JDBC ( Lado Cliente ) Se asume que se tiene instalado una DBMS Oracle 8i (versión 8.1.6) y que se puede conectar usando el driver de JDBC. Brevemente estos ejemplos muestran cómo conectarse a la Base de Datos y usar sentencias SQL simples como "select", "insert", "update" y "delete". JDBCARQUITECTURA LaAPIJDBC es compatible conlos modelos de procesamientotantode dosy tres capaspara el accesode base de datos. Figura 1:Arquitecturade dos nivelesdeacceso a datos Hasta hace poco,el nivel medioha sido a menudoescritasen lenguajes comoCoC+ +, que ofrecen un rendimiento rápido.Sin embargo,con la introducción decompiladores optimizadoresque traducenel bytecode de Javaenla máquinaeficientecódigo específicoy tecnologías tales comoEnterprise JavaBeans™, la plataforma Javase está convirtiendo enla plataforma estándardenivel mediode desarrollo.Estaes una gran ventaja, por lo que esposible tomarventaja dela robustezde Java,multihilo,ylas funciones de seguridad. Con las empresasutilizan cada vez másel lenguaje de programaciónJavapara escribirel código del servidor, la API de JDBCse está utilizandocada vez más enel nivel mediode unaarquitectura de tres niveles. Algunas de las característicasque hacen queuna tecnología de servidorJDBCsonsu apoyo ala agrupación de conexiones, transacciones distribuidas,ylos conjuntos de filasdesconectado.LaAPIJDBCes también lo quepermite el accesoa una fuente dedatos de unnivelmediode Java. Una visión Base de Datos Relacional Una base de datos es un medio de almacenamiento de información de tal manera que la información puede ser recuperada de la misma. En términos sencillos, una base de datos relacional es aquella que presenta información en tablas con filas y columnas. Una tabla que se conoce como una relación en el sentido de que es una colección de objetos del mismo tipo (filas). Datos en una tabla puede estar relacionado de acuerdo a las claves o conceptos comunes, y la capacidad de recuperar datos relacionados de una tabla es la base para la base de datos relacional a largo plazo. Un sistema de gestión de bases de datos (DBMS) se encarga de la manera que los datos se almacenan, mantienen y recuperan. En el caso de una base de datos relacional, un sistema de bases de datos relacionales (RDBMS) realiza estas tareas. DBMS que se utiliza en este libro es un término general que incluye RDBMS. Reglas de integridad Tablas relacionales seguir ciertas reglas de integridad para asegurar que los datos que contienen estancia precisa y siempre accesible. En primer lugar, las filas de una tabla relacional todos deben ser distintos. Si hay filas duplicadas, puede haber problemas para resolver cuál de las dos selecciones posibles es la correcta. Para la mayoría de los DBMS, el usuario puede especificar que las filas duplicadas no se les permite, y si se hace eso, el DBMS evitar la adición de las filas que duplican un registro existente. Una segunda regla de integridad del modelo relacional tradicional es que los valores de la columna no debe repetir los grupos o conjuntos. Un tercer aspecto de la integridad de los datos implica el concepto de un valor nulo. Una base de datos se encarga de las situaciones donde los datos pueden no estar disponibles mediante el uso de un valor nulo para indicar que un valor no está presente. No es lo mismo que un espacio en blanco o nulo. Un espacio en blanco se considera igual a otro en blanco, un cero es igual a otro cero, pero dos de los valores nulos no se consideran iguales. Cuando cada fila de una tabla es diferente, es posible utilizar una o más columnas para identificar una fila particular. Esta columna única o un grupo de columnas se denomina clave principal. Una columna que forma parte de una clave principal no puede ser nulo, si lo fuera, la clave principal que lo contiene ya no sería un identificador completo. Esta regla se conoce como la integridad de entidad. Tabla 1.2 ilustra algunos de estos conceptos de bases de datos relacionales. Cuenta con cinco columnas y seis filas, que cada fila representa un empleado diferente. Seleccionar los enunciados SQLes un lenguaje diseñadopara ser utilizado conbases de datos relacionales. Hay unaserie decomandos básicos deSQLque se considera estándary es utilizado portodos losRDBMS. Por ejemplo,todos losRDBMSutilizar la instrucciónSELECT. Una instrucción SELECT, también llamado una consulta,se utiliza para obtenerinformación de una tabla. En él se especificauno o mástítulos de las columnas, una o más tablasde donde escoger, y algunoscriterios para la selección. ElRDBMSdevuelve las filasde lasentradas de la columnaque satisfacenlos requisitos establecidos.Una instrucción SELECTcomo la siguientedescargará losnombres y apellidosdelos empleados que tienenvehículos de la empresa: SELECT First_Name, Last_Name FROM Employees WHERE Car_Number IS NOT NULL El conjunto de resultados(el conjunto delas filas que cumplenel requisitode no tenernulos en la columnaCar_Number) siguiente. El nombrey el apellidose imprimen para cadafila quecumple con los requisitosdebido a que lasentencia SELECT(primera línea) especifica elFIRST_NAMEcolumnas yApellido. La cláusula FROM(la segunda línea) da latabla de la quelas columnasserán seleccionados. FIRST_NAME LAST_NAME -------------------- Axel Washington Florence Wojokowski El códigosiguiente produceun conjunto de resultadosque incluyetoda la tabla, ya que pidea todas las columnasenla tabla Empleadossin restricciones (no la cláusula WHERE). Tenga en cuenta queSELECT *significa "seleccionartodas las columnas." SELECT * FROM Employees Cláusulas WHERE La cláusula WHERE de una instrucción SELECT proporciona los criterios para la selección de valores. Por ejemplo, en el siguiente fragmento de código, los valores serán seleccionados sólo si aparecen en una fila en la que la columna Apellido comienza con 'Washington' de la cadena. SELECT First_Name, Last_Name FROM Employees WHERE Last_Name LIKE 'Washington%' Común comandos SQL Comandos SQL se dividen en categorías, las dos principales son Lenguaje de manipulación de datos (DML) y comandos de lenguaje de definición de datos (DDL) comandos. Comandos DML frente a los datos, o bien recuperar o modificar para mantenerlo al día. Comandos DDL crear o modificar tablas y otros objetos de base de datos como las vistas e índices. Una lista de los comandos DML más comunes las siguientes: *SELECCIONAR - se utiliza para consultar y mostrar los datos de una base de datos. La instrucción SELECT especifica las columnas que se incluyen en el conjunto de resultados. La gran mayoría de los comandos SQL en aplicaciones son declaraciones SELECT. *INSERT - añade nuevas filas a una tabla. Insertar se usa para rellenar una tabla de nueva creación o para agregar una nueva fila (o filas) a una tabla ya existente. *Eliminar - elimina una fila específica o un conjunto de filas de una tabla * UPDATE - cambia un valor existente en una columna o grupo de columnas de una tabla Los comandos DDL más comunes son las siguientes: *CREATE TABLE - Crea una tabla con los nombres de las columnas que el usuario proporcione. El usuario también debe especificar un tipo de datos de cada columna. Los tipos de datos varían de un RDBMS a otro, por lo que un usuario podría necesitar el uso de metadatos para establecer los tipos de datos utilizados por una base de datos particular. CREATE TABLE se utiliza normalmente con menos frecuencia que los comandos de manipulación de datos, porque se crea una tabla sólo una vez, mientras que la adición o eliminación de filas o el cambio de los valores individuales por lo general ocurre con más frecuencia. * DROP TABLE - borra todos los registros y elimina la definición de la tabla de la base de datos. Una implementación de JDBC API es necesaria para apoyar el comando DROP TABLE como se especifica en SQL92, Nivel de Transición. Sin embargo, el apoyo a la cascada y restringir las opciones de DROP TABLE es opcional. Además, el comportamiento de DROP TABLE es definido por la implementación cuando hay puntos de vista o las restricciones de integridad definidas que hacen referencia a la tabla que se cayó. * ALTER TABLE - agrega o quita una columna de una tabla. También agrega o quita las restricciones de tabla y los atributos altera columna Conjuntos de resultados y cursores Las filas que satisfacen las condiciones de una consulta se llama el conjunto de resultados. El número de filas devueltas en un conjunto de resultados puede ser cero, uno o muchos. Un usuario puede acceder a los datos en un conjunto de resultados de una fila a la vez, y un cursor proporciona los medios para hacerlo. Un cursor se puede considerar como un puntero en un archivo que contiene las filas del conjunto de resultados, y que el puntero tiene la capacidad de realizar un seguimiento de la fila que está siendo visitada. Un cursor permite al usuario procesar cada fila de un conjunto de resultados de arriba a abajo y por lo tanto pueden ser utilizados para el procesamiento iterativo. La mayoría de los DBMS crear un cursor de forma automática cuando un conjunto de resultados se genera. Anteriores versiones JDBC API añadido nuevas capacidades para el cursor un conjunto de resultados, lo que permite que se mueva hacia adelante y hacia atrás, y también permitiendo que se mueva a una fila determinada o en una fila cuya posición es relativa a otra fila. import java.sql.*; public class UpdateCar { public static void UpdateCarNum(int carNo, int empNo) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = DriverManager.getConnection("jdbc:default:connection"); pstmt = con.prepareStatement( "UPDATE EMPLOYEES SET CAR_NUMBER = ? " + "WHERE EMPLOYEE_NUMBER = ?"); pstmt.setInt(1, carNo); pstmt.setInt(2, empNo); pstmt.executeUpdate(); } finally { if (pstmt != null) pstmt.close(); } } } Metadatos Bases de datos almacenandatos del usuario,y tambiénalmacenar información sobre lamismabase de datos.La mayoría delos DBMStienen un conjunto detablas del sistema, que listalas tablasenla base de datos, nombres de columnas encada tabla, las claves primarias, claves foráneas, procedimientos almacenados, y así sucesivamente.CadaDBMStiene sus propias funcionespara obtener informaciónacerca de los diseñosy características dela tablade base de datos. JDBC proporciona lainterfazDatabaseMetaData, que un escritorconductor debeponer en prácticaa fin de quesus métodosdevuelven información sobreel conductor y /oDBMSpara el queel conductorestá escrito.Por ejemplo,un gran número demétodos dedevoluciónsi elcontrolador es compatible conuna funcionalidad particular. Esta interfazpermite a los usuariosy las herramientas deuna forma estandarizadapara obtener metadatos. En general, los desarrolladores de herramientas de escrituray los conductores sonlos más propensosa preocuparse porlos metadatos. BIBLIOGRAFIA es.wikipedia.org/wiki/Java_Database_Connectivity www.dcc.uchile.cl/~lmateu/CC60H/Trabajos/jfernand/ docs.oracle.com/jav