TEMP 테이블스페이스
기본 임시 테이블스페이스와 사용자 배정, PDB 임시 공간 상한 및 임시 파일 관리와 축소
#핵심 요약
임시 테이블스페이스는 세션 동안만 필요한 객체를 담고, 데이터 파일이 아니라 임시 파일(temp file)에 저장됨
CDB 루트와 각 PDB는 기본 임시 테이블스페이스(또는 테이블스페이스 그룹)를 하나만 가짐
사용자에게 배정할 임시 테이블스페이스는 더 만들 수 있음
PDB는 자기 사용자를 위한 임시 테이블스페이스를 반드시 가져야 하고, 언플러그할 때 PDB와 함께 옮겨짐
임시 테이블스페이스에는 Quota를 줄 수 없음(실습, ORA-30041)
#개념과 동작 원리
#CDB에서의 규칙
로컬 사용자를 만들려면 그 PDB에 기본 임시 테이블스페이스가 배정되어 있어야 함
공통 사용자를 만들려면 그 사용자가 복제되는 모든 컨테이너에 기본 임시 테이블스페이스가 있어야 함
사용자를 만들 때 임시 테이블스페이스를 지정하지 않으면 그 PDB의 기본 임시 테이블스페이스가 쓰임
여러 PDB가 CDB 루트의 임시 테이블스페이스를 공유하는 구성에서는 한 PDB가 공유 임시 공간을 너무 많이 쓰지 않도록 상한(MAX_SHARED_TEMP_SIZE)을 걸 수 있음
#운영
임시 테이블스페이스는 오프라인으로 바꿀 수 없음
대신 임시 파일을 오프라인으로 바꿈
임시 파일의 온라인 상태는 V$TEMPFILE에서 봄
ALTER TABLESPACE로 임시 파일을 추가하거나 오프라인, 온라인으로 바꿈ALTER DATABASE TEMPFILE로 크기 조정과 삭제를 할 수 있음
영구 테이블스페이스를 ALTER TABLESPACE로 임시 테이블스페이스로 바꿀 수는 없음CREATE TEMPORARY TABLESPACE로 새로 만듦
큰 정렬이 끝나도 임시 공간은 반환되지 않고 재사용 가능으로만 표시됨ALTER TABLESPACE ... SHRINK SPACE나 SHRINK TEMPFILE로 줄일 수 있고, 온라인 작업임
#필수 명령어 또는 SQL
#컨테이너별 TEMP와 기본 임시 테이블스페이스 확인
ALTER SESSION SET CONTAINER = CDB$ROOT;
SELECT tablespace_name, con_id
FROM cdb_tablespaces
WHERE tablespace_name = 'TEMP'
ORDER BY con_id;
SELECT con_id, property_name, property_value
FROM cdb_properties
WHERE property_name = 'DEFAULT_TEMP_TABLESPACE'
ORDER BY con_id;결과 해석:
실습 기록: 첫 조회에서 CON_ID 1(CDB 루트)과 3(PDB)에 각각 TEMP가 나왔음
실습에서는 CON_ID 2(PDB$SEED)가 보이지 않는 이유를 CDB_* 뷰가 기본적으로 시드를 숨기기 때문이라고 설명했음
#임시 테이블스페이스 생성과 기본값 변경
ALTER SESSION SET CONTAINER = <PDB_NAME>;
CREATE TEMPORARY TABLESPACE temp2
TEMPFILE '<DATAFILE_DIR>/temp02.dbf' SIZE 10M;SELECT tablespace_name FROM dba_tablespaces WHERE contents = 'TEMPORARY';
SELECT property_name, property_value
FROM database_properties
WHERE property_name = 'DEFAULT_TEMP_TABLESPACE';결과 해석:
설명: TEMP와 TEMP2 두 개가 보여도 기본 임시 테이블스페이스는 하나임
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;결과 해석: 개별 실행 출력은 기재 없음
#사용자별 배정과 원상 복구
ALTER USER <USERNAME> TEMPORARY TABLESPACE temp02;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp02;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
ALTER USER <USERNAME> TEMPORARY TABLESPACE temp;DROP TABLESPACE temp02 INCLUDING CONTENTS AND DATAFILES;결과 해석:
실습에서는 이 실습에서 temp02를 만들어 배정했다가 되돌렸음
위 생성 실습의 temp2와 이름이 다름
바꿀 입력값: <USERNAME>
#PDB의 공유 임시 공간 상한
ALTER PLUGGABLE DATABASE STORAGE (MAX_SHARED_TEMP_SIZE 500M);
ALTER PLUGGABLE DATABASE STORAGE (MAX_SHARED_TEMP_SIZE UNLIMITED);결과 해석:
실습에서는 상한을 500MB로 걸었다가 해제했음
실습 기록은 "Pluggable database altered."뿐임
#임시 테이블스페이스에는 Quota를 줄 수 없음
ALTER USER <USERNAME> QUOTA 10M ON temp;결과 해석:
실습 기록: ORA-30041 오류가 나며 임시 테이블스페이스에는 Quota를 줄 수 없음
오류 메시지 전문은 기재 없음
#사용 조건과 주의사항
기본 임시 테이블스페이스를 지울 때의 동작은 기재 없음
TEMP_UNDO_ENABLED 전환에 따른 REDO 양 비교는 로컬 UNDO와 임시 UNDO에서 다룸
실습의 PDB 이름 표기가 실습마다 다름