recovery - brown university · log-based recovery fi fi. log examples transaction t1 log read(a)...
TRANSCRIPT
Recovery
○○
○○
○○
Why Recovery?
Recovery algorithms
●
●
Log-based Recovery
fi fi
Log ExamplesTransaction T1 Log
Read(A)A = A - 50Write(A)Read(B)B = B + 50Write(B)
<T1, start><T1, A, 1000, 950><T1, B, 2000, 2050><T1, commit>
Deferred Database Modification
●
●●
Immediate Database Modification
●●●●
Immediate Database Modification
fi
Practice<T0, start> <T0, A, 1000, 950> <T0, B, 2000, 2050>
<T0, start> <T0, A, 1000, 950> <T0, B, 2000, 2050> <T0, commit> <T1, start> <T1, C, 700, 600>
<T0, start> <T0, A, 1000, 950> <T0, B, 2000, 2050> <T0, commit> <T1, start> <T1, C, 700, 600> <T1, commit>
Practice<T0, start> <T0, A, 1000, 950> <T0, B, 2000, 2050>
<T0, start> <T0, A, 1000, 950> <T0, B, 2000, 2050> <T0, commit> <T1, start> <T1, C, 700, 600>
<T0, start> <T0, A, 1000, 950> <T0, B, 2000, 2050> <T0, commit> <T1, start> <T1, C, 700, 600> <T1, commit>
Checkpoint●●
(already committed)
Recovery With Concurrent Transactions
fi
Recovery With Concurrent Transactions
PracticeLOG:<T0 start> <T0, A, 0, 10> <T0 commit> <T1 start> <T1, B, 0, 10> <T2 start> <T2, C, 0, 10> <T2, C, 10, 20> <checkpoint {T1, T2}> <T3 start> <T3, A, 10, 20> <T3, D, 0, 10> <T3 commit>
PracticeLOG:<T0 start> <T0, A, 0, 10> <T0 commit> <T1 start> <T1, B, 0, 10> <T2 start> <T2, C, 0, 10> <T2, C, 10, 20> <checkpoint {T1, T2}> <T3 start> <T3, A, 10, 20> <T3, D, 0, 10> <T3 commit>
Undo-list: T1, T2Redo-list: T3
PracticeLOG:<T0 start> <T0, A, 0, 10> <T0 commit> <T1 start> <T1, B, 0, 10> <T2 start> <T2, C, 0, 10> <T2, C, 10, 20> <checkpoint {T1, T2}> <T3 start> <T3, A, 10, 20> <T3, D, 0, 10> <T3 commit>
Undo-list: T1, T2Redo-list: T3
Undo:Set C to 10Set C to 0Set B to 0
PracticeLOG:<T0 start> <T0, A, 0, 10> <T0 commit> <T1 start> <T1, B, 0, 10> <T2 start> <T2, C, 0, 10> <T2, C, 10, 20> <checkpoint {T1, T2}> <T3 start> <T3, A, 10, 20> <T3, D, 0, 10> <T3 commit>
Undo-list: T1, T2Redo-list: T3
Undo:Set C to 10Set C to 0Set B to 0
Redo:Set A to 20Set D to 10
PracticeLOG:<T0 start> <T0, A, 0, 10> <T0 commit> <T1 start> <T1, B, 0, 10> <T2 start> <T2, C, 0, 10> <T2, C, 10, 20> <checkpoint {T1, T2}> <T3 start> <T3, A, 10, 20> <T3, D, 0, 10> <T3 commit>
Undo-list: T1, T2Redo-list: T3
Undo:Set C to 10Set C to 0Set B to 0
Redo:Set A to 20Set D to 10
After recovery:A: 20, B: 0, C:0, D: 10