'Oracle'에 해당되는 글 46

  1. 2007.10.11 [Oracle] Temporory Table
IT_Expert/DataBase | Posted by 낫기법필 2007. 10. 11. 09:18

[Oracle] Temporory Table

Temporary Table

Oralce 9i에서는 하나의 세션 동안이나 트랜잭션 동안 임시로 데이터를 보관하기 위한 임시 테이블(Temporary Table)을 제공 합니다(당연히 세션이나 트랜잭션이 종료 되면 임시 테이블의 내용은 Truncate 됩니다.)

주로 복잡한 질의나 트랜잭션을 다루는 경우 영구적인 테이블에 insert, update, delete전에
일시적으로 로우(레코드) 정보를 바로 바로 가져다 쓸 수 있게 하는 용도로 사용 됩니다.
이 데이터는 다른 영구적인 테이블의 데이터 처럼 백업을 하는 것은 불가능 하며 영구적인 테이블이나 인덱스 처럼 데이터 시그먼트나 인덱스 시그먼트가 할당되지 않습니다.
이 임시 테이블을 이용하게 되면 복잡한 질의를 사용 할 때 수행 속도를 높일 수 있습니다.

임시 테이블은 사용자의 임시 테이블 스페이스에 만들어 지며 임시 테이블에 첫번째 레코드
가 입력된 후에 임시 시그먼트(TemporarySegment)가 할당 되어 지며, 물론 이 데이터는
세션이나 트랜잭션이 종료 되면 지워 집니다. (할당이 해제 된다는 이야기 입니다.)

특징은 아래와 같습니다.

임시 테이블의 사용으로 인한 트랜잭션에 의해 생기는 리두 로그의 양을 현저히 줄 일 수 있습니다.
(리두 로드는 임시 테이블이 긴 트랜잭션 동안 사용되고 있으면 빨리 채워 지지 않습니다)

수행 속도의 증가를 위해 인덱스화 할 수 있구요..

일반적인 데이터 테이블처럼 insert, update, delete 가능 합니다.

세션이나 트랜잭션이 끝나면 데이터는 자동으로  truncate 됩니다.

하나의 임시 테이블을 서로 다른 사용자가 접근 가능 하지만 서로 자신의 데이터만 볼 수 있습니다.
(즉 각각의 사용자가 같은 임시 테이블을 보지만 사용자들이 보는 데이터는 다를 수 있다는 이야기 입니다)

특히 반복적으로 실행 될 필요 없는 복잡한 질의를 수행 시 많은 이점이 있습니다.

다음의 예를 참고 하세요~

create global temporary table sales_temp (
ilja varchar2(8),
amount number(8)
)
On commit preserve rows;

:: 이 경우엔 세션이 지속되는 동안에 이 임시 테이블의 데이터는 유지 됩니다. 물론 트랜잭션이 종료 한다고 하더라도 데이터는 남아 있습니다. 그래서 이건 Session Temporary Table 이라고 합니다.

다음의 경우를 보시겠습니다.

create global temporary table sales_temp (
ilja varchar2(8),
amount number(8)
)
On commit delete rows;

:: 이 경우에는 Transaction Temporary Table로서 트랜잭션이 commit, rollback 되는 경우 데이터는 지워지게 됩니다.


[출처] http://www.oracleclub.com/community/BoardContent_.jsp