오라클에서는 왜 MSSQL에서 사용하는 임시 테이블을 만들수없을까
고민했던 적이 있었습니다. 임시테이블 만들수 있습니다. 있구요.
 
임시 테이블을 생성하되 duration은 transaction단위로 한다는 것을 기억해야 합니다.
아래의 순서를 따라 하시면 임시 테이블을 만드실 수 있습니다.
 
1. 임시 테이블생성
SQL> create global temporary table temp_tab (col1 number, col2 char(15))
     on commit delete rows ;
    
--> on commit delete rows 를 잘 기억해 두세요.
 [Commit 을 하면 삭제작업을 하는것으로 설정한다는 말입니다.]


2. 임시 테이블에 인덱스 만들기
SQL> create index temp_tab_n1 on  temp_tab(col1);
 
3. 임시 테이블에 데이터 인서트
SQL> insert into temp_tab values ( 1 , '구미지엔') ;
 
 ★ 주의 : Insert/Update 했다고 Commit 하시면 안됩니다.
 
4. 임시 테이블에서 데이터 가져오기
SQL> select * from temp_tab ;
     COL1 COL2
--------- ------------
              1 구미지엔
 
5. 임시 테이블 관찰
생김새를 자세히 보시려면 토드(Toad)에서 desc temp_tab 하시고

스크립트를 살펴보시면 기존에는 있던 Tablespace 구절이 빠져 있는것을 알 수 있습니다.
이는 임시테이블이나 인덱스가 메모리에 생성된다는 것을 말합니다.
DBA 업무 하시는 분들은 다이나믹 퍼포먼스 뷰 보시면(user_objects 등) 알수 있습니다.



6. 임시 테이블의 데이터를 메모리에서 내리기
SQL> commit ;
Commit complete.
 
7. 임시 테이블을 다시 보면
   duration이 transaction단위이기 때문에 commit을 수행하면 모든 data가 사라집니다.


일반적으로, Customizing Tablespace 에 만들어 둔 영구테이블들은
레포트가 실행 될때마다 테이블에 데이터가 계속 쌓이거나
테이블의 내용을 모두 지우거나 Truncate 한후
데이터를 다시 입력하는 번거러움이 있는 줄로 압니다.
 
그때 마다의 물리적인 I/O(삭제작업 시) 발생은 서버에 상당한 부하를 주겠죠

(물론 데이터 수십건 처리하는 트랜잭션이라면 부하를 주진 않겠죠. )

그래서 메모리를 사용하면 물리적인 I/O 가 메모리에서 발생하므로

다른 사용자 트랜잭션에 영향을 거의 주지 않겠죠.
또하나 , Disk 보다는 메모리의 속도가 빠르다.
 
위의 일반적인 방법과 임시테이블 사용에는 서로 장단점이 있겠습니다만,
실행 속도는 비교가 안되겠죠.(제 생각)

<임시테이블 관련 자료 출처 : 한국오라클>

신고
Posted by 나비 나비:D

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
----------------------------- (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

글 보관함

달력

«   2017/08   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Total : 870,086
Today : 41 Yesterday : 412