Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Caída del sistema: por ejemplo, errores del hardware o software de base de datos o software del
sistema operativo.
Fallo de disco: daño físico en el medio de almacenamiento masivo.
Acciones de recuperación
Para asegurar la consistencia en la base de datos y la atomicidad de las transacciones (a
pesar de los fallos), los algoritmos tienen dos partes:
Modificación diferida
Garantiza la atomicidad de la transacción grabando todas las modificaciones en la bitácora
pero aplazando todas las operaciones Write hasta que la transacción se comete
parcialmente.
La información en la bitácora asociada a la transacción parcialmente cometida se usa en
la ejecución de las escrituras diferidas.
Si el sistema se cae antes de que termine de ejecutarse una transacción, o si la
transacción aborta, se ignora la información de la bitácora.
Modificación diferida: pasos a seguir
Información de la bitácora
1. Antes de que comience una transacción T, se escribe el registro de bitácora <T,start>.
2. Si T realiza una operación Write(X,v), se escribe el registro de bitácora <T,X,v>.
3. Cuando T está parcialmente cometida, se escribe el registro de bitácora <T,commit>.
Modificación inmediata
Las modificaciones en la base de datos se realizan mientras la transacción está activa,
antes de alcanzar el estado de cometida.
Este tipo de modificaciones se denominan modificaciones no cometidas.
En caso de que ocurra una caída o fallo de una transacción se debe recurrir a una
operación Undo que “deshace” los cambios hechos.
La operación Undo extrae la información de la bitácora para determinar qué datos deben
restaurarse.
Recuperación de fallos
El esquema de recuperación usa las operaciones y Undo (Deshacer) y Redo
(Rehacer) usando información de la bitácora.
Cuando se produce un fallo, el esquema de recuperación consulta a la bitácora para
determinar que transacciones deben deshacerse o rehacerse.
1. UNDO (T): cuando la bitácora contiene el registro<T,start> pero no contiene el registro
<T,commit>.
2. REDO (T): cuando la bitácora contiene tanto el registro<T,start> como el registro <T,commit>
Puntos de Verificación (Checkpoints)
Cuando ocurre un fallo del sistema es necesario consultar la bitácora para ver cuáles
transacciones deben rehacerse y cuáles deshacerse.
Esto implica revisar TODA la bitácora.
1. El proceso de búsqueda consume tiempo.
2. La mayor parte de las transacciones que, según el algoritmo, deben volver a hacerse, ya
escribieron sus actualizaciones en la base de datos en memoria estable.
3. Volver a hacerlas no causa daño (redo es idempotente) pero consume tiempo.
Recuperación y Concurrencia
Hasta ahora, consideramos recuperaciones en entornos donde solamente se ejecuta
una transacción por vez.
Un sistema centralizado, aun cuando incorpora facilidades de concurrencia, cuenta
con un único buffer de disco y un único registro de bitácora.
Los bloques de buffering son compartidos por todas las transacciones.
Retroceso de Transacciones
Una transacción puede ser retrocedida (rolled back) no solamente cuando se produce
una falla en el sistema sino cuando es abortada.
Una transacción puede ser abortada por diferentes razones:
1. Por un usuario, por ejemplo, cuando decide abortar.
2. Por si misma, por ejemplo, por algún error inesperado.
3. Por el sistema, por ejemplo, cuando una transacción está en deadlock con otras transacciones.
Recuperación y Concurrencia
El esquema de recuperación depende fuertemente del esquema de control de concurrencia
utilizado.
El retroceso de una transacción fallada debe deshacerlos cambios hechos por la misma.
1. Ejemplo: Si una transacción T0modificó el dato Q y tiene que ser retrocedida, entonces debe restaurarse el
valor anterior de Q.
2. Pero si una transacción T1 realizó otro cambio sobre Q después del cambio de T0pero antes de que T0sea
retrocedida, el cambio realizado por T1se perderá.
Por lo tanto, si una transacción T actualiza un item Q, es deseable que cualquier otra
transacción que desee modificar Q espere que T esté cometida.
Retroceso de Transacciones
El retroceso de una transacción T fallada implica recorrer la bitácora hacia atrás, ya que
una transacción puede realizar más de un cambio sobre el mismo dato.
...,<T,A,10,20>, ...,<T,A,20,30>, ...
Undo-List y Redo-List
Se realiza un recorrido hacia atrás de los registros almacenados en la bitácora hasta
el primer <checkpoint, L>:
1. Por cada item <Ti,commit>, se agrega Ti a redo-list.
2. Por cada item <Ti,start>, si Tino está enredo-list entonces se agrega a la lista undo-list
Ejemplo:
<Ti,A,10,20>
<Tj,A,20,30>
W-ts(B)=ts(T2)
Crash de Sistema
<T1,start> Dada la siguiente foto de la Bitácora antes de un
<T1,commit> Redo-List:T1, T4
<T3,start>
<T3,B,20,40>
<T4,start> B: 20, 80
<T4,B,40,80> A:20,
<T4,C,100,50> C:50,
<T4,commit>
Garantizar la atomicidad
La transacción T entra en el estado cometido después de haberse grabado en memoria
estable el registro de bitácora <T,commit>.
Antes de que el registro de bitácora <T,commit>pueda grabarse en memoria estable,
deben haberse grabado en memoria estable todos los registros de bitácora que
pertenecen a T.
Antes de grabar en la base de datos un bloque que está en memoria principal (volátil)
deben haberse grabado en memoria estable todos los registros de bitácora que
pertenecen a los datos de ese bloque.
Organización de la Memoria
Memoria Volátil Base de Datos Bitácora
Registros Escrituras
sobre datos sobre datos
A1...An A1...An
(*) Inicio de
checkpoint
Registros
sobre datos
A1...An
Escrituras
sobre datos
<Checkpoint> A1...An
Tiempo