Oracle 파티션 테이블 사용

15644 단어
상용 구역 기술
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;

좋은 웹페이지 즐겨찾기