본문 바로가기

IT관련

오라클 복합파티션(Composite Partition) Hash + Hash 샘플 (11g ~ )

오라클은 Range, List, Hash 파티션을 지원하고, 이들간의 다양한 조합을 지원합니다.

이중에서 아래는 Hash Partition + Hash Sub Partition 샘플입니다.

 


create table SALES (
  sales_no       number,
  sale_year      number,
  sale_month     number,
  sale_day       number,
  customer_name  varchar2(30),
  birth_date     date,
  price          number,
  state          varchar2(2)
)
partition by hash (birth_date)
subpartition by hash (sales_no) subpartition template
(
  subpartition S1, 
  subpartition S2,
  subpartition S3,
  subpartition S4
)
(
  partition SALES_P1, 
  partition SALES_P2,
  partition SALES_P3,
  partition SALES_P4
);

 

위 스크립트에서는 birth_date 컬럼을 파티션키로 하는 Hash 파티션을 메인 파티션으로 만들고,

그 파티션들을 다시 sales_no 컬럼을 서브파티션키로 하는 Hash 서브파티션으로 만들어 복합파티션을 구성하였습니다.

 

서브파티션명은 "메인 파티션명 + 지정한 서브파티션명" 과 같이 파티션이름을 붙여서 만들어집니다.

 

 

서브파티션 정보를 조회할 때는 ALL_TAB_SUBPARTITIONS 딕셔너리뷰에서 조회하면 됩니다.

 


set linesize 200
col table_owner for a20
col table_name for a25
col partition_name for a25
col subpartition_name for a25
break on table_owner on table_name on partition_name
  
select table_owner, table_name, partition_name, subpartition_name, num_rows, tablespace_name
from ALL_TAB_SUBPARTITIONS
where table_name = 'SALES'
order by 1,2,3,4;

 

위 샘플에서는 각 파티션에 Tablespace 를 따로 지정하지 않아서 디폴트 테이블스페이스인 USERS 에 만들어졌습니다.

Tablespace 를 파티션별로 따로 지정할 수도 있습니다. 

 

특정 파티션만 조회하고자하는 경우에는 partion 또는 subpartition 키워드를 테이블 뒤에 붙여서 사용하면 됩니다.

 

 

위에서는 파티션명과 서브파티션명을 지정했지만,

아래와 같이 이름지정을 생략하면 아래와 같이 간단하게 생성 SQL문을 만들 수도 있습니다.

 


create table SALES (
  sales_no       number,
  sale_year      number,
  sale_month     number,
  sale_day       number,
  customer_name  varchar2(30),
  birth_date     date,
  price          number,
  state          varchar2(2)
)
partition by hash (birth_date)
subpartition by hash (sales_no) subpartitions 4
partitions 4;

 

subpartition template (...) 구문 대신에 subpartitions 4 라고 지정했습니다.

 

이렇게 파티션이름 지정을 따로 하지 않는 경우, 파티션명과 서브파티션명은 Oracle DBMS 에의해 자동으로 정해집니다.

 

 

▶ 오라클 파티션 종합 페이지 바로가기