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;
'데이터 사이언스 DataScience > Data Base 데이터베이스' 카테고리의 다른 글
[JDBC] DB 접속이 안된다 (ORA-12514) (0) | 2021.02.24 |
---|---|
[Oracle] 분명히 비밀번호가 맞는데 틀리다고 나온다 (ORA-01017) (2) | 2021.02.24 |
[Oracle] 테이블 단편화 정보 확인 (리오그 대상 식별법) (0) | 2020.08.21 |
[Oracle] LONG 타입 데이터 TO_LOB 통해 CTAS, ITAS 하기 (0) | 2020.08.11 |
[Oracle] 여러 행을 한 행으로 합치기 (LISTAGG, WM_CONCAT 차이) (0) | 2020.08.04 |