본문 바로가기

IT관련

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

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

이중에서 아래는 Hash Partition + Range 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 range (sales_no) subpartition template
(
  subpartition S1 values less than (3),
  subpartition S2 values less than (5),
  subpartition S3 values less than (maxvalue)
)
(
  partition SALES_P1, 
  partition SALES_P2,
  partition SALES_P3,
  partition SALES_P4
);

 

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

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

 

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

 

 

서브파티션 정보를 조회할 때는 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 키워드를 테이블 뒤에 붙여서 사용하면 됩니다.

 

 

Hash 파티션에서 이름지정을 생략하면 더 간단하게 생성 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 range (sales_no) subpartition template
(
  subpartition S1 values less than (3),
  subpartition S2 values less than (5),
  subpartition S3 values less than (maxvalue)
)
partitions 4;

 

Hash-Range 파티션의 경우 서브파티션명을 지정했더라도, 파티션명과 서브파티션명 모두 Oracle DBMS 에의해 자동으로 정해집니다.

 

 

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