Beruflich Dokumente
Kultur Dokumente
DISEO DE
BASE DE DATOS
TRANSACCION
Coleccin
de operaciones
que forman una nica
unidad lgica de trabajo.
Propiedad de una
transaccin
Atomicidad
Consistencias
Aislamiento
Durabilidad
-- Concurrencia
ATOMICIDAD
Todas
consistencia
La
aislamiento
Aunque
DURABILIDAD
Tras
Propiedades ACID
Atomicity,
Consistency,
Isolation
Durability
2 operaciones
Leer (x)
Transfiere
T(x)
de BD a memoria intermedia de la
Escribir (x)
Transfiere
de datos
EJEMPLO
leer(A);
A := A 50;
escribir(A);
leer(B);
B := B + 50;
escribir(B).
analizando
Consistencia
analizando
Atomicidad
analizando
Durabilidad
analizando
Aislamiento
Modelos de almacenamiento
Voltil
No Voltil
Permanente
Modelos de almacenamiento
Almacenamiento
No voltil
Almacenamiento
Secundario
Es voltil
RAM
Primario
procesamiento
Procesamiento
Procesamiento
Concurrente
Paralelo
Bloque y buffer
Bloque
Es la unidad de almacenamiento
secundario
Buffer
Es la unidad de transferencia de
informacin entre el almacenamiento
primario y secundario
Es la unidad de almacenamiento primario
Bloque y buffer
Por
MODELO DE TRANSACCION
Una
MODELO DE TRANSACCION
Una
MODELO DE TRANSACCION
MODELO DE TRANSACCION
Commit
parcialmente
comprometida
comprometida
activa
Fallo
fallida
Rollback
abortada
Implementacin de
transacciones sql
Implementacin de
transacciones sql
Programa pagar_cheque
Commit
Write (Pague)
Implementacin de
transacciones sql
Begin transaction
Begin
End
Begin
WriteDB (histo, x)
Commit
End
Modelo de fallo
E
D
C
B
A
Tiempo de verificacin
Tiempo de fallo
<comienza-transaccin, numt>
<escritura, numt, id_dato, val_viejo, val_nuevo>
<lectura, numt, id_dato, valor>
<termina_transaccin_con_xito, numt>
<punto_comprobacin, numt, numc>
Bitacora (log)
Archivo
bitacor
a
Almacenamiento
primario
Bitacora (log)
Cuenta A = 10,000
Cuenta B = 5,000
Cuenta C = 1,000
Cuenta D = 10,000
Cuenta E = 10,000
Cuenta F = 3,000
Cuenta G = 8,000
Transaction T1
Begin transaction
ReadDB(A)
A = A + 5000
WriteDB(A)
Commit
Transaction T3
Begin transaction Transaction T4
Begin transaction
ReadDB(D)
ReadDB(A)
ReadDB(G)
A= A 10,000
D= D 1000
WriteDB(A)
G= G + 1000
Commit
WriteDB(D)
WriteDB(G)
Commit
Transaction T2
Begin transaction
ReadDB(B)
ReadDB(C)
B= B 1000
C = C + 1000
WriteDB(B)
WriteDB(C)
Commit
Transaction T5
Begin transaction
ReadDB(B)
B= B + 10,000
WriteDB(B)
Commit
Problemas de concurrencia
La
ejecucin concurrente de
transacciones puede dar lugar a
problemas:
Deadlocks
Prevencin de deadlocks
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)