문서유형ㅣ기술정보
분야ㅣ관리/환경설정
적용제품버전ㅣ7FS02PS
문서번호ㅣTADTI111
개요
본 문서에서는 파티션 테이블의 관리가 적절히 이루어지지 않을 때 필요한 조치 및 관리 방안에 대해 안내합니다.
참고
아래 내용은 일부 케이스 기반으로 작성된 것으로, 운영 환경과 상황에 따라 선택적으로 참고 부탁드립니다.
방법
SPLIT을 통한 파티션 분할
MAXVALUE 파티션에 데이터가 과도하게 쌓인 경우를 예시로 설명합니다.
참고
MAXVALUE가 아닌 파티션을 SPLIT 할 경우, LOCAL 인덱스와 GLOBAL 인덱스 모두 UNUSABLE 상태가 되기 때문에 인덱스 리빌드가 필요합니다.
단, LOCAL 인덱스는 SPLIT 된 파티션에 해당하는 인덱스만 UNUSABLE 상태로 변경되기 때문에, 해당 파티션 인덱스만 선택적으로 리빌드 할 수 있습니다.
| TABLE 구조 | ||||||||||||||||||||||||
| SQL> CREATE TABLE TIBERO.SALES ( sale_id NUMBER, sale_date DATE ) PARTITION BY RANGE (sale_date) ( PARTITION P_202501 VALUES LESS THAN (DATE '2025-02-01'), PARTITION P_202502 VALUES LESS THAN (DATE '2025-03-01'), PARTITION P_202503 VALUES LESS THAN (DATE '2025-04-01'), PARTITION P_MAX VALUES LESS THAN (MAXVALUE) ); | ||||||||||||||||||||||||
| 파티션별 Rows이며 P_MAX에 Rows가 타 파티션에 비해 지나치게 많음 | ||||||||||||||||||||||||
SQL> SELECT TABLE_NAME, PARTITION_NAME, BOUND, NUM_ROWS FROM USER_TAB_PARTITIONS
*NUM_ROWS 컬럼은 통계수집 기반으로 보여지는 값으로 실제 Row 수와 정확하게 일치하지 않을 수 있습니다. | ||||||||||||||||||||||||
| 파티션 ADD 시도 시, 에러 발생 | ||||||||||||||||||||||||
RANGE 파티션의 경우, 새 파티션의 경계 값이 맨 마지막의 파티션보다 커야 하기 때문에 MAXVALUE 값을 가진 파티션이 있으면 파티션을 추가할 수 없습니다. SQL> ALTER TABLE TIBERO.SALES ADD PARTITION P_202504 VALUES LESS THAN (DATE '2025-05-01'); | ||||||||||||||||||||||||
| 파티션 SPLIT | ||||||||||||||||||||||||
P_MAX를 P_MAX와 P_202504로 분리하여 P_MAX의 ROWS 일부가 P_202504로 적재됩니다. SQL> ALTER TABLE TIBERO.SALES SPLIT PARTITION P_MAX AT (DATE '2025-05-01') INTO (PARTITION P_202504, PARTITION P_MAX); SQL> SELECT TABLE_NAME, PARTITION_NAME, BOUND, NUM_ROWS FROM USER_TAB_PARTITIONS
*NUM_ROWS 컬럼은 통계수집 기반으로 보여지는 값으로 실제 Row 수와 정확하게 일치하지 않을 수 있습니다. |
INTERVAL을 사용한 자동 파티션 생성
- INTERVAL 파티셔닝은 RANGE 파티션의 확장으로, 최초에 선언되지 않은 범위의 데이터가 들어올 경우 그에 맞는 파티션을 내부적으로 생성하는 방식입니다.
- INTERVAL 옵션을 사용할 경우, 파티션 RANGE 값을 초과하는 값이 들어오면 Tibero에서 정의한 내부 명명규칙에 따라 파티션이 자동으로 생성됩니다. (ex. _테이블오너명_P임의숫자)
| TABLE 생성 및 INSERT | ||||||||||||
| SQL> CREATE TABLE TIBERO.SALES ( sale_id NUMBER, sale_date DATE ) PARTITION BY RANGE (sale_date) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) ( PARTITION P_BEFORE_2025 VALUES LESS THAN (DATE '2025-01-01') ); SQL> INSERT INTO TIBERO.SALES VALUES (1, DATE '2024-12-31'); SQL> INSERT INTO TIBERO.SALES VALUES (2, DATE '2025-01-01'); SQL> INSERT INTO TIBERO.SALES VALUES (3, DATE '2025-02-01'); SQL> COMMIT; | ||||||||||||
| INTERVAL 옵션으로 입력값에 따라 파티션 자동 생성 | ||||||||||||
SQL> SELECT TABLE_NAME, PARTITION_NAME, BOUND
| ||||||||||||
| 참고사항) 파티션명 RENAME | ||||||||||||
SQL> ALTER TABLE TIBERO.SALES RENAME PARTITION _TIBERO_P578900 TO P_202501; SQL> SELECT TABLE_NAME, PARTITION_NAME, BOUND
|