본문 바로가기
DATABASE/Oracle

[Oracle] 파티션(Partition) 2 - Range Partition, Interval Partition

by DANEW 2023. 8. 4.

Intro

안녕하세요.

초보 DBA 다뉴 입니다.

 

저번에 알아봤던 파티션이 무엇인지 알아보았는데요.

해당 내용이 궁금하신분들은 아래의 링크를 참고해주세요.

 

[Oracle] 파티션 (Partition) 1 - 테이블 파티션 이란?

Intro 안녕하세요. 초보 DBA 다뉴 입니다. 최근 Oracle업무에 Table Partition 을 사용할 일이 있었습니다. 처음 사용해 보는거라 약간 헤매기도 했는데요. 이것저것 공부한 내용을 정리한 내용과 새롭게

da-new.tistory.com

오늘은 그 중 Range Partition, Interval Partition 에 대해서 알아보도록 하겠습니다.

제일 많이쓰이는 파티션이니만큼 알아두면 좋을 것 같네요.


파티션의 종류

Range Partition

가장 일반적으로 사용되는 파티션의 한 종류입니다.

파티션 키 값을 범위로 분할하며, 주로 날짜 데이터 등의 범위로 나누어 파티션을 분할합니다.

 

Range Partition Table 생성 쿼리는 아래와 같습니다.

create table [TableName](
  [Partition Key Column Name] varchar2(8) not null,
  [Column Name] varchar2(1000)
)
partition by range([Partition Key Column Name])
(
  partition [Partition Name 1] values less than ([Partition Key Column Max Value 1]),
  partition [Partition Name 2] values less than ([Partition Key Column Max Value 2]),
  partition [Partition Name 3] values less than ([Partition Key Column Max Value 3]),
  partition [Partition Name 4] values less than ([Partition Key Column Max Value 4])
)

Range Partition 의 Partition Key는 하나의 컬럼이나 여러 컬럼으로 지정 할 수 있습니다.

예시) Range Partition Table Create

위의 예시 쿼리를 보면 INS_DATE 컬럼을 Partition Key값으로 3개의 파티션을 만들었습니다.

각 파티션의 값의 분배는 아래와 같게 됩니다.

PT_NAME_1 : INS_DATE < '20220201'

PT_NAME_2 : INS_DATE >= '20220201' and INS_DATE < '20220301'

PT_NAME_3 : INS_DATE >= '20220301' and INS_DATE < '20220401'

 

이렇게 생성한 Range Partition 은 20220401 이상의 Key값이 Insert될 경우 오류를 반환하며,

해당 경우 Insert 될 값을 미리 확인하여 새로운 파티션을 추가해야 합니다.

반응형

Interval Partition

Range Partition을 보완한 방식인 Interval Partition 입니다.

Range Partition은 미리 해당 범위의 파티션이 생성되어 있지 않은 경우 Insert 과정에서 오류가 나며, 직접 파티션을 생성해줘야 하는데요.

Interval Partition은 파티션 범위를 미리 지정함으로써, 파티션 생성을 해당 범위에 맞게 오라클이 직접 해주는 방식입니다.

 

Interval Partition Table 생성 쿼리는 아래와 같습니다.

create table [TableName](
  [Partition Key Column Name] date[or number] not null,
  [Column Name] varchar2(1000)
)
partition by range([Partition Key Column Name])
interval([Interval Range])
(
  partition [Partition Name 1] values less than ([Partition Key Column Max Value 1]),
  partition [Partition Name 2] values less than ([Partition Key Column Max Value 2]),
  partition [Partition Name 3] values less than ([Partition Key Column Max Value 3]),
  partition [Partition Name 4] values less than ([Partition Key Column Max Value 4])
)

Interval Partition 의 Partition Key는 하나의 컬럼만 지정가능하며, Number / Date 두가지 DataType만 사용이 가능합니다.

예시) Interval Partition Table Create

위의 예시를 보면,

Number Type의 경우 파티션의 최대값 20 이상의 데이터가 Insert 될 경우 해당 데이터가 포함되는 10만큼의 범위를 가지는 새로운 파티션을 오라클에서 생성해 줍니다.

 

Date Type의 경우 numtoyminterval / numtodsinterval 함수를 통하여, date type의 데이터의 partition 범위를 정하게됩니다.

파티션의 최대값인 2022-09-01이상의 데이터가 Insert 될 경우 1달 단위의 새로운 파티션을 오라클에서 생성해줍니다.

 

numtoyminterval(n, 'month' / 'year') , numtodsinterval(n, 'day') 등 으로 사용합니다.


Outro

간략하게 Range Partition, Interval Partition 에 대해서 알아보았는데요

대체로 가장 많이 쓰이는 파티션입니다.

주로 날짜별로 로그를 저장한다던지, 구매내역 같은 내용 혹은 결산 정보 등의 일정날짜 범위 별로 사용되는 데이터 들에게 사용될때 편리합니다.

 

해당 파티션을을 사용하며 파티션 인덱스(partition index)에 대해서도 함께 공부했었는데요.

파티션들에 대해 다 알아보고 인덱스에 대한 이야기도 해보도록 하겠습니다.

 

감사합니다.

반응형