miércoles, 20 de marzo de 2013

Actividad #17, #18, #19 & #20

Actividad # 17


Planear y definir la estructura lógica de la base de datos de acuerdo a los recursos disponibles –memoria y disco. (Utilice el  problema de la Veterinaria)  incluya toda la secuencia, (esquema conceptual, esquema lógico y esquema físico), calcular el numero de bytes por registro (de acuerdo al tipo de datos) y cuantos bytes aproximados se requiere para almacenar los datos de  100 pacientes con un promedio de  6 consultas al año) deben contener todos los campos  incluidos en la hoja clínica en el diseño.



Nombre Tabla
Tamaño (Bytes)
100 Registros(KB)
Promedio 6 consultas por año (bytes)
Datos mascota
120
1.2
720
Datos medio ambiente
50
5.0
300
Historial medica
30
3.0
180
Motivo
40
4.0
240
Propietario
70
7.0
420
Total
310
20.2
1820



Actividad  #18
Implementar el esquema de base de datos de la clínica veterinaria (incluir todas las tablas y  datos de 5 pacientes con 2  registros de   visita a la clínica cada  uno) 


Actividad #19
Crear espacios de trabajo para tres usuarios de niveles distintos, con restricciones de almacenamiento acordes a cada perfil de usuario.
Usuario administrador :( todos los privilegios)
Usuario: medico veterinario: (con privilegios para  borrar, agregar y modificar datos pero no para modificar estructuras de las tablas)
Usuario Asistente: solo tiene privilegios de consulta



CREACIÓN DE INDICE


Bitacora


Base de datos en la nube


Base de datos en la nube
Una base de datos en la nube es una base de datos que se ejecuta en la nube. Hay dos modelos de implementación: los usuarios pueden ejecutar la base de datos en la nube de forma independiente, utilizando una imagen de máquina virtual, o pueden comprar el acceso a un servicio de base de datos, gestionada por un proveedor de base de datos en nube. De las bases de datos disponibles en la nube, algunas son basadas en SQL y algunos utilizan un modelo de datos NoSQL.
Implementación del modelo
Existen dos métodos principales para ejecutar una base de datos en la nube:
Imagen de máquina virtual: Las plataformas en la nube permiten a los usuarios comprar instancias de máquinas virtuales por un tiempo limitado. Es posible ejecutar una base de datos en estas máquinas virtuales. Los usuarios pueden subir su imagen propia con una base de datos instalada en ella, o utilizar imágenes prefabricadas de máquinas que ya incluyen una instalación optimizada de una base de datos. Por ejemplo Oracle provee una imagen prefabricada con una instalación de Oracle Database 11g Enterprise Edition on Amazon EC2.

Base de datos como servicio: Algunas plataformas en la nube ofrecen opciones para el uso de bases de datos como servicio, sin lanzar físicamente una instancia de máquina virtual para la base de datos. En esta configuración, los propietarios de aplicaciones no tienen que instalar y mantener la base de datos por su cuenta. En cambio, el proveedor de servicios de base de datos se encarga de la instalación y el mantenimiento de la base de datos, y los propietarios de aplicaciones pagan de acuerdo a su uso.

Por ejemplo, Amazon Web Services provee dos servicios de base de datos como parte de su oferta en la nube, SimpleDB que almacena pares llave-valor en formato NoSql y Amazon Relational Database Service que esta basado en SQL con una interfaz MySql.
Una tercera opción es administrar el alojamiento de una base de datos en la nube, donde la base de datos no se ofrece como un servicio, pero el proveedor de la nube aloja la base de datos y administra en nombre del propietario de la aplicación. Por ejemplo, el servicio en la nube de Rackspace ofrece alojamiento gestionado para bases de datos MySQL.

Arquitectura y características en común
La mayoría de los servicios de bases de datos ofrecen consolas web, que el usuario final puede utilizar para aprovisionar y configurar las instancias de la base de datos. Por ejemplo, la consola web de Amazon Web Services permite a los usuarios lanzar instancias de bases de datos, crear instantáneas (similar a las copias de seguridad) de bases de datos y realizar un seguimiento de las estadísticas de la base de datos.
Los servicios de las bases de datos consisten en un componente de administración que controla las instancias de cada base de datos subyacente utilizando una API de servicios. La API de servicios se expone al usuario final, y permite a los usuarios realizar operaciones de mantenimiento y ampliar sus instancias de la base de datos. Por ejemplo, el servicio de Amazon Relational Database provee una API que permite crear una instancia de una base de datos, modificar los recursos disponibles de cada instancia, eliminar una instancia, la creación de una instantánea (similar a una copia de seguridad) de una base de datos y restauración de una base de datos a partir de una instantánea.
Los servicios de las bases de datos mantienen la pila del software subyacente, transparente al usuario - la pila normalmente incluye el sistema operativo, base de datos y el software de terceros utilizado por la base de datos. El proveedor de servicios es responsable de la instalación, parches y actualización de la pila de software subyacente.
Los servicios de las bases de datos cuidan la escalabilidad y la alta disponibilidad de la base de datos. Características de escalabilidad difieren entre los proveedores - algunos ofrecen auto-escala, mientras que otros permiten al usuario ampliar mediante una API, pero no escalar automáticamente.
Modelo de datos
También es importante diferenciar entre bases de datos en la nube que son relacionales en oposición a las no relacionales (NoSQL):
Bases de datos SQL, son un tipo de base de datos que se puede ejecutar en la nube (ya sea como una imagen de máquina virtual o como un servicio, dependiendo del proveedor). Las bases de datos SQL poseen baja escalabilidad, ya que no fueron nativamente diseñadas para entornos en la nube, aunque los servicios en la nube de base de datos basado en SQL están tratando de hacer frente a este desafío.
Bases de datos NoSQL, son otro tipo de base de datos que puede ejecutarse en la nube. Las bases de datos NoSQL están diseñados para servir cargas pesadas de lecto-escritura y son capaces de escalar hacia arriba y hacia abajo con facilidad.
Y por lo tanto son más adecuadas para funcionar de forma nativa en la nube. Sin embargo, la mayoría de las aplicaciones actuales se construyen en torno a un modelo de datos SQL, así que trabajar con bases de datos NoSQL con frecuencia requiere una reescritura completa del código de la aplicación


Diez de las más útiles bases de datos en la nube
Amazon Web Services
Tiene una variedad de servicios de bases de datos basadas en la nube, incluyendo bases de datos relacionales y NoSQL. Amazon Relational Database (SDR) ejecuta MySQL, Oracle o instancias de SQL Server, mientras que Amazon SimpleDB es una base de datos en menor escala pensada para cargas de trabajo más pequeñas. Por el lado de NoSQL, Amazon DynamoDB es su base de datos de unidad de estado sólido (SSD) que automáticamente replica cargas de trabajo en al menos tres zonas de disponibilidad. El CTO de AWS, Werner Vogels, señala que DynamoDB es el servicio de más rápido crecimiento en la historia de AWS. Amazon también ofrece una variedad de servicios auxiliares de gestión de datos, tales como su almacén de datos denominado Redshift, así como Data Pipeline, que ayuda a que los usuarios integren datos de múltiples fuentes para facilitar la gestión.

EnterpriseDB
Se centra en las bases de datos de código abierto PostgreSQL, pero su verdadero reclamo a la fama es su capacidad para trabajar con las aplicaciones de la base de datos Oracle. Con Postgres Plus Advanced Server de EnterpriseDB, las organizaciones pueden utilizar las aplicaciones escritas para bases de datos en las instalaciones de Oracle a través de EnterpriseDB, que se ejecuta en nubes de Amazon Web Services y HP. Tiene replicación binaria y copias de seguridad programadas.

Garantia Data
Ofrece un servicio de puerta de enlace para que los usuarios ejecuten Redis de código abierto y servicios de bases de datos Memcached NoSQL en memoria en la nube pública de AWS. El uso de software de Garantia permite la configuración automática de estos datos de código abierto al ayudar a que los desarrolladores de plataformas escalen nodos, creen grupos y construyan la tolerancia a fallas.

Google Cloud SQL
El servicio de base de datos en la nube de Google se centra en dos productos principales: Google Cloud SQL, que Google describe como una infraestructura de base de datos MySQL completamente relacional; y Google BigQuery, una herramienta de análisis para ejecutar consultas en grandes conjuntos de datos almacenados en la nube.

Microsoft Azure
Microsoft utiliza su tecnologia de servidor de SQL para proporcionar una base de datos relacional, permitiendo que los clientes accedan a una base de datos SQL ya sea en su nube, o en instancias de servidor SQL en las máquinas virtuales. Microsoft también hace hincapié en las bases de datos híbridas que combinan datos tanto en las instalaciones del cliente como en la nube Azure a través de SQL Data Sync. Microsoft tiene un servicio de nube alojada en la base de datos NoSQL llamada Tables, mientras que Blobs (almacenamiento de objeto binario grande), se ha optimizado para archivos multimedia, como audio y video.

MongoLab

En el mundo NoSQL, hay una variedad de plataformas de base de datos para elegir, incluyendo Mongob. MongoLab ofrece a los usuarios el acceso a MongoDB en una variedad de otros importantes proveedores de nube, incluyendo AWS, Azure y Joyent. Al igual que los otros tipos de servicios de puerta de enlace, MongoLab también se integra con varias herramientas de plataformas como servicio (PaaS) en el nivel de aplicación. MongoLab funciona con entornos compartidos o dedicados, siendo el último ligeramente más caro.

Rackspace
La base de datos de Rackspace viene en una nube o en una oferta gestionada a través de Cloud Databases es el nombre de su producto. Rackspace pone énfasis en la virtualización basada en contenedores de sus Cloud Databases, que dicen permitir un mayor rendimiento en el servicio de base de datos en comparación a si se ejecuta por completo en la infraestructura virtualizada. Cloud Databases también incorpora una red de almacenamiento SAN y se basa en una plataforma OpenStack. En diciembre pasado, Rackspace anunció una base de datos NoSQL en su nube del proveedor Cloudant.

SAP
Es una plataforma basada en la tecnología en memoria. Su base de datos en nube complementa las herramientas de base de datos que están en las instalaciones de la empresa -incluyendo Sybase-, y está disponible en la nube de Amazon Web Services. HANA incluye otras aplicaciones que no son de bases de datos, como herramientas de gestión empresarial y desarrollo de aplicaciones.

StormDB
Sigue su distribución completa de base de datos relacional en los servidores de metal, lo que significa que no hay virtualización de máquinas. Los funcionarios de StormDB afirman que esto conduce a un mejor rendimiento y a una gestión más sencilla, porque los usuarios no tienen que elegir el tamaño de las instancias de máquina virtual que se ejecuta en su base de datos. A pesar de que se ejecuta en bare metal, los clientes no tienen que escoger el tamaño de instancias de máquinas virtuales sobre la que se ejecuta su base de datos, aunque StormDB promete aislamiento entre las bases de datos de los clientes. StormDB también fragmenta automáticamente bases de datos en la nube. La compañía se encuentra actualmente en versión beta gratuita.

Xeround
Es una herramienta de gestión para la implementación de bases de datos MySQL fácilmente escalables a través de una variedad de proveedores y plataformas de nube. Su software permite una alta disponibilidad y escalabilidad, y funciona a través de una variedad de proveedores de nube incluyendo AWS, Rackspace, Joyent y HP, así como OpenStack y plataformas Citrix.
 

martes, 12 de marzo de 2013

PARTICIONAMIENTO MYSQL & ORACLE

PARTICIONAMIENTO MYSQL
Particionar tablas en MySQL nos permite rotar la información de nuestras tablas en diferentes particiones, consiguiendo así realizar consultas más rápidas y recuperar espacio en disco al borrar los registros. El uso más común de particionado es según fecha (date).

Para ver si nuestra base de datos soporta particionado simplemente ejecutamos:

SHOW VARIABLES LIKE '%partition%';

Consiste en dividir los datos en particiones más pequeñas (hasta 1024) procurando, porque de otra forma sería absurdo, que sólo haya que acceder a una partición a la hora de buscar una tupla.

Se puede particionar una tabla de 5 maneras diferentes:
Por rango: para construir nuestras particiones especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en 12 particiones: una para los contratos de 1950 a 1960, otra para los años 60, los 70, 80, 90, la década del 2000 y la década actual
    

    1. ALTER TABLE contratos
    2. PARTITION BY RANGE(YEAR(fechaInicio)) (
    3. PARTITION partDecada50 VALUES LESS THAN (1960),
    4. PARTITION partDecada60 VALUES LESS THAN (1970),
    5. PARTITION partDecada70 VALUES LESS THAN (1980),
    6. PARTITION partDecada80 VALUES LESS THAN (1990),
    7. PARTITION partDecada90 VALUES LESS THAN (2000),
    8. PARTITION partDecada00 VALUES LESS THAN (2010),
    9. PARTITION partDecada10 VALUES LESS THAN MAXVALUE
    10. );

  • Por listas: para construir nuestras particiones especificamos listas de valores concretos.

    1. ALTER TABLE contratos
    2. PARTITION BY LIST(YEAR(fechaInicio)) (
    3. PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959),
    4. PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969),
    5. PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979),
    6. PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989),
    7. PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999),
    8. PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003, 2004, 2005, 2006,
    9. 2007, 2008, 2009),
    10. PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013, 2014, 2015, 2016,
    11. 2017, 2018, 2019)
    12. );

  • Por hash: MySQL se encarga de distribuir las tuplas automáticamente usando una operación de módulo. Sólo hay que pasarle una columna o expresión que resulte en un entero (el hash) y el número de particiones que queramos crear.
    1. ALTER TABLE contratos
    2. PARTITION BY HASH(YEAR(fechaInicio))
    3. PARTITIONS 7; R TABLE contratos
PARTITION BY HASH(YEAR(fechaInicio))PARTITIONS
  • Por clave: similar a la partición por hash, pero en este caso no necesitamos pasarle un entero; MySQL utilizará su propia función de hash para generarlo. Si no se indica ninguna columna a partir de la que generar el hash, se utiliza la clave primaria por defecto.
    1. ALTER TABLE contratos
    2. PARTITION BY KEY()
    3. PARTITIONS 7;
  • Compuesta: podemos combinar los distintos métodos de particionado y crear particiones de particiones

Por último, un pequeño ejemplo de cómo afectaría el particionado a una consulta sencilla como obtener el número total de tuplas que cumplen una condición. Estas son las estadísticas de la consulta sin particionado (ni índices)

    1. EXPLAIN SELECT COUNT(*)
    2. FROM contratos
    3. WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'
EXPLAIN SELECT COUNT(*)
FROM contratosWHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'
select_type
table
type
key
rows
Extra
SIMPLE
contratos
ALL
239796
Using where

Y este el resultado de añadir las particiones (nótese la palabra clave PARTITIONS para que nos muestre también la información relativa a las particiones)

1.     EXPLAIN PARTITIONS SELECT COUNT(*)

2.    FROM contratos

3.    WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'

WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'

select_type
table
partitions
type
key
rows
Extra
SIMPLE
contratos
partDecada50
ALL
8640
Using where

Como véis, el número de tuplas que MySQL tiene que comprobar se ve disminunido en 2 órdenes de magnitud.

PARTICIONES EN ORACLE

El particionado se realiza utilizando una clave de particionado (partitioning key), que determina en que partición de las existentes en la tabla van a residir los datos que se insertan. Oracle también permite realizar el particionado de indices y de tablas organizadas por indices. Cada partición ademas puede tener sus propias propiedades de almacenamiento. Las tablas particionadas aparecen en el sistema como una única tabla, realizando el sistema la gestión automatica de lectura y escritura en cada una de las particiones (excepto para el caso de la partición de Sistema introducida en la versión 11g). La definición de las particiones se indica en la sentencia de creación de las tablas, con la sintaxis oportuna para cada uno de los tipos.

  • Particionado Range: la clave de particionado viene determinada por un rango de valores, que determina la partición donde se almacenara un valor.
  • Particionado Hash: la clave de particionado es una función hash, aplicada sobre una columna, que tiene como objetivo realizar una distribución equitativa de los registros sobre las diferentes particiones. Es útil para particionar tablas donde no hay unos criterios de particionado claros, pero en la que se quiere mejor el rendimiento.
  • Particionado List: la clave de particionado es una lista de valores, que determina cada una de las particiones.
  • Particionado Composite: los particionados anteriores eran del tipo simples (single o one-level), pues utilizamos un unico método de particionado sobre una o mas columnas. Oracle nos permite utilizar metodos de particionado compuestos, utilizando un primer particionado de un tipo determinado, y luego para cada particion, realizar un segundo nivel de particionado utilizando otro metodo. Las combinaciones son las siguientes (se han ido ampliando conforme han ido avanzando las versiones): range-hash, range-list, range-range, list-range, list-list, list-hash y hash-hash (introducido en la versión 11g).
  • Particionado Interval: tipo de particionado introducido igualmente en la versión 11g. En lugar de indicar los rangos de valores que van a determinar como se realiza el particionado, el sistema automáticamente creara las particiones cuando se inserte un nuevo registro en la b.d. Las técnicas de este tipo disponible son Interval, Interval List, Interval Range e Interval Hash (por lo que el particionado Interval es complementario a las técnicas de particionado vistas anteriormente).
  • Particionado System: se define la tabla particionada indicando las particiones deseadas, pero no se indica una clave de particionamiento. En este tipo de particionado, se delega la gestión del particionado a las aplicaciones que utilicen la base de datos (por ejemplo, en las sentencias sql de inserción deberemos de indicar en que partición insertamos los datos).

REFERENCIAS




 

 

viernes, 8 de marzo de 2013

Actividad #15 & #16

PARTICIONES
Cuando hablamos de particiones estamos hablando de dividir un disco duro en varias partes, cada una de las cuales se comportará como si fuera un disco duro independiente de los demás. L os sistemas operativos no trabajan con unidades físicas directamente, sino con unidades lógicas que reciben el nombre de particiones. Por regla general al instalar un nuevo sistema operativo una sola partición ocupará toda la superficie del disco. Sin embargo, es muy interesante tener más de una partición para, por ejemplo, hacer una copia de seguridad de nuestros datos. Para ello, el sistema operativo simula un segundo disco aunque físicamente solo dispongamos de uno.

Las particiones pueden ser de dos tipos:
1.     Partición primaria. Es la partición desde la que puede arrancar el sistema operativo. Para que esto sea posible, esta partición debe estar marcada como partición activa.

2.     Partición extendida. Es la p artición que no puede contener los archivos necesarios para arrancar el sistema y que puede ser subdividida en unidades lógicas. Este tipo de particiones sirven para guardar ficheros. En esta partición extendida se crean las unidades lógicas.

SISTEMA DE ARCHIVOS Un sistema de archivos es una estructura que permite tanto el almacenamiento, organización jerárquica, manipulación, navegación, acceso y consulta de datos de en una partición, como su modificación y recuperación.
Para que una partición pueda ser utilizada, es necesario asignarle previamente un sistema de archivos. Esta operación se denomina dar formato a una partición .
Normalmente, cada sistema de archivos ha sido diseñado para obtener el mejor rendimiento de un sistema operativo concreto, pero sin embargo, es muy normal que un sistema operativo reconozca varios tipos de sistemas de archivos.

Los sistemas de archivos más comunes:
FAT (File Allocation Table, tabla de asignación de archivos)
Este sistema de archivos se basa en un índice en el que se hace referencia a los datos que hay en un disco duro, y a la situación de los mismos.

Este sistema es compatible con la mayoría de sistemas operativos, pero también posee una serie de limitaciones como por ejemplo que el tamaño máximo de la partición es de 2 GB, que solo admite nombres de archivos cortos, una elevada fragmentación de los archivos debido a un tamaño del cluster demasiado grande, etc. Es el sistema de archivos típico de DOS.
VFAT (Virtual FAT)
Este sistema de archivos es una mejora del anterior con el que se logra ampliar el límite de los nombres de archivos y directorios de 8 a 255 caracteres entre el nombre y la extensión.

FAT32 (FAT de 32 bits)
Nos permite trabajar con particiones mayores de 2 GB. Además, el tamaño del cluster es mucho menor, con lo que la fragmentación de los archivos disminuye, el sistema no se ralentiza tanto y no se desperdicia tanto espacio como ocurría en las particiones FAT.

Este sistema de archivos lo podemos encontrar en Windows95 (no en sus primeras versiones) pero sobre todo a partir de Windows 98, por lo que hay que tener en cuenta que versiones anteriores de Windows y MS-DOS no pueden acceder a los datos almacenados en una partición FAT32.
NTFS (New Technology File System, sistema de archivos de nueva tecnología)
Este es el sistema de archivos nativo de Windows NT, que además de ser muy eficiente y robusto, permite controlar el acceso a archivos o directorios utilizando todas las características de seguridad y protección de archivos de Windows NT. NTFS es recomendable para particiones grandes, ya que las estructuras del sistema consumen gran cantidad de espacio. Además, podemos definir el tamaño del cluster a partir de 512 bytes (tamaño de un sector) de forma independiente al tamaño de la partición. De esta manera se evita la fragmentación y hay un menor desaprovechamiento del disco, lo que hace de este sistema de archivos el sistema ideal para las particiones de gran tamaño requeridas en ordenadores de gran capacidad y servidores.

Es el sistema de archivos empleado en Windows NT, Windows 2000, Windows XP y Windows 2003.
HPFS (High Performance File System, sistema de archivos de alto rendimiento)
Es el sistema de archivos propio de OS/2. Utiliza una estructura muy eficiente para organizar los datos en las particiones, ya que no utiliza clusters, sino que directamente los organiza en sectores del disco (que equivalen a un cluster de 512 bytes).

EXT2 (second extended filesystem o "segundo sistema de archivos extendido")
Es un sistema de archivos mucho más avanzado que el FAT de windows. Este sistema de archivos tiene soporte de corrección y detección de errores, compresión de archivos, menor fragmentación de los archivos y una velocidad de acceso a los datos muy superiores, aunque para ello tiene que utilizar más memoria.
El ext2 tiene una unidad similar al cluster, llamada bloque, y que es, por lo general de 1K, independiente del tamaño de la partición y con un tamaño que puede ser modificado por el usuario, lo cual asegura un aprovechamiento eficaz del espacio libre con archivos pequeños.

Ext3 ( third extended filesystem o "tercer sistema de archivos extendido") Es una versión mejorada de ext2 en la que se incorpora un registro por diario (en inglés journaling), que se utiliza para mantener la consistencia en el sistema.

EXT3 posee una serie de mejoras con respecto a EXT2 como por ejemplo:

·         Permite migrar del sistema de archivos EXT2 sin necesidad de reformatear el disco.

·         Puede ser montado y usado como un sistema de archivos EXT2.

·         Proporciona una integridad superior de los datos si se produce un cierre incorrecto del sistema.

·         El registro por diario permite optimizar el movimiento de los cabezales de los discos duros aumentando la velocidad de escritura/lectura de los datos.


BITACORA
QUE ES UNA BITÁCORA:
Herramienta que permite registrar, analizar, detectar y notificar eventos que sucedan en cualquier sistema de información utilizado en las organizaciones. La estructura más ampliamente usada para grabar las modificaciones de la base de datos.
Una bitácora permite guardar las transacciones realizadas sobre una base de datos en específico, de tal manera que estas transacciones puedan ser auditadas y analizadas posteriormente.
Pueden obtenerse datos específicos de la transacción como son la Operación que se realizo, el Usuario de BD y Windows, Fecha, Maquina y Programa.
BENEFICIOS
·         No se requiere hacer cambios en los sistemas de producción para la implementación de la bitácora.
·         A través de la parametrización se generan las pantallas de consulta y reportes sin necesidad de programar.
·         Acceso a la bitácora a través de una aplicación WEB.
·         Control de Acceso a la información de la bitácora a través de Roles.
·         Se puede implementar en los sistemas de información que utilicen las principales bases de datos del mercado:
·         ORACLE, SQL SERVER,
·         INFORMIX, SYBASE.
·         Permite hacer el seguimiento de todos los cambios que ha tenido un registro.
·         Registra información acerca de eventos relacionados con el sistema que la genara.
·         Reduce riesgos operacionales por cambios no autorizados.
·         Se envían alertas cuando se realizan cambios a la configuración del sistema, permitiendo corregir a tiempo malas configuraciones.
·         Permite dar el seguimiento a cada una de las alertas generadas de acuerdo a los parámetros establecidos por el usuario.
La estructura más ampliamente usada para grabar las modificaciones de la base de datos es la Bitácora.
Cada registro de la bitácora escribe una única escritura de base de datos y tiene lo siguiente:
  1. Nombre de la transacción: Nombre de la transacción que realizó la operación de escritura.
  2. Nombre del dato: El nombre único del dato escrito.
  3. Valor antiguo: El valor del dato antes de la escritura.
  4. Valor nuevo: El valor que tendrá el dato después de  la escritura.
Existen otros registros de bitácora especiales para grabar sucesos importantes durante el proceso de transacción tales como :
< T1, inicio >
< T1, x, v1, v2 >
< T1, commit >
Es fundamental que siempre se cree un registro en la bitácora cuando se realice una escritura antes de que se modifique la base de datos.
También tenemos la posibilidad de deshacer una modificación que ya se ha escrito en la base de datos, esto se realizará usando el campo del valor antiguo de los registros de la bitácora.
Los registros de la bitácora deben residir en memoria estable como resultado el volumen de datos en la bitácora puede ser exageradamente grande.
Una bitácora puede registrar mucha información acerca de eventos relacionados con el sistema que la genera los cuales pueden ser:
  • Fecha y hora.
  • Host origen.
  • Usuario.
  • Actividad realizada.
La importancia de las bitácoras es la de recuperar información ante incidentes de seguridad, detección de comportamiento inusual, información para resolver problemas, evidencia legal, es de gran ayuda en las tareas de cómputo forense.
TIPOS DE BITACORA
}  El sistema guarda diferentes tipos de registros en la bitácora,  dependiendo del evento ocurrido en la BD.
}  Por ejemplo:
}  Un “registro de actualización” describe una escritura única en la BD y tiene los campos:
      ID_Transacción.
      ID_elemento_datos.
      Valor anterior.
      Valor nuevo.
}  Otros registros indican eventos especiales como: inicio de transacción, éxito o fracaso de la misma. Una posible vista de la bitácora puede ser:

EJEMPLO EN MYSQL
Ejemplo de una bitácora desarrollada para la siguiente base de datos de MySQL, llamada proyecto, que tiene las tablas carrera, departamento y maestros.
CREATE DATABASE proyecto;
USE proyecto
CREATE TABLE IF NOT EXISTS `carrera` (`clave_carrera` int(11) NOT NULL, `nom_carrera` varchar(20) NOT NULL, `num_depto` int(11) NOT NULL, PRIMARY KEY (`clave_carrera`), KEY `num_depto` (`num_depto`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `departamento` ( `num_departamento` int(11) NOT NULL,`nombre_dept` varchar(20) NOT NULL, `jefe_num_tarjet` int(11) NOT NULL, PRIMARY KEY (`num_departamento`), KEY `jefe_num_tarjet` (`jefe_num_tarjet`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `maestros` (`num_tarjeta` int(11) NOT NULL DEFAULT ’0,`nombre` varchar(50) DEFAULT NULL, PRIMARY KEY (`num_tarjeta`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;
La estructura de la tabla bitácora sería la siguiente:
CREATE TABLE IF NOT EXISTS `bitacora` (`id` int(11) NOT NULL AUTO_INCREMENT, `operacion` varchar(10) DEFAULT NULL, `usuario` varchar(40) DEFAULT NULL, `host` varchar(30) NOT NULL, `modificado` datetime DEFAULT NULL, `tabla` varchar(40) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
La bitácora debe registrar todos los movimientos (insertar, eliminar y modificar) que se realicen en las tablas de la base de datos. Para lograr lo anterior es necesario crear un trigger para que se ejecute después de la operación de insertar, otro para después de eliminar y el último para después de modificar para cada una de las 3 tablas de la base de datos. Los nueve triggers necesarios para que funcione la bitácora son los siguientes:
DROP TRIGGER IF EXISTS `bit_carr_ins`;
DELIMITER //
CREATE TRIGGER `bitacora` AFTER INSERT ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_carr_upd`;
CREATE TRIGGER `bit_carr_upd` AFTER UPDATE ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_carr_del`;
CREATE TRIGGER `bit_carr_del` AFTER DELETE ON `carrera`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “CARRERA”)
//
DROP TRIGGER IF EXISTS `bit_depto_ins`;
CREATE TRIGGER `bit_depto_ins` AFTER INSERT ON `departamento`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “DEPARTAMENTO”)
//
DROP TRIGGER IF EXISTS `bit_depto_upd`;
CREATE TRIGGER `bit_depto_upd` AFTER UPDATE ON `departamento`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “DEPARTAMENTO”)
//
DROP TRIGGER IF EXISTS `bit_depto_del`;
CREATE TRIGGER `bit_depto_del` AFTER DELETE ON `departamento`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “DEPARTAMENTO”)
//
DROP TRIGGER IF EXISTS `bit_mae_ins`;
CREATE TRIGGER `bit_mae_ins` AFTER INSERT ON `maestros`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “INSERTAR”, NOW(), “MAESTROS”)
//
DROP TRIGGER IF EXISTS `bit_mae_upd`;
CREATE TRIGGER `bit_mae_upd` AFTER UPDATE ON `maestros`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ACTUALIZAR”, NOW(), “MAESTROS”)
//
DROP TRIGGER IF EXISTS `bit_mae_del`;
CREATE TRIGGER `bit_mae_del` AFTER DELETE ON `maestros`
FOR EACH ROW INSERT INTO bitacora(host, usuario, operacion, modificado, tabla) VALUES (SUBSTRING(USER(), (INSTR(USER(),’@')+1)), SUBSTRING(USER(),1,(instr(user(),’@')-1)), “ELIMINAR”, NOW(), “MAESTROS”)
//
El resultado que se espera de la bitácora se muestra en la siguiente imagen.
REFERENCIAS
http://recursostic.educacion.es/observatorio/web/ca/equipamiento-tecnologico/hardware/362-eduardo-e-quiroga