어느 가을날의 전환점

ORACLE|임시 테이블(Temp Table) 본문

Database/Oracle

ORACLE|임시 테이블(Temp Table)

어느가을빛 2014. 10. 23. 13:14

Oracle8Server 이상에서 부터 지원 하는 Temp Table은 사용자의 트랜잭션 또는 세션 내에서만 Temp Table의 데이터를 활용 할 수 있으며 사용자 세션이 중단되면 Temp Table의 있는 모든 내용은 자동으로 삭제 된다. Temp Table을 사용하는 목적은 큰 정렬 작업이나, 필요할 경우 임의적으로 생성 하여 사용 할 수 있다.


Temp Table의 특징

  • Temp Table 데이터는 해당 세션이나 트랜잭션에서만 볼 수 있다.
  • Global Temp Table은 모든 세션에서 볼 수 있다.
  • Local Temp Table은 이를 생성한 세션이 끝나면 더 이상 유지되지 않는다.
  • Temp Table 데이터는 세션이 사용하는 정렬 공간 내에 저장되며, 정렬 공간이 데이터를 수용하기에 충분하지 않으면 사용자의 임시 테이블스페이스에 공간이 할당된다.
  • Temp Table에 대한 인덱스의 범위 및 지속 기간은 대응하는 테이블의 범위 및 지속 기간과 동일하다.
  • Temp Table 테이블에 대해 트리거 및 뷰를 정의할 수 있으나,  Temp Table과 일반 Table을 조인하도록 뷰를 정의할 수 없다.
  • CREATE GLOBAL TEMPORARY TABLE AS SELECT 명령을 사용하여 Temp Table을 생성하고 여기에 데이터를 삽입할 수 있다.
  • Temp Table 정의는 엑스포트하거나 임포트할 수 있다.

Temp Table 생성

Temp Table을 사용 하는 경우는 복잡한 Query를 실행할 때 임시 테이블을 사용하여 성능을 향상시킬 목적으로 사용한다. 예를 들어 여러 개의 복잡한 Query를 실행하면 반환된 각 행에 대한 테이블이 여러 번 액세스되므로 상대적으로 속도가 저하 된다. 복잡한 Query에서 값을 Temp Table 저장한 다음 Temp Table에서 Query를 실행하는 것이 속도가 훨씬 빠르다.

 

  • ON COMMIT DELETE ROWS는 트랜잭션 내에서만 행을 볼 수 있도록 지정 (기본값)
  • ON COMMIT PRESERVE ROWS는 전체 세션에서 행을 볼 수 있도록 지정

이렇게 생성된 Temp Table은 DBA_TABLES 뷰에서 확인 할 수 있으며,  DURATION 열은 테이블의 데이터가 전체 세션 동안 유지될 것인지, 해당 트랜잭션 내에서만 유지될 것인지를 나타낸다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
-- 임시 테이블 생성
CREATE GLOBAL TEMPORARY TABLE AAAA_TEMP(
    A VARCHAR2(15) NOT NULL,
    B NUMBER NOT NULL
) ON COMMIT [PRESERVE ROWS | DELETE ROWS];
 
-- 서브 쿼리를 이용한 임시 테이블 생성
CREATE GLOBAL TEMPORARY TABLE [TABLE NAME](
)
ON COMMIT [PRESERVE ROWS | DELETE ROWS];
AS ([SUB QUERY CLAUSE])
 
-- 임시 테이블 조회
SELECT TABLE_NAME, TEMPORARY, DURATION
  FROM USER_TABLES
 WHERE TEMPORARY = 'Y'
  
--[PRESERVE ROWS] 트랜잭션의 종료 (commit)후에도 남아있음 세션종료시 데이터가 삭제됨
--[DELETE ROWS] 트랜잭션의 종료와 함께 삭제됨
--[SUB QUERY CLAUSE] SELECT된 테이블의 구조와 같이 테이블 생성


#출처: http://devworks.tistory.com/9

Comments