create tablespace TS_TGDOM_D datafile '/u01/ORACLE/TGDOM/TS_TGDOM_D_01.dbf' size 1000m
autoextend on next 100m maxsize 2000m
extent management local autoallocate
\--> 빈 extent 를 찾을 때 bitmap 을 활용하고, 할당시 자동으로 해주어라
segment space management auto ;
\--> allocation 된 extent 내의 free block 을 찾을때 자동으로 할당 하라
sys@ARTDOM> create tablespace system_managed extent management local ;
Tablespace created.
LMT Tablespace 생성 - uniformsize Allocation Type
sys@ARTDOM> create tablespace uniform_size extent management local uniform size 5M
Tablespace created.
\#LMT Tablespace 에 Table 생성
sys@ARTDOM> create table big_Table as select rownum id, a.\* from all_objects a
where 1=0
\#LMT Tablespace 에 Table 을 Nologging 으로 설정
sys@ARTDOM> alter table big_table nologging ;
\#LMT Tablespace 에 Table 에 데이타 입력
sys@ARTDOM> declare
l_cnt number ;
l_rows number :=&1
begin
insert /*+ append \*/ into big_table select rownum, a.* from all_objects a;
l_cnt := sql%rowcount ;
commit ;
while ( l_cnt < l_rows )
loop
insert /*\+ append \*/ into big_table
select rownum+l_cnt, owner, object_name, subobject_name, object_id, data_object_id,
object_type, created, last_ddl_time, timestamp, status, temporary,
generated, secondary
from big_table
where rownum <= l_rows-l_cnt;
l_cnt := l_cnt+sql%rowcount;
commit ;
end loop ;
end ;
/
Enter value for 1: 10000000
old 3: l_rows number :=&1 ;
new 3: l_rows number :=10000000 ;
PL/SQL procedure successfully completed.
\#LMT Tablespace 에 Table 에 PK 설정
sys@ARTDOM>alter table big_table add constraint big_table_pk primary key(id)
/
Table altered.
\#LMT Tablespace 에 Table 통계자료 생성
sys@ARTDOM>begin dbms_stats.gather_table_stats
( ownname =>'SYS',
tabname =>'BIG_TABLE',
method_opt => 'for all indexed columns',
cascade => TRUE) ;
end ;
/
PL/SQL procedure successfully completed.
\#LMT Tablespace 에 Table 인덱스 생성
sys@ARTDOM>create index big_Table_owner_idx on big_table(owner) compute statistics ;
Index created.
\#LMT Tablespace 에 Table 을 Copy
sys@ARTDOM>create table big_table_copy tablespace system_managed as select * from big_table ;
Table created.
sys@ARTDOM> select rownum, tablespace_name, extent_id, bytes/1024,
blocks from user_extents where segment_name ='BIG_TABLE_COPY' ;
ROWNUM TABLESPACE_NAME EXTENT_ID BYTES/1024 BLOCKS
\---------\- \-----------------------------\- \---------\- \---------\- \---------\-
1 SYSTEM_MANAGED 0 64 8
2 SYSTEM_MANAGED 1 64 8
3 SYSTEM_MANAGED 2 64 8
4 SYSTEM_MANAGED 3 64 8
5 SYSTEM_MANAGED 4 64 8
6 SYSTEM_MANAGED 5 64 8
7 SYSTEM_MANAGED 6 64 8
8 SYSTEM_MANAGED 7 64 8
9 SYSTEM_MANAGED 8 64 8
10 SYSTEM_MANAGED 9 64 8
11 SYSTEM_MANAGED 10 64 8
12 SYSTEM_MANAGED 11 64 8
13 SYSTEM_MANAGED 12 64 8
14 SYSTEM_MANAGED 13 64 8
15 SYSTEM_MANAGED 14 64 8
16 SYSTEM_MANAGED 15 64 8
17 SYSTEM_MANAGED 16 1024 128
...
79 SYSTEM_MANAGED 78 1024 128
80 SYSTEM_MANAGED 79 8192 1024
...
199 SYSTEM_MANAGED 198 8192 1024
200 SYSTEM_MANAGED 199 65536 8192
1 ~ 16(16) : 64k
16 ~ 79(73) : 1024K(1M)
80 ~ 199(121) : 8192K(8M)
200 ~ : 65536K(64M)
시스템에 의해 관리되는 접근법에서는 데이터베이스가 알아서 익스텐트의
크기를 결정하도록 한다. 시스템에 의해 관리되는 LMT는 객체의 크기가 10G
이하인 경우에 효과적으로 동작한다.
# Tables Drop
sys@ARTDOM>drop table big_table_copy ;
Table dropped.
# Uniform Size Allocation Tablespace 에 생성
sys@ARTDOM>create table big_table_copy tablespace uniform_size as select * from big_table ;
Table created.
sys@ARTDOM>select rownum, tablespace_name, extent_id, bytes/1024, blocks from user_extents
2 where segment_name ='BIG_TABLE_COPY';
ROWNUM TABLESPACE_NAME EXTENT_ID BYTES/1024 BLOCKS
\---------\- \-----------------------------\- \---------\- \---------\- \---------\-
1 UNIFORM_SIZE 0 5120 640
2 UNIFORM_SIZE 1 5120 640
3 UNIFORM_SIZE 2 5120 640
4 UNIFORM_SIZE 3 5120 640
5 UNIFORM_SIZE 4 5120 640
6 UNIFORM_SIZE 5 5120 640
7 UNIFORM_SIZE 6 5120 640
....
233 UNIFORM_SIZE 232 5120 640
234 UNIFORM_SIZE 233 5120 640
235 UNIFORM_SIZE 234 5120 640
236 UNIFORM_SIZE 235 5120 640
236 rows selected.
sys@ARTDOM>create tablespace five_meg
datafile size 100M
uniform size 5M
/
Tablespace created.
sys@ARTDOM>select sum(bytes/1024/1024) free_space
2 from dba_free_space
3 where tablespace_name ='FIVE_MEG'
4 /
FREE_SPACE
\---------\-
95
sys@ARTDOM>col file_name new_val f
sys@ARTDOM>select file_name from dba_data_files where tablespace_name ='FIVE_MEG';
FILE_NAME
\-------------------------------------------------\-
/u02b/ORACLE/ARTDOM/OMF/ARTDOM/datafile/o1_mf_five_meg_4cqc32cd_.dbf
104857600
104857600(100M) + 65536(64K) = 104923136 ( 확대할 사이즈 = 102464k )
sys@ARTDOM>alter database datafile '&f' resize 102464k ;
old 1: alter database datafile '&f' resize 102464k
new 1: alter database datafile '/u02b/ORACLE/ARTDOM/OMF/ARTDOM/datafile/o1_mf_five_meg_4cqc32cd_.dbf' resize 102464k
Database altered.
sys@ARTDOM>select sum(bytes/1024/1024) free_space
2 from dba_free_space
3 where tablespace_name ='FIVE_MEG'
4 /
FREE_SPACE
\---------\-
100
이 64K 규칙은 시스템에 의해 관리되는 익스텐트에는 적용될 필요가 없다는 사실에
유의 하게 바란다. 'uniform size 5M' 절 없이 상기 테스트를 실행 하였다면
99.9375MB, 즉 64K 를 제외한 모든 공간이 사용 가능한 것으로 나타났을 것이다.
sys@ARTDOM>create tablespace five_meg2 datafile size 100M ;
Tablespace created.
sys@ARTDOM>select sum(bytes/1024/1024) free_space
2 from dba_free_space
3 where tablespace_name ='FIVE_MEG2'
4 /
FREE_SPACE
\---------\-
99.9375
-- Uniform Size Allocation Type LMT 생성
sys@ARTDOM>create tablespace uniform_extents
datafile size 2112k, size 2112k, size 2112k, size 2112k uniform size 64k
/
Tablespace created.
-- Auto Allocation Type LMT 생성
sys@ARTDOM>create tablespace system_managed
datafile size 2112k, size 2112k, size 2112k, size 2112k
/
Tablespace created.
-- Uniform Size Allocation Type LMT 에 Table 생성
sys@ARTDOM>create table uniform_size ( x int, y char(2000)) tablespace uniform_extents ;
Table created.
-- Auto Allocation Type LMT 에 Table 생성
sys@ARTDOM>create table system_size ( x int, y char(2000)) tablespace system_managed ;
Table created.
-- Tablespace Size Check
sys@ARTDOM> select TABLESPACE_NAME,SUM(BYTES)/1024/1024 from dba_data_files
where tablespace_name IN ('UNIFORM_EXTENTS','SYSTEM_MANAGED')
group by tablespace_name ;
SYSTEM_MANAGED 8.25
UNIFORM_EXTENTS 8.25
-- Tablespace Datafile Check
sys@ARTDOM> select TABLESPACE_NAME,FILE_ID ,BYTES/1024/1024 from dba_data_files
where tablespace_name IN ('UNIFORM_EXTENTS','SYSTEM_MANAGED')
ORDER BY TABLESPACE_NAME, FILE_ID ;
SYSTEM_MANAGED 12 2.0625
SYSTEM_MANAGED 21 2.0625
SYSTEM_MANAGED 22 2.0625
SYSTEM_MANAGED 23 2.0625
UNIFORM_EXTENTS 16 2.0625
UNIFORM_EXTENTS 17 2.0625
UNIFORM_EXTENTS 18 2.0625
UNIFORM_EXTENTS 19 2.0625
-- uniform_siz Table 에 Data 입력
sys@ARTDOM>begin
2 loop
3 insert into uniform_size values ( 1, 'x' ) ;
4 commit ;
5 end loop ;
6 end ;
7 /
begin
\*
ERROR at line 1:
ORA-01653: unable to extend table SYS.UNIFORM_SIZE by 8 in tablespace UNIFORM_EXTENTS
ORA-06512: at line 3
-- system_size Data 입력
sys@ARTDOM>begin
2 loop
3 insert into system_size values ( 1, 'x');
4 commit ;
5 end loop ;
6 end ;
7 /
begin
\*
ERROR at line 1:
ORA-01653: unable to extend table SYS.SYSTEM_SIZE by 128 in tablespace SYSTEM_MANAGED
ORA-06512: at line 3
sys@ARTDOM>select segment_name, extent_id, blocks, file_id from dba_extents
2 where segment_name in ('UNIFORM_SIZE','SYSTEM_SIZE')
3 and owner ='SYS'
4 order by segment_name , extent_id ;
SEGMENT_NAME EXTENT_ID BLOCKS FILE_ID
\-----------------------------\- \---------\- \---------\- \---------\-
SYSTEM_SIZE 0 8 12
SYSTEM_SIZE 1 8 12
SYSTEM_SIZE 2 8 12
SYSTEM_SIZE 3 8 12
SYSTEM_SIZE 4 8 12
SYSTEM_SIZE 5 8 12
SYSTEM_SIZE 6 8 12
SYSTEM_SIZE 7 8 12
SYSTEM_SIZE 8 8 12
SYSTEM_SIZE 9 8 12
SYSTEM_SIZE 10 8 12
SYSTEM_SIZE 11 8 12
SYSTEM_SIZE 12 8 12
SYSTEM_SIZE 13 8 12
SYSTEM_SIZE 14 8 12
SYSTEM_SIZE 15 8 12
SYSTEM_SIZE 16 128 20
SYSTEM_SIZE 17 128 21
SYSTEM_SIZE 18 128 22
SYSTEM_SIZE 19 128 12
SYSTEM_SIZE 20 128 20
SYSTEM_SIZE 21 128 21
SYSTEM_SIZE 22 128 22
출력을 보면 시스템에 의해 할당된 테이블 영역의 첫 번째 16개의 익스텍트는
모두 같은 파일(FILE_ID 22)로부터 할당되었다. 오라클이 다수의 작은 익스텐트를
여러 개의 서로 다른 파일에서 할당하지 않고 이렇게 한 이유는 이 테이블 영역으로부터
개체를 삭제할 경우 발생할지도 모르는 단편화를 줄이기 위함이다.
익스템트가 8블록(64KB)에서 128블록(1MB)으로 뛸 때에만 라운드 로빈 알고리즘이
동작한다. 일단 1MB 익스텐트에 도달하면서 파일 12,23,21,22 순으로 할당된다.
UNIFORM_SIZE 0 8 16
UNIFORM_SIZE 1 8 17
UNIFORM_SIZE 2 8 18
...
UNIFORM_SIZE 118 8 18
UNIFORM_SIZE 119 8 19
UNIFORM_SIZE 120 8 16
UNIFORM_SIZE 121 8 17
UNIFORM_SIZE 122 8 18
UNIFORM_SIZE 123 8 19
UNIFORM_SIZE 124 8 16
UNIFORM_SIZE 125 8 17
UNIFORM_SIZE 126 8 18
UNIFORM_SIZE 127 8 19
151 rows selected.
TABLESPACE UNIFORM SIZE 10M 가 지정된 테이블스페이스에서
CREATE TABLE ... STORAGE ( INITAL 1M NEXT 5M MINEXTENTS 3 )
> EXP HELP=Y
COMPRESS import into one extent (Y)
- 강좌 URL : http://www.gurubee.net/lecture/3543
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.