Oracle2009. 11. 20. 13:44

관리 >> 파티션(Range List Composition Partition)  오라클(운영)

2007/12/24 17:16

복사http://blog.naver.com/owner71/20045212389

No. 22103

(V9.2) RANGE LIST PARTITIONING - ORACLE 9.2 ENHANCEMENT
=======================================================

PURPOSE
-------

   이 문서는 Oracle 9.2의 새 기능인 Range list partition을 생성하고
   관리하기 위한 방법에 대한 자료이다.


Explanation
-----------

Range List Partitioning은 RDBMS V9.2에서 처음으로 소개된 기능이다. 
이 방법은 V8.0에서 소개된 Range partitioning과 V9.0.1에서 소개된 
List partitioning을 결합한 형태의 새로운 방법이다.

Range-List method는 Range 형태로 먼저 데이타를 partition하고  
그 다음에 List-method를 이용하여 subpartitioning을 하는 방법이다.

Composite Range-Hash method와는 달리 이 방법은 각 row가 어느 
subpartition에 속하게 될지를 조절할 수 있다. 
그러나, multiple subpartition keys 는 지원하지 않는다. 이는 List 
method가 이것을 지원하지 않기 때문이다. 
오직 하나의 column만 key partition으로 가능하다.
List partitioning 에 대한 자료는 <Note:149116.1>을 참고하기 바란다.


RANGE-LIST Table에 지원되는 명령어
----------------------------------
1) All DMLs operations
2) Add partition or subpartition
3) Drop partition or subpartition
4) Modify partition or subpartition
5) Rename partition or subpartition
6) Exchange partition or subpartition
7) Merge partitions or subpartition
8) Modify default attribute of a table or partition
9) Modify real attribute of a partition or subpartition
10) Add/Drop values in subpartition
11) Set subpartition template
12) Rename partition or subpartition
13) Move subpartition
14) Split partition or subpartition
15) Truncate partition or subpartition


Index에 지원되는 명령어
-----------------------

단지 btree 또는 bitmap Local Index 만이 RANGE-LIST type일 수 있다.

아래의 command만이 가능하다.

1) Modify default attributes for table or partition.
2) Modify real attributes for partition or subpartition
3) Rebuild of index subpartition
4) Rename partition or subpartition


제약사항
--------

The same known restrictions are still available for Range-List 
partitioning like the current limit of 64k overall segments.


Example
-------
1) Range-List partition 생성 예제

CREATE TABLE empdata
( empno number,
ename varchar2(20),
deptno number,
continent varchar2(6),
hiredate date,
job varchar2(10),
salary number)
PARTITION BY RANGE (deptno)
SUBPARTITION BY LIST (continent)
(PARTITION d1_emp VALUES LESS THAN (100)
(SUBPARTITION d1_con1 VALUES ('ASIA', 'AUST'),
SUBPARTITION d1_con2 VALUES ('AMER'),
SUBPARTITION d1_con3 VALUES ('AFRICA'),
SUBPARTITION d1_con4 VALUES ('EUROPE')),
PARTITION d2_emp VALUES LESS THAN (maxvalue)
(SUBPARTITION d2_con1 VALUES ('ASIA', 'AUST'),
SUBPARTITION d2_con2 VALUES ('AMER'),
SUBPARTITION d2_con3 VALUES ('AFRICA'),
SUBPARTITION d2_con4 VALUES ('EUROPE'))
);


2) Range-Hash partition 생성 예제

Range-Hash method는 어떤 level에 모든 다른 subpartition들을 
반드시 명시하지 않아도 된다. 
아래와 같이 SUBPARTITION TEMPLATE 절을 사용할 수 있다.


CREATE TABLE empdata
( empno number,
ename varchar2(20),
deptno number,
continent varchar2(6),
hiredate date,
job varchar2(10),
salary number)
PARTITION BY RANGE (deptno)
SUBPARTITION BY LIST (continent)
SUBPARTITION TEMPLATE
(SUBPARTITION d1_con1 VALUES ('ASIA', 'AUST') tablespace PART1,
SUBPARTITION d1_con2 VALUES ('AMER') tablespace PART2,
SUBPARTITION d1_con3 VALUES ('AFRICA') tablespace PART3,
SUBPARTITION d1_con4 VALUES ('EUROPE') tablespace PART3
)
(PARTITION d1_emp VALUES LESS THAN (100),
PARTITION d2_emp VALUES LESS THAN (maxvalue)
);

Storage 절은 TABLESPACE 절을 제외하고는 partition level로부터 상속받는다. 
만약, partition level에서 정의되어 있지 않으면 underlying table로부터 
storage 절을 상속받는다.

Sample data to load:
INSERT INTO empdata(empno,deptno,continent) values(1,50,'AMER');
--> Will be inserted into subpartition d1_con2
INSERT INTO empdata(empno,deptno,continent) values(2,100,'ASIA');
--> Will be inserted into subpartition d2_con1
INSERT INTO empdata(empno,deptno,continent) values(3,150,'EUROPE');
--> Will be inserted into subpartition d2_con4
INSERT INTO empdata(empno,deptno,continent) values(4,50,'AUST');
--> Will be inserted into subpartition d1_con1
INSERT INTO empdata(empno,deptno,continent) values(5,250,'AFRICA');
--> Will be inserted into subpartition d2_con3

  
Reference Documents
-------------------
<Note:209368.1>
Oracle 9.2 Administrator's Guide
Oracle 9.2 Performance Tuning and Reference

 

[ 생성 / 수정 / 관리 ]

set linesize 130;
col high_value format a20;


SELECT table_name, partition_name partition, high_value,
            partition_position position 
     FROM user_tab_partitions 
     WHERE table_name='PTNEW2' order by position;

 SELECT TABLESPACE_NAME, PARTITION_NAME, SUBPARTITION_NAME
  FROM user_TAB_SUBPARTITIONS WHERE TABLE_NAME='PTNEW2'
  ORDER BY TABLESPACE_NAME;


alter table ptnew2  add  partition pt_Site02 values less than('003');

ALTER TABLE ptnew2
   MODIFY PARTITION pt_Site02 
      ADD SUBPARTITION site02_z_article_pt
         VALUES ('z0000') tablespace partition_1;


ALTER TABLE ptnew2
   MODIFY PARTITION pt_Site01 
      ADD SUBPARTITION site01_x_article_pt
         VALUES ('x0000') tablespace partition_1;

alter table ptnew2 
       modify subpartition site01_x_article_pt  
       add values('x0001');


alter table ptnew2 
       modify subpartition site01_a_article_pt  
       drop values('a0002');

alter table ptnew2 
       modify partition pt_site01
       drop subpartition site01_x_article_pt;

alter table ptnew2
      drop subpartition site01_x_article_pt;


alter table ptnew2  add  partition pt_Site03 values less than('003')
                         (subpartition site03_a_article_pt values('a0000'));

ALTER TABLE ptnew2
   MODIFY PARTITION pt_Site03 
      ADD SUBPARTITION site03_b_article_pt
         VALUES ('b0000') tablespace partition_1;

 

SELECT partition_name partition, high_value,
            partition_position position 
     FROM user_tab_partitions 
     WHERE table_name='ARTICLE_TB'
     order by position;


SELECT  PARTITION_NAME, SUBPARTITION_NAME,TABLESPACE_NAME
FROM USER_TAB_SUBPARTITIONS WHERE TABLE_NAME='ARTICLE_TB'
 ORDER BY TABLESPACE_NAME;


SELECT partition_name partition, high_value
     FROM user_tab_subpartitions 
     WHERE table_name='ARTICLE_TB'
     order by position;

select partition_name,  SUBPARTITION_NAME,high_value, subpartition_position from user_tab_subpartitions

Posted by Julyus