트랜잭션 로그 복구

장애 후에는 커밋 로그를 기준으로 Redo와 Undo를 나눈다

로그를 끝까지 스캔한 뒤 커밋이 확인된 변경은 다시 살리고, 커밋되지 않은 변경은 시작 전 값으로 되돌린다. 동시성 기록은 어떤 변경이 서로 영향을 줄 수 있었는지 제한한다.

LSN 120 T1 UPDATE 뒤 COMMIT 기록이 있다. Redo
LSN 128 T2 UPDATE만 있고 COMMIT이 없다. Undo
LSN 132 Lock, MVCC 기록은 노출 범위를 해석한다. 격리
커밋 확인 데이터 파일에 반영됐는지 몰라도 결과는 다시 적용한다.
미완료 확인 부분 실행 흔적은 이전 값으로 되돌린다.
동시성 기록 복구 후 어떤 버전이 보였을 수 있는지 Lock/MVCC로 제한한다.

1. 로그에서 본 사실

WAL 스캔
LSN 120 T1 COMMIT 장애 전에 확정됐으므로 결과가 남아야 한다.
LSN 128 T2 UPDATE 커밋 기록이 없으므로 변경 흔적을 지워야 한다.
LSN 132 Lock · MVCC 동시 실행 중 누가 어떤 버전을 볼 수 있었는지 남긴다.

2. 복구기가 내리는 결정

판정표
Redo T1은 다시 적용 커밋 결과가 디스크에 덜 써졌더라도 지속성을 보장한다.
Undo T2는 이전 값으로 복귀 부분 실행 결과를 없애 원자성을 회복한다.
격리 동시 실행 간섭 범위 제한 락과 버전 정보로 어떤 상태가 노출됐는지 해석한다.
로그 해석 대상 복구 동작 ACID 연결
Redo COMMIT이 있는 변경 다시 적용 지속성
Undo COMMIT이 없는 변경 이전 값으로 복귀 원자성
Lock/MVCC 동시 실행 기록 간섭 범위 해석 격리성
Redo는 중복 적용에 견뎌야 한다

페이지에 이미 반영된 로그를 다시 확인할 수 있으므로 같은 변경을 다시 적용해도 결과가 깨지지 않아야 한다.

Undo는 미완료만 지운다

커밋된 결과까지 되돌리면 지속성이 깨진다. 커밋 레코드가 보존과 취소의 경계다.

일관성은 마지막에 검증한다

로그 복구가 끝나도 제약 조건과 업무 규칙이 최종 상태를 다시 확인해야 한다.