오라클(oracle) temporary tablespace(임시 테이블 스페이스) 관리

Last Updated on 5월 15, 2021 by 태랑(정현호)

Oracle pga의 sort area의 용량을 넘어건 정렬작업은 디스크를 이용하여 은 order by 나 Goup by 등의 정렬이 필요로 하는 부분이 발생되면 우선 pga영역에서 sort(정렬)작업을 하게 됩니다 하게 되는데 이때 사용되것이 임시 테이블스페이스 입니다

따라서 반드시 필요한 테이블스페이스 입니다.


임시테이블 스페이스의 종류는

- 일반테이블의 임시테이블스페이스화 이용
- 임시 테이블 스페이스
- 지역 관리 임시테이블 스페이스
(Locally Management Temporary Tablespace)


각각의 차이을 확인해 보면

- extent 활당해체 관련

일반 테이블스페이스 : SMON에 의해수행됨
임시 테이블스페이스 : 수행하지않음
지역관리 임시테이블스페이스 : 수행하지않음

일반 테이블스페이스를 임시테이블스페이스로 사용하게 되면 유저 별로 임시 segment를 생성하여 사용하게 되며 sort 작업 종료시 임시 segment를 활당 해체하는 작업이 동반하게 됩니다 세그먼트 활당해제는 SMON 백그라운드에 의해 수행됩니다

임시테이블스페이스와 지역관리 임시테이블스페이스는 하나의 임시 세그먼트를 모든 유저가 공유하여 sort 작업을 하기에 임시 segment 활당 해제는 하지 않습니다


- Disk access 방식

일반 테이블스페이스 와 임시테이블스페이스 둘다 일반적인 access
지역관리 임시테이블 스페이스는 Direct access 방식사용

PGA의 sort area 사이즈를 넘어선 sort작업시 임시테이블스페이스를 이용시에 일반 테이블 스페이스와 임시테이블 스페이스는 SGA의 데이터 버퍼캐쉬를 경유해 유저 프로세스에게 전달 됩니다

하지만 지역관리 임시테이블스페이스는 SGA를 이용하지않고 유저 프로스세스와 Direct Access를 수행할수 있어 속도가빠르고 부하를 줄일수 있습니다


- 복구

일반 테이블스페이스 : 복구 필요
임시 테이블스페이스 : 복구 필요
지역관리 임시테이블스페이스 : 복구 불필요

임시 테이블스페이스는 실질적인 데이터가 저장되어있지않지만 장애로 인한 복구시 임시 테이블스페이스도 복구를 수행하게 됩니다 그로인해 복구시간이 증가 하게 됩니다

그로인하여 오라클은 지역관리 임시테이블스페이스에 대해서는 장애시 복구를 수행하지않아도 DB를 복구 할수있도록 되어있고 DB복구후 임시테이블스페이스를 재생성만 하면 됩니다

위의 예와 여러가지 측면에서 임시 테이블스페이스는 지역관리 임시테이블스페이스로 생성하는것이 좋습니다

http://dbsecurity.egloos.com/9430985 참고한 쿼리를
수행하면 아래와 같이 Temporary Tablespace의 용량과 방식등의 정보를 확인 할 수 있습니다.

col name format a10
SELECT d.status "Status", d.tablespace_name "Name", d.CONTENTS "Type",        
       d.extent_management "Extent Management",                               
       TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99,999,990.900') "Size (M)", 
          TO_CHAR (NVL (u.BYTES, 0) / 1024 / 1024, '99999999.999')            
       || '/'                                                                 
       || TO_CHAR (NVL (a.BYTES / 1024 / 1024, 0), '99999999.999') "Used (M)",
       TO_CHAR (NVL (t.BYTES / a.BYTES * 100, 0), '990.00') "Cached %"    ,      
       TO_CHAR (NVL (u.BYTES / a.BYTES * 100, 0), '990.00') "Used %"          
  FROM SYS.dba_tablespaces d,                                                 
       (SELECT   tablespace_name, SUM (BYTES) BYTES                           
            FROM dba_temp_files                                               
        GROUP BY tablespace_name) a,                                          
       (SELECT   tablespace_name, SUM (bytes_cached) BYTES                      
            FROM v$temp_extent_pool                                           
        GROUP BY tablespace_name) t ,
        (SELECT   tablespace_name, SUM (bytes_used) BYTES                      
            FROM v$temp_extent_pool                                           
        GROUP BY tablespace_name) u                                                  
WHERE d.tablespace_name = a.tablespace_name(+)                                
   AND d.tablespace_name = t.tablespace_name(+)                               
   AND d.extent_management LIKE 'LOCAL'                                       
   AND d.CONTENTS LIKE 'TEMPORARY';


쿼리를 수행하게 되면 아래 스크린샷과 같이 확인 할수 있습니다

기본적으로 생성이 되어있는 Temporary Tablespace 가 Locally Management  방식으로 생성되어있는것을 확인할수 있습니다


임시 테이블 스페이스 생성

위에서 애기한것처럼 extent방식을 지역관리 방식으로 생성 합니다.


- Extent 크기 자동활당 방식

create temporary tablespace temp2
tempfile '/home/oracle/oradata/testdb/temp2.dbf' size 100m
extent management local autoallocate;


- Extent 크기 동일

create temporary tablespace temp2

tempfile '/home/oracle/oradata/testdb/temp2.dbf' size 100m
extent management local uniform size 1m;


기본 임시 테이블 스페이스 변경

SQL> alter database default temporary tablespace temp2;


변경 확인

SQL> select * from database_properties where property_name like '%TEMP%';


Temporary Tablespace 삭제

SQL> drop tablespace temp2;
drop tablespace temp2
*
ERROR at line 1:
ORA-12906: cannot drop default temporary tablespace

SQL> drop tablespace temp;

Tablespace dropped.



연관된 다른 글 

 

 

답글 남기기