Definition
Logging (ACID)
When starting, a transaction registers itself in the log: .
When modifying data item by write in transaction :
- Add log entry with:
- transaction’s ID (i.e., )
- data item name (i.e., )
- old value of the item
- new value of the item
- Write new value of the item
When committing transaction :
When aborting a transaction :
Example:
Recovery
Available operations:
Example:
Given a database:
Resource | Value |
---|---|
A | 100 |
B | 300 |
C | 5 |
D | 60 |
E | 80 |
and log records:
- [ T1, start ]
- [ T1, B, 300, 400]
- [ T1, C, 5, 10 ]
- [ T2, start ]
- [ T2, E, 80, 480 ]
- [ T1, A, 100, 560 ]
- [ T1, commit ]
- [ T2, A, 560, 570 ]
- [ T2, D, 60, 530 ]
Phases 1 - REDO:
Start with an empty undo list: :
-
started. Accept into undo list: .
-
updated . Update database:
Resource | Value |
---|---|
A | 100 |
B | |
C | 5 |
D | 60 |
E | 80 |
- updated . Update database:
Resource | Value |
---|---|
A | 100 |
B | 400 |
C | |
D | 60 |
E | 80 |
-
started. Accept into undo list: .
-
updated . Update database:
Resource | Value |
---|---|
A | 100 |
B | 400 |
C | 10 |
D | 60 |
E |
- updated . Update database:
Resource | Value |
---|---|
A | |
B | 400 |
C | 10 |
D | 60 |
E | 480 |
-
committed. Remove from undo list: .
-
updated . Update database:
Resource | Value |
---|---|
A | |
B | 400 |
C | 10 |
D | 60 |
E | 480 |
- updated . Update database:
Resource | Value |
---|---|
A | 570 |
B | 400 |
C | 10 |
D | |
E | 480 |
Phases 2 - UNDO:
Resource | Value |
---|---|
A | 570 |
B | 400 |
C | 10 |
D | 530 |
E | 480 |
. Undoing changes caused by in reverse order.
- Reversing and add to end of log entries:
Resource | Value |
---|---|
A | 570 |
B | 400 |
C | 10 |
D | |
E | 480 |
- [ T1, start ]
- [ T1, B, 300, 400 ]
- [ T1, C, 5, 10]
- [ T2, start ]
- [ T2, E, 80, 480 ]
- [ T1, A, 100, 560 ]
- [ T1, commit ]
- [ T2, A, 560, 570 ]
- [ T2, D, 60, 530 ]
- [ T2, D, 60 ]
- Reversing and add to end of log entries:
Resource | Value |
---|---|
A | |
B | 400 |
C | 10 |
D | 60 |
E | 480 |
- [ T1, start ]
- [ T1, B, 300, 400 ]
- [ T1, C, 5, 10]
- [ T2, start ]
- [ T2, E, 80, 480 ]
- [ T1, A, 100, 560 ]
- [ T1, commit ]
- [ T2, A, 560, 570 ]
- [ T2, D, 60, 530 ]
- [ T2, D, 60 ]
- [ T2, A, 560 ]
- Reversing and add to end of log entries:
Resource | Value |
---|---|
A | 560 |
B | 400 |
C | 10 |
D | 60 |
E | 480 |
- [ T1, start ]
- [ T1, B, 300, 400 ]
- [ T1, C, 5, 10]
- [ T2, start ]
- [ T2, E, 80, 480 ]
- [ T1, A, 100, 560 ]
- [ T1, commit ]
- [ T2, A, 560, 570 ]
- [ T2, D, 60, 530 ]
- [ T2, D, 60 ]
- [ T2, A, 560 ]
- [ T2, E, 80 ]
- Found . Remove from undo list, i.e. , and add to end of log entries:
- [ T1, start ]
- [ T1, B, 300, 400 ]
- [ T1, C, 5, 10 ]
- [ T2, start ]
- [ T2, E, 80, 480 ]
- [ T1, A, 100, 560 ]
- [ T1, commit ]
- [ T2, A, 560, 570 ]
- [ T2, D, 60, 530 ]
- [ T2, D, 60 ]
- [ T2, A, 560 ]
- [ T2, E, 80 ]
- [ T2, abort ]