• No se han encontrado resultados

RECUPERACIÓN ANTE FALLAS EN BASES DE DATOS

N/A
N/A
Protected

Academic year: 2021

Share "RECUPERACIÓN ANTE FALLAS EN BASES DE DATOS"

Copied!
39
0
0

Texto completo

(1)

1

RECUPERACIÓN ANTE FALLAS EN BASES DE DATOS

MATERIA: BASE DE DATOS

CUATRIMESTRE: 2C2010

(2)

2

CONCEPTOS:

TOLERANCIA A FALLAS

SYSTEM FAILURES O CRASHES (1)

RESILIENCIA

LOG: REGISTRA LA HISTORIA DE LOS CAMBIOS EFECTUADOS A LA BD PROCESO DE RECUPERACION (RECOVERY)

(LA OPERACION DE RECOVERY DEBE SER IDEMPOTENTE) ESTILOS DE LOGGING (2): UNDO LOGGING REDO LOGGING UNDO/REDO LOGGING LOG MANAGER RECOVERY MANAGER

(1) No veremos otros tipos de fallas comotransactiony media failures

(2) Algunos autores se refieren a esta clasificación como: Steal/Force, No-Steal/No-Force y Steal/No-Force respectivamente.

(3)

3

COMPONENTES: QUERY PROCESSOR TRANSACTION MANAGER LOG MANAGER BUFFER MANAGER RECOVERY MANAGER ---DATA LOG

(4)

4

INTERACCION DE COMPONENTES LOG QUERY PROCESSOR TRANSACTION MANAGER LOG MANAGER BUFFER MANAGER RECOVERY MANAGER DATA

(5)

5

ESPACIOS DE MEMORIA:

LOCAL DE LA TRANSACCION POOL DE BUFFERS

(6)

6

OPERACIONES PRIMITIVAS Y ESPACIOS DE MEMORIA

X: ITEM

t: VARIABLE LOCAL

MEM LOCAL DE LA TRANS

POOL DE BUFFERS

DISK BLOCKS DE LA BD

X

t

INPUT(X

)

READ(X,t

)

WRITE(X,t

)

OUTPUT(X

)

X

(7)

7

OPERACIONES (PRIMITIVAS) DE UNA TRANSACCION:

INPUT(X): COPIA EL BLOQUE QUE CONTIENE A X AL POOL DE BUFFERS

READ(X, t): COPIA X A LA VARIABLE LOCAL t DE LA TRANSACCION. SI EL BLOQUE QUE CONTIENE X NO ESTA EN EL POOL DE BUFFERS, PRIMERO EJECUTA INPUT(X). Y LUEGO ASIGNA EL VALOR DE X A LA VARIABLE LOCAL t.

WRITE(X, t): COPIA EL VALOR DE LA VARIABLE LOCAL t A X EN EL POOL DE BUFFERS. SI EL BLOQUE QUE CONTIENE X NO ESTA EN EL POOL DE BUFFERS, PRIMERO EJECUTA INPUT DE X Y LUEGO COPIA EL VALOR DE t A X EN EL POOL DE BUFFERS.

OUTPUT(X): COPIA EL BLOQUE CONTENIENDO X DESDE EL POOL DE BUFFERS A DISCO SE ASUME QUE LOS ITEMS NO EXCEDEN UN BLOQUE

LOS READSY LOS WRITESSON EMITIDOS POR LAS TRANSACCIONES.

LOS INPUTSY LOS OUTPUTSSON EMITIDOS POR EL BUFFER MANAGER.

FLUSH LOG: COMANDO EMITIDO POR EL LOG MANAGER PARA QUE EL BUFFER MANAGER FUERCE LOS LOG RECORDS A DISCO.

(8)

8

LOG:

ARCHIVO COMPUESTO POR LOG RECORDS MANEJADO POR EL LOG MANAGER. EN EL

MISMO SE REGISTRAN (APENDEAN) LAS ACCIONES IMPORTANTES DE LAS TRANSACCIONES. LOS LOG RECORDS, AL IGUAL QUE LOS ITEMS, INICIALMENTE SON CREADOS EN EL POOL DE BUFFERS Y SON ALOCADOS POR EL BUFFER MANAGER. EL COMANDO FLUSH-LOG ORDENA COPIAR LOS BLOQUES QUE CONTIENEN LOS LOG RECORDS A DISCO.

EL LOG ES UN ARCHIVO DEL TIPO APPEND-ONLY.

LAS TRANSACCIONES EJECUTAN CONCURRENTEMENTE Y POR LO TANTO LOS LOGS RECORDS SE GRABAN EN FORMA INTERCALADA EN EL LOG.

(9)

9

LOG RECORDS:

Start Log Record:

<START T>:INDICA QUE LA TRANSACCION T HA EMPEZADO

Commit Log Record:

<COMMIT T>:INDICA QUE LA TRANSACCION T A COMPLETADO EXITOSAMENTE. LOS CAMBIOS HECHOS POR T DEBERIAN ESTAR EN DISCO.

Abort Log Record:

<ABORT T>:INDICA QUE LA TRANSACCION T PODRIA NO HABER COMPLETADO EXITOSAMENTE. LOS CAMBIOS REALIZADOS POR T NO DEBEN APARECER EN DISCO.

Update Log Record (distinto para cada estilo de logging):

Undo Logging: <T, X, v> Redo Logging: <T, X, w> Undo/Redo Logging: <T, X, v, w>

(10)

10

UNDO LOGGING:

EN UNDO LOGGING EL RECOVERY MANAGER RESTAURA LOS VALORES ANTERIORES DE LOS ITEMS.

UPDATE LOG RECORD PARA UNDO-LOGGING:

ES DE LA FORMA: <T, X, v>. INDICA QUE LA TRANSACCION T HA CAMBIADO EL VALOR DE X CUYO VALOR ANTERIOR ERA v.

REGLAS DEL UNDO-LOGGING:

U1: SI T MODIFICA X, LUEGO EL LOG RECORD <T, X, v> DEBE GRABARSE EN DISCO ANTES DE QUE EL NUEVO VALOR DE X SEA GRABADO EN DISCO.

U2: SI T “COMITEA”, ENTONCES SU COMMIT LOG RECORD <COMMIT> DEBE SER GRABADO EN DISCO SOLO DESUPUES DE QUE TODOS LOS ITEMS CAMBIADOS POR T HAN SIDO GRABADOS EN DISCO (Y TAN PRONTO COMO SEA POSIBLE)

DE U1 Y U2 SE DESPRENDE QUE LOS ELEMENTOS ASOCIADOS A T DEBEN SER GRABADOS EN DISCO EN EL SIGUIENTE ORDEN:

A. LOS LOG RECORDS INDICANDO LOS CAMBIOS A LOS ITEMS B. LOS ITEMS CON SUS NUEVOS VALORES

(11)

11

EJEMPLO (UNDO LOGGING):

T= READ(A, t); t:= t*2; WRITE(A, t); READ(B, t); t:= t*2; WRITE(B, t)

PASO ACCION t M-A M-B D-A D-B LOG

1 <START T> 2 READ(A, t) (1) 8 8 8 8 3 t:= t*2 16 8 8 8 4 WRITE(A, t) 16 16 8 8 <T, A, 8> 5 READ(B,t) (1) 8 16 8 8 8 6 t:= t*2 16 16 8 8 8 7 WRITE(B,t) 16 16 16 8 8 <T, B, 8> 8 FLUSH LOG 9 OUTPUT(A) 16 16 16 16 8 10 OUTPUT(B) 16 16 16 16 16 11 <COMMIT T> 12 FLUSH LOG

(12)

12

RECUPERACION USANDO UNDO LOGGING:

LAS T INCOMPLETAS DEBEN SER DESHECHAS

SI OCURRE UNA FALLA DEL SISTEMA EL RECOVERY MANAGER USA EL LOG PARA RESTAURAR LA BD A UN ESTADO CONSISTENTE. LOS PASOS A SEGUIR SON:

1) DIVIDIR LAS TRANSACCIONES ENTRE COMPLETAS E INCOMPLETAS

<START T>….<COMMIT T>…. = COMPLETA <START T>….<ABORT T>……. = COMPLETA <START T>……… = INCOMPLETA

2) DESHACER LOS CAMBIOS DE LAS T INCOMPLETAS

EL RECOVERY MANAGER RECORRE EL LOG DESDE EL FINAL HACIA ARRIBA RECORDANDO LAS T DE LAS CUALES HA VISTO UN RECORD <COMMIT> O UN RECORD <ABORT>. A MEDIDA QUE VA SUBIENDO SI ENCUENTRA UN RECORD <T, X, v> , ENTONCES:

A. SI T ES UNA TRANSACCION CUYO <COMMIT> (O <ABORT>) HA SIDO VISTO, ENTONCES NO HACER NADA, T HA “COMITEADO” (O ABORTADO) Y NO DEBE SER DESHECHA.

B. SINO, T ES UNA TRANSACCION INCOMPLETA. EL RECORY MANAGER DEBE CAMBIAR EL VALOR DE X A v (X HA SIDO ALTERADO JUSTO ANTES DEL CRASH)

C. FINALMENTE EL RECOVERY MANAGER DEBE GRABAR EN EL LOG UN <ABORT T> POR CADA T INCOMPLETA QUE NO FUE PREVIAMENTE ABORTADA Y LUEGO HACER UN FLUSH DEL LOG. AHORA SE PUEDE REANUDAR LA OPERACION NORMAL DE LA BD.

(13)

13

EJEMPLO DE RECOVERY (UNDO LOGGING):

PARA EL EJEMPLO ANTERIOR, SUPONGAMOS QUE EL CRASH OCURRE: 1. DESPUES DE (12) 2. ENTRE (11) Y (12) 3. ENTRE (10) Y (11) 4. ENTRE (8) Y (10) 5. ANTES DE (8) SOLUCION:

1. DESPUES DE (12): TODOS LOS LOG RECORDS DE T SON IGNORADOS.

2. ENTRE (11) Y (12): A) SI <COMMIT T> FUE FLUSHEADO ENTONCES IDEM (1), B) SINO RECORRER EL LOG DE ABAJO HACIA ARRIBA, RESTAURAR B Y LUEGO A EN 8, ESCRIBIR UN <ABORT T> Y “FLUSHEAR” EL LOG.

3. ENTRE (10) Y (11): IDEM (2) (B)

4. ENTRE (8) Y (10): IDEM (3) (AUNQUE QUIZAS LOS CAMBIOS EN A Y/O B NO HAYAN LLEGADO A DISCO)

5. ANTES DE (8):NO SABEMOS SI ALGUN LOG RECORD LLEGO A DISCO. DE TODAS FORMAS PROCEDER IDEM (4).

(14)

14

EL UNDO LOGGING TIENE LAS SIGUIENTES DESVENTAJAS:

NO PODEMOS “COMITEAR” UNA TRANSACCION SIN ANTES GRABAR TODOS SUS CAMBIOS EN DISCO.

REQUIERE QUE LOS ITEMS SEAN GRABADOS INMEDIATAMENTE DESPUES DE QUE LA TRANSACCION TERMINO, QUIZAS INCREMENTANDO EL NUMERO DE I/O.

(15)

15

REDO LOGGING:

EN REDO LOGGING EL RECOVERY MANAGER REHACE LAS TRANSACCIONES “COMITEADAS”.

UPDATE LOG RECORD PARA REDO-LOGGING:

EN REDO LOGGING EL SIGNIFICADO DE <T, X, w> ES: T ESCRIBIO EL NUEVO VALOR w PARA EL ITEM X.

REGLA DE REDO-LOGGING:

HAY UNA SOLA REGLA, LLAMADA “WRITE AHEAD LOGGING RULE”:

R1:ANTES DE MODIFICAR CUALQUIER ITEM X EN DISCO, ES NECESARIO QUE TODOS LOS LOG RECORDS CORRESPONDIENTES A ESA MODIFICACION DE X, INCLUYENDO EL UPDATE RECORD <T, X, w> Y EL <COMMIT T> RECORD, DEBEN APARECER EN DISCO. DE R1 SE DESPRENDE QUE LOS ELEMENTOS ASOCIADOS A T DEBEN SER GRABADOS EN

DISCO EN EL SIGUIENTE ORDEN:

A. LOS LOG RECORDS INDICANDO LOS CAMBIOS A LOS ITEMS B. EL COMMIT LOG RECORD

(16)

16

UNDO LOGGING VS REDO LOGGING:

LOS PRINCIPALES DIFERENCIAS ENTRE REDO Y UNDO LOGGING SON:

1) MIENTRAS QUE UNDO LOGGING CANCELA LOS EFECTOS DE LAS T INCOMPLETAS E IGNORA LAS T “COMITEADAS” DURANTE EL RECOVERY, REDO LOGGING IGNORA LAS INCOMPLETAS Y REPITE LOS CAMBIOS HECHOS POR LAS “COMITEADAS”.

2) MIENTRAS QUE UNDO LOGGING REQUIERE GRABAR LOS CAMBIOS (DE LOS ITEMS) EN DISCO ANTES DE QUE EL <COMMIT T> SE GRABE EN DISCO, REDO LOGGING REQUIERE QUE EL <COMMIT T> SE GRABE EN DISCO ANTES QUE CUALQUIER CAMBIO (DE LOS ITEMS) SE GRABE EN DISCO.

3) MIENTRAS QUE LOS VALORES ANTERIORES ES LO QUE NECESITAMOS CUANDO USAMOS LAS REGLAS U1 Y U2, PARA RECUPERAR USANDO REDO LOGGING NECESITAMOS EN CAMBIO LOS VALORES NUEVOS DE LOS ITEMS.

(17)

17

EJEMPLO (REDO LOGGING):

T= READ(A, t); t:= t*2; WRITE(A, t); READ(B, t); t:= t*2; WRITE(B, t)

PASO ACCION t M-A M-B D-A D-B LOG

1 <START T> 2 READ(A, t) 8 8 8 8 3 t:= t*2 16 8 8 8 4 WRITE(A, t) 16 16 8 8 <T, A, 16> 5 READ(B,t) 8 16 8 8 8 6 t:= t*2 16 16 8 8 8 7 WRITE(B,t) 16 16 16 8 8 <T, B, 16> 8 <COMMIT T> 9 FLUSH LOG 10 OUTPUT(A) 16 16 16 16 8 11 OUTPUT(B) 16 16 16 16 16

(18)

18

RECUPERACION USANDO REDO LOGGING:

UNA CONSECUENCIA IMPORTANTE DEL REDO LOGGING ES QUE AL MENOS QUE EL LOG TENGA UN <COMMIT T> RECORD, SABEMOS QUE NINGUNO DE LOS CAMBIOS QUE HA HECHO T HAN SIDO GRABADOS EN DISCO.

LAS T “COMITEADAS” DEBEN SER REHECHAS

POR LO TANTO EL RECOVERY MANAGER USANDO EL REDO-LOG DEBE:

1) DIVIDIR LAS TRANSACCIONES ENTRE “COMITEADAS” Y “NO-COMITEADAS”.

<START T>….<COMMIT T>…. = “COMITEADA”

<START T>….<ABORT T>……. = “NO-COMITEADA” (ABORTADA) <START T>……… = “NO-COMITEADA” (INCOMPLETA)

2) RECORRER EL LOG DESDE EL PRINCIPIO HACIA ABAJO. POR CADA LOG RECORD <T, X, w> ENCONTRANDO:

A. SI T NOES UNA TRANSACCION “COMITEADA”, NO HACER NADA B. SI T ES “COMITEADA”, GRABAR EL VALOR w PARA X

C. POR CADA TRANSACCION T INCOMPLETA, GRABAR UN <ABORT T> EN EL LOG Y HACER FLUSH DEL LOG.

(19)

19

EJEMPLO DE RECOVERY (REDO LOGGING):

PARA EL EJEMPLO ANTERIOR, SUPONGAMOS QUE EL CRASH OCURRE: 1. DESPUES DE (9)

2. ENTRE (8) Y (9) 3. ANTES DE (8)

SOLUCION:

1. DESPUES DE (9): RECORRER EL LOG DE ARRIBA HACIA ABAJO RESTAURANDO A Y B EN 16. SI OCURRIERA ENTRE (10) Y (11) O DESPUES DE (11) LAS RESTAURACIONES SERIAN

REDUNDANTES PERO “INOFENSIVAS”.

2. ENTRE (8) Y (9): SI EL LOG RECORD <COMMIT T> LLEGO A DISCO, ENTONCES IDEM (1), SINO IDEM (3)

3. ANTES DE (8): EL <COMMIT T> SEGURO NO LLEGO A DISCO, ENTONCES NINGUN CAMBIO ES HECHO POR T. LUEGO ESCRIBIR UN <ABORT T> Y “FLUSHEAR” EL LOG.

(20)

20

¿PODEMOS MEJORAR LO VISTO HASTA AHORA?

LOS DOS ESTILOS DE LOGGING VISTOS HASTA AHORA TIENEN LAS SIGUIENTES DESVENTAJAS:

COMO YA DIJIMOS, EL UNDO LOGGING REQUIERE QUE LOS ITEMS SEAN GRABADOS

INMEDIATAMENTE DESPUES DE QUE LA TRANSACCION TERMINO, QUIZAS INCREMENTANDO EL NUMERO DE I/O.

POR OTRO LADO, EL REDO LOGGING REQUIERE MANTENER TODOS LOS BLOQUES MODIFICADOS EN EL POOL DE BUFFERS HASTA QUE LA TRANSACCION “COMITEA” Y LOS LOG RECORDS FUERON “FLUSHEADOS”, QUIZAS INCREMENTANDO EL PROMEDIO DE BUFFERS REQUERIDOS POR LAS TRANSACCIONES.

AHORA VEREMOS OTRO TIPO DE LOGGING LLAMADO UNDO/REDO LOGGING, EL CUAL PROVEE MAYOR FLEXIBILIDAD PARA ORDENAR LAS ACCIONES A EXPENSAS DE MANTENER MAS INFORMACON EN EL LOG.

(21)

21

UNDO/REDO LOGGING:

EN UNDO/REDO LOGGING EL RECOVERY MANAGER TIENE LA INFORMACION EN EL LOG PARA DESHACER LOS CAMBIOS HECHOS POR T, O REHACER LOS CAMBIOS HECHOS POR T.

UPDATE LOG RECORD PARA UNDO/REDO-LOGGING:

EL UPDATE LOG RECORD AHORA TIENE LA FORMA: <T, X, v, w>

SIGNIFICA QUE LA TRANSACCION T CAMBIO EL VALOR DEL ITEM X, CUYO VALOR ANTERIOR ERA v Y SU NUEVO VALOR ES w.

REGLA DEL UNDO/REDO LOGGING:

UR1:ANTES DE MODIFICAR CUALQUIER ITEM X EN DISCO DEBIDO A LOS CAMBIOS EFECTUADOS POR ALGUNA TRANSACCION T, ES NECESARIO QUE EL UPDATE RECORD <T, X, v, w> APAREZCA EN DISCO.

UR2:UN <COMMIT T> RECORD DEBE SER FLUSHEADO A DISCO INMEDIATAMENTE DESPUES DE

QUE APAREZCA EN EL LOG (REGLA OPCIONAL)

SE DESPRENDE QUE EL <COMMIT T> PUEDE PRECEDER O SEGUIR A CUALQUIERA DE LOS CAMBIOS DE LOS ITEMS EN DISCO.

(22)

22

EJEMPLO (UNDO/REDO LOGGING):

T= READ(A, t); t:= t*2; WRITE(A, t); READ(B, t); t:= t*2; WRITE(B, t)

PASO ACCION t M-A M-B D-A D-B LOG

1 <START T> 2 READ(A, t) 8 8 8 8 3 t:= t*2 16 8 8 8 4 WRITE(A, t) 16 16 8 8 <T, A, 8, 16> 5 READ(B,t) 8 16 8 8 8 6 t:= t*2 16 16 8 8 8 7 WRITE(B,t) 16 16 16 8 8 <T, B, 8, 16> 8 FLUSH LOG 9 OUTPUT(A) 16 16 16 16 8 10 <COMMIT T> 11 OUTPUT(B) 16 16 16 16 16

PODEMOS OBSERVAR EL <COMMIT T> EN EL MEDIO DEL OUTPUT DE LOS ITEMS A Y B. EL PASO (10) PODRIA ESTAR ANTES DE (8) O (9), O DESPUES DE (11).

(23)

23

RECUPERACION USANDO UNDO/REDO LOGGING:

COMO YA DIJIMOS TENEMOS LA INFORMACION EN EL LOG PARA DESHACER LOS CAMBIOS HECHOS POR T, O REHACER LOS CAMBIOS HECHOS POR T. LOS PASOS A SEGUIR SON:

SE DEBEN DESHACER LAS T INCOMPLETAS Y REHACER LAS “COMITEADAS”

POR LO TANTO EL RECOVERY MANAGER DEBE:

1) DESHACER (UNDO) TODAS LAS TRANSACCIONES INCOMPLETASEN EL ORDEN LA MAS RECIENTE PRIMERO.

2) REHACER (REDO) TODAS LAS TRANSACCIONES “COMITEADAS”EN EL ORDEN LA MAS ANTIGUA PRIMERO

(24)

24

EJEMPLO DE RECOVERY (UNDO/REDO LOGGING):

PARA EL EJEMPLO ANTERIOR, SUPONGAMOS QUE EL CRASH OCURRE: 1. DESPUES DE QUE <COMMIT T> ES FLUSHEADO A DISCO

2. ANTES DE QUE <COMMIT T> LLEGUE A DISCO

SOLUCION:

1. DESPUES DE QUE <COMMIT T> ES FLUSHEADO A DISCO: ENTONCES T ES IDENTIFICADA COMO “COMITEADA”. ESCRIBIMOS 16 PARA A Y B EN DISCO (OPERACIÓN REDO)

2. ANTES DE QUE <COMMIT T> LLEGUE A DISCO: ENTONCES T ES TRATADA COMO INCOMPLETA Y RESTAURAMOS B Y A EN 8 Y LUEGO ESCRIBIMOS UN <ABORT> Y “FLUSHEAMOS” EL LOG (OPERACIÓN UNDO)

(25)

25

RESUMEN:

DADA LA TRANSACCIÓN:

T= READ(A, t); t:= t*2; WRITE(A, t); READ(B, t); t:= t*2; WRITE(B, t)

Y LOS ITEMS AY BINCIALMENTE IGUAL A 8.

EL LOG A GENERAR PARA CADA ESTILO DE LOGGING SERA:

UNDO: <START T>; <T, A, 8>; <T, B, 8>; <COMMIT T>

REDO:<START T>; <T, A, 16>; <T, B, 16>; <COMMIT T>

(26)

26

CHECKPOINTING

SE HACE PERIODICAMENTE

(27)

27

CHECKPOINTING QUIESCENTE EN UNDO-LOGGING:

LOG RECORDS:

CHECKPOINT LOG RECORD: <CKPT>

CHECKPOINTING:

1. PARAR DE RECIBIR NUEVAS TRANSACCIONES

2. ESPERAR HASTA QUE LAS TRANSACCIONES ACTIVAS “COMITEEN” O ABORTEN Y HAYAN ESCRITO UN COMMIT O UN ABORT EN EL LOG

3. “FLUSHEAR” EL LOG A DISCO

4. ESCRIBIR UN CHECKPOINT RECORD LOG <CKPT> Y “FLUSHEAR” EL LOG NUEVAMENTE 5. VOLVER A ACEPTAR TRANSACCIONES

(28)

28

CHECKPOINTING QUIESCENTE EN UNDO-LOGGING:

EJEMPLO: <START T1> <T1, A, 5> <START T2> <T2, B, 10> <T2, C, 15> <T1, D, 20> <COMMIT T1> <COMMIT T2> <CKPT> <STRART T3> <T3, E, 25> <T3, F, 30>

(29)

29

CHECKPOINTING QUIESCENTE EN UNDO-LOGGING:

RECOVERY (USANDO UNDO-LOG CON CHECKPOINTING QUIESCENTE):

RECORRER EL LOG DESDE EL FINAL HACIA ATRAS IDENTIFICANDO LAS TRANSACCIONES INCOMPLETAS Y RESTAURANDO LOS VALORES ANTERIORES DE LOS ITEMS HASTA QUE ENCONTRAMOS UN <CKPT> RECORD.

POR ULTIMO SE DEBE GRABAR UN <ABORT T> POR CADA TRANSACCION INCOMPLETA Y “FLUSHEAR” EL LOG.

(30)

30

CHECKPOINTING NO-QUIESCENTE EN UNDO-LOGGING:

LOG RECORDS:

CHECKPOINT START LOG RECORD :<START CKPT (T1,...,Tk)>

CHECKPOINT END LOG RECORD: <END CKPT>

CHECKPOINTING:

1. ESCRIBIR UN LOG RECORD <START CKPT (T1,…,Tk)> Y “FLUSHEAR” EL LOG. LAS T1,…,Tk SON TODAS LAS TRANSACCIONES ACTIVAS (TODAVIA NO HAN “COMITEADO” NI

ESCRITO SUS CAMBIOS EN DISCO)

2. ESPERAR HASTA QUE TODAS LAS T1,…,Tk TERMINEN (“COMITEANDO” O ABORTANDO). SE ACEPTA QUE OTRAS TRANSACCIONES COMIENCEN.

(31)

31

CHECKPOINTING NO-QUIESCENTE EN UNDO LOGGING:

EJEMPLO: <START T1> <T1, A, 5> <START T2> <T2, B, 10> <START CKPT (T1, T2)> <T2, C, 15> <STRART T3> <T1, D, 20> <COMMIT T1> <T3, E, 25> <COMMIT T2> <END CKPT> <T3, F, 30>

(32)

32

CHECKPOINTING NO-QUIESCENTE EN UNDO-LOGGING:

RECOVERY (USANDO UN UNDO-LOG CON CHECKPOINTING NO-QUIESCENTE):

DEBEMOS APLICAR LA POLITICA UNDO: RECORRER EL LOG DESDE EL FINAL HACIA ATRAS IDENTIFICANDO LAS TRANSACCIONES INCOMPLETAS RESTAURANDO LOS VALORES ANTERIORES DE LOS ITEMS HASTA ENCONTRAR:

1. SI PRIMERO ECONTRAMOS UN <END CKPT>, LUEGO RECORRER HACIA ATRAS HASTA EL PROXIMO <START CKPT ()> Y LUEGO PARAR.

2. SI PRIMERO ENCONTRAMOS UN <START CKPT (T1,…,Tk)> (UN CRASH OCURRIO DURANTE EL CHECKPOINT) DEBEMOS RECORRER HACIA ATRAS HASTA EL START DE LA MAS TEMPRANA DE LAS Ti INCOMPLETAS (LAS INCOMPLETAS SON LAS T1,…,Tk + LAS QUE EMPEZARON DESPUES DEL <START CKPT ()>)

POR ULTIMO COMO SIEMPRE SE DEBE GRABAR UN REGISTRO <ABORT T> POR CADA TRANSACCION INCOMPLETA ENCONTRADA Y “FLUSHEAR” EL LOG.

(33)

33

CHECKPOINTING NO-QUIESCENTE EN REDO-LOGGING:

LOG RECORDS:

CHECKPOINT START LOG RECORD :<START CKPT (T1,...,Tk)>

CHECKPOINT END LOG RECORD: <END CKPT>

CHECKPOINTING:

1. ESCRIBIR UN LOG RECORD <START CKPT (T1,…,Tk)> Y “FLUSHEAR” EL LOG. LAS T1,…,Tk SON TODAS LAS TRANSACCIONES ACTIVAS (TODAVIA NO HAN “COMITEADO” NI

ESCRITO SUS CAMBIOS EN DISCO)

2. FORZAR A DISCO LOS ITEMS QUE FUERON ESCRITOS EN EL POOL DE BUFFERS PERO QUE AUN NO LLEGARON A DISCO POR TRANSACCIONES QUE YA HAN “COMITEADO” AL MOMENTO DE INTRODUCIR EL <START CKPT()> EN EL LOG.

MIENTRAS ESTO SE REALIZA SE ACEPTA QUE OTRAS TRANSACCIONES COMIENCEN. 3. ESCRIBIR UN LOG RECORD <END CKPT> Y “FLUSHEAR” EL LOG.

(34)

34

CHECKPOINTING NO-QUIESCENTE EN REDO-LOGGING:

EJEMPLO: <START T1> <T1, A, 5> <START T2> <COMMIT T1> <T2, B, 10> <START CKPT (T2)> <T2, C, 15> <STRART T3> <T3, D, 20> <END CKPT> <COMMIT T2> <COMMIT T3>

(35)

35

CHECKPOINTING NO-QUIESCENTE EN REDO-LOGGING:

RECOVERY (USANDO REDO-LOG CON CHECKPOINTING NO-QUIESCENTE):

DEBEMOS APLICAR LA POLITICA REDO: RECORRER EL LOG IDENTIFICANDO LAS TRANSACCIONES “COMITEADAS” Y REHACERLAS. DEBEMOS DECIDIR DESDE DONDE COMENZAR:

1. SI PRIMERO ECONTRAMOS UN <END CKPT>, DEBEMOS REHACER LAS T “COMITEADAS” QUE ESTABAN ACTIVAS AL MOMENTO DEL CHECKPOINT Y LAS QUE COMENZARON DESPUES DEL MISMO.

2. SI PRIMERO ENCONTRAMOS UN <START CKPT (T1,…,Tk)> (UN CRASH OCURRIO DURANTE EL CHECKPOINT) DEBEMOS RECORRER HACIA ATRAS HASTA EL <END CKPT> ANTERIOR Y SU CORRESPONDIENTE <START CKPT(V1, V2, …, Vk)> Y LUEGO DEBEMOS REHACER LAS TRANSACCIONES DE LA LISTA Vi “COMITEADAS” QUE ESTABAN ACTIVAS AL MOMENTO DE ESTE CHECKPOINT Y LAS QUE COMENZARON DESPUES DEL MISMO.

POR ULTIMO COMO SIEMPRE SE DEBE GRABAR UN REGISTRO <ABORT T> POR CADA TRANSACCION INCOMPLETA ENCONTRADA Y “FLUSHEAR” EL LOG.

(36)

36

CHECKPOINTING NO-QUIESCENTE EN UNDO/REDO LOGGING:

LOG RECORDS:

CHECKPOINT START LOG RECORD :<START CKPT (T1,...,Tk)>

CHECKPOINT END LOG RECORD: <END CKPT>

CHECKPOINTING:

1. ESCRIBIR UN LOG RECORD <START CKPT (T1,…,Tk)> Y “FLUSHEAR” EL LOG. LAS T1,…,Tk SON TODAS LAS TRANSACCIONES ACTIVAS (TODAVIA NO HAN “COMITEADO” NI ESCRITO SUS CAMBIOS EN DISCO)

2. FORZAR A DISCO TODOS LOS DIRTY BUFFERSESCRITOS POR TRANSACCIONES (“COMITEADAS” O NO) AL MOMENTO DE INTRODUCIR EL <START CKPT()> EN EL LOG. MIENTRAS ESTO SE REALIZA SE ACEPTA QUE OTRAS TRANSACCIONES COMIENCEN. 3. ESCRIBIR UN LOG RECORD <END CKPT> Y “FLUSHEAR” EL LOG.

(37)

37

CHECKPOINTING NO-QUIESCENTE EN UNDO/REDO LOGGING:

EJEMPLO: <START T1> <T1, A, 5> <START T2> <COMMIT T1> <T2, B, 9, 10> <START CKPT (T2)> <T2, C, 14, 15> <STRART T3> <T3, D, 19, 20> <END CKPT> <COMMIT T2> <COMMIT T3>

(38)

38

CHECKPOINTING NO-QUIESCENTE EN UNDO/REDO LOGGING:

RECOVERY (USANDO UNDO/REDO LOG CON CHECKPOINTING NO-QUIESCENTE):

DEBEMOS APLICAR LA POLITICA UNDO/REDO: DESHACER LAS T INCOMPLETAS Y REHACER LAS “COMITEADAS”

1. PARA DESHACER LAS T INCOMPLETAS DEBEMOS RETROCEDER SIEMPRE (ENCONTREMOS O NO EL <END CKPT>) HASTA EL <START> DE LA MAS ANTIGUA DE ELLAS (LA TRANSACCION INCOMPLETA MAS ANTIGUA ESTARA EN LA LISTA DEL <START CKPT ()>)

2. PARA REHACER LAS T “COMITEADAS”, SI ENCONTRAMOS EL <END CKPT> SOLO

NECESITAMOS REHACER LAS ACCIONES OCURRIDAS A PARTIR DEL <START CKPT()> EN ADELANTE (LAS ACCIONES ANTERIORES SEGURO LLEGARON A DISCO), SI NO ENCONTRAMOS EL <END CKPT> DEBEMOS APLICAR LO DESCRIPTO PARA REDO LOGGING CON

CHECKPOINTING NO QUIESCENTE.

POR ULTIMO COMO SIEMPRE SE DEBE GRABAR UN REGISTRO <ABORT T> POR CADA TRANSACCION INCOMPLETA ENCONTRADA Y “FLUSHEAR” EL LOG.

(39)

39

BIBLIOGRAFÍA:

LOS EJEMPLOS DE ESTA CLASE FUERON TOMADOS DEL SIGUIENTE LIBRO:

DATABASE SYSTEMS – THE COMPLETE BOOK, DE H. GARCIA MOLINA, J. D. ULLMAN Y J. WIDOM, 2002.

Referencias

Documento similar

&#34;No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

[r]

n que se contiene La Ordenanza que generalmente deberá observarse para el modo de.. cazar y pescar en estos rey nos, con señalamiento de los tiempos de veda, de una y

(1993): “La contabilidad de las uniones temporales de empresas (UTE) en el sector de la construcción”, a Técnica Contable, n... INSTITUTO DE CONTABILIDAD Y AUDITORIA DE CUENTAS

El tercero tiene notas bajas pero la mayor es estadística, una de las temáticas trabajadas de forma más mecánica, asimismo el último arquetipo muestra que, aun con notas buenas,

A medida que las organizaciones evolucionan para responder a los cambios del ambiente tanto para sobrevivir como para crecer a partir de la innovación (Stacey, 1996), los

En cuarto lugar, se establecen unos medios para la actuación de re- fuerzo de la Cohesión (conducción y coordinación de las políticas eco- nómicas nacionales, políticas y acciones

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación