데이터베이스 관리에서 가장 중요한 것은 데이터의 무결성과 정확성을 유지하는 것입니다. 만약 실수로 데이터를 잘못 수정했거나, 수정 중에 시스템이 예기치 않게 멈춘다면 어떻게 해야 할까요? 이때 구원투수 역할을 하는 것이 바로 언두 데이터(Undo Data)입니다. 오늘은 오라클 운영의 필수 개념인 언두 데이터의 역할과 관리 방안을 심도 있게 살펴보겠습니다.

1. 언두 데이터(Undo Data)란 무엇인가?
언두 데이터는 DML(INSERT, UPDATE, DELETE 등) 작업이 발생했을 때 생성되는 ‘변경 전의 원래 값’을 의미합니다.
-
예시: 부서 위치를 ‘서울’에서 ‘분당’으로 업데이트할 때, 원래 값인 ‘서울’이 언두 데이터로 기록됩니다.
-
저장 구조:
-
언두 세그먼트(Undo Segment): 언두 데이터가 실제로 기록되는 논리적 단위입니다.
-
언두 테이블스페이스(Undo Tablespace): 이러한 세그먼트들을 효율적으로 관리하기 위한 전용 저장소입니다.
-
2. 언두 데이터를 사용하는 3가지 핵심 목적
오라클은 단순히 기록을 남기는 것을 넘어, 데이터베이스의 신뢰성을 위해 세 가지 목적으로 언두를 사용합니다.
① 작업 롤백 (Rollback)
데이터를 수정했지만 아직 COMMIT하지 않은 상태에서 작업을 취소하고 싶을 때 사용합니다. 롤백을 수행하면 오라클은 언두 세그먼트에 저장된 ‘과거 데이터’를 가져와 현재 데이터를 원상복구합니다.
② 읽기 일관성 (Read Consistency)
오라클의 가장 강력한 특징 중 하나로, 사용자가 조회를 시작한 시점의 데이터를 보장하는 기능입니다.
-
상황: A 사용자가 10분간의 긴 조회를 시작했는데, 중간에 B 사용자가 데이터를 수정하고
COMMIT을 해버린 경우. -
해결: 오라클은 수정된 최신 데이터 대신 언두 세그먼트에 보관된 과거 데이터를 찾아 A 사용자에게 보여줍니다. 덕분에 조회 도중 데이터가 변하지 않는 ‘일관성’이 유지됩니다.
③ 인스턴스 복구 (Instance Recovery)
갑작스러운 정전 등으로 DB가 다운되었을 때, 리두 로그(Redo Log)로 장애 시점까지 복구한 뒤 커밋되지 않았던 작업들을 언두 데이터로 되돌려(Rollback) 데이터 깨짐을 방지합니다.
3. [실무 팁] ORA-1555 에러와 SCN의 관계
실무에서 가장 흔히 마주하는 에러 중 하나가 바로 “ORA-1555: Snapshot Too Old”입니다.
오라클은 작업 순서를 정하기 위해 **SCN(System Change Number)**이라는 시간표를 활용합니다. 조회 프로세스는 자신의 시작 SCN보다 나중의 SCN을 가진 데이터를 발견하면 언두 세그먼트로 달려가 과거 데이터를 찾습니다.
💡 여기서 잠깐! 만약 언두 데이터가 다른 트랜잭션에 의해 덮어씌워져 사라졌다면? 오라클은 더 이상 과거 데이터를 보여줄 수 없게 되고, 이때 발생하는 것이 바로 ORA-1555 에러입니다. 이를 방지하려면
UNDO_RETENTION파라미터를 업무 성격에 맞게 충분히 확보해 주는 전략이 필요합니다.
4. 언두 데이터 이해를 돕기 위한 비유
언두 데이터는 우리가 문서 작업을 할 때 사용하는 ‘되돌리기(Ctrl + Z)’ 버튼과 같습니다. 글을 쓰다가 오타를 냈을 때 되돌리기 버튼을 누르면 이전 상태로 돌아가는 것처럼, 데이터베이스에 문제가 생기거나 조회의 일관성이 필요할 때 오라클은 이 ‘되돌리기 정보’를 꺼내어 데이터의 평화를 유지하는 것입니다.
언두 테이블스페이스는 자동으로 관리(AUM)되는 것이 기본이지만, 대량의 DML이 발생하는 환경에서는 적절한 크기 산정과 유지 시간(RETENTION) 설정이 성능에 큰 영향을 미칩니다. 데이터의 과거를 기억함으로써 현재의 정확성을 지키는 언두 데이터, 그 원리를 이해하면 더 견고한 데이터베이스 설계가 가능해집니다.