1) Una
transacción en un Sistema de Gestión de Bases de Datos (SGBD), es un conjunto
de órdenes que se ejecutan formando una unidad de trabajo, es decir, en forma
indivisible o atómica.
Un SGBD se dice transaccional, si es capaz de mantener la
integridad de los datos, haciendo que estas transacciones no puedan finalizar
en un estado intermedio. Cuando por alguna causa el sistema debe cancelar la
transacción, empieza a deshacer las órdenes ejecutadas hasta dejar la base de
datos en su estado inicial (llamado punto de integridad), como si la orden de
la transacción nunca se hubiese realizado. Una transacción debe contar con ACID
(un acrónimo inglés) que quiere decir: Atomicidad, Consistencia, Aislamiento y
Durabilidad. Entonces para que un Sistema de Gestión de Bases de Datos sea
considerado Transaccional, debe cumplir con estos criterios (ACID).
DEFINICIONES DE TRANSACCIÓN:
Slide 3
2) 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 de atomicidad, coherencia, aislamiento
y durabilidad (ACID), para ser calificada como transacción.AtomicidadUna 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.
Slide 4
AislamientoLas modificaciones realizadas por transacciones simultáneas se deben aislar de las modificaciones llevadas a cabo por otras transacciones simultáneas. Una transacción reconoce 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 haya concluido, pero no reconoce un estado intermedio. Esto se conoce como seriabilidad, ya que deriva en 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.DurabilidadUna 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.
Slide 5
Las opciones de procesamiento de transacciones son las mismas para SQL que para PL/SQL. Las operaciones para manejo de transacciones son:
SET TRANSACTION inicializa una transacción y define las características clave.
COMMIT Finaliza la transacción actual salvando los cambios en la base de datos e iniciando una nueva transacción.
ROLLBACK Finaliza la transacción actual, descartando los cambios realizados en la base de datos.
SAVEPOINT Define un punto intermedio para que la transacción pueda realizar rollbacks parciales.
Transacciones
Slide 6
SET TRANSACTION
Este comando es utilizado para definir el inicio de una transacción. Alguno de los efectos que se puede lograr con el set transaction es que la transacción pueda ser definida de solo lectura (read-only). Ejemplos del uso del comando son:
SET TRANSACTION READ ONLY;SET TRANSACTION READ WRITE;
Slide 7
Este comando representa el punto del tiempo donde el usuario ha realizado una serie de cambio lógicos que se han agrupado y que dado que no ha habido errores, el usuario está listo para salvar su trabajo. De forma implícita se inicia una nueva transacción luego del COMMIT.Es importante saber que cuando el usuario sale de SQL*Plus se ejecuta un COMMIT automático, de igual forma cuando ejecuta un comando de definición de datos.COMMIT;COMMIT WORK;
COMMIT
Slide 8
Si el usuario se diera cuenta en cualquier punto de la transacción que cometió un error, puede descartar los cambios hechos en la base de datos utilizando el ROLLBACK. Luego del ROLLBACK, se inicia una nueva transacción. Siempre se ejecuta un rollback cuando ocurre un error en la ejecución o bien cuando el comando es finalizado con CTRL.+C.
ROLLBACK;ROLLBACK WORK;
ROLLBACK
Slide 9
En algunos casos tenemos transacciones muy grandes o que envuelven la modificación de muchos datos, y no se desea reversar la misma por haber tenido un pequeño error en la ejecución del último comando. Los savepoints permiten dividir el trabajo de la transacción diferentes segmentos. De esta forma el usuario puede ejecutar rollbacks para un savepoint solamente, dejando los cambios previos intactos. Veamos un ejemplo:
UPDATE spanky.products SET quantity = 55WHERE product# = 59495;SAVEPOINT A1; UPDATE spanky.productsSET quantity = 504;ROLLBACK TO SAVEPOINT A1;COMMIT;
SAVEPOINT
Slide 10
En el anterior ejemplo los cambios realizado por el segundo UPDATE no son salvados cuando se realiza el COMMIT, dado que el ROLLBACK anterior a este los revierte.
Recuerde que la base de datos provee de los mecanismos de bloqueo para que solo un usuario pueda modificar a la vez un registro de la base de datos.
Otro aspecto importante, para el caso de PL/SQL, es que el inicio de un bloque no define el inicio de una transacción.