개발/DB

[오라클(oracle)] range 파티션(partition) 알아보기

Mr.mandu. 2019. 10. 28. 23:41

안녕하세요.

지난 포스팅에서는 파티셔닝에 대한 간략한 개념을 포스팅하였습니다.

[개발/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을 비롯하여

복합 파티션의 종류까지 알아볼 계획이었으나 포스팅이 길어져서

다음 포스팅에 간략한 설명과 차이점을 알아보겠습니다.

모두 고생하세요.