Práctica de Logging (Bases de Datos)

De Cuba-Wiki

Plantilla:Back

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)

Ejercicio 8

Ejercicio 9

Ejercicio 10