for all the actions you must update the transaction table.
for dirty page table, you update for "update" record.
Beign Checkpoint까지만 테이블을 만들면된다.
DPT에서 p5가 70을 할지 90을 할지 헷갈릴 수 있는데 항상 older를 적어야한다.
pageLSN은 disk에 write한 것 기록?
analysis phase
Redo phase:
LSN 10을 생략하는 이유는 100이 같은 페이지에 대해 같은 transaction이 더 최신이다.
LSN20을 안하는 이유는 이미 디스크에 write했기 때문이다.redo는 pageLSN을 바꾼다.
undo phase
undo는 ToUndo에서 가장 큰 것부터 한다.
100을 undo하고 110을 남긴것이다. T1의 이전 것은 10이므로 undoNextLSN은 10이되는 것이다.
그다음 90을 undo하고 120을 남기고 undoNextLSN은 50이다.
그렇게 가다가 20을 undo 하고나면 previous LSN이 없으므로 nil이 된다
undo를 다하고나면 170처럼 undo를 다했다고 log 남긴다.
crash가 두번 발생한 것이다. 앞에와 차이점은 110, 120, 130이 추가된 것이다.
redo undo (redo clr)
undo clr은 undoNextLSN이 더 있나 없나 확인하는 것이다. 만약 nil이 아니라면, undolist에 추가하는 것이다.
normal execution에서와 analysis phase에서만 TT, DPT 갱신하면된다 (reo, undo에서는 안해도됨)