Oracle - 테이블 유형, 특성

Posted 05 22, 2012 14:34, Filed under: DataBase/Oracle


# 테이블 유형

오라클에는 다음과 같이 아홉 가지 테이블 유형이 존재한다.

    * 힙 구조 테이블(Heap organized table): 일반적인 표준 데이터베이스 테이블이다.
       데이터는 힙과 같은 방식으로 관리된다.
       데이터를 추가할 때 데이터에 맞는 세그먼트 중 첫 번째로 발견된 가용공간에 데이터를 저장하고, 데이터를 삭제하면 다음에 발생할 INSERT, UPDATE를 위해 재사용될 공간으로 반환한다.
       이런 구조적 특징을 나타내기 때문에 힙 구조 테이블이라고 부른다.
       힙(heap)은 일련의 저장공간이며, 임의적인 순서로 데이터를 사용한다.

    * 인덱스 구조 테이블(Index organized table): 테이블을 인덱스 구조로 저장하는 방식으로, 각 로우를 물리적 순서에 따라 저장한다.
       힙 구조 테이블은 크기에 맞는 임의의 공간에 저장하는 반면, 인덱스 구조 테이블은 기본 키(primary key)의 정렬된 순서로 저장한다.

    * 인덱스 클러스터 테이블(Index clustered table): 클러스터는 물리적으로 하나의 데이터베이스 블록에 하나 또는 여러 개의 테이블 집합들을 저장할 수 있으며, 동일한 클러스터 키 값을 갖는 모든 로우에 하나 또는 여러 개의 테이블 집합들을 저장할 수 있으며, 동일한 클러스터 키 값을 갖는 모든 로우를 물리적으로 근접하게 저장한다.
       이러한 구조를 통해 두 가지 장점을 얻을 수 있다.
       첫 번째는 테이블 대부분을 물리적으로 결합(join)하여 저장할 수 있다.
       일반적으로는 하나의 블록에는 하나의 테이블을 저장한다고 생각할 수 있지만, 클러스터 테이블은 여러 개 테이블의 데이터를 동일한 블록에 함께 저장한다.
       두 번째는 동일한 클러스터 키 값을 갖는 모든 데이터(가령, DEPNO=10)를 물리적을 함께 저장한다.
       데이터는 클러스터 키를 중심으로 묶여지고, 클러스터 키는 B*Tree 인덱스를 이용하여 생성된다.
    
    * 해시 클러스터 테이블(Hash clustered table) : 이 테이블은 인덱스 클러스터 테이블과 유사하지만, 데이터의 위치를 찾기 위해 클러스터 키에 대해 B*Tree 인덱스 구조를 사용하지 않고 클러스터 키값을 해시하여 데이터베이스 블록에 저장하는 방식을 사용하낟.
       그러므로 데이터 자체가 인덱스 역할을 하며, 이 테이블은 해시 키 값이 '=' 조건으로 사용되는 읽기 중심의 데이터에 효과적이다.

    * 정렬 해시 클러스터 테이블(Sorted hash clustered table): 인덱스 구조 테이블(IOT)과 해시 클러스터 테이블의 조합된 테이블 유형이며, 오라클 10g에 새롭게 추가되었다.
       데이터 로우는 고객번호로 해시 처리되고, 하나의 해시 키 안에서는 timestamp 등의 정렬된 순서로 저장되는 개념이다.
       예를 들어 선입선출 방식으로 처리되는 주문 접수 시스템에서는 정렬 해시 클러스터 테이블이 유용할 것이다.

    * 중첩 테이블(Nested table): 오라클에서 제공하는 객체-관리형 확장 기능의 일부분이다.
       부모/자식 관계의 테이블 구조를 시스템이 간단히 생성하고 관리하는 테이블 유형이다.
       SCOTT 스키마에 있는 EMP 테이블과 DEPT 테이블의 관계를 EMP 테이블이 중첩 테이블이 되도록 설계하는 방식이다.
       EMP 테이블은 DEPT 테이블의 자식 테이블이고, DEPT 테이블의 DEPTNO를 참조 키로 가진다.
       일반적인 EMP 테이블과 다른 점은 독립적(stand-alone)이지 않는 테이블이라는 것이다.
    
    * 임시 테이블(Temporary table): 임시 테이블은 하나의 트랜잭션, 또는 한 세션 동안 생성된 데이터를 임시로 저장한다.
       이 테이블은 현재 사용자의 임시 테이블스페이스에 필요한 만큼의 임시 익스텐트를 생성하여 사용한다.
       각 세션은 그 세션에 할당된 데이터만을 볼 수 있으며, 다른 세션에서 생성된 데이터는 전혀 볼 수 없다.

    * 객체 테이블(Object table): 객체 타입을 기반으로 생성되는 테이블이다.
       이 테이블은 각 로우마다 비객체 테이블(non-object table)에는 없는 시스템에서 생성된 REF(object identifier)와 같은 속성을 가지고 있다.
       객체 테이블은 힙 구조, 인덱스 구조, 임시 테이블의 특별한 유형이고, 중첩 테이블을 포함할 수 있는 테이블 유형이다.

    * External 테이블: 데이터를 데이터베이스 내부에 저장하지 않고, 운영체제가 관리하는 파일에 저장하여 관리하는 테이블 유형이다.
       External 테이블은 오라클 9i 이상 버전에서 제공되며, 데이터베이스 밖의 파일을 데이터베이스 안에 있는 일반적인 테이블처럼 조회할 수 있도록 한다.
       데이터베이스에 데이터를 가져오는 매우 유용한 수단이며, 실제로 매우 강력한 데이터 적재 도구다.
       더 나아가 오라클 10g에서는 언로드(unload) 방식을 제공하는 External 테이블을 소개하고 있으며, 이 방식은 데이터베이스 링크 없이 데이터베이스 간의 데이터 이동을 쉽게 처리할 수 있도록 한다.
       이 책의 15장 '데이터 로딩과 언로딩'에서 좀 더 세부적으로 살펴볼 것이다.

테이블의 유형과 상관없이 테이블의 일반적인 특성은 다음과 같다.

    * 하나의 테이블은 최대 1,000개의 컬럼을 가질 수 있다.
       그러나 특별하게 강제되는 필요성이 없는한 1,000개 컬럼으로 테이블을 구성하는 것은 좋지 않다.
       하나의 테이블은 1,000개보다 훨씬 적은 컬럼 수로 구성되는 것이 효과적이다.
       오라클은 내부적으로 254개 컬럼 이상인 로우는 분리해서 저장하고, 각 부분은 포인터로 연결하여 모든 컬럼의 요청 시 재조합한다.

    * 테이블은 최대 로우 수에 제한을 두지 않지만, 주변의 다른 제한들에 의해서 제약을 받는다.
       예를 들어 하나의 테이블스페이스는 파일을 최대 1,022개 가질 수 있다.
       오라클 10g 버전에서는 파일 크기의 제한을 넘어서는 새로운 BIGFILE 테이블스페이스를 제공하지만, 여전히 파일 개수에는 제한이 있다.
       하나의 파일 크기가 32GB라면, 하나의 테이블스페이스는 32,704GB(32GB*1,022 파일)까지 가능하다.
       이는 하나의 블록 크기가 16KB일 때 2,143,289,344블록임을 의미하며, 한 로우의 크기가 80~100바이트 정도일 때 한 블록당 160개의 로우를 저장하며, 테이블스페이스 전체로는 342,926,295,040개의 로우를 의미한다.
       파티션 테이블이라면 이 숫자를 쉽게 배가시킬 수 있다.
       예를 들어 1,024개의 해시 파티션으로 구성된 테이블을 생각해보자.
       이 테이블은 1024 * 342,926,295,040개의 로우를 포함할 수 있다.
       그러나 하나의 테이블에 351,156,526,120,960개의 모든 로우를 삽입하기 전에 다른 실질적인 제한들에 의해 제약을 받게 될 것이다.

    * 하나의 테이블은 컬럼의 순열(가능한 조합)만큼 인덱스를 생성할 수 있다.
       이 순열은 컬럼에 정의하는 함수의 순열을 포함하여 유일하게 조합되는 가능한 모든 순열을 의미한다.
       함수 기반 인덱스의 등장으로, 이론적으로는 인덱스의 개수에는 제한이 없다고 봐야 할 것이다.
       그러나 인덱스가 많으면 INSERT 시에 성능이 느려질 수 있기 때문에 실제로 운영되는 인덱스의 개수에는 제한이 발생할 수밖에 없다.

    * 하나의 데이터베이스에서 생성할 수 있는 테이블 개수에는 제한이 없다.
       그러나 이 특성도 다른 실질적인 제약 때문에 의미 있는 한계를 갖게 된다.
       생성과 관리를 할 수 없기 때문에 아마도 몇 천개라면 몰라도 몇 백만 개의 테이블을 생성하는 것은 불가능할 것이다.



출처 : 전문가를 위한 오라클 데이터베이스 아키텍처 - 토마스 카이트
※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
05 22, 2012 14:34 05 22, 2012 14:34


Trackback URL : http://develop.sunshiny.co.kr/trackback/769

Leave a comment

« Previous : 1 : ... 217 : 218 : 219 : 220 : 221 : 222 : 223 : 224 : 225 : ... 648 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. Generally I do not read post on bl... 레기읏룸 셔츠룸 차이. 레깅스룸 부엉이 01 24,
  2. Wonderful site. A lot of useful in... /427 01 23,
  3. 안녕하세요^^ 배그핵
  4. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  5. 정말 큰 도움이 되었습니다.. 감사합... 사랑은

Recent Trackbacks

  1. important link important link 25 01
  2. invoice printing and mailing services invoice printing and mailing services 25 01
  3. my review here my review here 25 01
  4. relocation services london relocation services london 25 01
  5. get redirected here get redirected here 24 01

Calendar

«   01 2020   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2823642 HIT
TODAY 6 HIT
YESTERDAY 501 HIT