프린트 하기

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.10.0.0

 

방법 : 오라클 19c 인터벌 파티션 테이블 생성

오라클 19c에서 인터벌 파티션 테이블을 생성하는 방법에 대해 설명함

먼저 7번 라인까지는 일반 파티션 테이블을 만드는것과 다르지 않음

하지만 8번 라인 interval 부분에 numtodsinterval 이 존재함

이 곳에는 'DAY', 'HOUR', 'MINUTE', 'SECOND' 이렇게 4개로 지정이 가능함

예를들어 하루 간격으로 파티션을 생성하고 싶은 경우 아래와 같이 작성하면됨

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> 
create table interval_test
(
date1 date,
col number
)
partition by range (date1)
interval (numtodsinterval(1'day')) -- 하루 간격으로 파티션 생성
(
  -- 초기 파티션 생성
  partition p_init values less than (to_date('2023/12/02''yyyy/mm/dd')) -- 초기 파티션 범위 설정(내일날짜 입력)
)
;

 

 

위 쿼리로 테이블을 생성하게 되면 초기 파티션은 P_INIT 하나만 존재함

이 파티션의 high_value는 20203년 12월 02일이기 때문에 2023년 12월 01일이나 그 이전데이터만 들어올 수 있음

파티션 테이블 조회

1
2
3
4
5
6
7
8
9
10
11
12
SQL>
set lines 200 pages 1000
col table_name for a15
col partition_name for a15
col high_value for a80
select table_name, partition_name, high_value
from dba_tab_partitions
where table_name = 'INTERVAL_TEST';
 
TABLE_NAME      PARTITION_NAME  HIGH_VALUE
--------------- --------------- --------------------------------------------------------------------------------
INTERVAL_TEST   P_INIT          TO_DATE(' 2023-12-02 00:00:00''SYYYY-MM-DD HH24:MI:SS''NLS_CALENDAR=GREGORIA

 

 

그리고 이 상태에서 기존 파티션에 들어갈수 없는 신규 데이터가 insert 될때 새로운 파티션이 생성됨

신규 데이터 삽입

1
2
3
SQL> insert into interval_test values (to_date('2023/12/02''yyyy/mm/dd'), 1);
 
1 row created.

(commit 하지 않은 상태)

 

 

파티션 테이블 조회

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> 
set lines 200 pages 1000
col table_name for a15
col partition_name for a15
col high_value for a80
select table_name, partition_name, high_value
from dba_tab_partitions
where table_name = 'INTERVAL_TEST';
 
TABLE_NAME      PARTITION_NAME  HIGH_VALUE
--------------- --------------- --------------------------------------------------------------------------------
INTERVAL_TEST   P_INIT          TO_DATE(' 2023-12-02 00:00:00''SYYYY-MM-DD HH24:MI:SS''NLS_CALENDAR=GREGORIA
INTERVAL_TEST   SYS_P688        TO_DATE(' 2023-12-03 00:00:00''SYYYY-MM-DD HH24:MI:SS''NLS_CALENDAR=GREGORIA

신규 파티션 SYS_P688이 생성됨

 

 

자동 파티션 추가 시 alert log 확인

1
2
3
$ vi alert.log
2023-12-08T10:40:06.358856+09:00
TABLE SYS.INTERVAL_TEST: ADDED INTERVAL PARTITION SYS_P688 (1VALUES LESS THAN (TO_DATE(' 2023-12-03 00:00:00''SYYYY-MM-DD HH24:MI:SS''NLS_CALENDAR=GREGORIAN'))

파티션이 추가 되었다는 메세지가 alert에 남음

 

 

참조 : https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/NUMTODSINTERVAL.html#GUID-5A7392A8-7976-4465-8839-A65EFF1A80B6

 

SQL Language Reference

 

docs.oracle.com