Diferencia entre revisiones de «Práctica de Logging (Bases de Datos)»

De Cuba-Wiki
 
(No se muestran 10 ediciones intermedias del mismo usuario)
Línea 3: Línea 3:
==Ejercicio 1==
==Ejercicio 1==
<br>a) <CKPT> al final de todo o luego del <commit T1>, sólo se puede poner uno.
<br>a) <CKPT> al final de todo o luego del <commit T1>, sólo se puede poner uno.
<br>b) <Start CKPT> despues de <Commit T2>, <End CKPT> despues de <Commit T1>
<br>b) <Start CKPT> despues de <Commit T2>, <End CKPT> despues de <Commit T1>
<br>c) Cambiar registros <Ti,X,a,b> por <Ti,X,b-1,b>
 
<br>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==
==Ejercicio 2==
<br>a) Deshacer T1; A=10
<br>a) Deshacer T1 y T2; restaurar el valor anterior de A, o sea A=10.
<br>b) T2 no hay que hacer nada. Deshacer T1,T12; C=310,A=10
 
<br>c) Deshacer T1,T2; E=50,R=12,C=30,A=10
<br>b) T2 fue commiteada, se la ignora. Se deben Deshacer T1, T12;  
<br>d) Todos commitearon o abortaron
restaurar C= 30, A = 10
 
<br>c) Se deben deshacer T1, T12. Se restauran E = 50, R = 12, C=30, A=10.
 
<br>d) Todos commitearon o abortaron. Como no hay transacciones incompletas, no se hace nada.
 
==Ejercicio 3==
==Ejercicio 3==
<br>a) Nada (nadie hizo commit)
<br>a) No debe rehacerse ninguna transacción pues ninguna commitio en ese punto.
<br>b) Rehacer T2; B=20,D=40
Se deben abortar T1 y T2 pues quedaron incompletas, luego hay que hacer un flush del log.
<br>c) idem b
 
<br>d) Rehacer T1 y T2; A=10,B=20,C=30,D=40,E=50
<br>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.
 
<br>c) Idem b.
 
<br>d) Rehacer T1 y T2; A = 10,B = 20,C = 30,D = 40,E = 50.
T12 es ignorada pues aborto.
 
==Ejercicio 4==
==Ejercicio 4==
a)
a)
*i) Deshacer T1,T2,T4; B=16,A=8
*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.
*ii) Deshacer T1 C=56,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)
b)
*i) Rehacer T3; E=24,F=40
*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==
==Ejercicio 5==
Recordar: Primero se dividen por un lado las transacciones incompletas(a deshacer) y las commiteadas(a rehacer).
a)
a)
*Deshacer T1,T2
*Deshacer: T1, T2.
*Cambios vars: B=200, A=100
*Reahcer: Nada.
*Cambios log: <Abort T1>,<Abort T2>
*Cambios en las variables:
**B = 200, A = 100 (se deshacen sus modificaciones).
*Cambios de log: <Abort T2>, <Abort T1>.
 
b)
b)
*Deshacer T1,T2; Rehacer T3
*Deshacer: T1,T2.
*Cambios vars: E=40,C=300,B=200,A=100 (undo), D=400,F=500 (redo)
*Rehacer: T3.
*Cambios log: <Abort T1>,<Abort T2>
*Cambios en las variables:  
**E = 40,C = 300,B = 200,A = 100 (etapa undo).
**D = 400,F = 500 (etapa redo).
*Cambios de log: <Abort T1>,<Abort T2>
 
c)
c)
*Deshacer T1,T4; Rehacer T2,T3
*Deshacer: T1,T4;  
*Cambios vars: G=600,C=200,A=100 (undo), B=210,D=410,E=41,F=510 (redo)
*Rehacer: T2,T3
*Cambios log: <Abort T1>,<Abort T4>
*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)
d)
*Rehacer T1,T2,T3,T4
*Deshacer: Nada
*Cambios vars: A=110,B=210,C=310,D=410,E=41,F=510,G=610,H=710
*Rehacer: T1,T2,T3,T4
*Cambios log: -
*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==
==Ejercicio 6==
i)
i)
<br>a) despues de <Commit T1>
**<br>a) despues de <Commit T1>
<br>b) despues de <Commit T2>
**<br>b) despues de <Commit T2>
<br>c) idem b
**<br>c) idem b
<br>d) despues de <Commit T4>
**<br>d) despues de <Commit T4>
<br>e) idem d
**<br>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.
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==
==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 8==
==Ejercicio 9==
==Ejercicio 9==

Revisión del 11:49 10 nov 2010

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 = 400,F = 500 (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