01.DB튜닝/002.SQL 튜닝 ORA-01467 발생

[오라클]ORA-01467 처리

redkite 2012. 12. 19. 12:56

원인 : CREATE INDEX, ORDER BY, GROUP BY, DISTINCT, DECODE, UNION, INTERSECT, MINUS와 같은 문장을 통해 대용량 데이터를 분류(Sorting)할 때 Temporary 테이블스페이스가 부족할 때 발생하는 에러입니다.

조치 1

사용자의 SQL문에서 필요한 컬럼 만을  분류대상으로 설정한다. 
    SELECT  *   FROM  emp ORDER BY ename;
->  SELECT  empno, ename  FROM emp ORDER BY ename;

조치 2

사용자의 SQL문에서 ORDER BY 절에 사용되는 컬럼에 대해 INDEX를 설정한다.
      SELECT  *   FROM  emp ORDER BY ename;
 ->   CREATE INDEX  I_emp_ename ON emp(ename);
      SELECT  empno, ename  FROM emp;
 
조치 3
Temporary 테이블스페이스의 공간을 추가로 늘려주어야 합니다.
SQL> ALTER TABLESPACE  temp  ADD DATAFILE ‘temp02.dbf’ SIZE 500M;   
또는
SQL> ALTER DATABASE DATAFILE  ‘temp01.dbf’  RESIZE  800M; 

조치 4

SORT_AREA_SIZE의 값을 추가로 늘려주어야 합니다.
SORT_AREA_SIZE = 1000000;

조치 5

각 사용자별로 Temporary 테이블스페이스를 생성하여 Contention 현상을 
방지한다.
SQL> CREATE TABLESPACE  temp1  DATAFILE ‘temp1_01.dbf’ SIZE 500M;   
SQL> ALTER USER  scott   Temporary TABLESPACE  temp1;