[Oracle] 전역 임시 테이블 (Global Temporary Table)
안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 오라클 임시 테이블 ] 입니다. : )
전역 임시 테이블 (Global Temporary TABLE)
[정의 및 특징]
- SESSION(또는 TRANSACTION) 레벨의 임시 데이터를 저장하는 용도
(오라클의 실행 계획을 저장하기 위한 Plan 테이블이 전역 임시 테이블의 대표적인 사례)
- SESSION(또는 TRANSACTION) 레벨의 임시 데이타 저장하기 때문에 RAC 시스템에서 글로벌 동기화 불필요
- DML LOCK 필요없음 (세션 DATA 간 경합이 발생하지 않기 때문)
- REDO LOG 발생 안함 (임시 DATA 이므로 DML문이라도 redo log 발생 하지 않음)
1. 문법
EX1) TRANSACTION 단위 DATA 유지
- ON COMMIT DELETE ROWS
CREATE GLOBAL TEMPORARY TABLE TEST_TEMPORARY ( TEST_NO NUMBER(20) ) ON COMMIT DELETE ROWS; -- 기본옵션, commit시 데이터 삭제(종료시에도 삭제) INSERT INTO TEST_TEMPORARY VALUES (1); INSERT INTO TEST_TEMPORARY VALUES (2); SELECT * FROM TEST_TEMPORARY;
- 테이블 생성 후 데이터 입력 후 조회하면 위와 같이 데이터를 확인 할 수 있다.
- Transaction 단위 데이터 유지되는 옵션을 사용 한 테이블 이기 때문에 COMMIT;을 입력하면 오히려 데이터가 소실된다.
COMMIT; SELECT * FROM TEST_TEMPORARY;
EX2) SESSION 단위 DATA 유지
- ON COMMIT PRESERVE ROWS
CREATE GLOBAL TEMPORARY TABLE TEST_TEMPORARY2 ( TEST_NO NUMBER(20) ) ON COMMIT PRESERVE ROWS; INSERT INTO TEST_TEMPORARY2 VALUES (1); INSERT INTO TEST_TEMPORARY2 VALUES (2); SELECT * FROM TEST_TEMPORARY2;
- Session 단위 데이터 유지되는 옵션을 사용 한 테이블 이기 때문에 COMMIT;을 입력해도 데이터가 유지된다.
COMMIT; SELECT * FROM TEST_TEMPORARY2;
- 하지만 다른 세션(신규 접속 해보자)에서 해당 데이터를 조회 하면 데이터가 없다.
- 즉 테이블 정의는 모든 세션에서 볼 수 있으나 DATA는 세션별로 독립적이기 때문에 다른 session에서 접근할 수 없음
2. INDEX, VIEW, TRIGGER 생성 가능
- 단 COLUMN에 생성되는 INDEX도 TEMPORARY TYPE
EX1) TEMPORARY TABLE 에 대해서 INDEX 생성 하기
EX2) TEMPORARY TABLE 에 대해서 PRIMARY KEY 설정 하기
3. ORACLE VS MS-SQL
- 세션이 종료됨과 동시에 임시 테이블 스키마가 날아가지만 오라클은 테이블 스키마는 남아있다.
- MS-SQL에서 전역 임시테이블(##)은 타 세션 공유 가능
4. TABLE 정보는 유지된다.
확인 )
SELECT A.TABLE_NAME 테이블명, A.TEMPORARY 임시테이블유무, A.DURATION 세션_Data_유지기간, A.TABLESPACE_NAME AS 테이블스페이스명 FROM USER_TABLES A WHERE TEMPORARY = 'Y';
※ TABLESPACE_NAME(테이블 스페이스명)이 조회되지 않는데
그 이유는 테이블의 정보는 DICTIONARY(owner의 DEFAULT_TABLESPACE)에 저장되지만
실 데이터는 DISK에 저장되지 않고 메모리상에서 소멸되기 때문에
데이터를 저장하는 TABLESPACE가 무의미 하다.
5. 삭제 시 사용 중인 세션에서 삭제 불가
DROP TABLE TEST_TEMPORARY2;
'4. Database > 4_3 Oracle 기본' 카테고리의 다른 글
[Oracle] PL/SQL 기초6 - 함수(Function) 두번째 : 테이블 함수(Table Function, Pipeline Table Function) (0) | 2020.07.24 |
---|---|
[Oracle] PL/SQL 기초5 - 함수(Function) 첫번째 : 사용자 정의 함수(User Defined Function) (3) | 2020.07.12 |
[Oracle] 전역 임시 테이블 (Global Temporary Table) (0) | 2019.12.17 |
[Oracle] PL/SQL 기초4 - 프로시저(Procedure) (6) | 2018.12.23 |
[Oracle] Transaction이란? (0) | 2018.11.26 |
[Oracle] sysdate와 systimestamp 정리 및 예제 (0) | 2018.10.04 |
댓글0