본문 바로가기

데이터 사이언스 DataScience/Data Base 데이터베이스

[Oracle] 파티션 이름 변경 (subpartition 포함)

흔한 경우는 아니지만 테이블 파티션 이름을 변경해야하는 경우가 있다.

1) 파티션 이름만 변경하는 경우 Rename이 편리하고

2) 서브파티션이거나, 파티션 기준 자체 변경하는 경우는 Modify 또는 Online Redefinition을 추천한다.

 

1. Rename 활용

1) PARTITION TABLE

파티션 기준을 바꾸는게 아니라 단순 이름만 변경하면 된다면 간단하다.

ALTER TABLE OWNER.TABLENAME RENAME PARTITION PT_BEFORE_NAME TO PT_AFTER_NAME;

ALTER INDEX OWNER.INDEXNAME RENAME PARTITION PT_BEFORE_NAME TO PT_AFTER_NAME;

하나 주의해야할 점은 테이블 파티션과 인덱스 파티션은 별개이기때문에 

인덱스 파티션의 이름도 함께 변경해줘야한다.

 

단순 이름 변경이므로 일반적인 경우 0.x 초로 수행 가능하다.

 

 

2) SUBPARTITION TABLE

서브파티션 테이블의 경우도 ALTER로 동일하게 RENAME이 가능하다.

하지만 하나 주의해야할 내용이 있다.

 

보통 SUBPARTITION은 COMPOSITE한 구조로 파티션 * 파티션을 중첩하는 구조이고, 

TEMPLATE을 사용해 서브파티션을 구성한다.

 

예를 들어 PARTTITION 이름이 PT_L001 이고, SUBPARTITION TEMPLATE이 L000 ~ L009로 되어있다면 

서브파티션 이름이 PT_L001_L000 ~ PT_L001_L009로 구성되는 방식이다.

 

그래서 RENAME을 하더라도 TEMPLATE은 RENAME 하기 전의 구조로 되어있다.

이는 DICTIONARY VIEW에서 확인 가능하다.

 

SELECT *
FROM DBA_SUBPARTITION_TEMPLATES
WHERE TABLE_NAME = 'TABLE_NAME';

 

그래서 서브파티션 테이블의 경우

안정적인 운영을 위해서는 RENAME보다는 TEMPLATE 자체를 바꾸는 MODIFY나 ONLINE REDEFINITION이 적절하다.

 

 

2. Modify 활용

1) PARTITION TABLE

Rename 대비 

- 장점 : 파티션 기준을 변경할 수 있음

- 단점 : 오래 걸림. 테이블스페이스 여유공간이 있어야함.

- Parallel 작업을 하려면 Table에 Parallel 옵션을 먹이고 Alter를 하면 된다.

-- PARALLEL 작업시 아래 ALTER 추가. (4 PARALLEL의 경우)
-- ALTER TABLE OWNER.TABLENAME PARALLEL 4; 

ALTER TABLE OWNER.TABLENAME MODIFY
PARTITION BY LIST  (COLUMN_NAME) -- RANGE, HASH 등 종류에 따라 변경
(
    PARTITION PT_L001 VALUES('1'),
    PARTITION PT_L002 VALUES('2'),
    PARTITION PT_L003 VALUES('3'),
    PARTITION PT_L004 VALUES('4'),
    PARTITION PT_L005 VALUES('5'),
    PARTITION PT_L006 VALUES('6'),
    PARTITION PT_L007 VALUES('7')
);

 

2) SUBPARTITION TABLE

Rename 대비 

- 장점 : Template 변경으로 향후 테이블 변경시 영향도를 줄일 수 있음.

- 단점 : 오래 걸림. 테이블스페이스 여유공간 있어야함.  

- Parallel 작업을 하려면 Table에 Parallel 옵션을 먹이고 Alter를 하면 된다.

-- PARALLEL 작업시 아래 ALTER 추가. (4 PARALLEL의 경우)
-- ALTER TABLE OWNER.TABLENAME PARALLEL 4; 

ALTER TABLE OWNER.TABLENAME MODIFY
PARTITION BY LIST  (COLUMN_NAME) -- RANGE, HASH 등 종류에 따라 변경
SUBPARTITION BY LIST (COLUMN2_NAME)
SUBPARTITION TEMPLATE
(
    SUBPARTITION L000 VALUES ('0'),
    SUBPARTITION L001 VALUES ('1'),    
    SUBPARTITION L002 VALUES ('2'),
    SUBPARTITION L003 VALUES ('3'),
    SUBPARTITION L004 VALUES ('4'),
    SUBPARTITION L005 VALUES ('5'),
    SUBPARTITION L006 VALUES ('6'),
    SUBPARTITION L007 VALUES ('7'),
    SUBPARTITION L008 VALUES ('8'),
    SUBPARTITION L009 VALUES ('9')
)
(
    PARTITION PT_L001 VALUES('1'),
    PARTITION PT_L002 VALUES('2'),
    PARTITION PT_L003 VALUES('3'),
    PARTITION PT_L004 VALUES('4'),
    PARTITION PT_L005 VALUES('5'),
    PARTITION PT_L006 VALUES('6'),
    PARTITION PT_L007 VALUES('7')
);

 

반응형