TRANSACCIONES
Se
define como transacción a una colección de operaciones que forman una unidad
lógica de trabajo en una BD realizada por una o más sentencias SQL estrechamente
relacionadas. En otras palabras es una unidad de la ejecución de un programa
que lee y escribe datos a y desde la Base de Datos. Puede consistir en varias
operaciones.
Una Transacción
está delimitada por instrucciones de inicio
transacción y fin transacción (la transacción consiste en todas las
operaciones que se ejecutan entre inicio transacción y fin transacción). las
transacciones agrupan una serie de operaciones de manera que es posible
garantizar la integridad del resultado final. O todas las operaciones se
ejecutan con éxito y se confirman o toda la transacción se considera no
realizada.
PROPIEDADES DE LA TRANSACCIÓN
ACID (atomicidad, coherencia, aislamiento y durabilidad), para ser calificacada como transacción.
·
Atomicity: Una Transacción (Tx) se ejecuta completamente ó de otra
manera se eliminan los cambios parciales realizados.
Begin Transaction -
Programa - End Transaction
·
Coherencia: Asegura que los datos que observamos
no cambian (por otros usuarios) hasta que termine la Transacción.
·
Aislamiento: Los efectos de una Tx no son visibles a otros
usuarios mientras no se confirmen.
Una Transacción en ejecución no puede revelar sus resultados a otras
transacciones concurrentes antes de finalizar.
·
Durabilidad: Si el sistema falla no debe permitir
que se pierdan las operaciones realizadas por Tx ya confirmadas.
Control de transacciones en Oracle
° Inicio de transacción
Cuando no hay ya una transacción en progreso, y se ejecuta una sentencia LDD o LMD(interactivamente
o dentro de una aplicación)
Cada sentencia LDD es tratada como una transacción N
° Fin de transacción
COMMIT: Finaliza
la transacción actual y hace permanentes (confirma) los cambios realizados
ROLLBACK: Finaliza
la transacción actual y deshace los cambios realizados
Sentencia COMMIT
Una sentencia COMMIT marca el final de una transacción
correcta, implícita o definida por el usuario. COMMIT hace que
todas las modificaciones efectuadas sobre los datos desde el inicio de la
transacción sean parte permanente de la base de datos, y además, libera los
recursos mantenidos por la conexión.
COMMENT sirve para comentar la
transacción en un máximo 255 caracteres. FORCE fuera de modo
manual una transacción dudosa y es de uso exclusivo en sistemas distribuidos de
base de datos.
Sentencia SAVEPOINT
Esta sentencia permite crear un punto de restauración dentro de una
transacción, es decir, un punto al que podremos retroceder deshaciendo todo lo
hecho deshaciendo todo lo hecho desde él en adelante. Su sintaxis es la
siguiente
SAVEPOINT nombrePuntoRestauración;
Sentencia ROLLBACK
Señala el final sin éxito de una transacción, elimina todas las
modificaciones de datos realizadas desde el inicio de la transacción y también
libera los recursos que retiene la transacción.
ROLLBACK [WORK] [TO SAVEPOINT nombrePuntoRestauración | FORCE 'texto'];
GRADOS DE
CONSISTENCIA
Consistencia se
define como la coherencia entre todos los datos de la base de datos.
Una transacción finalizada (confirmada
parcialmente) puede no confirmarse definitivamente (consistencia).
La ejecución de una transacción debe
conducir a un estado de la base de datos consistente (cumplir todas las
restricciones de integridad definidas).
·
Si se
confirma definitivamente el sistema asegura la persistencia de los cambios que
ha efectuado en la base de datos.
·
De lo contrario
los cambios que ha efectuado son deshechos.
Una transacción que termina con éxito
se dice que está comprometida (commited).
° En cualquier momento una transacción sólo
puede estar en uno de los siguientes estados.
·
Activa
(Active): el estado inicial; la transacción
permanece en este estado durante su ejecución.
·
Parcialmente
comprometida (Uncommited): Después de ejecutarse la última
transacción.
·
Fallida
(Failed): tras descubrir que no se puede
continuar la ejecución normal.
·
Abortada
(Rolled Back): después de haber retrocedido la
transacción y restablecido la base de datos a su estado anterior al comienzo de
la transacción.
·
Comprometida
(Commited): tras completarse con éxito.
Aspectos relacionados al procesamiento de transacciones
·
Modelo de estructura de transacciones. Es importante considerar si las transacciones son planas o pueden estar
anidadas.
·
Consistencia de la base de datos interna. Los algoritmos de control de datos semántico tienen que satisfacer
siempre las restricciones de integridad cuando una transacción pretende hacer
un commit.
·
Protocolos de confiabilidad. En transacciones distribuidas es necesario introducir medios de
comunicación entre los diferentes nodos de una red para garantizar la atomicidad y durabilidad de las
transacciones. Así también, se requieren protocolos para la recuperación local
y para efectuar los compromisos (commit) globales.
·
Algoritmos de control de concurrencia. Los algoritmos de control de concurrencia deben sincronizar la ejecución
de transacciones concurrentes bajo el criterio de correctitud. La consistencia
entre transacciones se garantiza mediante el aislamiento de las mismas.
·
Protocolos de control de réplicas. El control de réplicas se refiere a cómo garantizar la consistencia
mutua de datos replicados. Por ejemplo se puede seguir la estrategia
read-one-write-all (ROWA).
NIVELES DE AISLAMIENTO
El nivel de aislamiento para una sesión SQL establece el comportamiento
de los bloqueos para las instrucciones SQL.
Control de los niveles de aislamiento de transacción:
·
Controla
si se realizan bloqueos cuando se leen los datos y qué tipos de bloqueos se
solicitan.
·
Duración
de los bloqueos de lectura.
·
Si una
operación de lectura que hace referencia a filas modificadas por otra
transacción:
o
Se
bloquea hasta que se libera el bloqueo exclusivo de la fila.
o
Recupera
la versión confirmada de la fila que existía en el momento en el que empezó la
instrucción o la transacción.
o
Lee la
modificación de los datos no confirmados.
ANSI/ISO SQL define cuatro niveles de
aislamiento transaccional en función de tres eventos que son permitidos o no
dependiendo del nivel de aislamiento. Estos eventos son:
Lectura
sucia. Las sentencias SELECT son ejecutadas sin
realizar bloqueos, pero podría usarse una versión anterior de un registro.
Lectura
norepetible. Una transacción vuelve a leer datos
que previamente había leído y encuentra que han sido modificados o eliminados
por una transacción cursada.
Lectura
fantasma. Una transacción vuelve a ejecutar una
consulta, devolviendo un conjuto de registros que satisfacen una condición de
búsqueda y encuentra que otros registro que satisfacen la condición han sido
insertadas por otra transacción cursada.
COMMIT Y ROLLBACK
Lecturas
consistentes
Por
default, las tablas InnoDB ejecutan un lectura consistente (consistent read). Esto significa que cuando
una sentencia SELECT es
ejecutada, MySQL regresa los valores presentes en la base de datos hasta la
transacción más reciente que ha sido completada.
Si
alguna transacción está en progreso, los cambios hechos por alguna sentencia DELETE, INSERT o UPDATE no
serán reflejados. Sin embargo, existe una excepción: las transacciones abiertas
si pueden ver sus propios cambios. Para demostrar esto, necesitamos establecer
dos conexiones al servidor MySQL.
Observe
el caso feliz de las transacciones. Sin violaciones de integridad referencial o
otra clase de errores.
Por defecto, MySQL se ejecuta con el modo autocommit
activado. Esto significa que en cuanto ejecute un comando que actualice
(modifique) una tabla, MySQL almacena la actualización en disco.
No hay comentarios:
Publicar un comentario