STUDY/ORACLE

Oracle 13일차(2) -Tablespace and Datafile

Anne of Green Galbes 2019. 1. 24. 16:46

tablespace and datafile

○ SYSTEM tablespace

- 데이터베이스와 함께 생성

- 데이터 딕셔너리 포함

- 시스템의 undo시그먼트 포함


○ Non-SYSTEM tablespace

- undo시그먼트 공용으로 사용


○ tablespaces 생성

CREATE TABLESPACE usedata

DATAFILE ‘경로/이름.dbf’ SIZE 100M

AUTOEXTEND ON NEXT 5M MAXSIZE 200M;

초기값 : 100M

AUTOEXTEND : 자동으로 크기 증가

추가 크기 : 5M

최대 크기 : 200M


○ tablespaces 저장공간 관리

-  Header : 앞 뒤 파일에 대한 정보 저장

- 일반적으로 기본적인 블럭의 크기는 8kb


- Locally managed tablespace

 요즘 많이 사용

 직접 블럭으로 와서 Header의 내용을 읽고 저장

  속도가 빠르다

  CREATE TABLESPACE userdata

  DATAFILE ‘경로/이름.dbf’ SIZE 500M

  EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

UNIFORM : 계속 128K씩 크기를 늘려라

- Dictionary-managed tablespace

 각 블럭의 정보를 저장. (1번 블럭에 2byte 남음. 2번 블럭에 5byte남음)

 데이터 저장 시 dictionary에서 블럭의 Header 정보를 확인. 공간이 남은 블럭에 내용 저장

CREATE TABLESPACE userdata

DATAFILE ‘경로/이름.dbf’ SIZE 500M

EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE

(initial 1M NEXT 1M PCTINCREASE 0);

initial 1M NEXT 1M PCTINCREASE 0 : 처음에는 1씩. 그 다음부터는 1M씩 늘려라

initial 1M NEXT 1M PCTINCREASE 10 : 처음에는 1씩. 그 다음부터는 전체크기의 10%씩 늘려라


○ Undo Tablespace

- Undo 시그먼트에 저장되어 사용

- 다른 오브젝트를 가질 수 없음

- 만드는 것은 여러개 만들 수 있지만, 하나만 사용가능

- 반드시 복구를 해야하는 테이블스페이스

- Locally managed로 자동 생성된다.

CREATE UNDO TABLESPACE undo1

DATAVILE ‘경로/이름.dbf’ SIZE 40M;

○ Temporary Tablespaces

- 정렬할 때 사용

- PGA에 따로 있지만 공간이 부족해 이거 사용

- Temporary Tablespaces에 공간이 부족하면 System Temporary Tablespaces에 로 가서 정렬

- 순서 : PGA ▶ Temporary Tablespaces ▶ System Temporary Tablespaces

- 영구적인 데이터는 저장 불가

- 컴퓨터를 Shutdown시키면 리셋

- 로컬이 관리

CREATE TEMPORARY TABLESPACE temp

TEMPFILE ‘경로/이름.dbf’ SIZE 500M

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;


○ Default Temporary Tablespaces

- 여러개 만들 수 있지만, 두 개를 동시에 사용 불가

ALTER DATABASE

DEFAULT TEMPORARY TABLESPACE temp;

- 사용할 수 있는 새로운 Default가 만들어질 때까지 DROP불가

- Taken offline : 사용자가 데이터베이스에는 접근 가능하지만 해당 Tablespace에는 접근 불가


○ Read Only Tablespaces

ALTER TABLESPACE userdata READ ONLY;


○ Taking a Tablespace Offline

데이터베이스에는 접근 가능 하지만 특정 tablespace는 사용 불가

- offline불가 tablespace

  ① System Tablespace

  ② 활성화되어 있는 Undo Tablespace

  ③ Temporary Tablespaces

ALTER TABLESPACE userdata OFFLINE;

ALTER TABLESPACE userdata ONLINE;


○ Change Storage Settings

로컬 방식은 수정할 필요가 없다


○ 테이블스페이스의 사이즈 변경

- AUTOEXTEND : 자동으로 크기 추가

CREATE TABLESPACE userdata

DATAFILE

‘경로/이름.dbf’ SIZE 200M

AUTOEXTEND ON NEXT 10M MAXSIZE 500M;


- ALTER TABLESPACE로 수동으로 크기 추가

ALTER DATABASE

DATAFILE ‘경로/이름.dbf’ RESIZE 200M;


- 데이터파일을 추가해서 전체 용량 추가

ALTER TABLESPACE userdata

ADD DATAFILE ‘경로/이름.dbf’ SIZE 200M;


○ 데이터파일 이동

① 테이블스페이스 OFFLINE

② 파일위치 변겅

데이터베이스에 변경되 위치 연결

일반 테이블스페이스

- 테이블스페이스가 offline상태


ALTER TABLESPACE 테이블스페이스 RENAME

DATAFILE ‘경로/이름.dbf’

TO ‘경로/이름.dbf’;


SYSTEM, TEMP, UNDO 테이블스페이스, LOG파일

- 테이블스페이스가 마운트 상태


ALTER DATABASE RENAME

FILE ‘경로/system01..dbf’

TO ‘경로/system01..dbf’;


○ 테이블스페이스 삭제

- 시스템 테이블스페이스는 삭제 불가

- 현재 활성화된 시그먼트는 삭제 불가

INCLUDING CONTENTS :테이블스페이스만 삭제

INCLUDING CONTENTS AND DATAFILES :테이블스페이스, 데이터파일 다 삭제. 일반적으로 사용

CASCADE CONSTRAINTS : 참조하고 있는 테이블스페이스도 삭제


○ 테이블스페이스 관련 정보 확인

① Tablespaces

- DBA_TABLESPACES

- V$TABLESPACE

② Datafile information

- DBA_DATA_FILES

- V$DATAFILE

③ Temp file information

- DBA_TEMP_FILES

- V$TEMPFILE



실습


1. DT.SQL / DDF.SQL / TEMP.SQL 생성

DT.SQL : 테이블스페이스의 OFFLINE / ONLINE 상태 확인


SELECT TABLESPACE_NAME,STATUS,CONTENTS,

EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT

FROM DBA_TABLESPACES

/



DDF.SQL : 테이블스페이스의 크기와 위치확인


COL TABLESPACE_NAME FORMAT A16

COL FILE_NAME FORMAT A29

SELECT TABLESPACE_NAME, BYTES,FILE_NAME FROM DBA_DATA_FILES

/



TEMP.SQL : TEMP테이블스페이스의 크기와 위치 확인

▶ TEMP는 별도의 공간에 저장되어진다.


COL TABLESPACE_NAME FORMAT A16

COL FILE_NAME FORMAT A29

SELECT TABLESPACE_NAME,BYTES,FILE_NAME FROM DBA_TEMP_FILES

/




2. 테이블스페이스 생성

CREATE TABLESPACE INSA

DATAFILE 'C:\APP\ITWILL\ORADATB\TESTDA\INSA.DBF' SIZE 10M

SEGMENT SPACE MANAGEMENT AUTO;


이름 : INSA.DBF

위치 : C:\APP\ITWILL\ORADATB\TESTDA

크기 : 10M




3. 테이블스페이스 용량 증가

ALTER DATABASE DATAFILE

'C:\APP\ITWILL\ORADATA\TESTDB\INSA.DBF' RESIZE 20M;


크기 20M으로 변경




4. 테이블스페이스 복사

ALTER TABLESPACE INSA

ADD DATAFILE 'D:\APP\ITWILL\ORADATA\TESTDB\INSA02.DBF' SIZE 20M;


이름 : INSA02.DBF

위치 : C:\APP\ITWILL\ORADATA\TESTDB

크기 : 20M




5. 테이블 스페이스 이동

(1) 일반 테이블스페이스 이동

① 테이블스페이스

ALTER TABLESPACE INSA OFFLINE;



② 파일 위치 변경


③ 데이터베이스에 변경되 위치 연결

ALTER TABLESPACE INSA RENAME

DATAFILE 'C:\APP\ITWILL\ORADATA\TESTDB\INSA.DBF'

TO 'C:\ADISK\DISK1\INSA.DBF';


ALTER TABLESPACE INSA RENAME

DATAFILE 'C:\APP\ITWILL\ORADATA\TESTDB\INSA02.DBF'

TO 'C:\ADISK\DISK1\INSA02.DBF';


- INSA.DBF

변경 전 : C:\APP\ITWILL\ORADATA\TESTDB\INSA.DBF

변경 후 : C:\ADISK\DISK1\INSA.DBF


- INSA02.DBF

변경 전 : C:\APP\ITWILL\ORADATA\TESTDB\INSA02.DBF

변경 후 : C:\ADISK\DISK1\INSA02.DBF



④ 테이블스페이스 ONLINE

ALTER TABLESPACE INSA ONLINE;



(2) SYSTEM 테이블 스페이스 이동

① 데이터베이스 SHUTDOWN

SHUTDOWN IMMEDIATE;



② SYSTEM01.DBF파일 위치 이동


③ 데이터베이스 MOUNT상태까지 시작

STARTUP MOUNT



④ 데이터베이스에 변경되 위치 연결

ALTER DATABASE RENAME

FILE 'C:\APP\ITWILL\ORADATA\TESTDB\SYSTEM01.DBF'

TO 'C:\ADISK\DISK3\SYSTEM01.DBF';


변경 전 : C:\APP\ITWILL\ORADATA\TESTDB\SYSTEM01.DBF

변경 후 : C:\ADISK\DISK3\SYSTEM01.DBF



⑤ 데이터베이스 OPEN

ALTER DATABASE OPEN;



▶ SYSTEM 테이블스페이스 확인



6. 테이블스페이스 삭제

DROP TABLESPACE INSA

INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINS;