Undo 보존 실패

긴 조회가 시작 SCN의 과거 버전을 끝까지 따라가야 하는데, 그 Undo가 먼저 재사용되면 ORA-01555가 납니다.

조회는 같은 스냅샷을 유지하려고 뒤로 거슬러 올라가지만, 오래된 Undo가 사라지면 더 이상 그 시점의 값을 복원할 수 없습니다.

조회가 고정한 시점

T1의 긴 SELECT는 끝까지 같은 시점만 읽어야 함

SCN 1000

블록을 늦게 읽더라도, 조회 시작 시점인 SCN 1000으로 복원할 수 있어야 일관된 읽기가 유지됩니다.

동시에 일어난 변화

다른 트랜잭션은 새 버전을 만들며 앞으로 진행

1500 -> 2000

업데이트와 커밋이 쌓이면 현재 블록은 최신 버전으로 바뀌고, 예전 값은 Undo 체인 뒤쪽으로 밀려납니다.

조회가 따라가야 하는 버전 체인
왼쪽은 최신 상태, 오른쪽으로 갈수록 더 오래된 Undo

현재 블록

지금 보이는 값
SCN 2000

긴 조회 입장에서는 너무 새 버전이라 그대로 읽을 수 없습니다.

Undo 1

아직 남아 있음
SCN 1500

한 단계 뒤로는 갈 수 있지만, 조회가 원하는 시점에는 아직 도달하지 못했습니다.

Undo 2

필수였지만 재사용됨
SCN 1000

원래는 여기까지 내려가야 했지만 오래된 Undo가 덮여서, 조회가 필요한 스냅샷 복원이 끊어집니다.

조회가 필요로 한 것 SCN 1000 이하의 오래된 Undo 보존
실제 상태 Undo 공간 부족으로 가장 오래된 버전이 먼저 재사용됨
결과 같은 SELECT 안에서 과거 스냅샷을 더 이상 재구성할 수 없음