[ORACLE] Temp Table ( 임시테이블 ) - CREATE GLOBAL TEMPORARY TABLE


1. 특징


1) 테이블 정의는 모든 세션에서 볼 수 있음

   data는 세션별로 독립적, 즉 특정 세션 임시 테이블 data는 다른 session에서 접근할 수 없음 


2) Data 유지기간

a) ON COMMIT PRESERVE ROWS : SESSION 단위, 다른 Session에서 볼 수 없음, SESSION 종료 되면 사라짐. (MSSQL Temp Table과 유사)

b) ON COMMIT DELETE ROWS : TRANSACTION 단위, COMMIT; 되는 시점에 자동으로 Data Delete


3) 각 세션에서 해당 Table 사용할 때 테이블 정의에 따라 메모리에 Table 구조 생성(임시 테이블 정의는 Dictionary에 영구적으로 저장)

< DURATION >

 - SYS$SESSION : ON COMMIT PRESERVE ROWS;

 - SYS$TRANSACTION : ON COMMIT DELETE ROWS;


4) 세션 data 간 경합이 발생하지 않기 때문에 DML문에 대한 lock 필요 없음


5) 임시 data 이므로 DML문에 redo log 발생 안함


6) index, view, trigger 생성 가능 ( 단 column에 생성되는 index도 temporay type )




2. 세션 임시테이블 - CREATE  GLOBAL TEMPORARY TABLE ~ ON COMMIT PRESERVE ROWS

 : 세션 단위이므로 MSSQL 임시테이블과 비슷


- 세션이 종료되면 data 사라짐

- COMMIT 해도 data 사라지지 않음

- 다른 세션에서 조회하면 해당 세션 data는 나오지 않음 ( 서로 개별적 )






3. 트렌젝션 임시테이블 - ON COMMIT DELETE ROWS


- COMMIT 하면 본인 세션 Data 사라짐 ( 단 다른 세션에서 사용중인 data는 사라지지 않음, 개별적 ) 








4. 임시 테이블 삭제


: 삭제 시 사용 중인 세션에서 삭제 불가














Posted by 도깨비방망이