본문 바로가기

카테고리 없음

ORACLE 9i TEMPORARY TABLE v1.0

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 을 위해 사용된다.

/*+ 해당 데이터의 옛 이미지 값을 보는 방법 */