Lab 25: Manipulación de datos usando Transacciones

Introducción

Una transacción es una secuencia de operaciones realizadas como una sola unidad lógica de trabajo. Una unidad lógica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades ACID (atomicidad, coherencia, aislamiento y durabilidad), para ser calificada como transacción.


  • Atomicidad: Una transacción debe ser una unidad atómica de trabajo, tanto si se realizan todas sus modificaciones en los datos, como si no se realiza ninguna de ellas.

  • Coherencia: Cuando finaliza, una transacción debe dejar todos los datos en un estado coherente. En una base de datos relacional, se deben aplicar todas las reglas a las modificaciones de la transacción para mantener la integridad de todos los datos. Todas las estructuras internas de datos, como índices de árbol B o listas doblemente vinculadas, deben estar correctas al final de la transacción.

  • Aislamiento: Las modificaciones realizadas por transacciones simultáneas se deben aislar de las modificaciones llevadas a cabo por otras transacciones simultáneas. Una transacción ve los datos en el estado en que estaban antes de que otra transacción simultánea los modificara o después de que la segunda transacción se haya concluido, pero no ve un estado intermedio. Esto se conoce como seriabilidad debido a que su resultado es la capacidad de volver a cargar los datos iniciales y reproducir una serie de transacciones para finalizar con los datos en el mismo estado en que estaban después de realizar las transacciones originales.
    La serialización es un estado de base de datos que se obtiene mediante la ejecución de un conjunto de transacciones simultáneas y es equivalente al estado que se obtendría si se ejecutara el conjunto de transacciones en serie y por orden.

  • Durabilidad: Una vez concluida una transacción, sus efectos son permanentes en el sistema. Las modificaciones persisten aún en el caso de producirse un error del sistema.


Especificar y exigir transacciones

Los programadores de SQL son los responsables de iniciar y finalizar las transacciones en puntos que exijan la coherencia lógica de los datos.

El programador debe definir la secuencia de modificaciones de datos que los dejan en un estado coherente en relación con las reglas corporativas de la organización.

A continuación, el programador incluye estas instrucciones de modificación en una sola transacción de forma que el DBMS puede exigir la integridad física de la misma.

Es responsabilidad de un manejador de base de datos corporativo (SQL Server, Oracle, Informix, MariaDB, etc.) proporcionar los mecanismos que aseguren la integridad física de cada transacción.


Los manejadores proporcionan:
  • Servicios de bloqueo que preservan el aislamiento de la transacción.

  • Servicios de registro que aseguran la durabilidad de la transacción. Aún en el caso de que falle el hardware del servidor, el sistema operativo o el propio DBMS utiliza registros de transacciones "bitácoras o log files", al reinicio, para deshacer automáticamente las transacciones incompletas en el momento en que se produjo el error en el sistema.

  • Características de administración de transacciones que exigen la atomicidad y coherencia de la transacción. Una vez iniciada una transacción, debe concluirse correctamente o el DBMS deshará todas las modificaciones de datos realizadas desde que se inició la transacción.


Tipos de transacciones

En resumen, una transacción es una unidad única de trabajo. Si una transacción tiene éxito, todas las modificaciones de los datos realizadas durante la transacción se confirman y se convierten en una parte permanente de la base de datos. Si una transacción encuentra errores y debe cancelarse o deshacerse, se borran todas las modificaciones de los datos.



Los gestores de bases de datos funcionan en tres modos de transacción:
  • Transacciones de confirmación automática: Cada instrucción individual es una transacción (lo que ocurre por default al realizar un insert, update, delete, create, etc. en consola en el "analizador de consultas").

  • Transacciones explícitas: Cada transacción se inicia explícitamente con la instrucción BEGIN TRANSACTION y se termina explícitamente con una instrucción COMMIT o ROLLBACK.

  • Transacciones implícitas: Se inicia implícitamente una nueva transacción cuando se ha completado la anterior, pero cada transacción se completa explícitamente con una instrucción COMMIT o ROLLBACK.

    Es importante que las transacciones sean tan cortas como sea posible. Cuando se inicia una transacción, un DBMS debe mantener muchos recursos hasta el final de la transacción para proteger las propiedades ACID de la transacción. Si se modifican datos, se deben proteger las filas modificadas con bloqueos exclusivos que impidan que otra transacción lea las filas, y se deben mantener bloqueos exclusivos hasta que se confirme o se deshaga la transacción.

Nota: Para que logres una mayor comprensión del tema, se te recomienda que complementes lo leído en este laboratorio, con referencias bibliográficas adicionales e incluso revises la ayuda del manejador de bases de datos cuyo tema sea "transacciones".

Modalidad

Individual

Objetivos de aprendizaje
  • Comprender las características de una transacción
  • Aprender a implementar transacciones
Instrucciones
  • Sigue las indicaciones del profesor en la sesión de clase.
Especificaciones de entrega

A través de Bitbucket o Github.