[오라클(oracle)] range 파티션(partition) 알아보기
안녕하세요.
지난 포스팅에서는 파티셔닝에 대한 간략한 개념을 포스팅하였습니다.
[개발/DB] - [오라클(oracle)] 파티션 테이블을 개념(테이블 파티셔닝)
그리고 오늘은 파티션을 실제 실습하는 포스팅을 하려고 합니다.
실습은 Range PARTITION(범위 파티셔닝)을 실습하였습니다.
사용하는 쿼리를 적으며 어떻게 쓰는지 경험 및 개념만 알아둔다면
다른 파티션들의 사용법은 약간이 쿼리 차이가 있을뿐 응용할 수 있을것 같습니다.
Range PARTITION(범위 파티셔닝)
지금부터 쿼리는 파란 네모박스에 기재하겠습니다.
현재 테이블 스페이스를 알아보겠습니다.
참고로 저는 system 계정으로 접속 했습니다.
<현재 테이블스페이스 확인>
select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;
<결과>
SYSTEM을 비롯하여 여러가지 테이블스페이스가 존재합니다.
디렉토리도 함께 나와있는데 실제 디렐토리에가면 해당 파일을 확인할 수 있습니다.
<테이블스페이스 생성 쿼리>
create tablespace ts_t1 datafile 'C:\APP\LEE\ORADATA\ORCL\ts_t101.DBF' size 10M autoextend on;
create tablespace ts_t2 datafile 'C:\APP\LEE\ORADATA\ORCL\ts_t102.DBF' size 10M autoextend on;
create tablespace ts_t3 datafile 'C:\APP\LEE\ORADATA\ORCL\ts_t103.DBF' size 10M autoextend on;
create tablespace ts_t4 datafile 'C:\APP\LEE\ORADATA\ORCL\ts_t104.DBF' size 10M autoextend on;
create tablespace ts_t5 datafile 'C:\APP\LEE\ORADATA\ORCL\ts_t105.DBF' size 10M autoextend on;
<결과>
쿼리로부터 실행된 결과를 확인할 수 있습니다.
테이블을 생성하겠습니다.
<테이블생성 쿼리>
create table panmae
(
pdate varchar2(8),
pcode number(3),
pqty number(5)
)
partition by range(pdate)
(
partition q1 values less than ('20100401') tablespace ts_t1,
partition q2 values less than ('20100701') tablespace ts_t2,
partition q3 values less than ('20101001') tablespace ts_t3,
partition q4 values less than ('20110101') tablespace ts_t4,
partition q5 values less than (maxvalue) tablespace ts_t5
);
분기별로 데이터를 담기위하여 1·2·3월 / 4·5·6월 / 7·8·9월 / 10·11·12 / max로 구분하였습니다.
테이블을 생성할때 range partition을 쓴다는 쿼리와 범위는 나눠주는것이 중요합니다.
바로 데이터를 입력해보도록 하겠습니다.
insert into panmae values('20100101', 100, 20);
insert into panmae values('20100422', 100, 20);
insert into panmae values('20109023', 100, 20);
<결과>
모르고 첫번째 쿼리를 두번 실행시켰네요.
데이터가 들어온 것을 확인할 수 있습니다.
그리고 q4 파티션에 들어있는 데이터를 확인해 보겠습니다.
select * from panmae partition(q4);
<결과>
범위에 맞게 데이터가 들어와있는 것을 확인할 수 있습니다.
바로 위의 그림은 q1 테이블스페이스에 범위에 맞지 않는 데이터를 insert 시켰을때의 알림입니다.
현재 추가된 파티션을 확인하는 방법입니다.
select * from dba_tab_partitions where table_name='PANMAE';
그리고
q1, q2, q3, q4 파티션에 존재하는 데이터를 update하게 된다면
각 범위에 맞게 데이터들이 파티션으로 이동합니다.
만약 q4의 데이터를 20100202 이런식으로 2월로 변경하게되면 이 데이터는 q1에서 확인 할 수 있습니다.
현재는 3개월을 기준으로 파티션을 만들어놨습니다.
이를 더욱 쪼개어 12달로 만들수도 있습니다.
split partition을 사용하여 변경할 수 있습니다.
간단히 q1만 쪼개는 실습을 해보겠습니다.
먼저 새로운 파티션을 만들어보도록 하겠습니다.
create tablespace ts_t1_1 datafile 'C:\APP\LEE\ORADATA\ORCL\ts_t101_1.DBF' size 10M autoextend on;
이제 기존 panmae 테이블의 파티션을 쪼개보겠습니다.
그리고 데이터를 추가하고 조회해보겠습니다.
alter table panmae split partition q1
at ('20100201')
into
(
partition q1 tablespace ts_t1,
partition q1_1 tablespace ts_t1_1
);
insert into panmae values('20100301', 100, 20);
select * from panmae partition(q1_1);
위의 쿼리에서 20100201-> 즉, 2월을 기준으로 나눈다는 의미 입니다.
그러므로 3월달의 데이터는 ts_t1_1 파티션에 존재하게 됩니다.
<결과>
추가로 파티션 삭제 방법 입니다.
alter table panmae drop partition q1;
원래의 목적은 Hash Partition, List Partition을 비롯하여
복합 파티션의 종류까지 알아볼 계획이었으나 포스팅이 길어져서
다음 포스팅에 간략한 설명과 차이점을 알아보겠습니다.
모두 고생하세요.