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

1. 언두 데이터(Undo Data)란 무엇인가?
언두 데이터는 DML(INSERT, UPDATE, DELETE 등) 작업이 발생했을 때 생성되는 ‘변경 전의 원래 값’을 의미한다.
-
예시: 부서 위치를 ‘서울’에서 ‘분당’으로 업데이트할 때, 원래 값인 ‘서울’이 언두 데이터로 기록된다.
-
저장 구조:
-
언두 세그먼트(Undo Segment): 언두 데이터가 실제로 기록되는 논리적 단위이다.
-
언두 테이블스페이스(Undo Tablespace): 이러한 세그먼트들을 효율적으로 관리하기 위한 전용 저장소이다.
-
2. 언두 데이터를 사용하는 3가지 핵심 목적
오라클은 단순히 기록을 남기는 것을 넘어, 데이터베이스의 신뢰성을 위해 세 가지 목적으로 언두를 사용한다.
① 작업 롤백 (Rollback)
데이터를 수정했지만 아직 COMMIT하지 않은 상태에서 작업을 취소하고 싶을 때 사용한다. 롤백을 수행하면 오라클은 언두 세그먼트에 저장된 ‘과거 데이터’를 가져와 현재 데이터를 원상복구한다.
② 읽기 일관성 (Read Consistency)
오라클의 가장 강력한 특징 중 하나로, 사용자가 조회를 시작한 시점의 데이터를 보장하는 기능이다. 사용자가 긴 조회를 시작했을 때 다른 사용자가 데이터를 수정하고 COMMIT하더라도, 오라클은 언두 데이터를 참조하여 조회 시작 시점의 일관된 데이터를 보여준다.
③ 인스턴스 복구 (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) 설정이 성능에 큰 영향을 미친다. 데이터의 과거를 기억함으로써 현재의 정확성을 지키는 언두 데이터, 그 원리를 이해하면 더 견고한 데이터베이스 설계가 가능해진다.