행위

"템프테이블"의 두 판 사이의 차이

DB CAFE

(TEMP 테이블 조회)
1번째 줄: 1번째 줄:
 
== 템프러리 테이블(TEMPORARY TABLE) ==
 
== 템프러리 테이블(TEMPORARY TABLE) ==
 +
# SESSION(또는 TRANSACTION) 레벨의 임시 데이터를 저장하는 용도
 +
##: (오라클의 실행 계획을 저장하는 Plan 테이블이 전역 임시 테이블 임)
 +
# SESSION(또는 TRANSACTION) 레벨의 임시 데이타 저장하기 때문에 RAC 시스템에서 글로벌 동기화 불필요
 +
# DML LOCK 필요없음 (세션 DATA 간 경합이 발생하지 않음)
 +
# REDO LOG 발생 안함 (임시 DATA 이므로 DML문이라도 redo log 발생 하지 않음)
 
----
 
----
 
=== 템프 테이블(TEMPORARY) 생성 ===
 
=== 템프 테이블(TEMPORARY) 생성 ===
33번째 줄: 38번째 줄:
 
|제목 = 템프테이블 옵션 (PRESERVE / DELETE) ROWS   
 
|제목 = 템프테이블 옵션 (PRESERVE / DELETE) ROWS   
 
|내용 =
 
|내용 =
* [PRESERVE ROWS] 트랜잭션의 종료 (commit)후에도 남아있음 세션종료시 데이터가 삭제됨
+
* ON COMMIT [PRESERVE ROWS] 트랜잭션의 종료 (commit)후에도 남아있음 세션종료시 데이터가 삭제됨
* [DELETE ROWS] 트랜잭션의 종료와 함께 삭제됨
+
* ON COMMIT [DELETE ROWS] 트랜잭션의 종료와 함께 삭제됨
 
* [SUB QUERY CLAUSE] SELECT된 테이블의 구조와 같이 테이블 생성
 
* [SUB QUERY CLAUSE] SELECT된 테이블의 구조와 같이 테이블 생성
 
}}
 
}}

2021년 2월 22일 (월) 16:10 판

thumb_up 추천메뉴 바로가기


1 템프러리 테이블(TEMPORARY TABLE)[편집]

  1. SESSION(또는 TRANSACTION) 레벨의 임시 데이터를 저장하는 용도
    1. (오라클의 실행 계획을 저장하는 Plan 테이블이 전역 임시 테이블 임)
  2. SESSION(또는 TRANSACTION) 레벨의 임시 데이타 저장하기 때문에 RAC 시스템에서 글로벌 동기화 불필요
  3. DML LOCK 필요없음 (세션 DATA 간 경합이 발생하지 않음)
  4. REDO LOG 발생 안함 (임시 DATA 이므로 DML문이라도 redo log 발생 하지 않음)

1.1 템프 테이블(TEMPORARY) 생성[편집]

CREATE GLOBAL TEMPORARY TABLE AAAA_TEMP(
    A VARCHAR2(15) NOT NULL,
    B NUMBER NOT NULL
) ON COMMIT [PRESERVE ROWS | DELETE ROWS];

2 템프 테이블스페이스 사이즈 증가[편집]

ALTER TABLESPACE TEMP 
             ADD TEMPFILE '+DATA' 
            SIZE 10G AUTOEXTEND ON NEXT 100M 
         MAXSIZE 32767M;

---

2.1 서브 쿼리를 이용한 임시 테이블 생성[편집]

CREATE GLOBAL TEMPORARY TABLE [TABLE NAME](
)
ON COMMIT [PRESERVE ROWS | DELETE ROWS];
AS ([SUB QUERY CLAUSE])

2.2 TEMP 테이블 조회[편집]

  • ON COMMIT [PRESERVE ROWS] 트랜잭션의 종료 (commit)후에도 남아있음 세션종료시 데이터가 삭제됨
  • ON COMMIT [DELETE ROWS] 트랜잭션의 종료와 함께 삭제됨
  • [SUB QUERY CLAUSE] SELECT된 테이블의 구조와 같이 테이블 생성


SELECT TABLE_NAME, TEMPORARY, DURATION
  FROM USER_TABLES
 WHERE TEMPORARY = 'Y'

2.2.1 TEMP 테이블 삭제시 락 있을때 삭제 불가[편집]

SELECT 'alter system kill session '''||s.sid||','||s.serial#||''';'
  FROM v$lock l  ,dba_objects o   ,v$session s
 WHERE l.id1 = o.object_id
   AND s.sid = l.sid
   AND o.owner = 'SCOTT'  
   AND o.object_name = 'TEMP_TEST'

2.3 템프 테이블 모니터링[편집]

SELECT /*+ ordered */ "SID",
             s.serial# "Serial",
             s.MODULE "Module",
             s.program "Program",
             u.TABLESPACE "TS 명", 
             u.CONTENTS "Cont.",
             u.blocks "Temp Blocks",
             ((u.blocks*v.value)/(1024*1024)) "Temp Size(MB)"
             , q.sql_id     
                      
             
--             substr(q.sql_text,1,50) "SQL"
--             , substr(p.sql_text,1,50) "이전 SQL" 
FROM    v$sort_usage u,
             v$session s,
             v$sqltext q,
             v$sqltext p, 
             (SELECT value 
              FROM   v$parameter
              WHERE name = 'db_block_size') v 
WHERE  s.saddr = u.session_addr
AND      s.sql_hash_value = q.hash_value(+)
AND      q.piece = 0
AND      s.prev_hash_value = p.hash_value(+)
AND      p.piece = 0
;