[CMPT 454] Week11_3

June·2021년 3월 31일
0

CMPT 454

목록 보기
30/33

UNDO Phase

Example: WAL

UNDO Phase

Transaction table은 after analysis와 redo 이후 만들어진 것이다. 여기서 Status에서 C가 아닌 것들만 ToUndo에 있다.

190은 180에서 abort이기 때문에 T1의 가장 최근 것을 undo 중이었다.

  1. Undo Phase 알고리즘에 따라 ToUndo에서 가장 큰 190을 보는데, != nil이므로 100을 집합에 추가한다.

  2. 셋에서 가장 큰 것은 이제 160인데, undo하고 130을 추가한다.

  3. 그 다음은 150 이므로, undo하고 110을 추가한다.

  4. 그 다음 130을 하는데 그 이전에 T3가 없으므로 그냥 셋에서 130 제거한다.

  5. 그다음 110 하고 위와 동

  6. 그 다음 100하고 위와 동

green record는 실행되지 않았다 (180, 170, 140, 120). 180을 안하는 이유는 190에서 바로 100으로 replace 되기 때문이다. 170이 안되는 이유는 commit 됐기 때문에 애초에 셋에 없다. 140도 T4가 commit 됐기 때문에 애초에 셋에 없다. 120이 undo하는 이유는 190에서 already undo 되었기 때문이다. 바로 100으로 간다.

결과적으로 T1, T2, T3의 disk에서 효력이 지워진다.

UNDO Phase

여기서는 200이 추가되어 T1이 완전히 UNDO되어서 after analysis phase의 결과물인 테이블에 T1이 없다.

abort도 Uncommit으로 친다. (180)

CLR을 만나면 DPT는 가만히 놔두고, pageLSN은 set한다.

Example: Crash During Recovery!

crash돼서 undo하다가 다시 crash되면 그 후에 이어서 undo한다.

Effect of CLR

0개의 댓글