본문 바로가기

IT/Oracle

Oracle SQLException : ORA-01555: snapshot too old

반응형

ORA-01555: snapshot too old 오류는 Oracle 데이터베이스에서 장시간 실행된 쿼리가 과거에 생성된 데이터를 읽으려고 시도할 때 발생하는 오류입니다. 이 오류는 주로 다음과 같은 상황에서 발생합니다:

원인

  1. 언두 테이블스페이스(Undo Tablespace) 또는 롤백 세그먼트의 부족: Oracle 데이터베이스는 쿼리가 실행되는 동안 변경된 데이터를 추적하기 위해 언두 테이블스페이스를 사용합니다. 오래된 데이터를 읽어야 하는 장시간 실행된 쿼리가 있는 경우, Oracle은 해당 데이터를 언두 테이블스페이스에서 검색하려고 합니다. 하지만 언두 테이블스페이스가 충분하지 않으면 해당 데이터를 유지하지 못해 오류가 발생할 수 있습니다.

  2. 장시간 실행되는 쿼리와 경쟁하는 트랜잭션: 다른 트랜잭션이 같은 데이터를 업데이트하거나 삭제하면서 언두 세그먼트를 덮어쓰면, 장시간 실행된 쿼리가 과거의 데이터를 읽으려고 할 때 오류가 발생합니다.

  3. 언두 보존 설정(Undo Retention) 부족: 언두 보존 설정이 너무 짧게 설정되어 있으면, 장시간 실행되는 쿼리가 완료되기 전에 언두 데이터가 삭제될 수 있습니다.

해결 방법

  1. 언두 테이블스페이스 확장: 언두 테이블스페이스의 크기를 늘려 더 많은 언두 데이터를 저장할 수 있도록 합니다.

  2. 언두 보존 기간(Undo Retention) 늘리기: 데이터베이스 파라미터 UNDO_RETENTION 값을 증가시켜 오래된 언두 데이터를 더 오래 보존할 수 있도록 설정합니다.

  3. 장시간 실행되는 쿼리 최적화: 쿼리 실행 시간을 단축하거나, 데이터를 적게 사용하는 방식으로 쿼리를 최적화합니다.

  4. 언두 테이블스페이스 모니터링: 언두 테이블스페이스 사용 현황을 지속적으로 모니터링하고, 필요한 경우 조정합니다.

이러한 조치를 통해 ORA-01555 오류를 예방하거나 해결할 수 있습니다.


언두 테이블스페이스가 충분한데도 ORA-01555: snapshot too old 오류가 발생한다면, 다음과 같은 다른 원인들을 고려해 볼 수 있습니다

1. 장시간 실행되는 쿼리

  • 쿼리가 지나치게 오래 실행되는 경우, 언두 테이블스페이스가 충분하더라도 장시간 실행된 쿼리가 필요한 시점에 이미 언두 데이터가 덮어씌워져 문제가 발생할 수 있습니다. 특히, UNDO_RETENTION 설정보다 더 오래 실행되는 쿼리는 이러한 오류를 유발할 가능성이 큽니다.

2. High DML (Data Manipulation Language) 활동

  • 다른 트랜잭션에서 많은 DML 작업(예: INSERT, UPDATE, DELETE)을 수행할 때, 언두 테이블스페이스에 저장된 언두 데이터가 빠르게 소모될 수 있습니다. 이로 인해 장시간 실행된 쿼리가 필요한 시점에 언두 데이터가 덮어써지거나 삭제될 수 있습니다.

3. Flashback 기능 사용

  • FLASHBACK 기능이 활성화된 경우, 이 기능이 언두 데이터를 더 많이 사용할 수 있습니다. 이로 인해 언두 테이블스페이스가 충분하더라도 오래된 데이터를 보존하기 어려울 수 있습니다.

4. 불규칙한 언두 세그먼트 사용

  • 특정 언두 세그먼트가 과도하게 사용되고 있는 경우, 해당 세그먼트에서 오류가 발생할 가능성이 큽니다. 언두 세그먼트의 고르지 않은 사용이 문제를 일으킬 수 있습니다.

5. AUTOEXTEND가 비활성화된 경우

  • 언두 테이블스페이스가 충분하다고 하더라도, AUTOEXTEND가 비활성화되어 있으면 예상치 못한 공간 부족이 발생할 수 있습니다.

해결 방안

  1. 쿼리 최적화: 장시간 실행되는 쿼리를 최적화하여 실행 시간을 줄입니다.
  2. UNDO_RETENTION 값 조정: 현재 설정된 UNDO_RETENTION 값을 확인하고 필요시 증가시킵니다.
  3. 언두 세그먼트의 균형 있는 사용: 특정 세그먼트가 과도하게 사용되지 않도록 설정을 조정합니다.
  4. 데이터베이스 모니터링: DML 작업량과 언두 테이블스페이스 사용 현황을 모니터링하여 문제가 되는 시점을 파악합니다.

이와 같은 접근을 통해 언두 테이블스페이스가 충분한 상황에서도 발생하는 ORA-01555 오류를 해결할 수 있습니다.

반응형