SW/Database / / 2024. 11. 30. 11:36

ORA-01555: Snapshot Too Old / 원인과 해결 방법

반응형

ORA-01555 오류 설명

ORA-01555 오류는 주로 긴 트랜잭션이나 대규모 쿼리 실행 중에 이전 데이터를 참조하려고 할 때 발생합니다.

이는 UNDO 데이터가 더 이상 사용 가능하지 않거나 덮어써질 때 나타납니다.

 

ORA-01555: Snapshot Too Old / 원인과 해결 방법

 

 

ORA-01555 오류 설명

이 오류는 UNDO 테이블스페이스에서 과거 데이터를 조회할 때 필요한 스냅샷이 손실되었을 때 발생합니다. 일반적으로 UNDO 세그먼트 크기 부족, 잘못된 UNDO 관리 설정, 또는 오래 실행되는 트랜잭션이 원인입니다.

오류 원인

ORA-01555 오류의 주요 원인은 다음과 같습니다:

  1. UNDO 테이블스페이스 부족: 긴 트랜잭션 중 필요한 UNDO 데이터가 삭제되거나 덮어씌워질 때.
  2. 커밋된 트랜잭션: 커밋된 데이터에 대한 스냅샷이 더 이상 사용 불가능할 때.
  3. 잘못된 PCTUSED 또는 INITRANS 설정: 테이블이나 인덱스에서 불충분한 블록 설정.
  4. 비효율적인 쿼리: 긴 실행 시간을 가진 쿼리가 많은 UNDO를 소비할 때.

해결 방법 및 명령어 예시

ORA-01555 오류를 해결하기 위해 아래 방법을 시도하세요:

1. UNDO 테이블스페이스 크기 확인 및 증가

현재 UNDO 테이블스페이스 크기를 확인합니다:

SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files
WHERE tablespace_name = 'UNDOTBS1';

UNDO 테이블스페이스 크기를 늘리려면 다음 명령어를 사용합니다:

ALTER DATABASE DATAFILE '경로/undotbs01.dbf' RESIZE 1G;

2. UNDO 관리 설정 확인

자동 UNDO 관리를 사용하는지 확인합니다:

SHOW PARAMETER UNDO_MANAGEMENT;

자동 UNDO 관리를 활성화하려면:

ALTER SYSTEM SET UNDO_MANAGEMENT=AUTO;

3. 긴 트랜잭션 분할

긴 트랜잭션을 짧게 나누고 중간중간 커밋을 수행합니다:

BEGIN
   FOR i IN 1..10000 LOOP
      INSERT INTO 테이블명 VALUES(i);
      IF MOD(i, 1000) = 0 THEN
         COMMIT;
      END IF;
   END LOOP;
END;
/

4. 효율적인 쿼리 작성

대규모 데이터 조회 시 필요한 열만 선택하도록 쿼리를 최적화하세요:

SELECT 필요한_열 FROM 테이블명 WHERE 조건;

간단 요약

  • ORA-01555 오류는 UNDO 데이터 손실로 발생합니다.
  • 해결 방법: UNDO 테이블스페이스 크기 조정, 긴 트랜잭션 분할, 효율적인 쿼리 작성.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유