5.2.1 Range Partition 이란?


 - Range Partition은 Column 값 의 범위를 기준으로 하여 행을 분할하는 형태로, 달, 분기 등의 logical 한 범위의 분산에 주로 사용 합니다.

   즉, 정해진 범위에 따라 비슷한 크기로 partition 이 예상되는 곳에 효율적입니다.


 
- Range Partition
을 생성할 때 어느 행을 기준으로 어느 만큼의 값의 범위로 분할 할지를 다음 두 절에서 정의하게 됩니다. 

 
☞ PARTITION BY RANGE (column list..)

       :  기본 Table에서 어느 Column을 기준으로 분할할지를 정합니다.  

  ·VALUES LESS THAN(value list.. ) :
       : 각 Partition이 어떤 값의 범위를 포함 할지 MAX Value값을 정합니다.

  
- PARTITION BY RANGE
절에서 지정 할 수 있는 Column은 한 개의 Column만으로 구성할 할 수도 있고 결합인덱스처럼 여러 개의 Column이 지정될 수 도 있습니다. (최대 16Column을 지원).



5.2.2 Range Partition 예제

 
파티션 테이블 생성


CREATE TABLE sales
   
(sales_no NUMBER,
    
sale_year INT NOT NULL,
    
sale_month INT NOT NULL,
    
sale_day INT NOT NULL,
    
customer_name  VARCHAR2(30),
    
price NUMBER)
      
PARTITION BY RANGE (sale_year, sale_month, sale_day)
      
(PARTITION sales_q1 VALUES LESS THAN (2005, 01, 01) TABLESPACE ASSM_TBS1,
       
PARTITION sales_q2 VALUES LESS THAN (2005, 07, 01) TABLESPACE ASSM_TBS2,
       
PARTITION sales_q3 VALUES LESS THAN (2006, 01, 01) TABLESPACE ASSM_TBS3,
       
PARTITION sales_q4 VALUES LESS THAN (2006, 07, 01) TABLESPACE ASSM_TBS4 );
 
  PARTITION BY RANGE 절에 어떤 column들을 기준으로 하여 Partition을 나눌 것인지 지정을 하고, Partition이 나누어 지는 범위는 VALUES LESS THAN 절에서 지정해 주면 됩니다.



 
데이터 조작

 아래와 같이 INSERT 문장을 실행 하면 파티션 테이블에서 지정한 범위에 따라서 자동으로 파티션이 지정 됩니다.

I
NSERT INTO sales VALUES(1, 2004, 06, 12, ’scott’, 2500);
INSERT INTO sales VALUES(2, 2005, 06, 17, ’jones’, 4300);
INSERT INTO sales VALUES(3, 2005, 12, 12, ’miller’, 1200);
INSERT INTO sales VALUES(4, 2006, 06, 22, ’ford’, 5200);
INSERT INTO sales VALUES(5, 2005, 01, 01, ’lion’, 2200); --> sales_q2
에 데이터가 INSERT
INSERT INTO sales VALUES(6, 2006, 12, 22, ’tiger’, 3300);
COMMIT;

INSERT INTO sales VALUES(6, 2006, 12, 22, ’tiger’, 3300); -->
범위 초과로 ORA-14400 에러 발생
1
행에 오류:
ORA-14400:
삽입된 분할 영역 키와 매핑되는 분할 영역이 없음
 


  각 파티션 마다 어떤 데이터가 INSERT 되었는지는 직접 SELECT 문으로 확인 해 보세요.

 

SELECT sales_no FROM sales PARTITION (sales_q1); --> 1
SELECT sales_no FROM sales PARTITION (sales_q2); --> 2, 5
SELECT sales_no FROM sales PARTITION (sales_q3); --> 3
SELECT sales_no FROM sales PARTITION (sales_q4); --> 4
 



③ 파티션 추가

 - Range Partition
에서 파티션 추가는 새로운 high 값을 기술해야 합니다.
 - MAXVALUE partition
이 존재하면 추가가 불가능 합니다.

sales
파티션 테이블에 새로운 파티션 sales_q5를 추가하는 예제 입니다.
 

 ALTER TABLE
sales
 ADD PARTITION sales_q5 VALUES LESS THAN (MAXVALUE, MAXVALUE, MAXVALUE )
 TABLESPACE ASSM_TBS5;
 


 
④ 파티션 삭제

 - Range, List 파티션만 가능 합니다.
 - 하나의 파티션은 반드시 남아 있어야 합니다.
 - 한번의 하나의 파티션만 삭제 가능 합니다. 여러 개의 파티션을 삭제하고자 할 때는 삭제 문장을 여러 번 실행 시켜야 합니다.

sales
테이블의 sales_q5 파티션을 삭제하는 예제 입니다.

ALTER TABLE
sales DROP PARTITION sales_q5;
 



⑤ 파티션 이름 변경

  sales 테이블의 sales_q4 파티션 이름을 sales_four로 변경하는 예제 입니다.

ALTER TABLE
sales RENAME PARTITION sales_q4 TO sales_four;
 



⑥ 파티션의 병합(MERGE)

 - 파티션 병합은 두 파티션의 데이터를 합치고, 하나의 파티션을 DROP 합니다.
 
- Hash Partition, Subpartition
MERGE 작업을 할 수 없습니다.

 sales_q1
파티션과 sales_q2 파티션을 sales_q2 파티션으로 병합하는 예제 입니다.
  ALTER TABLE sales
  MERGE PARTITIONS
sales_q1, sales_q2 INTO PARTITION sales_q2
   UPDATE INDEXES; --> Local Index를 갱신
 



⑦ 파티션의 분할(SPLIT)

 
 - SPLIT
작업은 하나의 파티션을 두 개의 새로운 파티션으로 분할 합니다.
  - Hash Partition, Subpartition
SPLIT 작업을 할 수 없습니다.

 sales
파티션 테이블의 sales_q2 파티션을 (2005,01,01) 값을 기준으로 sales_q1 sales_q2로 파티션을 분할하는 예제 입니다.

 ALTER TABLE
sales
 SPLIT PARTITION
sales_q2 AT (2005, 01, 01)
   INTO (PARTITION sales_q1 TABLESPACE ASSM_TBS1,
             
PARTITION sales_q2 TABLESPACE ASSM_TBS2)
 



⑧ 파티션의 변경(EXCHANGE)

 -
파티션의 EXCHAGEN는 파티션 데이터를 일반테이블로 생성하는 작업입니다.
   물론 일반 테이블의 데이터를 파티션 테이블의 데이터로 생성 할 수도 있습니다.

  아래 예제는 파티션 테이블의 데이터를 일반 테이블로 생성하는 예제 입니다.

  --
파티션 데이터를 일반테이블로 이동하기 위한 테이블을 생성 합니다.

 CREATE TABLE sales_ex

   
(sales_no NUMBER,

     sale_year INT NOT NULL,
     sale_month INT NOT NULL,
     sale_day INT NOT NULL,
     customer_name  VARCHAR2(30),
     price NUMBER)
     TABLESPACE ASSM_TBS1;


-- 파티션 데이터를 일반 테이블로 변경 합니다.
  ALTER TABLE sales
    EXCHANGE PARTITION sales_q1 WITH TABLE sales_ex;


-- 파티션 테이블의 데이터를 조회 해봅니다.
  SELECT sales_no FROM sales PARTITION (sales_q1); --> 선택된 레코드가 없습니다.


-- 파티션 데이터를 이동한 일반 테이블의 데이터를 조회 해봅니다.
SELECT sales_no FROM sales_ex;  --> 1
 



⑨ 파티션의 테이블스페이스 변경

   sales 테이블의 sales_q3 파티션의 테이블스페이스를 ASSM_TBS5로 변경하는 예제 입니다.

  ALTER TABLE
sales MOVE PARTITION sales_q3 TABLESPACE ASSM_TBS5;
 



⑩ 파티션 데이터 TRUNCATE

   sales 테이블의 sales_q3 파티션을 TRUNCATE 하는 예제 입니다.

 ALTER TABLE
sales TRUNCATE PARTITION sales_q3;
 




  ================================================
    * 데이터베이스 정보공유 커뮤니티 oracleclub.com
    * 강좌 작성자 : 김정식 (oramaster _at_ naver.com)
  ================================================

'DB > Oracle 10g 강좌' 카테고리의 다른 글

List Partition  (0) 2009.10.31
Hash Partition  (0) 2009.10.31
Partition Table 이란?  (0) 2009.10.31
(10gR2)Full UNDO tablespace  (0) 2009.10.31
Temporary Tablespace Group  (0) 2009.10.31
Posted by 야동우
,