본문 바로가기
Oracle/운영

테이블 파티션 Split,Merge,Coalesce

by 취미툰 2021. 11. 8.
반응형

이번 포스팅은 테이블 파티션에 대한 기능을 정리한 글입니다.

아래의 블로그의 글을 완전 많이 참고하여 테스트해본 결과를 정리한 것입니다. 

출처 : https://jack-of-all-trades.tistory.com/82

 

오라클 파티션 Split/Merge/Coalesce 샘플

오라클은 파티션테이블(Partition Table)에 대해 다양한 관리작업을 지원합니다. 이 페이지에서는 파티션을 분할하고, 합치는 작업을 해보겠습니다. 아래와 같은 List 파티션테이블에서 .. create table S

jack-of-all-trades.tistory.com

 

1.테이블 파티션 Split

파티션 테이블을 다시 여러개의 파티션 테이블로 나눠주는 명령어입니다. 

명령어

ALTER TABLE [테이블명] SPLIT PARTITION [파티션명] INTO

(PARTITION [새 파티션명1] VALUES ('값'),

 PARTITION [새 파티션명2] VALUES ('값')

...

PARTITION [새 파티션명n]

);

 

 

1.테스트 테이블 생성 (리스트 파티션)

create table PART_TEST (
  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')
);

 

2.확인

TABLE_OWNER          TABLE_NAME	PARTITION_NAME	HIGH_VALUE
--------------------------------------------------------------------------------------------------------------------------------
TEST                 PART_TEST	P_CENTRAL	'OH', 'ND', 'SD', 'MO', 'IL', 'MI', 'IA'
TEST                 PART_TEST	P_EAST		'MA', 'NY', 'CT', 'NH', 'ME', 'MD', 'VA', 'PA', 'NJ'
TEST                 PART_TEST	P_SOUTH		'TX', 'KY', 'TN', 'LA', 'MS', 'AR', 'AL', 'GA'
TEST                 PART_TEST	P_WEST		'CA', 'AZ', 'NM', 'OR', 'WA', 'UT', 'NV', 'CO'

 

3.스플릿 실행

alter table PART_TEST 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
  );

 

4.확인

TABLE_OWNER          TABLE_NAME	PARTITION_NAME	HIGH_VALUE
--------------------------------------------------------------------------------------------------------------------------------
TEST                 PART_TEST	P_CENTRAL	'OH', 'ND', 'SD', 'MO', 'IL', 'MI', 'IA'
TEST       		PART_TEST  P_EAST_1	'MA', 'NY', 'CT'
TEST       		PART_TEST  P_EAST_2	'NH', 'ME', 'MD'
TEST       		PART_TEST  P_EAST_3	'VA', 'PA', 'NJ'
TEST                 PART_TEST	P_SOUTH		'TX', 'KY', 'TN', 'LA', 'MS', 'AR', 'AL', 'GA'
TEST                 PART_TEST	P_WEST		'CA', 'AZ', 'NM', 'OR', 'WA', 'UT', 'NV', 'CO'

 

2.파티션 테이블 MERGE

파티션 테이블들을 하나의 파티션 테이블로 합치는 명령어입니다.

명령어

ALTER TABLE [파티션명] MERGE PARTITIONS [기존 파티션명1],[기존 파티션명2]...,[기존 파티션명n] into [새 파티션명];

기존에 Split으로 나눴던 파티션테이블을 다시 원래의 파티션인 P_EAST로 합쳐보겠습니다.

 

1.명령어 수행

alter table PART_TEST merge partitions P_EAST_1, P_EAST_2, P_EAST_3 into partition P_EAST;

2.확인

TABLE_OWNER          TABLE_NAME	PARTITION_NAME	HIGH_VALUE
--------------------------------------------------------------------------------------------------------------------------------
TEST                 PART_TEST	P_CENTRAL	'OH', 'ND', 'SD', 'MO', 'IL', 'MI', 'IA'
TEST                 PART_TEST	P_EAST		'MA', 'NY', 'CT', 'NH', 'ME', 'MD', 'VA', 'PA', 'NJ'
TEST                 PART_TEST	P_SOUTH		'TX', 'KY', 'TN', 'LA', 'MS', 'AR', 'AL', 'GA'
TEST                 PART_TEST	P_WEST		'CA', 'AZ', 'NM', 'OR', 'WA', 'UT', 'NV', 'CO'

 

3.파티션 테이블 Coalesce

해당 명령어는 Hash 테이블에서만 가능한 기능이며, 파티션을 합쳐주는 명령어입니다.

명령어

alter table [파티션 테이블 명] coalesce partition;

 

1.Hash 파티션 테이블 생성

create table PART_TEST2 (
  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 hash (birth_date)
partitions 4
;

 

2.확인

TABLE_OWNE TABLE_NAME PARTITION_HIGH_VALUE
---------- ---------- ----------
TEST       PART_TEST2 SYS_P1621
TEST       PART_TEST2 SYS_P1622
TEST       PART_TEST2 SYS_P1623
TEST       PART_TEST2 SYS_P1624

 

3.명령어 수행

alter table PART_TEST2 coalesce partition;

 

4.확인

TABLE_OWNE TABLE_NAME PARTITION_HIGH_VALUE
---------- ---------- ----------
TEST       PART_TEST2 SYS_P1621
TEST       PART_TEST2 SYS_P1622
TEST       PART_TEST2 SYS_P1623

 

4개 였던 파티션테이블이 3개로 줄어들었습니다.

테스트한 블로그와 결과가 다른것은 테스트블로그는 hash 파티션 테이블이 3개로 바뀔 시 파티션 테이블이 새로운 파티션테이블로 이름이 변경되었지만 제가 테스트를 했을 때에는 이름이 그대로고 하나만 줄어들었습니다.

(저의 테스트 환경은 Oracle 12cR2)

 

이상입니다.

반응형

댓글