Range Partition 은 범위로 구분되는 파티션 테이블 입니다.
범위(Range)에는 숫자, 날짜, 문자가 모두 가능합니다.
1) 파티션키 컬럼이 숫자 타입인 경우
create table SALES (
sales_no number,
sale_year number,
sale_month number,
sale_day number,
customer_name varchar2(30),
birth_date date,
price number
)
partition by range (sales_no)
(
partition SALES_P1 values less than (3),
partition SALES_P2 values less than (5),
partition SALES_P3 values less than (maxvalue)
);
number 타입인 sales_no 컬럼을 파티션키로 사용해서 3개의 파티션을 만듭니다.
sales_no 값이 3보다 작은 것은 SALES_P1 파티션으로 들어가고,
3 보다 크거나 같고 5 보다 작은 것은 SALES_P2 파티션으로 들어갑니다.
5 보다 큰 값들은 maxvalue 라고 지정된 SALES_P3 파티션으로 들어갑니다.
이제 만들어진 파티션에 데이터를 넣어 보겠습니다.
insert into SALES values (1, 2004, 05, 02, 'Sophia', to_date('19740502','yyyymmdd'), 65000);
insert into SALES values (2, 2005, 03, 02, 'Emily', to_date('19750302','yyyymmdd'), 23000);
insert into SALES values (3, 2006, 08, 02, 'Olivia', to_date('19760802','yyyymmdd'), 34000);
insert into SALES values (4, 2007, 02, 02, 'Amelia', to_date('19770202','yyyymmdd'), 12000);
insert into SALES values (5, 2008, 04, 02, 'Chloe', to_date('19780402','yyyymmdd'), 55000);
파티션 테이블은 내부적으로 파티션으로 분할되어져서 저장되는 것일뿐, 논리적으로는 테이블과 똑같은 특성을 가집니다. 따라서 조회하는 방식은 일반 테이블 조회하는 것과 정확히 똑같습니다.
하지만, 특정 파티션에 있는 데이터만 조회하고 싶은 경우가 있겠죠?
그때는 아래와 같이 partition 키워드를 테이블 뒤에 붙여주고, 파티션 이름을 넣어주면 됩니다.
select * from 테이블명 partition ( 파티션명 );
SALES 테이블에 있는 5개의 데이터는 실제로는 3개의 파티션에 나뉘어 들어가 있는 것을 확인할 수 있습니다.
2) 파티션키 컬럼이 날짜 타입인 경우
create table SALES (
sales_no number,
sale_year number,
sale_month number,
sale_day number,
customer_name varchar2(30),
birth_date date,
price number
)
partition by range (birth_date)
(
partition SALES_P1 values less than (to_date('1975/01/01','yyyy/mm/dd')),
partition SALES_P2 values less than (to_date('1978/01/01','yyyy/mm/dd')),
partition SALES_P3 values less than (maxvalue)
);
Range 파티션을 쓰는 경우 대부분 날짜 타입의 컬럼을 많이 사용합니다.
년도별 또는 월별로 파티션을 만들고, 오래된 파티션은 압축을 해서 보관하거나 백업받고 해당 파티션만 삭제하는 등의 작업을 하죠.
3) 파티션키 컬럼이 문자 타입인 경우
create table SALES (
sales_no number,
sale_year number,
sale_month number,
sale_day number,
customer_name varchar2(30),
birth_date date,
price number
)
partition by range (customer_name)
(
partition SALES_P1 values less than ('G'),
partition SALES_P2 values less than ('M'),
partition SALES_P3 values less than (maxvalue)
);
마지막 파티션은 항상 maxvalue 라는 키워드를 사용해야 하는 것은 아닙니다.
들어오는 데이터가 지정된 Range 안에 모두 들어온다면 굳이 위의 경우, SALES_P1, SALES_P2 파티션만 만들어도 아무 상관 없습니다.
'IT관련' 카테고리의 다른 글
오라클 Hash Partition (해쉬함수에 의한 파티션 테이블) (0) | 2019.06.18 |
---|---|
오라클 List Partition (특정한 값으로 구분되는 파티션 테이블) (1) | 2019.06.18 |
오라클 파티션 종합 페이지 (Oracle Partition Main Page) (0) | 2019.06.18 |
(오라클 DB 파라메타) deferred_segment_creation (0) | 2019.06.17 |
오라클 DB 권고 파라메타 (Oracle DB Initialization Parameter) (0) | 2019.06.14 |