[스크랩] ORA-1652 조치 방법

2010. 9. 7. 16:59Oracle/Oracle Scrap

반응형
제품 : ORACLE SERVER <- 참조하세요. 좋은 정보 또 하나 배웠습니다.

작성날짜 : 1995-11-05

ORA-1652 조치 방법
================== 

테이블이나 인덱스 등을 만들 때 자신의 TEMP TABLESPACE가 아닌 곳에서 
ORA-1652(temp tablespace가 부족함) 에러가 발생하는 경우가 있다.

V7.1 에서는 테이블, 인덱스 등을 병렬로 생성할 수 있다. 이를 위하여 실제로
테이블 등이 생성될 공간에 Temporary Segment를 만들게 되는데 이 과정에서
Temporary Segment를 만들 공간이 부족하게 되면 실제의 테이블이 생성되는
테이블스페이스에 대하여 ORA-1652 에러가 발생하게 되는 것이다.

ORA-1652 에러를 해결하는 방법은 에러 메시지에서 보여주는 대로 해당 테이블
스페이스에 Temporary Segment가 생성될 만한 연속된 공간을 마련하여 주는 것이다.

다음과 같은 절차로 해결하여 본다. 

1. 데이타화일을 추가하여 테이블스페이스의 크기를 확장한다.
SQL> ALTER TABLESPACE data ADD DATAFILE 
'/usr/../oracle/data2.dbf' SIZE 100M;

2. 테이블의 storage parameter를 조정하여 현재 남아 있는 영역에 들어갈 수 
있도록 한다.

SQL> ALTER TABLE emp STORAGE(NEXT 1M);


3. 테이블스페이스가 fragmentation이 심한 상태이면 export/import를 이용하여 
테이블스페이스를 재구성한다.

[예제] 다음의 테이블 생성 문장을 보자.
SQL> CREATE TABLE FEATURE
(feature_code varchar2(4) primary key,
feature_desc varchar2(3) );

ORA-01652, 00000, "unable to extend temp segment by 6144 in 
tablespace VESSEL"

테이블스페이스 VESSEL 에 남아 있는 가장 큰 연속된 공간을 확인해 보면

SQL>SELECT MAX(blocks), MAX(bytes)
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME = 'VESSEL';

blocks bytes



6143 12,580,864

위의 결과를 보면 현재 VESSEL에 남아 있는 가장 큰 연속된 공간은 6143 블럭인데
오라클은 6144 블럭을 사용하려고 시도하다 이를 할당받지 못하여 이 에러가 발생
하게 된 것이다.
반응형