본문 바로가기

DB/오라클

[ORACLE] 테이블 스페이스

테이블스페이스

오라클에서는 Data file이라는 물리적 파일형태로 저장하는데 이러한 Data file이 하나 이상 모여서

Tablespace라는 논리적인 공간을 형성함

 

 

 

테이블스페이스 관련 Dictionary

  • DBA_TABLESPACES : 모든 테이블스페이스의 저장정보 및 상태정보를 갖고 있는 Dictionary
  • DBA_DATA_FILES  : 테이블스페이스의 파일정보
  • DBA_FREE_SPACE  : 테이블스페이스의 사용공간에 관한 정보
  • DBA_FREE_SPACE_COALESCED : 테이블스페이스가 수용할 수 있는 extent의 정보 (COALESCED : 수집된)
select *--default_tablespace
from user_userS;

select username, default_tablespace --SYSTEM, SYSTEM
from user_userS;

 

 

테이블스페이스 생성

create tablespace [테이블스페이스명]
datafile '파일경로'
size --초기 데이터 파일 크기 설정 (M:메가)
AUTOextend ON next 1M -- size로 설정한 초기 크기 공간을 모두 사용한 경우 자동으로 파일의 크기를 늘려주는 기능)
						-- K(킬로바이트), M(메가바이트) 두 단위만 사용할 수 있다.
						--1024K = 1M
MAXSIZE 250M -- 데이터파일이 최대로 커질 수 있는 크기 지정(기본값:unlimited 무제한)
uniform size 1M; -- extent  1개의 크기를 1M로 지정한것

--생성 예
create tablespace test_data                   
datafile 'C:\oraclexe\app\oracle\oradata\XE\test\test_data01.dbf'
size 10M
default storage(initial 2M -- 최초 extent 크기
			next 1M -- 2M가 꽉 차면 1M 크기의 extent 생성(extent는 반드시 메모리에 연속된 공간을 잡아야한다.)
			minextents 1 --(※d아니고 t임) 생성할 extent 최소개수(최소1부터)
			maxextents 121 -- 생성할 extent의 최대 개수(최대 121회 발생가능, 122회 불가능(오류))
			pctincrease 50); -- 기본값 50, 다음에 할당할 extent의 수치를 %로 나타냄
-- pctincrease 50% 지정하면 처음은 1M = 1024K, 두번째부터는 1M의 반인 512K, 그 다음은 또 그 반인 256K, 그 다음 또 그 반인...
-- default storage 생략하면 그 안의 값들은 모두 '기본값으로 지정된 값'으로 실행됨

 

 

테이블 스페이스 조회

select * from dba_tablespaceS; -- 모든 테이블스페이스의 저장정보 및 상태정보를 가지고 있는 사전(Dictionary)

 

 

테이블 스페이스 변경

위에서 만든 test_data 테이블스페이스에 datafile을 1개 더 추가

기존 10M+추가 10M = test폴더의 크기가 총 20M가 된다
즉, 물리적으로 2개의 데이터 파일로 구성되어진 하나의 테이블스페이스가 만들어진다.

alter tablespace test_data
add datafile 'C:\oraclexe\app\oracle\oradata\XE\test\test_data02.dbf'
size 10M;

 

 

테이블스페이스 크기 자동 조절

※주의 : MAXSIZE 250M -> 기본값인 unlimited(무제한)으로 변경하면 문제 발생 할 가능성이 있음
(예)리눅스에서는 파일 1개를 핸드링할 수 있는 사이즈가 2G로 한정되어 있으므로
따라서, datafile이 2G를 넘으면 그때부터 오류가 발생한다.
가급적이면 MAXSIZE를 지정하여 사용하는 것이 바람직 하다.

alter tablespace test_data
add datafile 'C:\oraclexe\app\oracle\oradata\XE\test\test_data03.dbf'
size 10M
AUTOextend ON next 1M --1024K(K,M만 사용가능)
MAXSIZE 250M;--test_data03.dbf의 크기인 10M를 초과하면 1M씩 늘어나 최대 250M까지 늘어날 수 있다.

 

테이블스페이스 크기 수동 조절

-- 기존 test_data02.dbf 파일의 크기 변경
ALTER database
datafile 'C:\oraclexe\app\oracle\oradata\XE\test\test_data02.dbf'
REsize 20M; -- 10M였던 파일의 크기를 20M로 변경
-- 하나의 테이블스페이스(test_data)=총 40M인 3개의 물리적 datafile로 구성됨

 

데이터파일 용량조회

--file_name : datafile의 위치경로
select file_name, tablespace_name, bytes/1024/1024MB, autoextensible as "auto" --*
from dba_data_fileS; --테이블스페이스의 파일정보



테이블스페이스의 단편화된 공간수집(디스크 조각모음)

alter tablespace '테이블스페이스명' coalesce; --coalesce(수집된)
alter tablespace 'test_data' coalesce;
--dba_free_coalesced를 조회해보고 필요에 따라 여러 번 실행해야 한다.

 

 

테이블스페이스 제거

--형식
drop tablespace 테이블스페이스명; -- 이 때, 테이블스페이스 내에 객체가 존재하면 삭제안됨(테이블,시퀀스,인덱스 등)
[including contents]; --<옵션1>해결법 : 모든 내용(객체) 포함하여 삭제
--그러나, 탐색기에서 확인해보면 물리적 datafile은 삭제안됨
[INCLUDING CONTENTS and datafileS]; --<옵션2> 해결법 : 물리적 datafile까지 함께 삭제
[CASCADE constraintS]; --<옵션3> 해결법 : 제약조건까지 함께 삭제

'DB > 오라클' 카테고리의 다른 글

[ORACLE]시퀀스 인덱스  (0) 2022.08.22
[ORACLE]뷰,뷰옵션  (0) 2022.08.18
[ORACLE]제약조건 변경 + ON DELETE  (0) 2022.08.12
[ORACLE]집합연산자 UNION INTERSECT MINUS  (0) 2022.07.25
[ORACLE]데이터 무결성과 제약조건  (0) 2022.07.24