ORACLE TEMPORARY TABLE
from Beginning Oracle Programming | 정보문화사
1.
Temporary
table 의 특징
A. Heap table 과 달리 실제 데이터가 들어오기 전까지 extents 를 할당 받지 않는다.
B. Redo log 를 생성하지 않는다.
/*+ 책에 의하면… 확인이 필요한 부분 */
C. DML lock 을 걸지 않는다.
/*+ 확인이 필요한 부분 */
2.
Temporary
table 의 두가지 모드
A. 생성 구문
create global temporary table
on commit [ preserve rows | delete rows ]
as ( sub query clause )
B. preserve rows
A. temporary table 의 데이터가 트랜잭션의 종료 (commit)후에도 남아있음
세션종료시 데이터가 삭제됨
C. delete rows
A. temporary table 의 데이터가 트랜잭션의 종료와 함께 삭제됨
3.
Temporary
table 예제
A. ( Scott User )
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ -------
----------
BIT TABLE
BONUS TABLE
DEPT TABLE
DUMMY TABLE
EMP TABLE
PLAN_TABLE TABLE
SALGRADE TABLE
7 rows selected.
( 세션 종료시까지 남아있는 임시테이블을 만들었다. )
SQL> create global temporary table temp
2 on commit preserve rows
3 as select * from emp;
Table created.
SQL> select count(*) from temp;
COUNT(*)
----------
17
SQL> insert into temp
2 select * from temp;
17 rows created.
SQL> select count(*) from temp;
COUNT(*)
----------
34
SQL> commit;
Commit complete.
SQL> insert into temp
2 select * from temp;
34 rows created.
SQL> select count(*) from temp;
COUNT(*)
----------
68
SQL> rollback;
( rollback 이 가능하다. commit 한 시점까지
돌아간다. )
Rollback complete.
SQL> select count(*) from temp;
COUNT(*)
----------
34
4. Temporary table 에 대한 의문
A. REDO 로그를 생성하지 않는다?
B. 상식적으로 TEMPORARY TABLE의 데이터는 사용후 지워지게 된다. 지워질 데이터에 대해 REDO LOG를 남길 이유는 없다. on commit delete rows 에 대해서는 특히나 그렇고 on commit preserve rows 에 대해서는 만든다 하더라고 세션이 종료되면 삭제되기에 의미가 없다. 남는것은 temporary table의 구조적 정의 뿐이다.
C. ROLLBACK 이 가능한가?
i. ROLLBACK 이 가능하다. 위에서 SQL 예제를 돌린 결과를 보면 ON COMMIT PRESERVE ROWS 옵션의 경우 COMMIT 한 시점까지 돌아간다. UNDO 정보는 ROLLBACK 을 위해 사용된다.
/*+ 해당 데이터의 옛 이미지 값을 보는 방법 */