Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DISEO DE BASE
DE DATOS
TRANSACCION
Coleccin
de operaciones
que forman una nica
unidad lgica de trabajo.
-- Concurrencia
ATOMICIDAD
Todas
consistencia
La
aislamiento
Aunque
se ejecuten varias
transacciones concurrentemente, el
sistema garantiza que para cada par de
transacciones, no se entrelazaran en su
ejecucin, sino que se realizaran de
forma independiente.
DURABILIDAD
Tras
Propiedades ACID
Atomicity,
Consistency,
Isolation
Durability
2 operaciones
Leer (x)
Transfiere
de BD a memoria intermedia de
la T(x)
Escribir (x)
Transfiere
de datos
EJEMPLO
Sea
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
Siguientes estados:
ACTIVVA
PARCIALMENTE COMPROMETIDA
FALLIDA
ABORTADA
COMPROMETIDA
Commit
Fin
Consistente
MODELO DE
TRANSACCION
parcialmente
comprometida
activa
Fa
llo
Fallo
fallida
comprometida
Consistente
Rollback
abortada
Implementacin de
transacciones sql
En la norma SQL el comienzo de una transaccin se
especifica explcitamente (usualmente begin/start
transaction)
Las transacciones terminan con una de las siguientes
instrucciones:
commit work (compromete la transaccin actual)
rollback work (provoca que la transaccin aborte)
Implementacin de
transacciones sql
Programa
pagar_cheque
(cta, saldo)
Saldo = saldo valor
WriteDB (cta, saldo)
Write DB (cheque, P)
Commit
Write (Pague)
Implementacin de
transacciones sql
Begin
transaction
End
Begin
WriteDB (histo, x)
Commit
End
Modelo de fallo
E
D
C
B
A
Tiempo de verificacin
Tiempo de fallo
Bitacora (log)
Archivo
bitcora
Almacenamiento
primario
Bitacora (log)
Cuenta
10,000
Cuenta
Cuenta
Cuenta
10,000
Cuenta
10,000
Cuenta
Cuenta
A=
B = 5,000
C = 1,000
D=
E=
Transaction T1
Begin transaction
ReadDB(A)
A = A + 5000
WriteDB(A)
Commit
F
= 3,000
Transaction
T3
G
= 8,000
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
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)