데이터베이스 연구실.log

TEMP 테이블스페이스

기본 임시 테이블스페이스와 사용자 배정, PDB 임시 공간 상한 및 임시 파일 관리와 축소

TEMPORARY TABLESPACETEMPFILEDEFAULT TEMPORARY TABLESPACEMAX_SHARED_TEMP_SIZECDB_PROPERTIES

#핵심 요약

임시 테이블스페이스는 세션 동안만 필요한 객체를 담고, 데이터 파일이 아니라 임시 파일(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와 기본 임시 테이블스페이스 확인

SQL*Plus (SYSDBA, CDB$ROOT)현재 세션 설정만 변경함
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_* 뷰가 기본적으로 시드를 숨기기 때문이라고 설명했음

#임시 테이블스페이스 생성과 기본값 변경

SQL*Plus (SYSDBA, 대상 PDB)객체 또는 설정을 변경함
ALTER SESSION SET CONTAINER = <PDB_NAME>;

CREATE TEMPORARY TABLESPACE temp2
  TEMPFILE '<DATAFILE_DIR>/temp02.dbf' SIZE 10M;
SQL*Plus (SYSDBA, 대상 PDB)조회만 함
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 두 개가 보여도 기본 임시 테이블스페이스는 하나임

SQL*Plus (SYSDBA, 대상 PDB)객체 또는 설정을 변경함
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

결과 해석: 개별 실행 출력은 기재 없음

#사용자별 배정과 원상 복구

SQL*Plus (SYSDBA, 대상 PDB)객체 또는 설정을 변경함
ALTER USER <USERNAME> TEMPORARY TABLESPACE temp02;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp02;

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
ALTER USER <USERNAME> TEMPORARY TABLESPACE temp;
SQL*Plus (SYSDBA, 대상 PDB)데이터 또는 파일을 삭제함, 되돌릴 수 없음
DROP TABLESPACE temp02 INCLUDING CONTENTS AND DATAFILES;

결과 해석:

실습에서는 이 실습에서 temp02를 만들어 배정했다가 되돌렸음
위 생성 실습의 temp2와 이름이 다름
바꿀 입력값: <USERNAME>

#PDB의 공유 임시 공간 상한

SQL*Plus (SYSDBA, 대상 PDB)객체 또는 설정을 변경함
ALTER PLUGGABLE DATABASE STORAGE (MAX_SHARED_TEMP_SIZE 500M);

ALTER PLUGGABLE DATABASE STORAGE (MAX_SHARED_TEMP_SIZE UNLIMITED);

결과 해석:

실습에서는 상한을 500MB로 걸었다가 해제했음
실습 기록은 "Pluggable database altered."뿐임

#임시 테이블스페이스에는 Quota를 줄 수 없음

SQL*Plus (SYSDBA, 대상 PDB)객체 또는 설정을 변경함
ALTER USER <USERNAME> QUOTA 10M ON temp;

결과 해석:

실습 기록: ORA-30041 오류가 나며 임시 테이블스페이스에는 Quota를 줄 수 없음
오류 메시지 전문은 기재 없음

#사용 조건과 주의사항

기본 임시 테이블스페이스를 지울 때의 동작은 기재 없음

TEMP_UNDO_ENABLED 전환에 따른 REDO 양 비교는 로컬 UNDO와 임시 UNDO에서 다룸

실습의 PDB 이름 표기가 실습마다 다름

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기