서브파티션 추가
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
1 SUB PARTITION[편집]
1.1 서브 파티션 테이블생성[편집]
CREATE TABLE EMP( NATIONAL_CD VARCHAR2(12) NOT NULL,
HIRE_DATE VARCHAR2(12) NOT NULL,
HIRE_TIME VARCHAR2(6),
HIRE_HIST_TYPE VARCHAR2(1),
DEPTNO VARCHAR2(30),
EMP_ID VARCHAR2(3)
)
PARTITION BY RANGE(HIRE_DATE)
SUBPARTITION BY LIST(NATIONAL_CD)
SUBPARTITION TEMPLATE (
SUBPARTITION SOUTH VALUES('SOUTH1','SOUTH2'),
SUBPARTITION NORTH VALUES('NORTH1','NORTH2'),
SUBPARTITION EAST VALUES('EAST1','EAST2')
)
(
PARTITION PT_20110831 VALUES LESS THAN ('2011083200')
) ;
- 파티션 테이블 PK 생성
ALTER TABLE EMP
ADD CONSTRAINT PK_PCRF_QOS_HIST
PRIMARY KEY( DEPTNO, HIRE_DATE
, HIRE_TIME, NATIONAL_CD
, HIRE_HIST_TYPE)
USING INDEX LOCAL
NOLOGGING;
1.2 일반테이블을 서브파티션 테이블로 변경[편집]
-- DROP TABLE TED.EMP_1;
CREATE TABLE EMP_1
AS SELECT *
FROM EMP
WHERE 1=0;
ALTER TABLE EMP_1
ADD CONSTRAINT PK_EMP_1
PRIMARY KEY(DEPTNO,HIRE_DATE
,HIRE_TIME,NATIONAL_CD
,HIRE_HIST_TYPE)
USING INDEX
NOLOGGING;
2. SUBPARTITION 추가
ALTER TABLE EMP
ADD SUBPARTITION PT_20110831_WEST VALUES LESS THAN ('WEST1','WEST2');
ORA-01735: 부적합한 ALTER TABLE 옵션입니다.
ALTER TABLE EMP
ADD SUBPARTITION TEMPLATE WEST VALUES('WEST31','WEST32');
ORA-01735: 부적합한 ALTER TABLE 옵션입니다.
- SUBPARTITION VALUE 추가
- 이후 추가되는 partition에 subpartition value가 적용되려면, "ALTER TABLE ~ MODIFY SUBPARTITION ~"을 수행
SELECT *
FROM USER_TAB_SUBPARTITIONS
WHERE TABLE_NAME='EMP';
ALTER TABLE EMP
MODIFY SUBPARTITION PT_20110831_EAST
ADD VALUES ('WEST1','WEST2');
ALTER TABLE EMP
ADD PARTITION PT_20110931 VALUES LESS THAN ('2011093200');
SELECT *
FROM USER_TAB_SUBPARTITIONS
WHERE TABLE_NAME='EMP';
ALTER TABLE EMP
MODIFY SUBPARTITION PT_20110931_EAST
ADD VALUES ('WEST1','WEST2');
SELECT *
FROM USER_TAB_SUBPARTITIONS
WHERE TABLE_NAME='EMP';
- SUBPARTITION TEMPLATE 추가
-- SUBPARTITION TEMPLATE을 추가 하면 새로 PARTITION을 추가한 이후부터 NEW SUBPARTITION TEMPLATE이 적용됨
-- OLD PARTITION에는 NEW SUBPARTITION TEMPLATE은 적용되지 않음
-- OLD PARTITION에도 NEW SUBPARTITION TEMPLATE을 적용하려면, OLD PARTITION을 DROP하고 NEW PARTITION을 SPLIT하면 NEW SUBPARTITION TEMPLATE은 적용됨
① ADD SUBPARTITION TEMPLATE SELECT * FROM USER_TAB_SUBPARTITIONS WHERE TABLE_NAME='EMP'; SELECT * FROM USER_SUBPARTITION_TEMPLATES WHERE TABLE_NAME='EMP';
ALTER TABLE EMP SET SUBPARTITION TEMPLATE (SUBPARTITION SOUTH VALUES('SOUTH1','SOUTH2'), SUBPARTITION NORTH VALUES('NORTH1','NORTH2'), SUBPARTITION EAST VALUES('EAST1','EAST2'), SUBPARTITION WEST VALUES('WEST1','WEST2'), SUBPARTITION EAST_WEST VALUES('EAST_WEST1','EAST_WEST2'), SUBPARTITION SOUTH_NORTH VALUES('SOUTH_NORTH1','SOUTH_NORTH2') );
SELECT * FROM USER_TAB_SUBPARTITIONS WHERE TABLE_NAME='EMP'; SELECT * FROM USER_SUBPARTITION_TEMPLATES WHERE TABLE_NAME='EMP';
② PARTITION ADD SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP' AND PARTITION_NAME='PT_20110931';
ALTER TABLE EMP ADD PARTITION PT_20110931 VALUES LESS THAN ('2011093200');
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP' AND PARTITION_NAME='PT_20110931';
③ OLD PARTITION DATA MIGRATION : PARTITION EXCHANGE SELECT * FROM EMP ; SELECT * FROM EMP_1 ;
ALTER TABLE EMP EXCHANGE SUBPARTITION PT_20110831_SOUTH WITH TABLE EMP_1 INCLUDING INDEXES WITHOUT VALIDATION;
ALTER TABLE EMP EXCHANGE SUBPARTITION PT_20110831_NORTH WITH TABLE EMP_1 INCLUDING INDEXES WITHOUT VALIDATION;
ALTER TABLE EMP EXCHANGE SUBPARTITION PT_20110831_EAST WITH TABLE EMP_1 INCLUDING INDEXES WITHOUT VALIDATION;
SELECT * FROM EMP ; SELECT * FROM EMP_1 ;
④ OLD PARTITION DROP SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP' AND PARTITION_NAME='PT_20110831';
ALTER TABLE EMP DROP PARTITION PT_20110831;
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP' AND PARTITION_NAME='PT_20110831';
⑤ PARTITION SPLIT SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP' AND PARTITION_NAME='PT_20110831';
ALTER TABLE EMP SPLIT PARTITION PT_20110931 AT ('2011083200') INTO(PARTITION PT_20110831, PARTITION PT_20110931);
SELECT * FROM USER_TAB_PARTITIONS WHERE TABLE_NAME='EMP' AND PARTITION_NAME='PT_20110831';
⑥ PARTITION DATA MIGRATION SELECT * FROM EMP ; SELECT * FROM EMP_1 ;
ALTER TABLE EMP EXCHANGE SUBPARTITION PT_20110831_SOUTH WITH TABLE EMP_1 INCLUDING INDEXES WITHOUT VALIDATION;
ALTER TABLE EMP EXCHANGE SUBPARTITION PT_20110831_NORTH WITH TABLE EMP_1 INCLUDING INDEXES WITHOUT VALIDATION;
ALTER TABLE EMP EXCHANGE SUBPARTITION PT_20110831_EAST WITH TABLE EMP_1 INCLUDING INDEXES WITHOUT VALIDATION;
SELECT * FROM EMP ; SELECT * FROM EMP_1 ;