Diferencia entre revisiones de «Práctica de Logging (Bases de Datos)»
(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) | |||
<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 | |||
<br>c) | <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) | <br>a) No debe rehacerse ninguna transacción pues ninguna commitio en ese punto. | ||
<br>b) | Se deben abortar T1 y T2 pues quedaron incompletas, luego hay que hacer un flush del log. | ||
<br>c) | |||
<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) | *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) | 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) | *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 | *Reahcer: Nada. | ||
*Cambios log: <Abort | *Cambios en las variables: | ||
**B = 200, A = 100 (se deshacen sus modificaciones). | |||
*Cambios de log: <Abort T2>, <Abort T1>. | |||
b) | b) | ||
*Deshacer T1,T2 | *Deshacer: T1,T2. | ||
*Cambios | *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 | *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 | *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
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)