프린트 하기

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.10.0.0

 

방법 : 오라클 19c 일반테이블 및 lob테이블 컬럼 수동 extent 추가

alter table 테이블 modify 명령으로 수동으로 extent를 추가할 수 있음 이 방법을 테스트해봄

 

 

일반테이블 allocate extent 테스트

일반 테이블 생성

1
2
3
4
5
6
7
8
SQL>
drop table testtab purge;
create table testtab (no number) 
  storage
(
  initial 64k
  next 1m
);

 

 

데이터 삽입

1
2
3
SQL>
insert into testtab values (1);
commit;

 

 

일반 테이블 extent 확인

1
2
3
4
5
6
7
8
9
SQL>
set lines 200 pages 1000
col owner for a10
col segment_name for a15
select extent_id, owner, segment_name, bytes/1024/1024 mb from dba_extents where segment_name = 'TESTTAB';
 
 EXTENT_ID OWNER      SEGMENT_NAME          MB
---------- ---------- --------------- ----------
     0 IMSI       TESTTAB           .0625

extent가 1개 존재함

 

 

수동 extent 추가

1
2
3
SQL> alter table testtab allocate extent (size 10m);
 
Table altered.

 

 

일반 테이블 extent 재확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SQL>
set lines 200 pages 1000
col owner for a10
col segment_name for a15
select extent_id, owner, segment_name, bytes/1024/1024 mb from dba_extents where segment_name = 'TESTTAB';
 
 EXTENT_ID OWNER      SEGMENT_NAME          MB
---------- ---------- --------------- ----------
     0 IMSI       TESTTAB           .0625
     1 IMSI       TESTTAB               1
     2 IMSI       TESTTAB               1
     3 IMSI       TESTTAB               1
     4 IMSI       TESTTAB               1
     5 IMSI       TESTTAB               1
     6 IMSI       TESTTAB               1
     7 IMSI       TESTTAB               1
     8 IMSI       TESTTAB               1
     9 IMSI       TESTTAB               1
    10 IMSI       TESTTAB               1
 
11 rows selected.

1m 짜리 extent 10개가 추가됨

allocate extent 값을 늘리면 한번에 더 많은 extent를 수동으로 추가할수도있음

 

 

lob컬럼이 있는 테이블 allocate extent 테스트

lob 테이블 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL>
drop table testlob purge;
create table testlob
(no number, cl clob) tablespace testlob
lob (cl) store as basicfile
(
storage
(initial 64k
 next 1m
)
chunk 16384
tablespace testlob
);

 

 

데이터 삽입

1
2
3
SQL>
insert into testlob values (1,'a');
commit;

 

 

lob 세그먼트 이름 확인

1
2
3
4
5
6
7
8
SQL>
col segment_name for a30
col table_name for a15
select owner, table_name, segment_name from dba_lobs where table_name ='TESTLOB';
 
OWNER       TABLE_NAME       SEGMENT_NAME
---------- --------------- ------------------------------
IMSI       TESTLOB       SYS_LOB0000116144C00002$$

 

 

lob 테이블 extent 확인

1
2
3
4
5
6
7
8
9
SQL>
set lines 200 pages 1000
col owner for a10
col segment_name for a30
select extent_id, owner, segment_name, bytes/1024/1024 mb from dba_extents where segment_name = 'SYS_LOB0000116144C00002$$';
 
 EXTENT_ID OWNER      SEGMENT_NAME                 MB
---------- ---------- ------------------------------ ----------
     0 IMSI       SYS_LOB0000116144C00002$$       .0625

extent가 1개 존재함

 

 

수동 lob 컬럼 extent 추가

1
2
3
SQL> alter table testlob modify lob (cl) (allocate extent(size 10m));
 
Table altered.

 

 

lob 테이블 extent 재확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SQL>
set lines 200 pages 1000
col owner for a10
col segment_name for a30
select extent_id, owner, segment_name, bytes/1024/1024 mb from dba_extents where segment_name = 'SYS_LOB0000116144C00002$$';
 
 EXTENT_ID OWNER      SEGMENT_NAME                 MB
---------- ---------- ------------------------------ ----------
     0 IMSI       SYS_LOB0000116144C00002$$       .0625
     1 IMSI       SYS_LOB0000116144C00002$$           1
     2 IMSI       SYS_LOB0000116144C00002$$           1
     3 IMSI       SYS_LOB0000116144C00002$$           1
     4 IMSI       SYS_LOB0000116144C00002$$           1
     5 IMSI       SYS_LOB0000116144C00002$$           1
     6 IMSI       SYS_LOB0000116144C00002$$           1
     7 IMSI       SYS_LOB0000116144C00002$$           1
     8 IMSI       SYS_LOB0000116144C00002$$           1
     9 IMSI       SYS_LOB0000116144C00002$$           1
    10 IMSI       SYS_LOB0000116144C00002$$           1
 
11 rows selected.

1m 짜리 extent 10개가 추가됨

 

 

수동 extent allocate 시 lock가 걸릴수도 있다고 답변을 받음

추후 대량으로 allocate 해보고 lock를 관찰해볼예정=> 아래 링크 참조

 

 

참조 : 740075.1

https://positivemh.tistory.com/835

 

오라클 19c lob 테이블 allocate extent 시 lock 여부 확인 테스트

OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : Oracle Database 19.10.0.0 방법 : 오라클 19c lob 테이블 allocate extent 시 lock 여부 확인 테스트 lob 테이블에 수동으로 extent를 추가하는 명령을..

positivemh.tistory.com

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/allocate_extent_clause.html