▣ 테이블스페이스(TABLESPACE)란 ?
- 테이블스페이스는 하나 또는 여러개의 데이터 파일로 구성되어 있는 논리적인 데이터 저장 구조 입니다.
- 테이블스페이스는 크게 시스템(SYSTEM) 테이블 스페이스와 비시스템(NON-SYSTEM) 테이블 스페이스로 구분 됩니다.
- 테이블스페이스는 사용자에게 공간을 할당할 수 있으며, 테이블스페이스 안에 저장되어 있을 데이터의 가용성을 제어할 수 있습니다.
1. 시스템 테이블 스페이스
- 오라클 데이터 베이스를 생성할 때 자동으로 생기며 오라클 데이터 베이스의 기동을 위해
꼭 필요한 테이블 스페이스 입니다.
- 모든 데이터 사전(Data Dictionary) 정보와, 저장 프로시저, 패키지, 데이터베이스
트리거등을 저장 합니다
- 유저데이타가 포함될 수 있지만 관리 효율성 면에서 포함 시키지 않습니다
2. 비 시스템 테이블 스페이스
- 롤백세그먼트, 임시세그먼트, 응용프로그렘 데이타, 그리고 응용프로그렘 인덱스를 저장 할 수 있습니다
- 공간관리를 쉽게 하기 위해서 생성 합니다.
- 유저에게 할당되는 공간 입니다.
▣ 테이블스페이스의 생성
- 옵션절을 생략할 경우 밑줄친 옵션이 디폴트 값입니다.
- tablespace_name : 생성할 테이블 스페이스 명
- DATAFILE : 새로 생성하는 테이블스페이스가 사용할 데이터 파일
- filespec : 디렉토리 경로명을 포함한 파일명
- size : 새로 생성되는 데이터 파일의 크기
- ONLINE/OFFLINE
ONLINE : 새로 생성되는 테이블 스페이스를 활성화 시키며, 생성 후 바로 사용할 수 있게 함
OFFLINE : 테이블 스페이스를 비활성화 시키며, 생성 후 바로 사용할 수 없음
- PERMANT/TEMPORARY : TEMPORARY 옵션을 사용하면 생성하는 테이블스페이스는
임시 테이블스페이스가 됩니다.
- DEFAULT STORAGE
* INITIAL : 테이블 스페이스의 맨 첫번째 Extents의 크기
* NEXT : 다음 Extents의 크기
* MINEXTENTS : 생성할 Extents의 최소 값
* MAXEXTENTS : 생성할 Extents의 최대 값
* PCTINCREASE : Extents의 증가율, Default값은 50 입니다
테이블 스페이스 생성 예제
-- sysdba권한으로 접속을 합니다.
SQL> conn sys/manager as sysdba
-- 테이블스페이스 생성
SQL>CREATE TABLESPACE storm
DATAFILE 'C:ORACLEORADATAapp_data.dbf' SIZE 100M
DEFAULT STORAGE
(INITIAL 10K
NEXT 10K
MINEXTENTS 2
MAXEXTENTS 50
PCTINCREASE 50)
아래 그림 설명은 잘 못되었습니다.
두번째 extent는 next의 원래 크기와 동일합니다.
다음부터의 NEXT는 (1+pctincrease/100)에 next의 이전크기를 곱한 크기로 설정 됩니다.
그러므로 16K는 세번째 extent의 크기가 됩니다.
10k, 10k, 16k, 24K, 36k.. 이렇게 되겠죠..
▣ 테이블스페이스의 자동 확장
▣ 생성한 데이터파일이 다 채워졌을 경우 자동으로 데이터 파일을 확장하는 방법 입니다.
▣ AUTOEXTEND 옵션을 사용 하시면 됩니다.
▣ AUTOEXTEND 옵션 사용법
- ON 아니면 OFF
- CREATE DATABASE, CREATE TABLESPACE, ALTER TABLESPACE에서
사용 할 수 있습니다.
▣ AUTOEXTEND 사용 예제
SQL> ALTER TABLESPACE storm
ADD DATAFILE 'C:ORACLEORADATAapp_data02.dbf' SIZE 200M
AUTOEXTEND ON NEXT 10M
MAXSIZE 500M;
storm 테이블스페이스에 200M 데이터 파일을 추가 했는데요,
이 데이터 파일의 크기인 200M를 전부 사용하게 되면 500M이 될 때까지 자동으로 10M 증가합니다.
▣ AUTOEXTEND 의 OFF
SQL> ALTER DATABASE DATAFILE ‘C:ORACLEORADATAapp_data02.dbf'
AUTOEXTEND OFF;
App_data02.dbf파일의 자동확장을 중지 시킵니다.
▣ 수동으로 데이터 파일 크기 변경
- ALTER DATABASE명령으로 데이터 파일의 크기를 변경 할 수 있습니다.
예제)
SQL>ALTER DATABASE DATAFILE
'C:ORACLEORADATAapp_data02.dbf' RESIZE 300M
RESIZE명령으로 데이터 파일의 크기를 300M로 했습니다.
기존 데이터 파일의 크기가 300M가 넘을 경우에는 300M로 줄어들게되고,
300M가 되지 않았을 경우에는 300M로 늘어나게 됩니다.
▣ 비 활성화(OFFLINE) 테이블 스페이스
- 오프라인 상태 테이블스페이스의 데이타에는 접근 할 수가 없습니다.
- SYSTEM 테이블스페이스와 활성화된 롤백세그먼트를 가진 모든 테이블스페이스는
오프라인 상태가 될 수 없습니다.
- 테이블스페이스를 오프라인으로 만들기
데이타베이스가 오픈되어 있다면 데이타베이스 관리자는 SYSTEM 테이블스페이스나
활성 롤백세그먼트나 임시세그먼트를 가진 테이블스페이스를 제외한
어떤 테이블 스페이스든지 오프라인 상태로 만들 수 있습니다.
테이블스페이스가 오프라인상태가 됐을때 오라클 서버는 모든 관련된 모든 데이터
파일을 오프라인 상태로 만듭니다.
테이블스페이스는 세가지 모드로 오프라인 상태가 될 수 있습니다.
* normal : 디폴드 값, 테이블스페이스의 모든 데이터 파일에 대해 체크 포인트를 수행
합니다.
* immediate : CheckPoint를 수행하지 않습니다.
* temporary : 테이블스페이스의 ONLINE데이터 파일에 대해 체크 포인트를 수행 합니다.
예제)
SQL> ALTER TABLESPACE app_data OFFLINE;
▣ 데이터 파일의 이동(ALTER DATABASE)
1) 데이터베이스를 종료 합니다.
2) 운영체제 명령을 사용하여 데이터 파일을 이동 합니다.
3) 데이터베이스를 마운트 합니다.
4) ALTER DATABASCE RENAME FILE명령을 수행하여 이름을 변경합니다.
5) 인스턴스를 시작합니다.
1) 인스턴스의 종료
C:>SQLPLUS /nolog
SQL>conn sys/manager as sysdba
SQL>shutdown immediate;
2) 운영체제 명령을 사용하여 데이터 파일을 이동
- 운영체제 명령을 이용해서 데이터 파일을 이동 시킵니다.
- UNIX에서는 mv명령을 이용해서 새로운 위치로 이동 시킵니다.
3) 데이터베이스 마운트
SQL>startup mount;
4) ALTER DATABASE명령의 수행
SQL>ALTER DATABASE RENAME FILE
'C:oracleoradatastorm.dbf' to
'D:oracleoradataoraclestorm.dbf' ;
alter database명령을 실행하면 오라클은 파일이 존재하는가를 검사합니다.
만약 이단계에서 에러가 발생하면 파일이름이 정확한지 다시 확인 하시면 됩니다.
5) 인스턴스 시작
SQL>alter database open
▣ 읽기전용(Read Only) 테이블 스페이스
- 테이블스페이스는 온라인 상태 이어야 합니다.
- 활성화된 트랜잭션은 허용되지 않습니다.(DML 작업)
- 테이블 스페이스에 활성화된 롤백 세그먼트가 포함되어 있지 않아야 합니다.
- 테이블 스페이스는 현재 온라인 백업에 포함되어 있지 않아야 합니다.
SQL>ALTER TABLESPACE app_data READ ONLY;
==>app_data 테이블 스페이스를 읽기 전용으로 변경 시킵니다.
▣ 테이블 스페이스의 삭제
◈ 데이타를 가지고 있는 테이블스페이스는 INCLUDING CONTENTS옵션 없이는 삭제할 수
없습니다.
◈ 컨트롤 파일 내에 있는 파일 포인터만 삭제됩니다. (데이터 파일은 존재)
◈ 데이타베이스 파일은 여전히 존재하므로 운영체제 레벨에서 명시적으로 삭제 되여야만 합니다.
◈ 데이터 딕셔너리의 내용이 변경 됩니다.
◈ TableSpace를 삭제 하기 전에 테이블스페이스를 오프라인 상태로 할 것을 권장 합니다.
◈ TableSpace가 일단 삭제되면 그 데이타는 데이타베이스에 더 이상 존재하지 않게 됩니다.
- INCLUDING CONTENTS: TableSpace에 Data가 이미들어있을 경우 들어있는 내용을
포함해서 모두 삭제 합니다.
- CASECADE CONSTRAINTS : Primary Key가 설정되어 있는 경우에 child 의 Foriegn Key를
삭제하고 Tablespace를 삭제 합니다.
SQL> DROP TABLESPACE app_data INCLUDING CONTENTS ;
==>app_data테이블 스페이스를 삭제 합니다.
DBA_TABBLESPACES 데이터 사전
SQL>conn sys/manager as sysdba
SQL>SELECT tablespace_name, initial_extent, max_extents, min_extlen
FROM dba_tablespaces;
DBA_DATA_FILES 데이터 사전
SQL>conn sys/manager as sysdba
SQL> SELECT file_name, tablespace_name
FROM dba_data_files;
콘트롤파일의 데이타파일 정보와 테이블스페이스 정보
SQL>conn sys/manager as sysdba
SQL> SELECT status,enabled, t.name,d.name
FROM v$datafile d, v$tablespace t
WHERE t.ts#=d.ts#;
STATUS ENABLED NAME NAME
------- ---------- ------------ -------------------------------------
SYSTEM READ WRITE SYSTEM C:ORACLEORADATAORACLESYSTEM01.DBF
ONLINE READ WRITE RBS C:ORACLEORADATAORACLERBS01.DBF
ONLINE READ WRITE USERS C:ORACLEORADATAORACLEUSERS01.DBF
ONLINE READ WRITE TEMP C:ORACLEORADATAORACLETEMP01.DBF
ONLINE READ WRITE TOOLS C:ORACLEORADATAORACLETOOLS01.DBF
ONLINE READ WRITE INDX C:ORACLEORADATAORACLEINDX01.DBF
ONLINE READ WRITE DRSYS C:ORACLEORADATAORACLEDR01.DBF
ONLINE READ WRITE STORM C:ORACLEORADATAORACLESTORM.DBF
테이블 스페이스의데이터 파일과 테이블 스페이스의 크기 확인
DBA_DATA_FILES 데이터 사전을 이용 하면 됩니다.
SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A15
SQL> SELECT file_name, tablespace_name, bytes, status FROM DBA_DATA_FILES;
FILE_NAME T ABLESPACE_NAME BYTES STATUS
------------------------------------- --------------- ------------ ------------
C:ORACLEORADATAORACLESYSTEM01.DBF SYSTEM 248250368 AVAILABLE
C:ORACLEORADATAORACLERBS01.DBF RBS 545259520 AVAILABLE
C:ORACLEORADATAORACLEUSERS01.DBF USERS 113246208 AVAILABLE
C:ORACLEORADATAORACLETEMP01.DBF TEMP 75497472 AVAILABLE
C:ORACLEORADATAORACLETOOLS01.DBF TOOLS 12582912 AVAILABLE
C:ORACLEORADATAORACLEINDX01.DBF INDX 60817408 AVAILABLE
C:ORACLEORADATAORACLEDR01.DBF DRSYS 92274688 AVAILABLE
◎ FILE_NAME : DATAFILE의 물리적인 위치와 파일명을 알 수 있습니다.
◎ TABLESPACE_NAME : 테이블 스페이스의 이름을 알 수 있습니다.
◎ BYTES : 테이블 스페이스의 크기를 알수 있습니다.
◎ STATUS : 테이블 스페이스의 이용 가능 여부를 알 수 있습니다.
테이블 스페이스별 사용 가능한 공간의 확인
DBA_FREE_SPACE 데이터 사전
SQL> SELECT tablespace_name, SUM(bytes), MAX(bytes)
FROM DBA_FREE_SPACE
GROUP BY tablespace_name
TABLESPACE_NAME SUM(BYTES) MAX(BYTES)
--------------- ---------- ----------
DRSYS 88268800 88268800
INDX 60809216 60809216
RBS 524279808 498589696
SYSTEM 65536 65536
TEMP 75489280 74244096
TOOLS 12574720 12574720
USERS 113238016 113238016
◎ SUM을 사용한 이유는하나의 테이블 스페이스에 분산되어 있는 여유공간을 합한 것이며,
◎ MAX를 사용한 이유는 여유 공간중 가장 큰 공간의 SIZE를 의미 합니다.
데이타 화일에 대한 총 크기와 남아있는 공간, 사용한 용량, 남은 %율
DBA_FREE_SPACE, DBA_DATA_FILES 데이터 사전
SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A30
SQL> SET LINESIZE 150
SQL> SELECT b.file_name "FILE_NAME", -- DataFile Name
b.tablespace_name "TABLESPACE_NAME", -- TableSpace Name
b.bytes / 1024 "TOTAL SIZE(KB)", -- 총 Bytes
((b.bytes - sum(nvl(a.bytes,0)))) / 1024 "USED(KB)", -- 사용한 용량
(sum(nvl(a.bytes,0))) / 1024 "FREE SIZE(KB)", -- 남은 용량
(sum(nvl(a.bytes,0)) / (b.bytes)) * 100 "FREE %" -- 남은 %
FROM DBA_FREE_SPACE a, DBA_DATA_FILES b
WHERE a.file_id(+) = b.file_id
GROUP BY b.tablespace_name, b.file_name, b.bytes
ORDER BY b.tablespace_name
FILE_NAME TABLESPACE_NAME TOTAL SIZE(KB) USED(KB) FREE SIZE(KB) FREE %
------------------------------------- --------------- -------------- ------------- ------------- ----------
C:ORACLEORADATAORACLEDR01.DBF DRSYS 90112 3912 86200 95.6587358
C:ORACLEORADATAORACLEINDX01.DBF INDX 59392 8 59384 99.9865302
C:ORACLEORADATAORACLERBS01.DBF RBS 532480 20488 511992 96.1523438
C:ORACLEORADATAORACLETEMP01.DBF TEMP 73728 8 73720 99.9891493
C:ORACLEORADATAORACLETOOLS01.DBF TOOLS 12288 8 12280 99.9348958
C:ORACLEORADATAORACLEUSERS01.DBF USERS 110592 8 110584 99.9927662