오라클은 파티션테이블(Partition Table)에 대해 다양한 관리작업을 지원합니다.
이 페이지에서는 파티션을 분할하고, 합치는 작업을 해보겠습니다.
아래와 같은 List 파티션테이블에서 ..
create table SALES (
sales_no number,
sale_year number,
sale_month number,
sale_day number,
customer_name varchar2(30),
birth_date date,
price number,
state varchar2(2)
)
partition by list (state)
(
partition P_EAST values ('MA','NY','CT','NH','ME','MD','VA','PA','NJ'),
partition P_WEST values ('CA','AZ','NM','OR','WA','UT','NV','CO'),
partition P_SOUTH values ('TX','KY','TN','LA','MS','AR','AL','GA'),
partition P_CENTRAL values ('OH','ND','SD','MO','IL','MI','IA')
);
1) 파티션 Split
기존 파티션을 여러개의 파티션으로 분할하는 명령어 입니다.
위 리스트 파티션에서 P_EAST 파티션을 3개로 분할해보겠습니다.
alter table SALES split partition P_EAST into
(partition P_EAST_1 values ('MA','NY','CT'),
partition P_EAST_2 values ('NH','ME','MD'),
partition P_EAST_3
);
위 샘플에서는 P_EAST 파티션을 P_EAST_1, P_EAST_2, P_EAST_3 파티션으로 분할했습니다.
P_EAST1, P_EAST_2 파티션에 지정된 항목들이 들어가고, 나머지는 P_EAST_3 파티션으로 들어갑니다.
이때 주의할 게, Split 할 때 마지막 파티션에 values() 를 지정하면 ORA-14805 에러가 발생합니다.
Range 파티션의 경우도 마찬가지입니다.
Split 되는 마지막 파티션에는 values () 항목을 지정하지 않습니다.
2) 파티션 Merge
아래 샘플은 P_EAST_1, P_EAST_2, P_EAST_3 로 분할된 파티션을 다시 P_EAST 파티션으로 합치는 예제입니다.
alter table SALES merge partitions P_EAST_1, P_EAST_2, P_EAST_3 into partition P_EAST;
3) 파티션 Coalesce
Coalesce 커맨드는 Hash 파티션에서만 사용합니다.
Hash 파티션의 갯수를 줄일때 사용합니다. Coalesce 커맨드를 실행하면, 파티션 갯수를 하나줄이고, 데이터를 다시 줄어든 갯수에 맞추어 균등하게 분할해줍니다.
위 Hash 테이블 생성 스크립트는 아래와 같이 4개의 해쉬 파티션을 만듭니다.
아래와 같이 Coalesce 커맨드를 실행합니다.
alter table SALES coalesce partition;
위 커맨드로 아래와 같이 파티션이 하나 줄어들었습니다.
근데, 잘 보면 단순히 하나의 파티션이 삭제된 게 아닙니다. 시스템에서 자동으로 부여한 파티션명이 다 바껴있는 것을 확인할 수 있습니다. 파티션 갯수가 4 -> 3 으로 줄어들면서 데이터를 다시 균등분할해서 파티션을 새로 만든 것입니다.
▶▶▶ 파티션 Add/Drop/Modify/Truncate/Rename 샘플 보기
'IT관련' 카테고리의 다른 글
오라클 utl_file.get_line() 한글 텍스트 제대로 못 읽는 경우 - 한글깨짐, 캐릭터셋 문제 (0) | 2019.06.28 |
---|---|
오라클 파티션 Exchange (파티션 익스체인지) (0) | 2019.06.28 |
오라클 파티션 Add/Drop/Modify/Truncate/Rename 샘플 (4) | 2019.06.28 |
오라클 Global Partitioned Index (글로벌 파티션 인덱스) (0) | 2019.06.26 |
오라클 Local Partitioned Index (로컬 파티션 인덱스) (0) | 2019.06.26 |