Los conceptos detrás de una transacción
son una parte del paradigma de la base de datos relacional. Una transacción consiste
en una o más sentencias DML, seguida ya sea por un ROLLBACK o un comando
COMMIT.
Lo que sigue es una revisión rápida de algunos de los principios del
Paradigma de una base de datos relacional las cuales las bases de datos (no
sólo Oracle) deben cumplir. Otros proveedores de bases de datos cumplen con los
mismos estándares con sus propios mecanismos, pero con niveles de eficacia
variable. En pocas palabras, cualquier base de datos relacional debe ser capaz
de pasar la prueba ACID: Atomicidad, Coherencia, Aislamiento y Durabilidad.
A es para Atomicidad
El principio del Estado de Atomicidad, que todas las partes de una
transacción se deben completar o ninguno de ellos. (El razonamiento detrás del
término es que un átomo no puede ser dividido, ahora bien conocida por ser una
suposición falsa). Por ejemplo, si los analistas de negocios han dicho que cada
vez que cambie el salario de un empleado también debe cambiar el nivel del
empleado, la transacción atómica constará de dos actualizaciones. La base de
datos debe garantizar que ambos se ejecuten o no. Si sólo uno de los cambios tiene
éxito, usted tiene un empleado con un salario que es incompatible con su Nivel:
Corrupción de Datos, en términos de negocio. Si algo sale mal antes de que
finalice la transacción, la base de datos en sí debe garantizar que las piezas
que no se ejecuten correctamente pueden ser regresadas, lo que debe suceder
automáticamente. Una transacción puede tener miles de de operaciones y
actualizar cientos de tablas y puede tomar horas e realizarse. La reversión de
una transacción incompleta puede ser manual (como cuando se emite el comando
ROLLBACK), pero debe ser automática e imparable en el caso de un error.
C es para Consistencia
El principio del Estado de Consistencia afirma que los resultados de
una consulta deben ser consistentes con el estado de la base de datos en el
momento de la consulta comenzó. Imagine una consulta sencilla que promedia el
valor de una columna de una tabla. Si la tabla es grande, se tardará varios
minutos en pasar a través de la tabla. Si otros usuarios están actualizando la
columna, mientras que la búsqueda está en curso, la consulta debe incluir los
valores antiguos o nuevos? ¿Debería incluir filas que se insertan o se eliminan
después de la consulta comenzó? El principio de Consistencia establece que la
base de datos asegurarse de que los valores modificados no son vistos por la
consulta, se le dará un promedio de la columna, ya que fue cuando comenzó la
consulta, sin importar el tiempo que la consulta dure o qué otra actividad se esté
produciendo en las tablas correspondientes. Oracle garantiza que si una
consulta tiene éxito, el resultado será consistente. Sin embargo, si el
administrador de la base de datos no ha configurado la base de datos adecuadamente,
la consulta puede no tener éxito: hay un famoso error de Oracle "ORA-1555
snapshot too old", que se plantea. Esto solía ser un problema muy difícil
de solucionar con las versiones anteriores de la base de datos, pero con las
últimas versiones el administrador de la base siempre debe ser capaz de
prevenir esto.
I es para Aislamiento
El principio del Estado de Aislamiento que una transacción incompleta
(es decir, no confirmada) debe ser
invisible para el resto del mundo. Mientras la transacción está en progreso,
sólo la sesión de que se está ejecutando la operación se le permite ver los
cambios, todas las demás sesiones deben ver los datos sin cambios, no los
nuevos valores. La lógica detrás de esto es en primer lugar, que la operación
completa podría no ir a través y que por lo tanto otros usuarios no deberían poder ver los
cambios que podrían revertirse. Y en segundo lugar, durante el transcurso de
una operación los datos son (en términos comerciales) incoherente: hay un corto
tiempo en que el empleado ha tenido su salario cambiado pero no su grado. Aislamiento
de transacciones requiere que la base de datos debe ocultar las transacciones
en curso de otros usuarios. Ellos verán la versión PreUpdate de los datos hasta
que se complete la transacción, cuando van a ver todos los cambios en un
conjunto coherente. Oracle garantiza aislamiento de transacción: no hay manera
alguna sesión puede ver datos no confirmados. Una lectura de datos no
confirmados se conoce como una lectura sucia, que Oracle no permite (aunque
algunas otras bases de datos lo hacen).
D es para Durable
El principio del Estado de Durabilidad que una vez que complete una
transacción, debe ser imposible para la base de datos perderlo. Durante el
tiempo que la transacción está en progreso, el principio de aislamiento
requiere que nadie (aparte de la sesión en cuestión) puede ver los cambios que
ha realizado hasta el momento. Pero en el instante en que la transacción se
completa, debe ser transmitido al mundo, y la base de datos debe garantizar que
el cambio nunca se pierde, una base de datos relacional, no se le permite
perder datos.
Comentarios
Publicar un comentario