이번엔 윈도우 오라클이..
고객이 연락와서 데이터가 안올라 온다고 해서 확인해 봤더니..
상기와 같은 오류가...
ORA-165X error는 tablespace에 space가 부족해서 table이나 rollback segment extent가 할당되지 못해서 발생하는 error이다. 다음의 에러들은 tablespace에 space가 부족해서 발생하는 사항들이다.
01652, 00000, 'unable to extend temp segment by %s in tablespace %s'
01653, 00000, 'unable to extend table %s.%s by %s in tablespace %s'
01654, 00000, 'unable to extend index %s.%s by %s in tablespace %s'
01655, 00000, 'unable to extend cluster %s.%s by %s in tablespace %s'
1. Tablespace space 부족 현상의 예
다음의 테이블 생성 문장을 보자.
SQL> CREATE TABLE FEATURE
2> (feature_code varchar2(4) primary key,
3> feature_desc varchar2(3) );
ORA-01652, 00000, 'unable to extend temp segment by 6144 in tablespace VESSEL'
테이블 스페이스 VESSEL 에 남아있는 가장 큰 연속된 공간을 확인해 보면
SQL> SELECT MAX(blocks), MAX(bytes)
2> FROM DBA_FREE_SPACE
3> WHERE TABLESPACE_NAME = 'VESSEL';
blocks bytes
6143 12,580,864
위의 결과를 보면 현재 VESSEL 에 남아있는 가장 큰 연속된 공간은 6143 블록인데 오라클은 6144 블럭이 사용하려다 이를 할당받지 못하여 에러가 발생하게 된 것이다.
2.tablespace space 부족현상의 조치
tablespace에 space가 부족해서 에러가 발생하는 경우
아래의 몇 가지 방법을 이용해 조치가 가능하다.
(1) 데이타 화일을 추가하여 테이블스페이스의 크기를 확장한다.
SVRMGR> ALTER TABLESPACE data ADD DATAFILE '/usr/../oracle/data2.dbf' SIZE 100M;
이때의 tablespace 가 SYSTEM 일 경우는 user 의 default tablespace가 잡혀있지 않기 때문에 근본적인 해결이 필요하다. 이 경우는 무작정 tablespsace 를 늘리지 말고 user의 default tablespace를 create 후 user에게 할당해 주도록 한다.
예)
SVRMGR> CREATE TABLESPACE tablespace_name datafile '......' size 100m;
SVRMGR> ALTER USER user_name IDENTIFIED BY passwd
> DEFAULT TABLESPACE tablespace_name
> TEMPORARY TABLESPACE temp ;
(2) 테이블(rollback segment)의 storage parameter를 조정하여 현재 남아있는 영역에 들어갈 수 있도록 한다.
SQLDBA> ALTER TABLE emp STORAGE(NEXT 1M);
이 경우 tablespace가 fragmentation이 심한 경우가 아니면 효과적이지 못하다.
(3) 테이블스페이스가 fragmentation이 심한 상태이면 exp/imp를 이용하여 테이블 스페이스를 재구성 한다.
3. V7.1에서의 ORA-1652 에러 테이블이나 인덱스 등을 만들 때 자신의 TEMP TABLESPACE가 아닌 곳에서 ORA-1652(temp tablespace가 부족함) 에러가 발생하는 경우가 있다. 이와 같은 문제는 V7.1에서만 발생하는데 V7.1에서는 테이블, 인덱스 등을 병렬로 생성할 수 있다. 이를 위하여 실제로 테이블 등이 생성될 공간에 Temporary Segment를 만들게 되는데 이 과정에서 Temporary Segment를 만들 공간이 부족하게 되면 실제의 테이블이 생성되는 테이블 스페이스에 대하여 ORA-1652 에러가 발생하게 되는 것이다.
이 에러를 해결하는 방법은 에러메시지에서 보여주는 대로 해당 테이블스페이스에 Temporary Segment가 생성 될 만한 연속된 공간을 마련하여 주는 것이다.
사실 난 이대로 안하고 걍.. TS의 MAX 사이즈만 수정해주고 해결했는데..
알아둬야 할것 같아서.. 쩝..