Escolar Documentos
Profissional Documentos
Cultura Documentos
CONTROL DE TRANSACCIONES
INTRODUCCIÓN.
A A
B B C CPU 1
D
CPU 2
T1 T2 T3 T4 tiempo
* Actualización Perdida:
Esto ocurre cuando dos transacciones que tienen acceso a los
mismos elementos de la b.d. tienen sus operaciones intercaladas de
modo que hacen incorrecto el valor de algún elemento.
* Actualización Temporal:
La actualización temporal en algunas ocasiones llamada lectura
sucia, ocurre cuando una transacción actualiza un elemento de la b.d. y
luego la transacción falla por alguna razón:
T1 T2
leer _ elemento(X);
X:= X-N;
t escribir _ elemento(X);
i leer _ elemento(X);
e X:= X+M;
m escribir _ elemento(X);
p
o leer _ elemento(Y);
* Resumen Incorrecto:
Si una transacción está calculando una función agregada de
resumen sobre varios registros mientras otras transacciones están
actualizando alguno de ellos, puede ser que la función agregada calcule
algunos valores antes de que se actualicen y otros después de
actualizarse:
T1 T3
Suma:=0;
leer _ elemento(A);
suma:=suma+A;
leer _ elemento(X);
X:=X-N;
escribir _ elemento(X);
leer _ elemento(X); T3 lee X después de
restarse
suma:=suma+X; N y lee Y antes de
sumarse N,
leer _ elemento(Y); así que el resultado es un
suma:=suma+Y; resumen incorrecto
leer _ elemento(Y);
Y:=Y+N;
escribir _ elemento(Y);
Tipos de Fallos; hay varias razones por las que una transacción puede
fallar mientras se está ejecutando:
LEER,
ESCRIBIR
INICIO_DE_ FIN_DE_
TRANSACCIÓN TRANSACCIÓN CONFIRMAR
ACTIVA PARCIALMENTE CONFIRMADA
CONFIRMADA
ABORTAR ABORTAR
FALLIDA
TERMINADA
UPDATE CLIENTE
SET CódigodeÁrea = ‘425’
WHERE CódigoPostal = ‘98050’
BEGIN TRANSACTION
UPDATE CLIENTE
SET CódigoÁrea = ‘425’
WHERE CódigoPostal = ‘98050’
UPDATE CLIENTE
SET Descuento = 0.05
WHERE CódigoÁrea = ‘425’
(Otra transacción en funcionamiento)
COMMIT TRANSACTION
En este contexto, ¿qué significa consistente? La
consistencia del nivel de instrucción que quiere decir que cada
instrucción procesa independientemente tuplas consistentes, pero que
los cambios de otros usuarios de estos renglones se pueden permitir
durante el intervalo entre las dos instrucciones SQL. El nivel de
consistencia de la transacción significa que todos las tuplas impactadas
por cualquiera de las instrucciones SQL son protegidos de cambios
durante la transacción completa. Observe, sin embargo, que para
algunas implementaciones de la consistencia del nivel de transacción,
una transacción no verá sus propios cambios. En este ejemplo, la
segunda instrucción SQL puede no ver los cambios en las tuplas
derivadas de la primera instrucción SQL.
NIVEL DE AISLAMIENTO
(a)
T1 T2
leer _ elemento(X);
X:= X-N;
t leer _ elemento(X);
i X:= X+M;
e escribir _ elemento(X); el elemento X tiene
un
m leer _ elemento(Y); valor incorrecto,
porque
p escribir _ elemento(X); su actualización
por T1
o Y:= Y+N; se “perdió”
escribir _ elemento(Y);
(b)
T1 T2
leer _ elemento(X);
X:= X-N;
t escribir _ elemento(X);
i leer _ elemento(X);
e X:= X+M;
m escribir _ elemento(X);
p
o leer _ elemento(Y);
Plan a)
T1 T2
leer_elemento (X);
X:=X-N;
escribir_elemento(X);
leer_elemento (Y);
Y:=Y+N;
escribir_elemento (Y);
leer_elemento(X);
X:=X+M;
escribir_elemento(X);
Plan b)
T1 T2
leer_elemento(X);
X:=X+M;
escribir_elemento(X);
leer_elemento (X);
X:=X-N;
escribir_elemento(X);
leer_elemento (Y);
Y:=Y+N;
escribir_elemento (Y);
Plan c)
T1 T2
leer_elemento (X);
X:=X-N;
leer_elemento(X);
X:=X+M;
escribir_elemento(X);
leer_elemento (Y);
escribir_elemento(X);
Y:=Y+N;
escribir_elemento (Y);
Plan d)
T1 T2
leer_elemento (X);
X:=X-N;
Escribir_elemento(X);
leer_elemento(X);
X:=X+M;
escribir_elemento(X);
leer_elemento (Y);
Y:=Y+N;
escribir_elemento (Y);
P1 P2
leer _ elemento (X); leer _ elemento (X);
X:= x + 10; X:= x*1.1;
escribir _ elemento (X); escribir _ elemento (X);
Usuario A Usuario B
1. Lee el artículo 100. 1. Lee el artículo 200.
2. Cambia el artículo 100. 2. Cambia el artículo 200.
3. Escribe el artículo 100. 3. Escribe el artículo 200.
El CPU procesa lo del usuario A hasta que encuentra una
interrupción de I/O o alguna otra causa de retraso. El S.O. cambia el
control al usuario B. El CPU procesa ahora lo del usuario B hasta que
encuentra una interrupción; en este punto el S.O. pasa el control de
regreso al usuario A.
Orden de procesamiento en el
Servidor de la base de datos
Usuario A Usuario B
1. Lee el artículo 100. 1. Lee el artículo 100.
2. Reduce 5 artículos. 2. Reduce 3 artículos.
3. Escribe el artículo 100. 3. Escribe el artículo 100.
Usuario A Usuario B
1. Aplica un lock al artículo 100. 1. Aplica un lock al artículo 100.
2. Lee el artículo 100. 2. Lee el artículo 100.
3. Reduce 5 artículos. 3. Reduce 3 artículos.
4. Escribe el artículo 100. 4. Escribe el artículo 100.
Terminología de locks.
Transacciones Serializables.
Usuario A Usuario B
1. Aplicar un lock al papel. 1. Aplicar un lock a los lápices.
2. Tomar el papel. 2. Tomar los lápices.
3. Aplicar un lock a los lápices. 3. Aplicar un lock al papel.
** BLOQUEADO **
UPDATE PRODUCTO
SET PRODUCTO.Cantidad=NuevaCantidad
WHERE PRODUCTO.Nombre=’Lápiz’
AND PRODUCTO.Cantidad=ViejaCantidad
UNLOCK PRODUCTO
LOCK PRODUCTO
UPDATE PRODUCTO
SET PRODUCTO.Cantidad=NuevaCantidad
WHERE PRODUCTO.Nombre=’Lápiz’
UNLOCK PRODUCTO
INICIAR TRANSACCIÓN:
UPDATE PRODUCTO
SET PRODUCTO.Cantidad=NuevaCantidad
WHERE PRODUCTO.Nombre=’Lápiz’
COMMIT TRANSACCIÓN
ROLLBACK TRANSACCIÓN