Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Atomicidad
Consistencias
Aislamiento -- Concurrencia
Durabilidad
ATOMICIDAD
Atomicity,
Consistency,
Isolation
Durability
ACCESO A LA BASE DE DATOS
Mediante 2 operaciones
Leer (x)
Transfiere de BD a memoria intermedia de la tx
Escribir (x)
Transfiere de memoria intermedia a la base de datos
EJEMPLO
Sea Ti una transacción para transferir Q. 50 de la
cuenta A a la cuenta B. Se puede definir dicha
transacción como
Ti: leer(A);
A := A – 50;
escribir(A);
leer(B);
B := B + 50;
escribir(B).
ANALIZANDO
Consistencia
Que no sea alterado el balance de las cuentas A y B al
efectuar el traslado de fondos (transacción)
Responsabilidad:
Programador
ANALIZANDO
Atomicidad
Suponiendo que la cuenta A tiene Q.1,000 y la B tiene
Q.2,000 antes de efectuar el traslado
Que pasaría si durante el proceso de ejecutar la
transacción ocurriera un fallo en el sistema?
Alimentación
Hardware
Software
ANALIZANDO
Durabilidad
Una vez se completa con éxito una T(x) aunque
ocurriera un fallo en el sistema no se puede corromper
dicha T(x)
Que pasaría si durante el proceso de ejecutar la
transacción ocurriera un fallo en el sistema?
ANALIZANDO
Aislamiento
Que pasaría si todas las 3 propiedades se cumplieran
sin problema sin embargo 2 cuenta habientes hacen un
retiro al mismo tiempo?
La solución es ejecutarlas secuencialmente las
transacciones
MODELOS DE ALMACENAMIENTO
Volátil
Falta de energía eléctrica se pierde la información
No Volátil
Falta de energía NO se pierde la información
Discos duros, CDs, etc.
Permanente
No importa lo que pase siempre se dispondrá de la
información
Múltiples copias
MODELOS DE ALMACENAMIENTO
Almacenamiento Secundario
No volátil
Almacenamiento Primario
Es volátil
RAM
PROCESAMIENTO
Procesamiento Concurrente
Es aquel que se da cuando varios procesos corren al
mismo tiempo
Procesamiento Paralelo
Sistema operativo maneja recursos de un sistema y
guarda la información en bloques (sectores)
BLOQUE Y BUFFER
Bloque
Es la unidad de almacenamiento secundario
Buffer
Es la unidad de transferencia de información entre el
almacenamiento primario y secundario
Es la unidad de almacenamiento primario
BLOQUE Y BUFFER
Por lo regular si el DBMS pide un registro trae
todo el bloque
El cual puede contener varios registros.
MODELO DE TRANSACCION
Una transacción que termina su ejecución con
éxito se dice que está comprometida
Una transacción comprometida que haya hecho
modificaciones transforma la base de datos
llevándola a un nueva estado consistente, que
permanece incluso si hay fallo en el sistema
En ausencia de fallos, todas las transacciones se
completan con éxito
MODELO DE TRANSACCION
Commit
Consistente
parcialmente comprometida
comprometida
Fin
activa
Fa
Fallo Consistente
ll o
Rollback
fallida abortada
Programa pagar_cheque
Write (‘ingrese cuenta’)
Read (cta)
Write (‘valor’)
Read (valor)
Begin transaction
ReadDB (cta, saldo)
Saldo = saldo – valor
WriteDB (cta, saldo)
Write DB (cheque, ‘P’)
Commit
Write (‘Pague’)
IMPLEMENTACIÓN DE TRANSACCIONES SQL
Begin transaction
ReadDB (cta, saldo)
If saldo >= valor then
Begin
Saldo = saldo – valor
WriteDB (cta, saldo)
Commit
Write (‘Pague’)
End
Begin
WriteDB (histo, x)
Commit
End
MODELO DE FALLO
bitacora
Almacenamiento
primario
BITACORA (LOG)
Transaction T2
Cuenta A = 10,000 Transaction T1
•Begin transaction
Cuenta B = 5,000 •Begin transaction
• ReadDB(B)
Cuenta C = 1,000 • ReadDB(A)
• ReadDB(C)
Cuenta D = 10,000 • A = A + 5000
• B= B – 1000
Cuenta E = 10,000 • WriteDB(A)
• C = C + 1000
Cuenta F = 3,000 •Commit
• WriteDB(B)
Cuenta G = 8,000
• WriteDB(C)
•Commit
Transaction T3
•Begin transaction
• ReadDB(D) Transaction T4 Transaction T5
• ReadDB(G) •Begin transaction •Begin transaction
• D= D – 1000 • ReadDB(A) • ReadDB(B)
• G= G + 1000 • A= A – 10,000 • B= B + 10,000
• WriteDB(D) • WriteDB(A) • WriteDB(B)
• WriteDB(G) •Commit •Commit
•Commit
PROBLEMAS DE CONCURRENCIA
La ejecución concurrente de transacciones puede
dar lugar a problemas:
Problema de la actualización perdida
Problema de leer una actualización temporal (lectura
sucia)
Problema del resumen incorrecto
Problema de la lectura no repetible
TÉCNICAS DE BLOQUEO (LOCK)
A cada elemento de datos o gránulo X de la BD se le
asocia una variable
operación lock_exclusivo(X): deja bloqueado al que lo pide
si otro ya tiene cualquier lock sobre X
operación lock_compartido(X): deja bloqueado al que lo
pide si otro ya tiene un lock exclusivo sobre X
operación unlock(X): libera su lock sobre X
Antes de leer X lock_compartido(X)
Antes de escribir (leer) X lock_exclusivo(X)
Si no se va a leer o escribir más unlock(X)
DEADLOCKS
Deadlock (o abrazo mortal o interbloqueo):
Cuando una transacción T1 está bloqueada esperando a que otra T2 libere un lock, la
cual también está bloqueada esperando a que T1 libere uno de sus lock. Se puede
generalizar para N transacciones.
Prevención de deadlocks
Cada transacción obtiene todos los locks al principio y si no puede entonces no obtiene
ninguno. Problema de livelock (inanición de algunas transacciones que pueden no obtener
todos los que necesiten)
Los elementos de la BD están ordenados de alguna manera y los lock hay que obtenerlos
en dicho orden. Los programadores deben controlarlo !!
Detección y recuperación de deadlocks.
A medida que se piden y conceden los lock se construye un grafo de las transacciones que
están esperando a otras. Si existe un ciclo en dicho grafo: deadlock. Hay que proceder a
abortar a alguna de las transacciones. Problema de livelock si se aborta siempre a la misma!
EN LA PRACTICA (ORACLE PL/SQL)
DECLARE
importe NUMBER;
ctaOrigen VARCHAR2(23);
ctaDestino VARCHAR2(23);
BEGIN
importe := 100;
ctaOrigen := '2530 10 2000 1234567890';
ctaDestino := '2532 10 2010 0987654321';
UPDATE CUENTAS SET SALDO = SALDO - importe
WHERE CUENTA = ctaOrigen;
UPDATE CUENTAS SET SALDO = SALDO + importe
WHERE CUENTA = ctaDestino;
INSERT INTO MOVIMIENTOS
(CUENTA_ORIGEN, CUENTA_DESTINO,IMPORTE, FECHA_MOVIMIENTO)
VALUES
(ctaOrigen, ctaDestino, importe*(-1), SYSDATE);
INSERT INTO MOVIMIENTOS
(CUENTA_ORIGEN, CUENTA_DESTINO,IMPORTE, FECHA_MOVIMIENTO)
VALUES
(ctaDestino,ctaOrigen, importe, SYSDATE);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error en la transaccion:'||SQLERRM);
dbms_output.put_line('Se deshacen las modificaciones);
ROLLBACK;
END;
EN LA PRACTICA (ORACLE PL/SQL)
create or replace procedure prueba (nfilas number)
as
begin
savepoint ninguna;
insert into tmp values ('primera fila');
savepoint una;
insert into tmp values ('segunda fila');
savepoint dos;
if nfilas=1 then
rollback to una;
else if nfilas=2 then
rollback to dos;
else
rollback to ninguna;
end if;
commit;
exception
when other then
rollback
end prueba;