오라클 서브파티션 테스트
- range-list 구조의 복합파티션 관리하기
- 템플릿을 등록하고 파티션 추가시 템플릿대로 추가되는지 확인
DROP TABLE TB_TEST_CMP;
CREATE TABLE TB_TEST_CMP
(
CLS_YM VARCHAR2(6),
COCD1 VARCHAR2(3),
COCD2 VARCHAR2(3),
VAL NUMBER
)
PARTITION BY RANGE (CLS_YM)
SUBPARTITION BY LIST (COCD1, COCD2)
SUBPARTITION TEMPLATE
(
SUBPARTITION L100_200 VALUES ('100', '200'),
SUBPARTITION L100_400 VALUES ('100', '400'),
SUBPARTITION L_DEF VALUES (DEFAULT)
)
(
PARTITION PT_202601 VALUES LESS THAN ('202602'),
PARTITION PT_202602 VALUES LESS THAN ('202603'),
PARTITION PT_202603 VALUES LESS THAN ('202604'),
PARTITION PT_MAX VALUES LESS THAN (MAXVALUE)
);
-- PT_202603 파티션에 수동으로 서브파티션 추가
ALTER TABLE TB_TEST_CMP MODIFY PARTITION PT_202603 ADD SUBPARTITION L500_600 VALUES ('500', '600');
--> SQL Error [14621] [72000]: ORA-14621: DEFAULT 하위 분할 영역이 존재하는 경우 하위 분할 영역을 추가할 수 없음
-- 디폴트 서브파티션을 쪼개는 방식으로 추가
ALTER TABLE TB_TEST_CMP SPLIT SUBPARTITION PT_202603_L_DEF INTO
(
SUBPARTITION PT_202603_L500_600 VALUES ('500', '600'),
SUBPARTITION PT_202603_L700_800 VALUES ('700', '800'),
SUBPARTITION PT_202603_L_DEF
);
서브파티션이 변경이 되었으니 새로 템플릿을 지정하자
-- 템플릿 재지정
ALTER TABLE TB_TEST_CMP SET SUBPARTITION TEMPLATE();
ALTER TABLE TB_TEST_CMP SET SUBPARTITION TEMPLATE
(
SUBPARTITION L100_200 VALUES ('100', '200'),
SUBPARTITION L100_400 VALUES ('100', '400'),
SUBPARTITION L500_600 VALUES ('500', '600'), -- 새로 추가된 서브파티션 1
SUBPARTITION L700_800 VALUES ('700', '800'), -- 새로 추가된 서브파티션 2
SUBPARTITION L_DEF VALUES (DEFAULT)
);
-- 템플릿 확인
SELECT *
FROM DBA_SUBPARTITION_TEMPLATES
WHERE table_name ='TB_TEST_CMP'
;

-- PT_MAX 파티션을 SPLIT 하여 PT_202604 생성
ALTER TABLE TB_TEST_CMP SPLIT PARTITION PT_MAX AT ('202605')
INTO (PARTITION PT_202604, PARTITION PT_MAX);
-- maxvalue 파티션을 분할하는 경우 maxvalue 파티션 구조를 따라와서 템플릿과 다르게 생성됨
SELECT table_owner, table_name, partition_name, composite, subpartition_count, high_value
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = 'TB_TEST_CMP'
;

-- 서브파티션 생성 결과 확인
SELECT PARTITION_NAME, SUBPARTITION_NAME, HIGH_VALUE, subpartition_position
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLE_NAME = 'TB_TEST_CMP'
ORDER BY PARTITION_NAME, SUBPARTITION_NAME;
-- maxvalue 파티션 제거하고 add partition
SELECT * FROM TB_TEST_CMP partition(PT_MAX);
ALTER TABLE TB_TEST_CMP DROP PARTITION PT_202604;
ALTER TABLE TB_TEST_CMP DROP PARTITION PT_MAX;
ALTER TABLE TB_TEST_CMP ADD
PARTITION PT_202604 VALUES LESS THAN ('202605'),
PARTITION PT_202605 VALUES LESS THAN ('202606'),
PARTITION PT_202606 VALUES LESS THAN ('202607'),
PARTITION PT_MAX VALUES LESS THAN (MAXVALUE)
;
-- add partition 은 템플릿대로 생성이 됨.
SELECT table_owner, table_name, partition_name, composite, subpartition_count, high_value
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = 'TB_TEST_CMP'
;

- maxvalue 파티션이 있는경우 split 방식으로 파티션이 추가됨. 템플릿이 아닌 split 대상과 구조가 동일
- default 서브파티션이 있는경우 서브파티션추가는 default 를 분할하는 방식으로 추가됨.
- 템플릿으로 추가시 서브파티션 명은 "파티션명_"+"템플릿의서브파티션명" 으로 지정됨.
'생계 > Oracle' 카테고리의 다른 글
| exp imp 유틸리티 사용 시 주석 한글 깨지는 현상 (0) | 2025.03.12 |
|---|---|
| AWS S3 통한 EC2 RDS 오라클 데이터펌프 사용하기 impdp (0) | 2025.02.28 |
| 오라클 스탠다드 SE 엔터프라이즈 EE 차이 및 활용 (0) | 2024.06.01 |
| oracle wallet 사용하기 (0) | 2023.09.20 |
| [oracle] 히든 파라미터 체크 hidden parameter (0) | 2023.07.03 |