- BEGIN TRANSACTION Select saldo into vsaldo from cuenta where nro =12 - Si vsaldo>= 2000 - Update cuenta set saldo=vsaldo-2000 where nro=12 Estado inicial Transfiere 2000 de la cuenta 12 a la cuenta 23 Estado Intermedio Recuperación 3000 Falla - Update cuenta set saldo=vsaldo+2000 where nro=23 ELSE ROLLBACK COMMIT 4000 Estado Final - 3000 Recuperación: Transacción Estado inicial Estado Final Estados de una transacción: Inicia T activa termina T Parcialmente commited Commit T fallada rollback T commited terminada Recuperación Falla Estado inicial Estado Final Durante la ejecución de una transacción el sistema puede fallar => la base de datos queda en un estado inconsistente (no alcanzó su terminación planeada). Una Transacción no alcanza su terminación planeada porque Se interrumpe la conexión de red del cliente con una instancia del motor de base de datos. La aplicación cliente falla El equipo cliente se bloquea o se reinicia Se interrumpe la conexión y la instancia del motor de base de datos. El cliente cierra la aplicación Hay un corte de energía Recuperación rollback commit Estado inicial Estado Final Es necesario recuperar la base de datos. ¿cómo? Recuperación (Ejercicio) rollback commit Estado inicial Estado Final Inventar un algoritmo para recuperar la base de datos ante la interrupción de una transacción Técnicas de Recuperación Estado inicial Estado Final • Técnica de Log • Técnica de Checkpoints • Técnica de Sombra de Página Técnica de Log Mantener archivo de registros log para poder deshacer modificaciones. 2 tipos de registros log: 1.- <Transacción, item, old, new> 2.- <Transacción, evento significativo> evento significativo= start/commit ¿En qué tipo de almacenamiento debería estar este archivo log? Técnica de Log Cuando una transacción Ti se inicia => ? Cuando una transacción Ti realiza R(x) => ? Cuando una transacción Ti realiza W(x) ? Cuando una transacción Ti termina (está parcialmente commited) => ? Técnica de Log Cuando una transacción Ti se inicia => Creo el registro <Ti,start> Cuando una transacción Ti realiza R(x) => No hago nada Cuando una transacción Ti realiza W(x) => Creo el registro <Ti, x, old, new> Cuando una transacción Ti termina (está parcialmente commited) => Creo el registro <Ti,commit> Técnica de Log Modalidad 1 Modificar la BD en diferido: Grabar toda modificación en log pero postergar las escrituras en la BD hasta que la transacción esté parcialmente commited (haya terminado) Cuando Ti inicia, escribir en log <Ti,start> Cuando Ti W(x), escrbir en log <Ti,x,old,new> (NO modificar LA BD) Cuando Ti termina, escribir en log <Ti, pre-commit> e iniciar actualización de modificaciones en la BD. Cuando el DBMS termina de hacer las modificaciones en la BD, escribir en log <Ti,commit>. Técnica de Log Modalidad 1: Recuperación Ante una falla, buscar en el archivo LOG: Rehacer: item=new <Ti,pre-commit> LOG <Ti, commit> LOG Deshacer: No es necesario porque no se escribió nada en la BD Técnica de Log: Modalidad 1 Algoritmo modalidad 1: modif. diferido Técnica de Log Modalidad 2 Modificar la BD de inmediato: Grabar las modificaciones en el archivo log y en la BD mientras la transacción está activa. Cuando Ti inicia, escribir en log <Ti,start> Cuanto Ti W(x), se hace el cambio en la BD y escribir en log <Ti,x,old,new> Cuando Ti termina, escribir en log <Ti,commit> Técnica de Log Modalidad 2: Recuperación Ante una falla buscar en el archivo LOG: Rehacer: nada Deshacer: item=old <Ti,start> LOG <Ti,commit> LOG Algoritmo modalidad 2: modif. inmediata Técnica de Log Modalidad 3 (Técnica de Checkpoints) Modificar la BD cada cierto tiempo: Grabar modificaciones en log y postergar las escrituras en la BD hasta el checkpoint Cada vez que se hacen las modificaciones en la BD crear un registro <checkpoint> Técnica de Log Modalidad 3 (Técnica de Checkpoints) T5 T4 T3 T2 T1 tpo Ya se escribió en disco NO se escribió en disco Estamos aquí Se escribió en log Técnica de Log Modalidad 3 (Técnica de Checkpoints) ARCHIVO LOG Registro log CP – Ya se escribió en disco Registro Checkpoint CP+ NO se escribió en disco Técnica de Log Modalidad 3 (Técnica de Checkpoints - EJERCICIOS) 1.- ¿Cuántos registros chekpoint pueden haber en un archivo log? 2.- En caso de que ocurriera una falla, ¿Cómo se utilizaría el archivo log para recuperar la base de datos? (hacer un algoritmo de recuperación) Técnica de Log Modalidad 3 (Técnica de Checkpoints) Ante una falla pueden darse los siguientes casos: T5 T4 T3 T2 T1 TPO Chekpoint (CP) Falla Técnica de Log Modalidad 3 (Técnica de Chekpoints) Ante una falla pueden darse los siguientes casos: Transacciones que terminan antes del CP (T5) Transacciones que terminan después del CP (T4) Transacciones que empezaron y terminaron después del CP (T2) Transacciones que empezaron antes del CP pero no terminaron (T3) Transacciones que empezaron después del CP pero no terminaron (T1) Técnica de Log Modalidad 3 (Técnica de Chekpoints) Ante una falla buscar en el archivo LOG: Rehacer: Para cada registro <Ti,item,old,new> de CP+ tal que <Ti,commit> CP+ hacer: item=new Deshacer: Para cada registro <Ti,item,old,new> de CPtal que <Ti,start> CP- y <Ti,commit> log hacer: item=old Técnica de Log Modalidad 3 (Técnica de Chekpoints) Ante una falla buscar en el archivo LOG: Rehacer: Para cada registro <Ti,item,old,new> CP+ tal que <Ti,commit> CP+ (casos 4,2) do item=new (en la bd) Deshacer: Para cada registro <Ti,item,old,new> CPtal que <Ti,start> CP- <Ti,commit> LOG (caso 3) do item=old (en la bd) Ejercicios Como se modificaria el algoritmo anterior si consideramos que hay 2 checkpoints en el archivo log? Como se modificaria el algoritmo anterior si consideramos que hay 3 checkpoints en el archivo log? Como se modificaria el algoritmo antrior si consideramos que hay n checkpoints en el archivo log? Respuesta El algoritmo sigue siendo el mismo, es por eso que solo consideramos el ultimo checkpoint. Suponiendo que hubo un corte de luz y se tiene el sgte archivo log. Indicar cual es el estado de la BD: a) antes de que el DBMS aplique recuperación b) después de que el DBMS aplicó recuperación c) Hacer un algoritmo de recuperación d) Hacer un algoritmo de recuperación suponiendo que en el chekpoint se guardan las transacciones activas Suponiendo que hubo un corte de luz y que se tiene el sgte archivo log. Indicar cual es el estado de la BD: a) a=10 b=20 c=10 d=5 e=9 f=1 g=1 h=9 i=10 j=8 b) Rehacer: T3,T2 (solo las operaciones que están en CP+) Deshacer: T5 (solo las operaciones que están en CP-) a=10 b=20 c=10 d=20 e=10 f=2 g=1 h=3 i=7 j=8 c) c) continuacion d) Recorriendo sólo el CP+ identifico las transacciones a rehacer y a deshacer d) continuacion Recuperación Técnica de Sombra de Página BD está lógicamente dividida en páginas. En un archivo se tienen punteros a las páginas que conforman la base de datos Recuperación Técnica de Sombra de Página Mantener dos tablas de páginas durante la vida de una transacción: 1) Tabla actual: en RAM Cambia cada vez que T escribe 2) Tabla sombra: en DISCO No cambia durante la vida de la T Recuperación Técnica de Sombra de Página 1) Tabla actual: en RAM Cambia cada vez que T escribe Guarda el estado actual de la BD que eventualmente será el estado final Tabla sombra: en DISCO No cambia durante la vida de la T Guarda el estado inicial de la BD Recuperación Técnica de Sombra de Página Sombra Actual RAM ..... DISCO Recuperación Técnica de Sombra de Página Sombra ..... ESTADO INICIAL Recuperación Técnica de Sombra de Página Sombra Actual ..... T SE INICIA: Recuperación Técnica de Sombra de Página Sombra Actual x ..... T : W(x) ¿En qué página está x? Recuperación Técnica de Sombra de Página Sombra Actual x x ..... •Se crea una copia de la página de x •Se modifica la copia •Se actualiza la tabla Actual Recuperación Técnica de Sombra de Página Sombra Actual x a x ..... T : R(a) ¿qué hacemos? Buscamos a y leemos Recuperación Técnica de Sombra de Página Actual z x Sombra a x ..... T : W(z) ¿dónde está z? Recuperación Técnica de Sombra de Página Actual z x Sombra a x z ..... •Se crea una copia de la página de z •Se modifica la copia •Se actualiza la tabla Actual Recuperación Técnica de Sombra de Página Actual z xu a xu z ..... T : W(u) ¿dónde está u? ¿Qué hacemos? Sombra Recuperación Técnica de Sombra de Página Actual z xu Sombra a xu z ..... Como ya existe la copia , modificamos u en la copia Recuperación Técnica de Sombra de Página Actual z xu a xu z ..... T : commit ¿Qué hacemos? Sombra Recuperación Técnica de Sombra de Página Sombra z xu a xu z ..... T : commit Sombra=Actual Recuperación Técnica de Sombra de Página Actual z xu a xu z ..... T : rollback ¿Qué hacemos? Sombra Recuperación Técnica de Sombra de Página z xu a xu z ..... T : rollback No hacemos nada Sombra Ventajas Técnica Sombra de Página • La operación rehacer es simple • La operación deshacer no es necesaria Desventajas Técnica Sombra de Página Demasiada fragmentación del disco