상세 컨텐츠

본문 제목

TEMPORARY TABLE IN ORACLE8I

프로그래밍/DB

by 라제폰 2008. 12. 23. 13:21

본문


 java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection
No. 11818
TEMPORARY TABLE IN ORACLE8I
===========================
Oracle8.1에서는 session 내에서 임시로 사용할 data들을 영구적인 segment 형태가
아닌 temporary structure에서 관리할 수 있다.
이러한 Temporary Table들은 그 생성문장에 의해서 definition이 dictionary에
저장되고, 각 session에서 해당 table을 사용할 때마다 definition을 이용하여
memory에 table 구조를 생성하게 된다.

CHARACTERISTICS
---------------
1. data는 session private하다. (특정 session에서 사용하는 temporary table
   data는 다른 session에서 access할 수 없다.)
2. CREATE GLOBAL TEMPORARY TABLE ...
   ON COMMIT [DELETE|PRESERVE] ROWS ; 문을 이용하여 생성한다.
3. data의 유지기간은 transaction단위 또는 session단위이다.
   'ON COMMIT DELETE ROWS'로 생성되었다면 transaction 단위이며 이때 data는
   commit이 되는 시점에 자동으로 제거된다.
   'ON COMMIT PRESERVE ROWS'로 생성되었다면 session단위이며 이때 data는
   해당 session이 종료되면서 사라진다.
   default는 'ON COMMIT DELETE ROWS'이다.
4. table의 definition은 dictionary에 permanently 저장된다.
   *_tables의 TEMPORARY, DURATION column이 temporary table과 관련이 있다.
   TEMPORARY - 'Y' : temporary type table
               'N' : permanent type table
   DURATION  - 'SYS$SESSION'     : data의 유지기간이 session단위
               'SYS$TRANSACTION' : data의 유지기간이 transaction단위
               NULL              : 해당 table은 temporary type이 아님
5. session간에 data에 대한 contention이 발생되지 않기 때문에 DML문에 대한
   lock이 필요하지 않다.
6. 임시적으로만 관리되는 data이므로 DML문에 대해서 redo log를 발생시키지
   않는다.
7. index, view, trigger를 생성하여 사용할 수 있다. Temporary Table의
   column에 생성되는 index도 temporary type이다.
8. table의 definition은 export utility를 이용하여 export할 수 있다.
   그러나 그 row들은 export의 대상이 될 수 없다.

RESTRICTIONS
------------
1. partitioned, index-organized, clustered table로 생성할 수 없다.
2. foreign key constraint를 설정할 수 없다.
3. nested table이나 varray type의 column은 포함할 수 없다.
4. 다음과 같은 LOB_storage_clause들은 지정할 수 없다. : TABLESPACE,
   storage_clause, LOGGING 또는 NOLOGGING, MONITORING 또는 NOMONITORING,
   또는 LOB_index_clause.
5. parallel DML이나 parallel query는 지원되지 않는다. (parallel hint는
   무시될 것이며, table생성시 parallel clause를 지정하면 error를
   return한다.)
6. storage나 tablespace는 지정할 수 없다.
7. 분산 transaction은 지원되지 않는다.

SAMPLE
------
----------------------------------------------------------------------
-- temporary type table을 생성하되 duration은 transaction단위로 한다.
----------------------------------------------------------------------
SQL> create global temporary table temp_tab
  2  (col1 number, col2 char(10))
  3  on commit delete rows ;

-----------------------------------------------------------------------
-- 생성된 table에 대한 정보를 조회한다. *_tables의 TEMPORARY, DURATION
-- column이 temporary type table과 관련이 있다.
-----------------------------------------------------------------------
SQL> select temporary, duration
  2  from user_tables
  3  where table_name = 'TEMP_TAB' ;
T DURATION
- ---------------
Y SYS$TRANSACTION

-----------------------------------------------------------------------
-- temporary table에 row insert
-----------------------------------------------------------------------
SQL> insert into temp_tab values (1, 'wookpark') ;
SQL> select * from temp_tab ;
     COL1 COL2
--------- ----------
        1 wookpark

-----------------------------------------------------------------------
-- transction을 commit한다.
-----------------------------------------------------------------------
SQL> commit ;
Commit complete.

-----------------------------------------------------------------------
-- duration이 transaction단위이기 때문에 commit을 수행하면 모든 data가
-- 사라진다.
-----------------------------------------------------------------------
SQL> select * from temp_tab ;
no rows selected

관련글 더보기