보통 테이블 생성 스크립트로 테이블을 생성하면 바로 기본 공간을 할당 받음
--> extent가 생성됨. 그런데 수백 개의 테이블을 생성해야하는데 지금 당장 공간이 넉넉치 않으면 deferred 테이블을 생성하면 됨.
--> 이 테이블을 insert가 시작될 때 extent가 할당됨
테이블 생성시 deferred 세그먼트로 생성할 수 있습니다.
1. segment creation immediate
테이블을 생성하자 마자 바로 세그 먼트를 할당
2. segment creation deferred
테이블을 생성하자 마자 바로 세그먼트를 할당 하지 않고 insert 할 때 할당
수백개의 테이블을 갑자기 동시에 생성해야하는 작업을 할 때 에러없이
수월하게 수행되게하는 기술입니다.
--#1. segment creation immediate 옵션으로 테이블 생성
create table emp700
( empno number(10),
ename varchar2(500) )
segment creation immediate tablespace users;
--#2. 공간이 할당되었는지 확인
select table_name
from user_tables
where table_name='EMP700';
select segment_name, extents, blocks
from user_segments
where segment_name='EMP700';
--세그먼트가 생성되어서 바로 보입니다.
--#3. segment creation deferred 옵션으로 테이블 생성
create table emp800
( empno number(10),
ename varchar2(500) )
segment creation deferred tablespace users;
--#4. 공간이 할당 되었는지 확인
select table_name
from user_tables
where table_name='EMP800';
select segment_name, extents, blocks
from user_segments
where segment_name='EMP800';
--#5. emp800 테이블에 데이터를 입력해보고 공간이 할당 되었는지 확인합니다.
insert into emp800 values( 1111, 'aaaa');
commit;
select segment_name, extents, blocks
from user_segments
where segment_name='EMP800';
create index emp_sal
on emp(sal);
select segment_name, extents, blocks
from user_segments
where segment_name='EMP_SAL';
create index emp_job
on emp(job)
segment creation deferred tablespace users;
에러나면서 생성안됨. 인덱스 생성 시에는 사용할 수 없음. 테이블만 가능
- db reorg 작업
- 테이블 압축
- segment creation deferred