본문 바로가기

카테고리 없음

ORACLE SEGMENT TYPE v1.0

ORACLE 10g SEGMENT TYPE

 

 

1.    ORCLE SEGMENT TYPE

ORACLE Segment 에 대해 다음과 같이 이야기 한다.

데이터의 기본적인 저장소는 블록이며 이 블록은 익스텐트의 구성요소이다.

또 익스텐트가 모여 세그먼트를 구성한다.

세그먼트는 인덱스가 될 수도 있고 테이블이 될 수도 있다.

세그먼트가 성장하면 저장소가 부족할 수 있는데 이 때 익스텐트를 할당받는다.

때문에 익스텐트를 할당단위라고 한다.

 

2.    (DBA|ALL|USER)_SEGMENTS

위와 같은 Dictionary Segment 의 정보를 조회할 수 있다.

 

SQL> select segment_type

  2  from dba_segments

  3  group by segment_type;

 

SEGMENT_TYPE                                                                                                           

------------------                                                                                                      

LOBINDEX                                                                                                               

INDEX PARTITION                                                                                                         

NESTED TABLE                                                                                                           

TABLE PARTITION                                                                                                         

ROLLBACK                                                                                                               

LOB PARTITION                                                                                                           

LOBSEGMENT                                                                                                             

TABLE                                                                                                                   

INDEX                                                                                                                  

CLUSTER                                                                                                                 

TYPE2 UNDO

 

위와 같은 세그먼트 종류가 있으며 위의 세그먼트를 대분류하면 아래와 같다.

 

data segment : tale and cluster

index

rollback

temporary data

 

위 분류는 ‘Segment In Oracle’ 를 참조하였다.

index Index Column 에 대해 Value 를 온전히 가지는 것을 생각하면 – Table Random Access 없는 Index Scan 을 생각 – data segment 에 들어갈 법하다.

Dictionay 내에는 위 분류를 크게 포괄하는 분류가 별도로 없다.

 

3.    SEGMENT TYPE

A.     LOB SEGMENT / LOB PARTITION / LOBINDEX

/*+ LOBINDEX, LOB PARTITION 정보추가 */

LOB SEGMENT 확인하기 위한 예제이다.

 

SQL> create table lob_1

  2  (id number,

  3  data clob)

  4  lob (data) store as lob_1_lob(tablespace users chunk 8192

  5  nocache logging

  6  storage (maxextents 5)

  7  );

 

Table created.

 

CLOB 을 컬럼으로 가지는 테이블을 생성했다.

 

SQL> /

 

SEGMENT_NAME         SEGMENT_TYPE

-------------------- ------------------

LOBCOMPPART$         TABLE

LOBFRAG$             TABLE

LOB_1                TABLE

LOB_1_LOB            LOBSEGMENT

 

생성구문을 보면 CLOB Column 에 대해 naming 을 했고 해당하는 이름은 lob_1_lob 이다. 이 이름을 위에서 확인할 수 있다.

 

SQL> create index lob_ix01 on lob_1(id);

 

Index created.

 

SQL> @lob

 

SEGMENT_NAME         SEGMENT_TYPE

-------------------- ------------------

LOBCOMPPART$         TABLE

LOBFRAG$             TABLE

LOB_1                TABLE

LOB_1_LOB            LOBSEGMENT

LOB_IX01             INDEX

 

SQL> create index lobb_ix02 on lob_1(id,data);

create index lobb_ix02 on lob_1(id,data)

                                   *

ERROR at line 1:

ORA-02327: cannot create index on expression with datatype LOB

 

 

SQL> create index lob_ix02 on lob_1(data);

create index lob_ix02 on lob_1(data)

                               *

ERROR at line 1:

ORA-02327: cannot create index on expression with datatype LOB

 

위의 과정은 LOB Data 에 대해 Index 구성 컬럼으로 사용하지 못한다는 것을 보여준 예시이다. –라기보다 LOB INDEX 가 무엇인지 테스트하던 과정이였다. -

 

B.     INDEX / INDEX PARTITION

INDEX 에 대한 설명은 생략한다.

 

INDEX PARTITION 에는 Global Partitioned Index Local Partitioned Index 가 있다. 구분의 기준은 Partition Key Column 과 동일하게 나눠진 여부로 판단한다.

/*+ 생성해보고 서브타입확인 */

 

C.     TABLE / TABLE PARTITION

Table 에 대한 설명은 생략한다.

 

Partitioned Table 은 세그먼트가 분할된 테이블을 말한다. 분할에 사용되는 정보입력은 Value 이며 이는 Hash / Range / List 등으로 나뉘어진다.

 

D.     NESTED TABLE

간단히 이야기 해 Table 구조 안에 또다른 Table 구조를 볼 수 있는 경우이다.

 

SQL> create or replace type nested_table as table of number;

  2  /

 

Type created.

 

SQL> create table id(

  2  id1 number,

  3  id2 nested_table)

  4  nested table id2 store as id2_table;

 

Table created.

 

SQL> desc id

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 ID1                                                NUMBER

 ID2                                                NESTED_TABLE

 

SQL> insert into id

  2  values(1,nested_table(2,3,4,5));

 

1 row created.

 

SQL> select * from id;

 

       ID1 ID2

---------- ----------------------------------------

         1 NESTED_TABLE(2, 3, 4, 5)

 

E.     ROLLBACK

8i Rollback Segment 를 말한다. 9i Undo Table Space TYPE2 UNDO 에 속한다.

 

F.      CLUSTER

Partitiioned Table 이 나오기 전 조인에 대해 Clustering Factor 를 높이기 위한 방안이었다.

 

G.     TYPE2 UNDO

TYPE2 UNDO UNDO Segment 이다. 이는 DBA_SEGMENTS.TABLESPACE_NAME 을 보면 알 수 있다.

 

SQL> ed

Wrote file afiedt.buf

 

  1  SELECT SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME

  2  FROM DBA_SEGMENTS

  3* WHERE SEGMENT_TYPE = 'TYPE2 UNDO'

SQL> /

 

SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME

-------------------- ------------------ ------------------------------

_SYSSMU1_1660423497$ TYPE2 UNDO         UNDOTBS1

_SYSSMU2_3372729673$ TYPE2 UNDO         UNDOTBS1

_SYSSMU3_2464759297$ TYPE2 UNDO         UNDOTBS1

_SYSSMU4_2381026098$ TYPE2 UNDO         UNDOTBS1

_SYSSMU5_684390363$  TYPE2 UNDO         UNDOTBS1

_SYSSMU6_2756300678$ TYPE2 UNDO         UNDOTBS1

_SYSSMU7_34240122$   TYPE2 UNDO         UNDOTBS1

_SYSSMU8_2965297914$ TYPE2 UNDO         UNDOTBS1

_SYSSMU9_783869137$  TYPE2 UNDO         UNDOTBS1

_SYSSMU10_1385731836 TYPE2 UNDO         UNDOTBS1

$

 

SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME

-------------------- ------------------ ------------------------------

 

 

10 rows selected.

 

SQL> show parameter undo

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS1