Oracle READ COMMITTED
SELECT마다 SCN 기준점을 먼저 고정하고, 너무 새로운 블록은 Undo로 되돌려 읽는다
읽기 일관성의 핵심은 문장 시작 시점입니다. Oracle은 현재 블록을 무조건 읽지 않고, 그 문장에 맞는 버전만 반환합니다.
읽기 기준점
SELECT 시작 SCN 1000
이 SELECT는 끝날 때까지 SCN 1000 이전에 커밋된 모습만 봅니다. 다음 SELECT는 다시 새 SCN을 잡습니다.
같은 트랜잭션 안에서도 문장이 바뀌면 기준 SCN이 달라질 수 있으므로 Non-Repeatable Read가 생길 수 있습니다.
행을 읽을 때 Oracle이 하는 판단
비교
Oracle 동작
SELECT가 받는 값
block SCN <= 1000
현재 데이터 블록을 그대로 읽음
이미 커밋된 최신 값
block SCN > 1000
Undo Segment에서 이전 버전을 추적해 CR 블록 생성
SCN 1000 시점 값으로 반환
예시
현재 블록의 커밋 시점이 1005라면, 이 SELECT에는 너무 새롭습니다. 그래서 Oracle은 Undo에서 이전 값을 꺼내 Consistent Read 블록을 만든 뒤 결과를 돌려줍니다.
정리
READ COMMITTED에서 Oracle이 보장하는 것은 트랜잭션 전체의 고정 스냅샷이 아니라, 각 SELECT마다의 일관된 읽기입니다.