CREATE TABLESPACE dict_tbs DATAFILE '/u01/app/oracle/oradata/ORA19C/dict_tbs01.dbf' SIZE 10M
EXTENT MANAGEMENT DICTIONARY
BLOCKSIZE 8K
DEFAULT STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0);
딕셔너리 방식으로 생성하려고 하면 오류가 발생한다.

- system tablespace 자체가 로컬로 관리하는 테이블스페이스로 생성되어 있는 경우 딕셔너리 관리하는 테이블스페이스 생성시 오류 발생

CREATE TABLESPACE userdata
DATAFILE'/u01/app/oracle/oradata/ORA19C/userdata01.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
- UNIFORM SIZE 1M : extent 크기를 일정한 extent로 관리한다.
SELECT * FROM dba_data_files;

CREATE TABLESPACE user_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/user_tbs.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL;
- autoallocate : 시스템에서 extent크기를 관리한다. 기본값, 초기 extent는 64k로 설정되지만 대량의 데이터가 추가 될 경우 자동으로 extent 크기를 증가시킨다.
DROP TABLESPACE user_tbs INCLUDING CONTENTS AND DATAFILES;
- INCLUDING CONTENTS : 해당 테이블스페이스 안에 sengment가 있어도 같이 삭제
- AND DATAFIELS : 물리적 공간인 데이터파일도 같이 삭제, 해당 옵션을 쓰지 않으면 물리적인 공간은 남아있지만 사용할 수는 없다.

pctused, freelists, freelists groups 사용하는 방식
pctused : insert시 block 사용할 수 있는 여부를 나타내는 블록 파라미터이다. 기본값 40%
freelists : 처음 pctused 파라미터 보다 데이터가 작게 들어가 있는 block의 정보를 관리한다. 그 다음 사용할수 있는 block은 현재 사용할 수 있는 block header에서 관리한다.
freelists groups : freelists의 그룹을 의미, RAC에서 사용한다.
동시 insert 작업이 수행할때 freelists를 획득해야 하는 문제점 때문에 buffer busy wait이 과도하게 많이 발생한다.
이 문제점을 개선한 개념이 ASSM이다.
1) MANUAL 테이블스페이스 생성
CREATE TABLESPACE flm_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/flm_tbs.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT MANUAL;
2) PCTUSED, FREELISTS를 설정한 테이블 생성
CREATE TABLE hr.emp
PCTUSED 30 -- pctused를 30으로 낮춘다
STORAGE(FREELISTS 2) -- FREELISTS의 수를 2개로 생성, buffer busy wait를 줄일수 있다.
TABLESPACE flm_tbs
AS SELECT * FROM hr.employees;
3) 딕셔너리 확인
SELECT * FROM dba_tables WHERE owner = 'HR' AND table_name = 'EMP';
SELECT * FROM dba_segments WHERE owner = 'HR' AND segment_name = 'EMP';
SELECT * FROM dba_data_files;
SELECT * FROM dba_objects WHERE owner = 'HR' AND object_name = 'EMP';
SELECT ROWID, employee_id FROM hr.emp;
SELECT * FROM dba_extents WHERE owner = 'HR' AND segment_name = 'EMP';



1) AUTO 테이블스페이스 생성
CREATE TABLESPACE assm_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/assm_tbs.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;
2) 테이블 생성
CREATE TABLE hr.emp
TABLESPACE flm_tbs
AS SELECT * FROM hr.employees;
3) 딕셔너리 확인
SELECT * FROM dba_tables WHERE owner = 'HR' AND table_name = 'EMP';
SELECT * FROM dba_segments WHERE owner = 'HR' AND segment_name = 'EMP';
SELECT * FROM dba_data_files;
SELECT * FROM dba_objects WHERE owner = 'HR' AND object_name = 'EMP';
SELECT ROWID, employee_id FROM hr.emp;
SELECT * FROM dba_extents WHERE owner = 'HR' AND segment_name = 'EMP';
- dba_tables를 확인하면 block수가 6개로 FLM 방식에 비해 늘어난걸 확인할 수 있는데 비트맵 방식은 가지고 있는 모든 block들의 대한 정보를 가지고 있어야 하기 때문에 block수는 늘어났지만 ROWID를 확인해보면 실제 데이터가 들어간 block의 수는 2개로 동일한걸 알 수 있다.
1) 테이블스페이스 생성시에 데이터파일을 자동으로 확장기능 설정
CREATE TABLESPACE insa_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/insa_tbs.dbf' SIZE 10M
AUTOEXTEND ON NEXT 2M MAXSIZE 200M -- 10M가를 초과하면 2M가씩 커지는데 최대치는 200M이다.
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;
2) 설정된 파라미터 확인
SELECT * FROM dba_data_files;

ALTER DATABASE DATAFILE
'/u01/app/oracle/oradata/ORA19C/insa_tbs.dbf' AUTOEXTEND ON;