2014년 1월 2일 목요일

Creating Tables with LOB Columns[재직자무료교육/프로그래머교육/구로디지털IT교육,오라클/자바/닷넷/C#/iOS/안드로이드/아이폰교육]

Creating Tables with LOB Columns[재직자무료교육/프로그래머교육/구로디지털IT교육,오라클/자바/닷넷/C#/iOS/안드로이드/아이폰교육]

www.onjprogramming.co.kr에 오시면 보다 다양한 강좌를 보실 수 있습니다.
 
 
Creating Tables with LOB Columns
 
테이블을 만들 때 하나 또는 여러 개의 LOB 컬럼을 만들 수가 있습니다.(LONG, LONG RAW는 테이블당 한 개만 지정 가능 했습니다.)
 
LOB 컬럼에 데이터를 저장 할 때 in-line 또는 out-of-line에서 저장 하느냐에 따라 다양한 옵션이 존재 합니다. 만약 in-line에서 데이터를 저장하는 것이 가능 하기 위해서는 4K 미만의 데이터만 저장이 가능 하다는 것을 명심해야 합니다.
 
LOB 컬럼을 포함하고 있는 테이블을 만들면 오라클은 각각의 LOB 컬럼에 대해 LOB Segment, LOB Index를 생성 합니다. Default LOB Segment LOB Index TABLE이 있는 테이블 스페이스에 만들어 집니다. 물론 별도의 테이블 스페이스를 지정 하는 것도 가능 합니다.
 
LOB Segment의 기본적인 이름은 SYS_LOBXXX(XXX 16진수)이며 LOB Index의 이름은 SYS_ILXXX(XXX16진수) 입니다. 이때 Segment Index XXX 값은 일치 합니다.
 
아래에 LOB 컬럼을 가지는 테이블을 만들어 보았습니다.
 
SQL> CREATE TABLE test_lobtable (
  2      id  NUMBER
  3    , xml_file CLOB
  4    , image    BLOB
  5    , log_file BFILE
  6  );
 
테이블이 생성되었습니다.
 
각각의 LOB 컬럼에 대해 오라클은 묵시적으로 LOB Segment  LOB Index를 만드는데 이러한 정보는 View를 통해 확인 가능 합니다.( DBA_LOBS, ALL_LOBS, or USER_LOBS)
 
SQL> select table_name "TABLE" ,
  2         column_name " COLUMN",
  3         segment_name "SEGMENT",
  4         index_name "INDEX"
  5  from user_lobs
  6  where table_name = UPPER('test_lobtable');
 
TABLE
------------------------------
 COLUMN
----------------------------------------------------------------------------
 
SEGMENT                        INDEX
------------------------------ ------------------------------
TEST_LOBTABLE
XML_FILE
SYS_LOB0000030637C00002$$      SYS_IL0000030637C00002$$
 
TEST_LOBTABLE
IMAGE
SYS_LOB0000030637C00003$$      SYS_IL0000030637C00003$$
 
또한 USER_SEGMENTS 라는 VIEW를 통해 다음처럼 확인 하는 것도 가능 합니다.
 
SQL> col segment format a25
SQL> select segment_name "SEGMENT",
  2         segment_type "TYPE",
  3         tablespace_name "TABLESPACE"
  4  from user_segments
  5  where segment_name like 'SYS_LOB%'
  6  or segment_name like 'SYS_IL%';
 
SEGMENT                   TYPE               TABLESPACE
------------------------- ------------------ -----------------------
SYS_IL0000030407C00009$$  LOBINDEX           SYSTEM
SYS_IL0000030416C00002$$  LOBINDEX           SYSTEM
SYS_IL0000030637C00002$$  LOBINDEX           SYSTEM
SYS_IL0000030637C00003$$  LOBINDEX           SYSTEM
SYS_LOB0000030407C00009$$ LOBSEGMENT         SYSTEM
SYS_LOB0000030416C00002$$ LOBSEGMENT         SYSTEM
SYS_LOB0000030637C00002$$ LOBSEGMENT         SYSTEM
SYS_LOB0000030637C00003$$ LOBSEGMENT         SYSTEM
 
8 개의 행이 선택되었습니다.
 
 
------------------------
LOB 테이블 만들기 예
------------------------
 
 
아래는 기본 문법 입니다.
 
    (column list)
    [physical attributes]
    [storage clause]
    [LOB (<lobcol1> [, <lobcol2>...])
        STORE AS
            [<lob_segment_name>]
            (
                [TABLESPACE <tablespace_name>]
                [{ENABLE | DISABLE} STORAGE IN ROW]
                [CHUNK <chunk_size>]
                [PCTVERSION <version_number>]
                [ { CACHE | NO CACHE [{LOGGING | NOLOGGING}]
                          | CACHE READS [{LOGGING | NOLOGGING}]
                  }
                ]
                [<storage_clause_for_LOB_segment>]
                [INDEX [<lob_index_name>] [physical attributes] [<storage_for_LOB_index>] ]
            )
    ]
    [LOB (<lobcol1> [, <lobcol2>...]) ... ]

 
 
[]
SQL>conn / as sysdba
SQL> create tablespace lob_data
  2  datafile 'c:\oracle\oradata\wink\lob_data1.dbf'
  3  size 500m
  4  uniform size 8m;
 
테이블 영역이 생성되었습니다.
 
SQL>conn scott/tiger
SQL>CREATE TABLE test_lobtable (
      id  NUMBER ,
      xml_file CLOB ,
      image    BLOB ,
      log_file BFILE
)
LOB (xml_file)
    STORE AS xml_file_lob_seg (
        TABLESPACE lob_data
        CHUNK 4096
        CACHE
        STORAGE (MINEXTENTS 2)
        INDEX xml_file_lob_idx (
            TABLESPACE lob_index
            STORAGE (MAXEXTENTS UNLIMITED)
        )
    )
LOB (image)
    STORE AS image_lob_seg (
        TABLESPACE lob_data
        ENABLE STORAGE IN ROW
        CHUNK 4096
        CACHE
        STORAGE (MINEXTENTS 2)
        INDEX image_lob_idx (
            TABLESPACE lob_index
        )
    )
 
테이블이 생성되었습니다.
 
user_lobs user_segments 뷰를 통해 결과를 확인 합니다.
 
SELECT
    table_name "Table",
   column_name "Column",
   segment_name "Segment"
   index_name "Index"
FROM user_lobs
WHERE table_name = 'TEST_LOBTABLE';
 
 
Table          Column    Segment           Index
-------------- --------- ----------------- -----------------
TEST_LOBTABLE  XML_FILE  XML_FILE_LOB_SEG  XML_FILE_LOB_IDX
TEST_LOBTABLE  IMAGE     IMAGE_LOB_SEG     IMAGE_LOB_IDX
 
 
 
SELECT
    segment_name "Segment"
  , segment_type "Type"
  , tablespace_name "Tablespace"
FROM user_segments
WHERE segment_name like 'XML_%'
   OR segment_name like 'IMAGE_%'
ORDER BY segment_name DESC;
 
 
Segment            TS Type      Tablespace
------------------ ------------ -----------
XML_FILE_LOB_SEG   LOBSEGMENT   LOB_DATA
XML_FILE_LOB_IDX   LOBINDEX       LOB_DATA
IMAGE_LOB_SEG      LOBSEGMENT   LOB_DATA
IMAGE_LOB_IDX      LOBINDEX       LOB_DATA
 
 
  • JAVA
  • ORACLE
  • iPhone/Android
  • .NET
  • 표준웹/HTML5
  • 채용/취업무료교육
  • 초보자(재학생)코스

  • 댓글 없음:

    댓글 쓰기