본문 바로가기

데이터 사이언스 DataScience/Data Base 데이터베이스

[Oracle] ORA-30036 UNDO 테이블스페이스 관리

0. 에러메세지

ORA-30036

세그먼트를 8만큼 실행 취소 테이블스페이스 'UNDOTBS1'에서 확장할 수 없음

unable to extend segment by  in undo tablespace

 

1. 문제원인

실행 중인 쿼리의 데이터 양이 많아 UNDO 데이터의 양이 UNDOTBS를 초과할때 발생한다.

 

즉, UNDO TABLESPACE가 공간이 모자른 상황이다.

 

당장 문제를 해결하는데는 2가지 방법이 있다. (UNDOTBS가 1개인 DB라고 가정)

    2-1. UNDOTBS1에 datafile 추가

    2-2. UNDOTBS1을 비워주기

 

 

2. 문제해결

 

2-1. UNDOTBS1에 datafile 추가

 

   1) UNDOTBS1의 datafile 위치를 DBA_DATA_FILES 테이블에서 확인

SELECT *
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = 'UNDOTBS1';

 

   2) DB에 터미널로 접속해서 남은 data file의 크기를 확인.

       $ df -h | grep 'oradata'

   'oradata' 자리에는 1) DBA_DATA_FILES에서 확인한 FILE_NAME의 경로를 찾아준다.

 

   3) 남은 data file에서 필요한 적정용량을 테이블스페이스에 추가

ALTER TABLESPACE UNDOTBS1 ADD DATAFILE '/기존경로/undotbs02.dbf (예시)' SIZE 10G;

 

2-2. UNDOTBS1을 비워주기

 

   1) 임시 테이블스페이스 (UNDOTBS2) 생성

CREATE UNDO TABLESPACE UNDOTBS DATAFILE '/기존경로/undotbs02.dbf (예시)' SIZE 1G;
 --임시 TS므로 SIZE는 안 커도 됨

 

   2) UNDO 테이블스페이스를 임시 테이블스페이스 (UNDOTBS2)로 변경

ALTER SYSTEM SET UNDO_TABLESPCE = UNDOTBS2;

 

   3) 기존 테이블스페이스 (UNDOTBS1) 삭제

DROP TABLESPACE UNDOTBS INCLUDING CONTENTS AND DATAFILES;

 

   4) 기존 테이블스페이스 (UNDOTBS1) 다시 생성

CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE '/기존경로/undotbs01.dbf (예시)' SIZE 10G; 

 

   5) UNDO 테이블스페이스를 재생성한 테이블스페이스 (UNDOTBS1)로 변경

ALTER SYSTEM SET UNDO_TABLESPCE = UNDOTBS1;

 

   6) 임시 테이블스페이스 (UNDOTBS2) 삭제

DROP TABLESPACE UNDOTBS2 INCLUDING CONTENTS AND DATAFILES;

 

 

반응형