삽질 기록-error

ORA-30036: UNDO 테이블스페이스 공간 부족

숲별 2025. 1. 7. 11:38
728x90

에러난 로그

[2025-01-06 18:57:37]   Read layer's data: 120000, elapsed from start: 471 secs
[2025-01-06 18:57:46]   Read layer's data: 123223, elapsed from start: 480 secs
[2025-01-06 18:57:53]   Totally elapsed: 487 secs.
[2025-01-06 18:57:53] Rebuilding topology elapsed totally 9416 secs.
[2025-01-06 18:57:53] ======================================================================
02:04:06.140 [main] ERROR com.stlogic.network.cli.NetworkCLI - java.sql.SQLException: ORA-00604: 순환 SQL 레벨 1  오류가 발생했습니다
ORA-13236: R 트리 처리  내부 오류: [insertion at root (mdrbin_mem_ins_rt)]
ORA-13236: R 트리 처리  내부 오류: [integrating leaf bucket (mdrbin_optmz_mem_ins_node)]
ORA-13236: R 트리 처리  내부 오류: [node integration exception (mdrbin_intgrt_leaf_bckt)]
ORA-13236: R 트리 처리  내부 오류: [node changing (mdrbin_intgrt_nds)]
ORA-13234: R 트리 인덱스 테이블 [ for update]을(를) 액세스하는  실패했습니다
ORA-29400: 데이터 카트리지 오류
ORA-30036: 세그먼트를 8만큼 실행 취소 테이블스페이스 'UNDOTBS1'에서 확장할  없음
ORA-06512: "MDSYS.SDO_IDX",  12
ORA-06512:  1

Error: java.sql.SQLException: ORA-00604: 순환 SQL 레벨 1  오류가 발생했습니다
ORA-13236: R 트리 처리  내부 오류: [insertion at root (mdrbin_mem_ins_rt)]
ORA-13236: R 트리 처리  내부 오류: [integrating leaf bucket (mdrbin_optmz_mem_ins_node)]
ORA-13236: R 트리 처리  내부 오류: [node integration exception (mdrbin_intgrt_leaf_bckt)]
ORA-13236: R 트리 처리  내부 오류: [node changing (mdrbin_intgrt_nds)]
ORA-13234: R 트리 인덱스 테이블 [ for update]을(를) 액세스하는  실패했습니다
ORA-29400: 데이터 카트리지 오류
ORA-30036: 세그먼트를 8만큼 실행 취소 테이블스페이스 'UNDOTBS1'에서 확장할  없음
ORA-06512: "MDSYS.SDO_IDX",  12
ORA-06512:  1

stl-network>

 

처음에 오라클 만들고 복제할 때도 데이터가 많아서 문제더니..

트랜잭션하면서도 문제가 생기는구나..ㅎㅎㅎ

 

이름이 일단 데이터 테이블스페이스가 아닌 것 같아서 찾아봄

 

UNDO 테이블스페이스(UNDO_TABLESPACE)는 Oracle 데이터베이스에서 트랜잭션 관리 데이터 일관성 보장을 위해 사용되는 특수 저장소입니다. 단순한 데이터 저장소가 아니라, 트랜잭션 복구 및 롤백 지원과 같은 중요한 역할을 합니다.

 

<UNDO 테이블스페이스의 주요 기능>

1. 트랜잭션 롤백 지원

2. 읽기 일관성(Read Consistency) 제공

3. 트랜잭션 복구

4. 플래시백 쿼리(Flashback Query) 지원

5. 장기 실행 쿼리 지원

 

 

<UNDO 테이블스페이스의 특징>

1. 자동 관리

 

  • Oracle이 자동으로 UNDO 세그먼트를 관리하여 별도의 수동 설정이 거의 필요 없습니다.
  • UNDO_RETENTION 설정을 통해 UNDO 데이터 보존 기간을 설정할 수 있습니다.

2. 자동 확장 지원

  • UNDO 테이블스페이스는 자동 확장(AUTOEXTEND) 옵션으로 설정 가능.
  • 대규모 트랜잭션 처리 시 공간 부족 문제를 방지.

3. 보존 기간 설정 가능

  • 오래된 데이터를 일정 시간 동안 보존하도록 설정할 수 있습니다.

4. 단일 테이블스페이스 관리

  • Oracle은 한 번에 하나의 UNDO 테이블스페이스만 사용할 수 있습니다.
  • 새로운 UNDO 테이블스페이스로 전환하면 기존 테이블스페이스는 백업 및 삭제 가능합니다.

 

Oracle 데이터 경로 확인
SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb
FROM dba_data_files;

 

 

SELECT tablespace_name, file_name
FROM dba_data_files
WHERE tablespace_name LIKE 'UNDOTBS%';

 

-- 새 테이블스페이스 생성 (크기 50GB, 자동 확장)
CREATE BIGFILE UNDO TABLESPACE UNDOTBS2
DATAFILE 'D:\APP\STLOGIC\ORADATA\ORCL\UNDOTBS02.DBF'
SIZE 50G AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED;

-- 새로운 테이블스페이스 사용 설정
ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2;

-- 기존 테이블스페이스 정리(선택사항)
DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;​

 

기존 undo테이블스페이스가 32기가였는데 에러가 난거라

일반 UNDO TABLESPACE 말고 BIGFILE로 생성했다.

 

BIGFILE의 장점

  1. 단일 대용량 파일 지원:
    • 개별 데이터 파일의 최대 크기가 **32TB(테라바이트)**까지 확장 가능.
    • 대규모 작업 및 UNDO 공간 확장이 필요한 경우 이상적.
  2. 관리 용이:
    • 여러 개의 데이터 파일을 추가하거나 관리할 필요가 없음.
    • 관리 복잡도가 줄어듦.
  3. 대규모 데이터 처리:
    • 공간을 지속적으로 확장해야 하는 대규모 GIS 또는 트랜잭션 중심 애플리케이션에 적합.
  4. 성능 최적화:
    • 테이블스페이스 구조가 간단하여 인덱스 최적화 및 관리 효율성 향상.

 

일반 데이터스페이스는 1,2 다 활용했었는데 이거는 새 거로 변경을 한 이유는 

undo 테이블스페이스는 하나만 'Active' 상태로 사용할 수 있기 때문이라고 함

 

 

 

+++++++++++++++

3. 추가적인 고려사항

  1. UNDO 보존 시간 설정
    • 장시간 트랜잭션을 위한 보존 기간을 늘립니다.
    sql
    코드 복사
    ALTER SYSTEM SET UNDO_RETENTION = 10800; -- 3시간(초 단위)
  2. 테이블스페이스 및 성능 모니터링
    • 현재 사용량 확인
      sql
      코드 복사
      SELECT tablespace_name, file_id, file_name, bytes/1024/1024 AS size_mb, maxbytes/1024/1024 AS max_size_mb, autoextensible FROM dba_data_files WHERE tablespace_name LIKE 'UNDO%';
    • UNDO 사용률 모니터링
      sql
      코드 복사
      SELECT tablespace_name, used_blocks * 8192 / 1024 / 1024 AS used_mb, free_blocks * 8192 / 1024 / 1024 AS free_mb FROM v$undostat;