Oracle 파티션 테이블 사용
1. 범위(Range) 파티션
가장 고전적인 그룹 알고리즘으로 한 필드 또는 여러 필드를 구분할 수 있다.
예를 들어 이 표는 최근 3개월간의 데이터만 저장하면 나머지 데이터는 정기적으로 정리된다.데이터를 삭제할 때 다음을 통해 시간 필드에 대한 범위 파티션을 고려할 수 있습니다.
Alter table 테이블 이름truncate 구역 이름;
이 동작은 delete 문장에 비해 속도가 매우 빠르고 로그가 매우 적습니다.
파티션을 위한 백업 복구, 가져오기 및 내보내기 작업도 간편합니다.
단점:
[1] 구역의 데이터가 고르지 않다. 예를 들어 날짜 필드에 대한 구역은 매달 데이터가 다를 것이다.
[2] 후기 유지 보수가 번거롭다. 예를 들어 날짜 필드에 대해 구역을 나누면 몇 년 후에 새로운 구역을 늘려야 하지 않겠는가?
------------------------------------------ -----------------------------------
create table test_range
(
id number(9),
name varchar2(512),
week_no number(2)
)
tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
partition by range (week_no)
(
partition p1 values less than (13) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p2 values less than (26) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p3 values less than (39) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p4 values less than (52) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
);
----- --------
alter table test_range add constraint pk_test_range primary key (ID);
2. 해시(Hash) 구역
Hash 알고리즘을 사용하여 데이터를 각 구역에 고르게 분포하다
전체적인 성능이 비교적 좋고 각 구역의 데이터에 대한 조회 성능도 많지 않다.
그러나 이 구역 알고리즘은 자주 삭제되지 않는 데이터, 예를 들어 중국 10여억 인구의 인원 정보, 단위 고정 자산 정보에 적합하고 데이터가 삽입되면 거의 삭제되지 않는다.
이 동시에 이 구역 방식은 대량의 데이터 조작, 예를 들어 역사 데이터의 정리, 데이터 가져오기와 내보내기에 적합하지 않다.
------------------------------------------HASH -----------------------------------
create table test_hash
(
id number(9),
name varchar2(512),
code varchar2(18)
)
tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
partition by hash (code)
(
partition p1 tablespace USERS,
partition p2 tablespace USERS,
partition p3 tablespace USERS,
partition p4 tablespace USERS
);
/*
create table test_hash
(
id number(9),
name varchar2(512),
code varchar2(18)
)
tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
partition by hash (code) partitions 4 store in
(
USERS,USERS,USERS,USERS
);
*/
----- --------
alter table test_hash add constraint pk_test_hash primary key (ID);
3. 목록(List) 파티션 테이블
이 구역 방식은 구역 필드의 매거값에 대해 구역을 나눈다. 예를 들어 방위 필드는 동, 서, 남, 북을 대상으로 할 수 있다.
7개 대륙을 대상으로 7개 구로 나눌 수 있다.
목록 구역과 범위 구역은 많은 유사한 부분이 있는데 모두 빅데이터 조작에 적합하고 분포가 고르지 않은 문제가 존재한다.
이외에도 이 구역 구분 방식은 다음과 같은 특징이 있다.
[1] 목록 분할 영역은 정렬입니다.
[2] 파티션 이전에 연관 없음
[3] 이 파티션 방식은 한 필드만 사용할 수 있습니다.
------------------------------------------ -----------------------------------
create table test_list
(
id number(9),
address varchar2(512),
country_name varchar2(512)
)
tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
partition by list (country_name)
(
partition p1 values ('China') tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p2 values ('USA') tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p3 values ('Japan') tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p4 values ('Canada') tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
);
----- --------
alter table test_list add constraint pk_test_list primary key (ID);
4. 조합 구역
일반적인 조닝(Zoning) 방식은 다음과 같습니다.
[1]Range-Range
[2]Range-List
[3]Range-Hash
[4]List-List
[5]List-Hash
[6]List-Range
그런데 11G 이전에는 Range-Hash와 Range-List 분할 방식만 사용할 수 있었던 것 같아요.
------------------------------------------ - -----------------------------------
create table TEST_RANGE_LIST
(
ID NUMBER(9) not null,
NAME VARCHAR2(512),
SDATE DATE,
COUNTRY_NAME VARCHAR2(512)
)
partition by range (SDATE)
subpartition by list (COUNTRY_NAME)
(
partition P1 values less than (TO_DATE(' 2012-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P1_SP1 values ('China') tablespace USERS,
subpartition P1_SP2 values ('USA') tablespace USERS,
subpartition P1_SP3 values ('Japan') tablespace USERS,
subpartition P1_SP4 values ('Canada') tablespace USERS
),
partition P2 values less than (TO_DATE(' 2013-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P2_SP1 values ('China') tablespace USERS,
subpartition P2_SP2 values ('USA') tablespace USERS,
subpartition P2_SP3 values ('Japan') tablespace USERS,
subpartition P2_SP4 values ('Canada') tablespace USERS
),
partition P3 values less than (TO_DATE(' 2014-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P3_SP1 values ('China') tablespace USERS,
subpartition P3_SP2 values ('USA') tablespace USERS,
subpartition P3_SP3 values ('Japan') tablespace USERS,
subpartition P3_SP4 values ('Canada') tablespace USERS
),
partition P4 values less than (TO_DATE(' 2015-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P4_SP1 values ('China') tablespace USERS,
subpartition P4_SP2 values ('USA') tablespace USERS,
subpartition P4_SP3 values ('Japan') tablespace USERS,
subpartition P4_SP4 values ('Canada') tablespace USERS
)
);
----- --------
alter table TEST_RANGE_LIST add constraint PK_TEST_RANGE_LIST primary key (ID);
/* ,
create table TEST_RANGE_LIST
(
ID NUMBER(9) not null,
NAME VARCHAR2(512),
SDATE DATE,
COUNTRY_NAME VARCHAR2(512)
)
partition by range (SDATE)
subpartition by list (COUNTRY_NAME)
subpartition template
(
subpartition SP1 values ('China') tablespace USERS,
subpartition SP2 values ('USA') tablespace USERS,
subpartition SP3 values ('Japan') tablespace USERS,
subpartition SP4 values ('Canada') tablespace USERS
)
(
partition P1 values less than (TO_DATE(' 2012-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
),
partition P2 values less than (TO_DATE(' 2013-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
),
partition P3 values less than (TO_DATE(' 2014-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
),
partition P4 values less than (TO_DATE(' 2015-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
);
*/
------------------------------------------ -HASH -----------------------------------
create table TEST_RANGE_HASH
(
ID NUMBER(9) not null,
NAME VARCHAR2(512),
SDATE DATE,
CODE VARCHAR2(18)
)
partition by range (SDATE)
subpartition by hash (CODE)
(
partition P1 values less than (TO_DATE(' 2012-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P1_SP1 tablespace USERS,
subpartition P1_SP2 tablespace USERS,
subpartition P1_SP3 tablespace USERS,
subpartition P1_SP4 tablespace USERS
),
partition P2 values less than (TO_DATE(' 2013-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P2_SP1 tablespace USERS,
subpartition P2_SP2 tablespace USERS,
subpartition P2_SP3 tablespace USERS,
subpartition P2_SP4 tablespace USERS
),
partition P3 values less than (TO_DATE(' 2014-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P3_SP1 tablespace USERS,
subpartition P3_SP2 tablespace USERS,
subpartition P3_SP3 tablespace USERS,
subpartition P3_SP4 tablespace USERS
),
partition P4 values less than (TO_DATE(' 2015-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
(
subpartition P4_SP1 tablespace USERS,
subpartition P4_SP2 tablespace USERS,
subpartition P4_SP3 tablespace USERS,
subpartition P4_SP4 tablespace USERS
)
);
----- --------
alter table test_range_hash add constraint pk_test_range_hash primary key (id);
/*
create table TEST_RANGE_HASH
(
ID NUMBER(9) not null,
NAME VARCHAR2(512),
SDATE DATE,
CODE VARCHAR2(18)
)
partition by range (SDATE)
subpartition by hash (CODE)
(
partition P1 values less than (TO_DATE(' 2012-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
subpartitions 4 store in(users,users,users,users),
partition P2 values less than (TO_DATE(' 2013-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
subpartitions 4 store in(users,users,users,users),
partition P3 values less than (TO_DATE(' 2014-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
subpartitions 4 store in(users,users,users,users),
partition P4 values less than (TO_DATE(' 2015-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8
minextents 1
maxextents unlimited
)
subpartitions 4 store in(users,users,users,users)
);
*/
/*
create table test_range_hash
(
id number(9),
name varchar2(512),
sdate date,
code varchar2(18)
)
tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
partition by range (sdate)
subpartition by hash(code)
subpartition template
(
subpartition sp1 tablespace users,
subpartition sp2 tablespace users,
subpartition sp3 tablespace users,
subpartition sp4 tablespace users
)
(
partition p1 values less than (TO_DATE(' 2012-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS')) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p2 values less than (TO_DATE(' 2013-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS')) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p3 values less than (TO_DATE(' 2014-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS')) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
),
partition p4 values less than (TO_DATE(' 2015-01-01 00:00:01', 'SYYYY-MM-DD HH24:MI:SS')) tablespace USERS
storage
(
initial 64K
minextents 1
maxextents unlimited
)
);
*/
11G의 새로운 조닝(Zoning) 기술
1. 간격(Interval) 파티션
범위 구역을 구분할 때 관리가 조화롭지 못한 부분이 존재한다. 바로 정기적으로 새로운 구역을 창설하거나 앞으로 몇 년 동안의 구역을 한꺼번에 창설하는 것이다.
새로운 간격 구역은 시간 간격을 실행할 수 있으며, 시간이 되면 자동으로 새로운 구역을 만들 수 있습니다.
결합된 파티션은 다음 세 가지로 늘어납니다.
[1]Interval-Range
[2]Interval-Hash
[3]Interval-List
2. 가상 열(VirtualColumn-Based)에 위치한 파티션
3. 참조(Reference) 파티션
4. 시스템(System) 파티션
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 추가
alter table test add partition p5 values less than (90) tablespace users update global indexes;
-- 파티션 삭제
alter table test drop partition p5 update global indexes;
-- 조닝(Zoning) 차단
alter table test truncate partition p5 update global indexes;
- 파티션 이동
alter table test move partition p5 tablespace users storage (initial 100m next 100m) update global indexes;
-- 파티션 이름 변경
alter table test rename partition p5 to p5_1;
--분할 구역(p5는 p6과 p7로 나뉜다)
alter table test split partition p5 at(60) into
(
partition p6,
partition p7
)update global indexes;
- 파티션 병합(p6와 p7을 p5로 병합)
alter table test merge partitions p6,p7 into partition p5 update global indexes;
-- 조닝(Zoning) 스왑
alter table test exchange partition p1 with table test_temp;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.