본문 바로가기
Infra & Security Eng/Database Engineering

tablespace, data file 상태 조회, 생성, 확장(수동,자동), 삭제 실습하기

by 엔지니어 E 2026. 4. 9.
반응형

확인사항

1. .dbf 확장자 꼭 붙일 것
2. INSA, INSA -> 실무에서는 원래 이렇게 파일을 2개 만들지 않음
실습 Tablespace 확장 부분
3. 
'/usr01.dbf' SIZE 2M AUTOEXTEND ON,        
  '/usr02.dbf' SIZE 2M AUTOEXTEND ON NEXT 5M,
  '/usr03.dbf' SIZE 2M AUTOEXTEND ON NEXT 5M MAXSIZE 20M;
-> AUTOEXTEND 뒤에 콤마 불가함 
실습 Tablespace 삭제  부분
4. 
SQL> DROP TABLESPACE <tablespace 명>
 2  [INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS]; - > 실습이라 한거지 원래는 이렇게 명령어 안씀

 

Tablespace와 Data file 상태 조회 실습

[Tablespace 상태 조회]
t
SELECT tablespace_name, status, contents,

       extent_management, segment_space_management
FROM dba_tablespaces
ORDER BY 1;

* 오류 나면 한줄로 명령어 적는다


STATUS: 상태(ONLINE/OFFLINE/READ ONLY) - 사용 가능 여부
CONTENTS: 종류(PERMANENT/TEMPORARY/UNDO) - 저장 Segment의 종류
EXTENT_MANAGEMENT: EXNENT 할당 및 관리 방식(LOCAL/DICTIONARY)
SEGMENT_SPACE_MANAGEMENT: 세그먼트 공간 관리 방식(Block 내의 공간 관리 방식) (AUTO/MANUAL)

[Tablespace별 data file 상태 조회]
* Data File: Oracle DB의 실제 데이터가 저장되는 물리적 파일 (.dbf)

1.
SELECT tablespace_name, bytes, file_name

FROM dba_data_files;

BYTES : Data file의 크기
FILE_NAME : Data file의 경로명을 포함한 이름

2.v$ 붙은 동적 성능 뷰가 MOUNT 상태에서도 조회 가능 - DB가 완전히 열리지 않아도 조회 가능
SELECT t.name tablespace_name, d.bytes, d.name file_name 
FROM v$tablespace t, v$datafile d - 
WHERE t.ts#=d.ts#;

* v$tablespace t → tablespace 정보 테이블을 t로 별칭
* v$datafile d → datafile 정보 테이블을 d로 별칭
* 왜 t.name, d.name 인가? 두 테이블 모두 name 컬럼이 있어서 어느 테이블의 name인지 구분하려고
* 왜 WHERE t.ts#=d.ts# 인가? 두 테이블을 연결하는 공통 키가 ts# (tablespace 번호)이기 때문에 이걸 기준으로 조인해야 tablespace와 datafile이 올바르게 매칭됨

[v$datafile 뷰 조회 ]

SELECT ts#, file#, name FROM v$datafile;

TS#
: Tablespace 번호 (SYSTEM=0, SYSAUX=1, UNDO=2 ...)

FILE#: 데이터 파일 번호 (DB 전체에서 고유한 번호)
NAME: 데이터 파일의 실제 물리적 경로

[v$tablespace 조회]

SELECT ts#, name FROM v$tablespace;

TS#: 테이블스페이스 번호
NAME: 테이블스페이스 이름

[temp file 상태 조회]

SELECT tablespace_name, bytes, file_name FROM dba_temp_files;

 

Tablespace 생성 실습

사용 명령어 개념
SQL> CREATE TABLESPACE <tablespace명>                                         

  2  DATAFILE '<data file>' SIZE <크기>;

* 오라클 10g 이후부터는 Extent management 는 locally 방식으로, segment space management는 AUTO 방식으로 생성된다


CREATE TABLESPACE 이름
DATAFILE '파일경로' SIZE 크기;

[실제 예시]

CREATE TABLESPACE insa
DATAFILE '/app/ora19c/oradata/DB19/insa01.dbf' SIZE 1M;

CREATE TABLESPACE insa → insa라는 이름의 tablespace 생성
DATAFILE '/app/ora19c/oradata/DB19/insa01.dbf' → 해당 경로에 data file 생성
SIZE 1M → data file 크기 1MB로 설정

[생성된 tablespace의 설정과 data file을 확인] - 실제 예시 결과물 출력

SELECT tablespace_name, bytes, file_name FROM dba_data_files; - data file의 이름, 크기, 경로를 조회하는 명령어


[다시 Tablespace 상태 조회]

 

Tablespace 확장 1 - 수동 실습

사용 명령어 개념
1. 지정된 파일의 크기를 늘리기
SQL> ALTER DATABASE DATAFILE 
2  '<data file>' RESIZE <크기>; 

2. Data file 추가하기
SQL> ALTER TABLESPACE <tablespace명>
  2  ADD DATAFILE '<추가될 data file>' SIZE <크기>;

[기존 data file 목록 및 크기 확인]

SELECT tablespace_name, bytes, file_name FROM dba_data_files;


[파일 크기 늘리기]


ALTER DATABASE DATAFILE

'/app/ora19c/oradata/DB19/insa01.dbf'
RESIZE 2M;
* data file 크기를 1M → 2M으로 변경


[파일 크기 변경 되었는지 확인]


[2m 크기의 data file 을 추가하기]

ALTER TABLESPACE insa

ADD DATAFILE '/app/ora19c/oradata/DB19/insa02.dbf' SIZE 2M;

[2m 크기의 data file 을 추가 된것을 확인]

 

Tablespace 확장 2 - 자동 실습

사용명령어
1. 자동적으로 커지는 data file 갖는 tablespace 생성 - 시점: 처음 만들때
SQL> CREATE TABLESPACE <tablespace명>                                         
  2  DATAFILE '<data file명>' SIZE <크기>
  3  AUTOEXTEND ON [NEXT <크기> MAX SIZE <크기>];
* NEXT: 증가치
* MAX SIZE; 최대 크기

2. tablespace에 자동으로 커지는 data file을 추가 - 시점: 나중에 추가할 때
SQL> ALTER TABLESPACE <tablespace명>
  2  ADD DATAFILE '<추가될 data file명>' SIZE <크기>
  3  AUTOEXTEND ON [NEXT <크기> MAX SIZE <크기>];

3. 지정한 data file을 자동증가를 설정 
SQL> ALTER DATABASE
  2  DATAFILE '<변경할 data file명>
  3  AUTOEXTEND [ON | OFF] [NEXT <크기> MAX SIZE <크기>];




[자동적으로 커지는 data file 갖는 tablespace 생성]
* 서로 다른 세 개의 data file을 추가함. 크기가 자동으로 증가하는 autoextend 설정은 data file 별로 따로 설정

CREATE TABLESPACE usr

DATAFILE
'/app/ora19c/oradata/DB19/usr01.dbf' SIZE 2M AUTOEXTEND ON,
'/app/ora19c/oradata/DB19/usr02.dbf' SIZE 2M AUTOEXTEND ON NEXT 5M,
'/app/ora19c/oradata/DB19/usr03.dbf' SIZE 2M AUTOEXTEND ON NEXT 5M MAXSIZE 20M;

* usr01.dbf → 자동증가 ON (증가량/최대 미지정)
* usr02.dbf → 자동증가 ON, 5M씩 증가
* usr03.dbf → 자동증가 ON, 5M씩 증가, 최대 20M

* data file이 꽉 찼을때 자동으로 크기가 늘게 된다 

[자동적으로 커지는 data file 갖는 tablespace 생성된 것을 확인]

SELECT tablespace_name, bytes, file_name FROM dba_data_files;


[USR tablespace의 data file 자동증가 설정 확인]

SELECT tablespace_name, file_name, autoextensible, increment_by, maxbytes
FROM dba_data_files
WHERE tablespace_name = 'USR';

* autoextensible → 자동증가 여부 (YES/NO)
* increment_by → 자동증가 블록 수
* maxbytes → 최대 크기
* WHERE tablespace_name = 'USR' → USR tablespace만 필터링

[tablespace에 자동으로 커지는 data file을 추가] -insa tablespace에 data file 추가하면서 자동증가 설정까지 같이 한 명령어

ALTER TABLESPACE insa
ADD DATAFILE '/app/ora19c/oradata/DB19/insa03.dbf' SIZE 2M
AUTOEXTEND ON NEXT 5M MAXSIZE 20M;

* ADD DATAFILE → insa03.dbf 파일 추가 (2M)
* AUTOEXTEND ON → 자동증가 활성화
* NEXT 5M → 꽉 차면 5M씩 증가
* MAXSIZE 20M → 최대 20M까지만 증가

[tablespace에 자동으로 커지는 data file을 추가된 것을 확인]

SELECT tablespace_name, file_name, autoextensible, increment_by, maxbytes

FROM dba_data_files
WHERE lower(tablespace_name) = 'insa';

* lower(tablespace_name) = 'insa' → 대소문자 구분 없이 insa 필터링

[insa01.dbf data file 자동증가 활성화]

ALTER DATABASE DATAFILE '/app/ora19c/oradata/DB19/insa01.dbf'

AUTOEXTEND ON;

[insa01.dbf data file 자동증가 활성화된 것을 확인]

SELECT tablespace_name, file_name, autoextensible, increment_by, maxbytes
FROM dba_data_files
WHERElower(tablespace_name) = 'insa';

 

Tablespace 삭제 실습

사용명령어
1. 지정된 tablespace를 삭제

SQL> DROP TABLESPACE <tablespace 명>
  2  [INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS];


* INCLUDING CONTENT : Tablespace에 segment가 존재할 때 segment를 같이 삭제
* CASCADE CONSTRAINTS : 삭제되는 tablespace의 table을 다른 tablespace의 table이 참조하는 경우에 해당함. constraint를 같이 삭제함
* AND DATAFILES: Tablespace에 포함된 data file을 같이 지운다. 이 옵션을 쓰지 않으면 데이터 파일은 OS상에서 직접 지워야한다


[default permanent tablespace 삭제 시 오류 발생 화면]


[비어있는 테이블 삭제 하기]

DROP TABLESPACE insa;


[tablespace(insa 파일) 삭제해도 data file이 OS상에서 지워지지 않음을 확인]

SQL> !ls /app/ora19c/oradata/DB19/

[OS명령으로 data file 삭제]

!rm /app/ora19c/oradata/DB19/insa01.dbf
!rm /app/ora19c/oradata/DB19/insa02.dbf
!rm /app/ora19c/oradata/DB19/insa03.dbf

[data file 삭제 됨을 확인]


SELECT tablespace_name, bytes, file_name FROM dba_data_files;

[usr 파일 삭제]


DROP TABLESPACE usr;

[usr 파일 os 에서 제대로 하고, 삭제 됨을 확인]


1. !rm /app/ora19c/oradata/DB19/usr*
2. !ls /app/ora19c/oradata/DB19/