Práctica de Logging (Bases de Datos)
Ejercicio 1
a) <CKPT> al final de todo o luego del <commit T1>, sólo se puede poner uno.
b) <Start CKPT> despues de <Commit T2>, <End CKPT> despues de <Commit T1>
c) Escribir <T, Z, x, v>; donde Z es la variable, x y v son los valores anterior y posterior de Z.
Por ejemplo: Si todas las variables están inicialmente en 0 y T1 realiza W(U), entonces <T1, U, 0, 1>.
Hay que hacer esto para toda operación de escritura en H.
Ejercicio 2
a) Deshacer T1 y T2; restaurar el valor anterior de A, o sea A=10.
b) T2 fue commiteada, se la ignora. Se deben Deshacer T1, T12;
restaurar C= 30, A = 10
c) Se deben deshacer T1, T12. Se restauran E = 50, R = 12, C=30, A=10.
d) Todos commitearon o abortaron. Como no hay transacciones incompletas, no se hace nada.
Ejercicio 3
a) No debe rehacerse ninguna transacción pues ninguna commitio en ese punto.
Se deben abortar T1 y T2 pues quedaron incompletas, luego hay que hacer un flush del log.
b) Hay que rehacer T2; y rehacer sus operaciones B = 20, D = 40.
Se deben abortar T1 y T12 que quedaron incompletas, luego hay que flushear el log.
c) Idem b.
d) Rehacer T1 y T2; A = 10,B = 20,C = 30,D = 40,E = 50.
T12 es ignorada pues aborto.
Ejercicio 4
a)
- i) Se deshacen las transacciones T1,T2,T3 y T4 respectivamente. Se dehacen los cambios efectuados a las variables A y B, o sea B = 16, A = 8.
Debería agregarse al log los aborts de cada una de ellas!
- ii) Se debe deshacer T1. Se dehacen los cambios efectuados a las variables A y C, o sea C = 56,A = 8.
Debería agregarse al log el abort correspondiente a T1!
b)
- i) Se debe rehacer la transacción T3. Se rehacen los cambios efectuados a las variables E y F afectadas por T3, o sea E = 24, F = 40.
Luego se deben abortar las transacciones incompletas, en este caso T1.
- ii) Se rehacen las transacciones T1, T2, y T3. Restituyendo los valores de las variables afectadas por dichas transacciones. T4 es ignorada debido a que fue abortada.
Ejercicio 5
Recordar: Primero se dividen por un lado las transacciones incompletas(a deshacer) y las commiteadas(a rehacer).
a)
- Deshacer: T1, T2.
- Reahcer: Nada.
- Cambios en las variables:
- B = 200, A = 100 (se deshacen sus modificaciones).
- Cambios de log: <Abort T2>, <Abort T1>.
b)
- Deshacer: T1,T2.
- Rehacer: T3.
- Cambios en las variables:
- E = 40,C = 300,B = 200,A = 100 (etapa undo).
- D = 410,F = 510 (etapa redo).
- Cambios de log: <Abort T1>,<Abort T2>
c)
- Deshacer: T1,T4;
- Rehacer: T2,T3
- Cambios de variables:
- G = 600,C = 200,A = 100 (etapa undo).
- B = 210,D = 410,E = 41,F = 510 (etapa redo).
- Cambios de log: <Abort T1>, <Abort T4>
d)
- Deshacer: Nada
- Rehacer: T1,T2,T3,T4
- Cambios en las variables:
- A = 110,B = 210,C = 310,D = 410,E = 41,F = 510,G = 610,H = 710.
- Cambios de log: ninguno
Ejercicio 6
i)
a) despues de <Commit T1>
b) despues de <Commit T2>
c) idem b
d) despues de <Commit T4>
e) idem d
ii) La respuesta es igual para todos: recorro el log hasta el <START CKPT> siempre y cuando me haya topado con el <END CKPT>, sino lo tengo que recorrer hasta el principio.
Ejercicio 7
- i) (Respecto del ejercicio 6)
- a. Antes del <commit T1>
- b. Antes del <commit T2>
- c. Antes del <commit T2> (? por confirmar)
- d. Antes del <commit T4> (? por confirmar)
- e. Antes del <commit T4> (? por confirmar)
ii)