본문 바로가기

Develop/Database & SQL

[Oracle] 파티션 추가하기

파티션된 테이블의 경우 미리 파티션이 추가되어야 한다.
해당 기간 파티션이 생성되어 있지 않은 경우 데이터 INSERT가 안됨

-- PARTITION TABLE 조회
SELECT table_name,
       partitioning_type,
       partition_count
  FROM user_part_tables
 ORDER BY table_name;
 
 -- 파티션 마지막 RANGE(HIGH_VALUE) 조회
SELECT table_name,
       partition_name,
       high_value,
       tablespace_name
  FROM (SELECT table_name,
               partition_name,
               high_value,
               tablespace_name,
               row_number() over(PARTITION BY table_name ORDER BY partition_name DESC) rn
          FROM user_tab_partitions)
 WHERE rn = 1
 ORDER BY table_name;
 
 -- 특정 테이블 파티션 조회
SELECT table_name,
       partition_name,
       high_value,
       tablespace_name
  FROM user_tab_partitions
 WHERE table_name = 'TABLE명'
 ORDER BY table_name, partition_name;

파티션 추가 예)

-- 특정 테이블 파티션 조회
SELECT table_name,
       partition_name,
       high_value,
       tablespace_name
  FROM user_tab_partitions
 WHERE table_name = 'LO_ORDR_CLOSE_D'
 ORDER BY table_name, partition_name;

ALTER TABLE LO_ORDR_CLOSE_D ADD PARTITION P1204_LO_ORDR_CLOSE_D VALUES LESS THAN ('20120501') TABLESPACE P01_HODB_DATA04;
ALTER TABLE LO_ORDR_CLOSE_D ADD PARTITION P1208_LO_ORDR_CLOSE_D VALUES LESS THAN ('20120901') TABLESPACE P01_HODB_DATA05;
ALTER TABLE LO_ORDR_CLOSE_D ADD PARTITION P1212_LO_ORDR_CLOSE_D VALUES LESS THAN ('20130101') TABLESPACE P01_HODB_DATA06;

-- 파티션테이블이 사용하는 테이블 스페이스를 돌려서 사용하는 방식임.
-- P01_HODB_DATA04 -> 테이블스페이스 명
-- P1204_LO_ORDR_CLOSE_D -> 파티션 이름(지정)
-- ('20120501') -> 기간 앞에 만들어진 파티션의 마지막 일자 부터 '20120430' 까지 기간을 나타냄

테이블 파티션을 추가하고나면 추가된 파티션의 인덱스는 디폴드 인덱스 테이블 스페이스로 지정이됨 
따라서 인덱스 리빌드를 수행해야함.

-- 특정 테이블 인덱스 파티션 조회
SELECT index_name,
       partition_name,
       high_value,
       tablespace_name
  FROM user_ind_partitions
 WHERE index_name LIKE '%LO_ORDR_CLOSE_D%'
 ORDER BY index_name, partition_name;

-- 1번 INDEX REBUILD
ALTER INDEX IDX01_LO_ORDR_CLOSE_D REBUILD PARTITION P1204_LO_ORDR_CLOSE_D TABLESPACE P01_HODB_INDX04;
ALTER INDEX IDX01_LO_ORDR_CLOSE_D REBUILD PARTITION P1208_LO_ORDR_CLOSE_D TABLESPACE P01_HODB_INDX05;
ALTER INDEX IDX01_LO_ORDR_CLOSE_D REBUILD PARTITION P1212_LO_ORDR_CLOSE_D TABLESPACE P01_HODB_INDX06;

-- 2번 INDEX REBUILD
ALTER INDEX PK_LO_ORDR_CLOSE_D REBUILD PARTITION P1204_LO_ORDR_CLOSE_D TABLESPACE P01_HODB_INDX04;
ALTER INDEX PK_LO_ORDR_CLOSE_D REBUILD PARTITION P1208_LO_ORDR_CLOSE_D TABLESPACE P01_HODB_INDX05;
ALTER INDEX PK_LO_ORDR_CLOSE_D REBUILD PARTITION P1212_LO_ORDR_CLOSE_D TABLESPACE P01_HODB_INDX06;


-- 생성된 모든 인덱스에 대해서 위의 과정을 수행해줌
-- P1204_LO_ORDR_CLOSE_D -> 새로 생성된 테이블 파티션 명
-- P01_HODB_INDX04 -> 파티션 인덱스용 테이블 스페이스를 지정함


출처 - https://blog.naver.com/kahhy/60147930133