본문 바로가기

Database

[DB]Tablespace 공간 확장 및 이해

Tablespace 확장

1. Resize 방법

alter database datafile '+DATAC1/ORA19/DATAFILE/TS1_01' resize 10G;
alter database tempfile '/u03/oradata/ORA10/TT_TEMP01.dbf' resize 1000M;

TEMP_Tablespace: Sorting이나 GROUP BY 할 때 사용하는 임시적인 공간입니다.

2. Add 방법

alter tablespace TS1 add datafile size 10G; # Oracle Managed Filesystem의 경우 이렇게 파일 이름을 지정하지 않습니다.
alter tablespace TS1 add datafile '+DATAC1/ORA19/DATAFILE/TS1_02' size 10G;
alter tablespace TEMP add tempfile '/u03/oradata/ORA19/TT_TEMP02.dbf' size 500M;

위 명령어를 살펴보면, Datafile명 지정 시 + 가 붙여 있는 것과 일반적인 디렉토리 구조로 되어 있는 것이 있습니다.

두 가지의 차이점은 일반 File System에 데이터 파일이 존재하는 경우 디렉터리 구조를 갖고, Oracle이 RAC에 설치되어 있거나 Active Standby 구조로 되어 있는 경우에 + 가 붙게 됩니다.

Oracle RAC(Real Application Clusters)
오라클 RAC(Real Application Clusters)는 여러 대의 서버에서 하나의 데이터베이스를 공유하여 고가용성과 확장성을 제공하는 오라클 데이터베이스의 기능입니다. RAC를 사용하면 여러 인스턴스가 동시에 하나의 데이터베이스에 접근할 수 있어 성능과 가용성을 극대화할 수 있습니다.

Tablespace와 Datafile

위 Tablespace의 확장에 대해 설명할 때 Tablespace, Datafile에 대한 개념들이 나왔습니다. 그럼 정확하게 Tablespace와 Datafile은 무엇일까요?

 

오라클에서 데이터는 BLOCK에 저장됩니다.(기본적으로 8K 크기) 이러한 BLOCK이 모여 EXTENT가 되고, EXTENT가 모여 SEGMENT가 됩니다. 이 SEGMENT가 바로 우리가 흔히 알고 있는 Table, Index, Cluster 같은 것들 입니다.

보통 EXTENT의 개념은 "SEGMENT는 BLOCK으로 이루어져 있다."라는 개념에서 생략하여 설명됩니다. 그럼 이 EXTENT의 개념은 언제 사용되냐? TABLESPACE에서 공간 할당 시 EXTENT 단위로 사이즈를 늘릴 때 사용되어집니다. 그리고 이러한 SEGMENT가 뭉쳐 TABLESPACE, 이어나가 DATABASE가 생성되는 것입니다.

 

DATA BLOCK, EXTENT, SEGMENT, TABLESPACE, DATABASE와 같은 개념들은 눈으로 보이지 않는 논리적인(Logical) 구조에 대한 설명이고, 눈으로 직접 보이는 물리적인(Physical) 개념이 존재합니다. 물리적인 구조는 Datafile(xxx.dbf)로 이루어져 있습니다. 

 

Tablespace는 하나 이상의 Datafile로 구성되어집니다. 하지만, Tablespace는 논리적인 구조이기 때문에 OS에서 ls 명령어로 조회할 수 없습니다. 따라서, ls 명령어 입력 시 Datafile(~.dbf)만 찾아볼 수 있는 것이죠. Tablespace를 조회하기 위해선 SQL PLUS로 접속하여 Dictionary를 조회해야 지만 찾아볼 수 있습니다. 

 

아무튼 Tablespace와 Datafile은 긴밀한 관계를 가지고 있고, Tablespace의 공간이 부족하면 SEGMENT를 만들 수 없게 되고, Tablespace의 공간을 더 늘린다는 말은 즉, Datafile 사이즈를 늘리거나 Datafile을 추가해서 붙인다는 것 입니다.


Tablespace의 설정 정보

SELECT tablespace_name, initial_extent, next_extent, pct_increase, extent_management, allocation_type
FROM DBA_TABLESPACE;

위와 같은 쿼리문을 통해서 Tablespace에 대한 목록을 조회할 수 있습니다.

  • INITAL_EXTENT: 초기 TS에 할당된 크기
  • NEXT_EXTENT: 공간 부족 시, SIZE를 늘릴 크기
  • PCT_INCREASE: 공간 낭비 문제에 대한 해결책으로 Percent를 통해 사용 공간을 늘립니다. 
    • 예를 들어, PCT_INCREASE가 50이라면 공간 부족 시 사용 중인 공간의 50% 크기를 더 늘리라는 의미입니다.
    • 1048576의 50%: 524288만큼의 크기를 늘려라.
  • ALLOCATION_TYPE
    • SYSTEM: system이 알아서 size를 관리합니다.
    • UNIFORM: 단일화된 사이즈
  • EXTENT_MANAGEMENT
    • DICTIONARY: 과거 DB 버전에서 사용되던 옵션으로 DICTIONARY 안에 TABLESPACE의 EXTENT 공간에 대한 정보들을 다 넣어 놓고, 거기서 끄집어 내서 EXTENT의 정보를 가져오다 보니 해당 DICTIONARY에 부하가 발생할 수 있는 문제가 존재하였습니다.
    • LOCAL: 최신 DB 버전에서 주로 사용. DICTIONARY에서 발생되는 병목 현상을 방지하고자 탄생된 옵션으로 DATAFILE의 HEADER 부분에 BITMAP 형태로 EXTENT 정보를 갖고 있습니다.

Tablespace 생성

일반적인 Tablespace 생성

CREATE tablespace TS1
datafile 'u03/oradata/ORA19/TS1_01.dbf' size 100M
extent management dictionary
default storage (initial 1M next 2M minextents 1 maxextents 1000 pctincrease 100);
-- local managed ts에서는 사용 불가...
-- SYSTEM TS가 local managed 이면 일반 TS도 모두 local managed 여야 합니다. dictionary는 불가.
-- ERROR 발생 (ORA-12913: Cannot create dictionary managed tablespace)

CREATE tablespace TS1
datafile '/u03/oradata/ORA19/TS1_01.dbf' size 100M
extent management local
uniform size 10M;

CREATE tablespace TS1
datafile '/u03/oradata/ORA19/TS1_01.dbf' size 100M
extent management local
autoallocate;

CREATE tablespace TS1 
datafile '/u03/oradata/ORA19/TS1_01.dbf' size 100M
extent management local;

 

Bigfile Tablespace

테이블스페이스 생성 시 최대 생성 가능한 공간은 32G입니다. 따라서 32GB 이상의 Datafile을 만들려고 한다면 Bigfile Tablespace로 만들어야 합니다.(~128TB)

Temp TS의 경우 성능 이슈가 있어서 small file로 만들어야 합니다.

CREATE bigfile tablespace TS1
datafile '/u03/oradata/ORA19/TS1_01.dbf' size 40G
extent management local;
-- 테이블스페이스의 생성 시 최대 생성 가능 공간은 32G입니다. 따라서 32GB 이상의 Datafile을 만들려고하면 Bigfile TS로 만들어야 합니다.(~128TB)
-- Temp TS의 경우는 성능 이슈가 있어서 small file로 만들어야 합니다.

 

OMF(Oracle Management Filesystem) 사용 시

OMF는 Oracle Management Filesystem의 약자로 해당 옵션 설정 시 Oracle System이 알아서 Datafile 명을 지정해줍니다.

CREATE tablespace TS1
datafile size 2048M;

OMF가 만든 DATAFILE

 

Undo Tablespace

CREATE undo tablespace UNDOTBS2
datafile '/u03/oradata/ORA19/UNDOTBS2_01.dbf' size 2048M autoextend off;

 

Temp Tablespace

CREATE temporary tablespace TEMP2
tempfile '/ora_data/temp01_1.dbf' size 10G autoextend off
extent management local uniform size 1M;
-- 최상의 퍼포먼스를 내기 위해선 uniform size를 sort_area_size의 배수로 지정하는 것이 좋습니다.

 

ASM에서 Tablespace 만들기

CREATE tablespace TS1
datafile '+DATAC1' size 30G;

ALTER tablespace TS1
ADD datafile '+DATAC1' size 30G;

초보 DBA를 위한 이것저것

[DB]Oracle DB의 메모리, 프로세서 구조

[DB]Tablespace 공간 확장 및 이해

참고

https://www.youtube.com/watch?v=MdGhppGpJLY