Professional Documents
Culture Documents
de Nochistln
Ingeniera en Sistemas Computacionales
Taller de Base de Datos
Integrantes:
Lizeth Gonzlez
Martnez
Csar Ivn Franco
Alans
Profesora:
Angelica Vielmas
introduccin
Una transaccin es un conjunto de operaciones que van
a ser tratadas como una nica unidad. Estas
transacciones
deben
cumplir
4
propiedades
fundamentales comnmente conocidas como ACID
(atomicidad, coherencia, asilamiento y durabilidad).
Entre las habilidades de todo Sistema Gestor de Bases de
Datos Relacionados tiene que estar la de permitir al
programador crear transacciones.
Ejemplo
Lecturas sucias
Una lectura sucia ocurre cuando se le permite a una transaccin la lectura de una fila que ha sido modificada
por otra transaccin concurrente pero todava no ha sido cometida.
Las lecturas sucias funcionan de modo similar a las lecturas no repetibles; sin embargo la segunda
transaccin no necesita ser cometida para que la primera d un resultado diferente. Lo nico que se puede
prevenir en el nivel de aislamiento LECTURAS NO COMETIDAS es que las actualizaciones aparezcan en
desorden en el resultado; esto es, que las primeras actualizaciones siempre aparecern antes que las
actualizaciones posteriores.
En el ejemplo, la transaccin 2 cambia una fila, pero no comete los cambios. La transaccin 1 entonces lee
los datos sin cometer. Si ahora la transaccin 2 deshace sus cambios (ya ledos por la transaccin 1) o
realiza otros cambios, entonces los datos que ha recuperado la transaccin 1 sern errneos.
Pero no existe ningn usuario que tenga la edad de 21.
Transaccin 1
Transaccin 2
Lecturas no repetibles
Una lectura no repetible ocurre cuando en el curso de una transaccin una fila se lee dos
veces y los valores no coinciden.
El efecto de lecturas no repetible puede ocurrir en una implementacin de concurrencia
mediante bloqueos cuando no se efectan stos al hacer un SELECT, o cuando los
bloqueos se liberan nada ms terminar la operacin SELECT. Cuando se usa el mtodo
MVCC, las lecturas no repetibles pueden aparecer cuando se relaja el requisito de que al
cometer una transaccin afectada por un conflicto sta deba deshacerse.
En este ejemplo, la transaccin 2 comete correctamente, lo que significa que sus cambios a
la fila con id 1 deberan hacerse visibles. Sin embargo, la transaccin 1 ya ha ledo un valor
distinto para edad en esa fila. En los niveles de aislamiento SERIALIZABLE y REPEATABLE
READ, el SGBDR debera devolver el valor antiguo. En los niveles READ COMMITTED y
READ UNCOMMITTED, el SGBDR debera devolver el valor nuevo; esto es una lectura no
repetible.
Transaccin 1
Transaccin 2
/* Consulta 1 */
SELECT * FROM usuarios WHERE id
= 1;
/* Consulta 2 */
UPDATE usuarios SET edad = 21
WHERE id = 1; COMMIT; /* en MVCC
o READ COMMITTED basado en
bloqueos */
/* Consulta 1 */
SELECT * FROM usuarios WHERE id
= 1; COMMIT; /* REPEATABLE READ
basado en bloqueos */
Lecturas fantasma
Una lectura fantasma ocurre cuando, durante una transaccin, se ejecutan dos consultas
idnticas, y los resultados de la segunda son distintos de los de la primera.
Esto puede ocurrir cuando no se realizan bloqueos de rango al realizar una operacin SELECT
... WHERE.
La anomala de las lecturas fantasma es una caso particular de las lecturas no repetibles
cuando la transaccin 1 repite una consulta acotada en rango SELECT ... WHERE y, entre
ambas operaciones la transaccin 2 crea (i.e. INSERT) nuevas filas (en la misma tabla) que
entran dentro de esa clusula WHERE.
Ntese que la transaccin 1 ejecuta la misma consulta dos veces. Si se mantuviera el mayor
nivel de aislamiento, los resultados de ambas consultas coincidiran, de hecho es lo que se
pide a una base de datos operando al nivel de aislamiento SERIALIZABLE. Sin embargo, a
niveles de aislamiento menores, pueden obtenerse resultados distintos.
Transaccin 1
Transaccin 2
/* Consulta 1 */ SELECT *
FROM usuarios WHERE
edad BETWEEN 10 AND 30;
/* Consulta 2 */ INSERT
INTO usuarios VALUES ( 3,
'Bob', 27 ); COMMIT;
/* Consulta 1 */ SELECT *
FROM usuarios WHERE
edad BETWEEN 10 AND 30;
Serializable
Este es el nivel de aislamiento ms alto. Especifica que todas las transacciones
ocurran de modo aislado, o dicho de otro modo, como si todas las transacciones se
ejecutaran de modo serie (una tras otra). La sensacin de ejecucin simultnea de
dos o ms transacciones que perciben los usuarios sera una ilusin producida por
el SGBD.
Si el SGBDR hace una implementacin basada en bloqueos, la serializacin
requiere que los bloques de lectura y escritura se liberen al final de la transaccin.
Del mismo modo deben realizarse bloqueos de rango -sobre los datos
seleccionados con SELECT usando WHERE- para evitar el efecto de las lecturas
fantasma (ver ms abajo).
Cuando se hace una implementacin no basada en bloqueos, si el SGBDR detecta
una colisin de escritura entre transacciones slo a una de ellas se le autoriza
cometer.
Commit
En el contexto de la Ciencia de la computacin y la gestin de datos,
commit (accin de comprometer) se refiere a la idea de consignar un
conjunto de cambios "tentativos, o no permanentes". Un uso popular es al
final de una transaccin de base de datos.
Una sentencia COMMIT en SQL finaliza una transaccin de base de datos
dentro de un sistema gestor de base de datos relacional (RDBMS) y pone
visibles todos los cambios a otros usuarios. El formato general es emitir
una sentencia BEGIN WORK, una o ms sentencias SQL, y entonces la
sentencia COMMIT. Alternativamente, una sentencia ROLLBACK se
puede emitir, la cual deshace todo el trabajo realizado desde que se emiti
BEGIN WORK. Una sentencia COMMIT publicar cualquiera de los
savepoints (puntos de recuperacin) existentes que puedan estar en uso.
En trminos de transacciones, lo opuesto de commit para descartar los
cambios "en tentativa" de una transaccin, es un rollback.
Rollback
En tecnologas de base de datos, un rollback es una operacin que devuelve a la base
de datos a algn estado previo. Los Rollback son importantes para la integridad de la
base de datos, a causa de que significan que la base de datos puede ser restaurada a
una copia limpia incluso despus de que se han realizado operaciones errneas. Son
cruciales para la recuperacin de crashes de un servidor de base de datos; realizando
rollback(devuelto) cualquier transaccin que estuviera activa en el tiempo del crash, la
base de datos es restaurada a un estado consistente.
En SQL, ROLLBACK es un comando que causa que todos los cambios de datos desde
la ltima sentencia BEGIN WORK, o START TRANSACTION sean descartados por el
sistema de gestin de base de datos relacional (RDBMS), para que el estado de los
datos sea "rolled back"(devuelto) a la forma en que estaba antes de que aquellos
cambios tuvieran lugar.
Una sentencia ROLLBACK tambin publicar cualquier savepoint existente que pudiera
estar en uso.
BIBLIOGRAFIA
http://sistematransaccional.wikispaces.com/Ejemplos+de+SP
T
http://es.wikipedia.org/wiki/Transacci%C3%B3n_%28base_de
_datos%29
http://es.wikipedia.org/wiki/Aislamiento_%28ACID%29
http://es.wikipedia.org/wiki/Commit
http://es.wikipedia.org/wiki/Rollback