Oracle에서 ORA-01555 오류가 발생하면서 쿼리가 중단되셨나요?

“snapshot too old”라는 메시지 때문에 원인 파악이 어려우셨다면 이 글이 도움이 될 것입니다.

ORA-01555: snapshot too old 오류는 Oracle에서 매우 흔하게 발생하는 문제 중 하나로, 주로 Undo 데이터 소실긴 실행 시간의 쿼리LOB 처리 오류 등과 관련이 있습니다. 특히 대용량 데이터를 다루는 환경ETL 처리보고서 쿼리, 또는 LOB 컬럼 처리 시 자주 발생하죠.

이 글에서는 ORA-01555의 원인을 쉽고 명확하게 설명하고, 실무에서 즉시 적용할 수 있는 쿼리 기반 해결 방법까지 정리했습니다. Undo Retention 설정부터 LOB 컬럼 옵션 변경까지 한눈에 확인해보세요.


🔍 ORA-01555 오류 메시지

ORA-01555: snapshot too old: rollback segment number with name "" too small


📌 주요 원인

주요 원인설명
Undo Retention 부족쿼리 실행 중 Undo 데이터가 재사용됨
Undo Tablespace 공간 부족오래된 Undo 블록이 강제로 삭제됨
대량 데이터 DML 동시 처리다른 트랜잭션이 Undo를 빠르게 소모
LOB 컬럼 처리 시 오류PCTVERSION 또는 RETENTION 미설정
느린 SELECT 쿼리쿼리 시간이 너무 길어 Undo 유지 불가

✅ 해결 방법

1. Undo Retention 시간 증가

ALTER SYSTEM SET UNDO_RETENTION = 1800; -- 30분

 2. Undo Tablespace 공간 늘리기

ALTER DATABASE DATAFILE '/path/undotbs01.dbf' RESIZE 2G;


3. Retention Guarantee 설정

Undo 공간이 부족해도 최소 보존 시간 확보

ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;


4. LOB 컬럼 오류 해결

LOB 데이터를 자주 수정할 경우 아래처럼 설정

ALTER TABLE your_table 
MODIFY lob_column 
(STORE AS SECUREFILE (RETENTION AUTO));


또는

ALTER TABLE your_table 
MODIFY lob_column 
(PCTVERSION 20);


5. 느린 SELECT 쿼리 튜닝

  • 인덱스 사용 유도
  • 배치 쿼리로 나누기 (ROWNUM, ROWNUM BETWEEN)
  • MERGE 또는 WITH절 사용으로 사전 정리


📈 Undo 사용량 모니터링 쿼리

SELECT 
    begin_time,
    end_time,
    undoblks,
    txncount,
    maxquerylen,
    ssolderrcnt
FROM 
    v$undostat
ORDER BY begin_time DESC;


📝 마무리 요약

항목확인 포인트
Undo retention 설정SHOW PARAMETER undo_retention
Undo tablespace 크기DBA_DATA_FILES, V$UNDOSTAT
오류 쿼리 튜닝 여부실행 계획 확인 (EXPLAIN PLAN)
LOB 저장 방식SECUREFILE, PCTVERSION 옵션 적용 여부

ORA-01555 오류는 시스템의 Undo 관리, SQL 성능, LOB 처리 방식이 복합적으로 영향을 미치는 문제입니다. 위 방법들을 조합하면 대부분의 환경에서 해결 가능하며, 근본적으로는 Undo 공간 확보와 쿼리 시간 단축이 핵심입니다.