복구 알고리즘
- Logging (normal operation)
- <Ti start>
- <Ti, Xj, V1, V2> : Ti가 Xj 를 V1 에서 V2로 교체
- <Ti commit>
- Rollback (normal operation)
- 가장 최근것에서 옛날걸로 돌아감
- Undo 할때 log를 작성 : compensation log records (CLR)
- <Ti, Xj, V1> : Xj를 V1으로 다시 교체
- <Ti start> 지점이 나오면 <Ti abort> log 생성
- Recovery phase
- Redo
- 가장 최신 <checkpoint L> 찾음
- 앞으로 가면서 <Ti, Xj, V1, V2> 같은 것들을 Redo
- <Ti start> : 발견시 Ti 를 undo-list 에 넣음
- <Ti commit> or <Ti abort> 찾으면 undo-list 에서 제거
- Undo
- 끝에서 부터 거꾸로 감
- <Ti, Xj, V1, V2> 발견시 → undo + log <Ti, Xj, V1>
- <Ti start> → undo + <Ti abort> + undo-list에서 뺌
- undo-list 비어있을 때까지
- 이렇게 두개 다 하면 회복 완료
- 이전방식과 차이점은 Redo를 먼저 Undo
- crash 가 나기 전까지 복귀(Redo) → 거기서부터 undo 할꺼 찾아서 함
복구 알고리즘 예제

퍼지 검사점

- 보통은 checkpoint 하면 다 멈추고 함
- <checkpoint L>
- M 이라는 modified buffer blocks 생성
- M에 있는 모든 buffer block을 써야함
- 이때 update 되면 안됨
- WAL 지켜져야함
- 언제 체크포인트가 최근에 되었는지 작성
- last checkpoint
- 복구 더 빠르게 하기 위해서
비휘발성 저장장치 장애
- db를 주기적으로 dump 시켜서 (log받아와서)
- 나중에 복구한다. → checkpoint 와 유사