You are on page 1of 7

Sistemas de Recuperacin - 1

SISTEMAS DE RECUPERACIN

1. CLASIFICACIN DE FALLOS

- Fallo en la transaccin

- Error lgico (del programa): overflow, acceso a


informacin que no existe, entradas errneas

- Error del sistema: interbloqueos, no son errores en


los programas de la base de datos

- Cada del sistema: fallo hardware (alimentacin), del SGDB,


del SO. Se pierde informacin voltil

- Fallo de disco: (aterrizaje de cabezas). Se pierde informacin


no voltil

Los algoritmos de recuperacin aseguran la consistencia y


atomicidad de las transacciones aunque se produzcan fallos. Es
necesario:

- Guardar informacin durante el proceso normal para


poder realizar una recuperacin
- Realizar la recuperacin en caso de fallo

2. ESTRUCTURA DE ALMACENAMIENTO

2.1. Tipos de Almacenamiento

- Voltil (memoria principal, memoria cach)


- No voltil (discos, cintas)
- Estable: siempre sobrevive (tericamente)

Revisin junio de 2004


Sistemas de Recuperacin - 2

2.2. Acceso a los datos


Las operaciones de lectura y escritura se hacen por bloques.

- input (B): se transfiere el bloque B de disco a mp


- output (B): de mp al disco

Las transacciones tienen un rea de memoria propia que se les


concede desde su inicio hasta su fin (cometida o fracasada).

Las operaciones de transferencia de datos son:

- read(X,xi) asigna el valor del elemento X a la variable xi

1) si el bloque donde est X no est en mp se ejecuta un input (BX)


2) se copia X en xi

- write (X,xi) asigna el valor de xi al elemento X

1) si el bloque donde est X no est en mp se ejecuta un input (X)


2) se copia xi en X

Puede ser necesario llevar un bloque del disco a la memoria,


pero al revs no es necesario a no ser que no haya espacio en
memoria.

Si se quiere que X quede en disco es necesario hacer una salida


forzosa con un output(X)

Cuando se hace referencia a X por primera vez se realiza un


read(X, xi). Las siguientes actualizaciones de X se hacen sobre
xi. Cuando el programa ha terminado de utilizar X, se realiza
un write (X, xi). No es preciso hacer inmediatamente despus
un output(X). Una cada en ese momento provocar que se
pierda el valor actual de X.

Revisin junio de 2004


Sistemas de Recuperacin - 3

3. RECUPERACIN Y ATOMICIDAD

Ejemplo: Ti: read(A, a)


a := a - 50
write(A, a)
read(B, b)
b := b + 50
write(B, b)

Inicialmente A = 1000 y B = 2000.

Si se produce un fallo despus de output(A) y antes de


output(B) se llega a un estado de inconsistencia (A=950 y
B=2000) aunque Ti se realiz con xito.

Alternativas
a) Volver a ejecutar Ti (si es posible) (A= 900, B= 2050)

b) No repetir Ti (A= 950, B= 2000)

En cualquiera de los casos la transaccin se da por terminada y


el estado es inconsistente.

Revisin junio de 2004


Sistemas de Recuperacin - 4

4. BITCORA INCREMENTAL CON


ACTUALIZACIONES DIFERIDAS

Durante una transaccin (T) todas las escrituras se postergan


hasta que la T. est parcialmente cometida.

Bitcora es el fichero donde se graban las actualizaciones


que se deben realizar sobre la base de datos.

Cuando la T. est parcialmente cometida la informacin de


la bitcora se utiliza para ejecutar las operaciones postergadas.

Si el sistema falla antes de terminar la T (o si se aborta T),


se hace caso omiso de la informacin de la bitcora.

Informacin de la bitcora asociada a una transaccin Ti

<Ti , starts> antes de que comience a ejecutarse


<Ti , dato, valor> para cada write (X,xi)
Ti : nombre de la transaccin
dato: X
valor: xi
....
<Ti , commit> cuando Ti est parcialmente cometida

Se debe garantizar que antes de empezar la escritura en


disco los registros de la bitcora deben estar en almacenamiento
estable.

Revisin junio de 2004


Sistemas de Recuperacin - 5

Siguiendo con el ejemplo:

<T0, starts>
<T0, A, 950>
<T0, B, 2050>
<T0, commit>

Con la operacin redo(Ti ) actualizamos los valores en caso de


fallo (si no hay prdida de informacin de almacenamiento no
voltil).

Esta operacin debe ser idempotente (se puede ejecutar varias


veces y el resultado no vara). As se garantiza que si se cae el
sistema en el proceso de recuperacin (por segunda vez) el
resultado sigue siendo el mismo.

La operacin redo(Ti ) se ejecutar slo si se encuentra un


<Ti, starts> con su correspondiente <Ti, commit> , en otro caso
se ignora.

Revisin junio de 2004


Sistemas de Recuperacin - 6

5. BITCORA INCREMENTAL CON ACTUALIZACIONES


INMEDIATAS

Otra tcnica es aplicar todas las actualizaciones


directamente sobre la BD y mantener una bitcora incremental de
los cambios que se hacen.

Si se cae el sistema es posible recuperarlo hasta llegar a un


estado consistente de la BD (deshaciendo lo hecho).

La informacin de la bitcora en este caso es la siguiente:

<Ti , starts> antes de que comience a ejecutarse Ti


<Ti , dato, valor anterior, valor nuevo> para cada
write (X,xi)
....
<Ti , commit> cuando Ti est parcialmente cometida

Con las operaciones:

- undo (Ti ): restaura los valores que actualizaba Ti a sus


valores antiguos; y

- redo (Ti ) asigna los nuevos valores que actualizaba Ti.

podemos recuperar el sistema en cualquier caso de fallo (excepto


fallas que resulten en prdida de informacin de almacenamiento
no voltil).

Estas operaciones deben ser idempotentes (se pueden ejecutar


varias veces y el resultado no vara).

Revisin junio de 2004


Sistemas de Recuperacin - 7

6. PUNTOS DE VERIFICACIN

Para evitar hacer la recuperacin de todas las operaciones de


la bitcora. Se establecen puntos de verificacin. En los cuales se
garantiza el estado consistente de la BD. Para ello se realiza lo
siguiente:

- Grabar todos los registros de la bitcora en


almacenamiento estable.

- Grabar todos los bloques del buffer modificados.

- Grabar en almacenamiento estable un registro


<checkpoint> dentro de la bitcora.

7. FALLA CON PRDIDA DE ALMACENAMIENTO NO


VOLTIL

Tcnica: Realizar vaciados a almacenamiento estable


regularmente (backup). Para ello se realiza lo siguiente:

- Grabar todos lo registros de la bitcora en


almacenamiento estable.

- Grabar todos los bloques del buffer modificados en disco.

- Grabar en almacenamiento estable un registro <dump>


dentro de la bitcora.

Revisin junio de 2004

You might also like