h1.
01 테이블파티셔닝
h5.버전별 지원
파티션유형 | 단일파티셔닝 | 결합파티셔닝 | ||
해시 | 리스트 | Range | ||
Range | 8 이상 | 8i 이상 | 9i 이상 | 11g 이상 |
해시 | 8i 이상 | X | X | X |
리스트 | 9i 이상 | 11g 이상 | 11g 이상 | 11g 이상 |
-- 파티션 뷰를 정의할 때 시용할 Base 테이블을 만든다.
create table p1 as select * from scott.emp where deptno = 10;
create table p2 as select * from scott.emp where deptno = 20;
create table p3 as select * from scott.emp where deptno = 30;
-- 체크 제약을 반드시 설정해야 함
alter table p1 add constraint c_deptno_10 check (deptno < 20);
alter table p2 add constraint c_deptno_20 check (deptno >= 20 AND deptno < 30) ;
alter table p3 add constraint c_deptno_30 check(deptno >= 30 AND deptno < 40) ;
create index p1_empno_idx on p1 (empno);
create index p2_empno_idx on p2 (empno);
create index p3_empno_idx on p3 (empno) ;
analyze table pl compute statistics;
analyze table p2 compute statistics;
analyze table p3 compute statistics;
-- 파티션 뷰를 정의한다.
create or replace view partition view
as
select * from pl
union a11
select * from p2
uhion a11
select * from p3 ;
create table partition table
partition by range(deptno) (
partition p1 values less than(20)
,partition p2 values less than(30)
,partition p3 values less than(40)
as
select * from emp
create index ptable_empno_idx on partition_table(empno) LOCAL;
create table 주문 ( 주문번호 nurnber, 주문일자 varchar2(8) , 고객 id varchar2 (5) , ... )
partition by range(주문일자) (
partition p2009_q1 values less than ('20090401')
, partition p2009_q2 values less than ('20090701')
, partition p2009_q3 values less than ('20091001')
, partition p2009_q4 values less than ('20100101')
, partition p2010_q4 values less than ('20100401')
, partition p9999_mx values less than ( MAXVALUE ) -> 주문일자 >= ' 20100401 '
);
create table 고객 ( 고객 id varchar2 (5), 고객명 varchar2 (10) , ....)
partition by hash(고객 id) partitions 4 ;
create table 인터넷매물 ( 물건코드 varchar2 (5) , 지역분류 varchar2 (4) ,....)
partition by list( 지 역분류) (
partition p_지역1 values ( '서울' )
, partition p_지역2 values ( '경기', '인천')
, partition p_지역3 values ( '부산', '대구' , '대전' , '광주')
, partition p_기타 values (DEFAULT) -> 기타 지역
);
(5) 결합파티셔닝
h5.Range + 해시 결합 파티셔닝
create table 주문 ( 주문변호 number, 주문일자 varchar2(8) , 고객id varchar2 (5) , ...)
partition by range(주문일자)
subpartition by hash(고객id) subpartitions 8
( partition p2009_q1 values less than( '20090401' )
, partition p2009_q2 values less than( '20090701' )
, partition p2009_q3 values less than( '20091001' )
, partition p2009_q4 values less than( '20100101' )
, partition p2010_q1 values less than( '20100401' )
, partition p9999_mx values less than( 'MAXVALUE) )
h5.Range + 리스트 결합파티셔닝
create tab1e 판매 ( 판매점 varchar2(10) , 판매일자 varchar2(8), ...)
partition by range( 판매일자)
subpartition by 1ist(판매점)
subpartition template
( subpartition lst_01 va1ues ('남지점' ,'강북지점' . .강서지점' . '강동지점')
, subpartition lst_02 va1ues ('부산지점' , '대전지점')
, subpartition lst 03 va1ues ('인천지점' , '제주지점' , .의정부지점')
, subpartition lst_99 va1ues ( DEFAULT ) )
( partition p2009 q1 va1ues 1ess than( ' 20090401 ' )
, partition p2009 q2 va1ues 1ess than( ' 20090701 ' )
, partition p2009 q3 va1ues 1ess than( ' 20091001 ' )
, partition p2009 q4 va1ues 1ess than( ' 20100101 ' ) );
h5.기타결합파티셔닝
h3.(6) 11g에 추가된 파티션 유형
h5.Reference 파티셔닝
h5.Interval 파티셔닝
create table 주문일자 (주문변호 number, 주문일시 date, ... )
partition by range(주문일시) INTERVAL (NUMTOYMINTERVAL ,(1, 'MONTH' )
(
, ....
, partition p200908 values less than(to_date( '2009/09/01' , 'yyyy/mm/dd'))
, partition p200909 values less than(to_date( '2009/10/01' , 'yyyy/mm/dd'))
, partition p200910 values less than(to_date( '2009/11/01' , 'yyyy/mm/dd'))
create table 고객 (고객번호 number,고객명, VARCHAR2(20) , ... )
partition by range(고객번호)I INTERVAL (100000)
( partition p_cust1 values less than ( 100001 )
, partition p_cust2 values less than ( 200001 )
, partition p_cust3 values less than ( 300001 )