List Partition

DB/Oracle 10g 강좌 2009. 10. 31. 08:44

5.4.1 List Partition 이란?


 
- 특정 Column의 특정 값으로 Partitioning을 하는 방법 입니다.

 - List partition의 장점은 연관되지 않은 데이터, 순서에 맞지 않는 데이터의 grouping 을 쉽게 할 수 있습니다.

 - 각 값 별로 분포도가 비슷하며, 많은 SQL에서 해당 Column의 조건이 많이 들어오는 경우 유용 합니다.

  
- 각 Partition의 분포도가 현격한 차이가 발생하지 않도록 해야 합니다.

 - 여러 컬럼으로 partition key 생성이 가능하지 않으며 오직 하나의 column으로 구성되어야 합니다.

 - Partition key 값은 NULL 값 또한 명시 가능하며, NULL 값을 포함한 어떠한 값이라도 한번만 명시할 수 있습니다.

 - 대소문자를 구분 함, 범위외 문자 입력 에러 발생.



5.4.2 List Partition 예제


파티션 테이블 생성


 CREATE TABLE emp_list_pt
      
(EMPNO NUMBER NOT NULL,
      
ENAME VARCHAR2(10),
       
JOB VARCHAR2(9),
       
MGR NUMBER(4),
       
HIREDATE DATE,
       
SAL NUMBER(7, 2),
       
COMM NUMBER(7, 2),
       
DEPTNO NUMBER(2))
 PARTITION BY LIST
(JOB)
 (PARTITION emp_list_pt1 VALUES (’MANAGER’) TABLESPACE ASSM_TBS1,
 
 PARTITION emp_list_pt2 VALUES (’SALESMAN’) TABLESPACE ASSM_TBS2,
  
PARTITION emp_list_pt3 VALUES (’ANALYST’) TABLESPACE ASSM_TBS3,
  
PARTITION emp_list_pt4 VALUES (’PRESIDENT’, ’CLERK’) TABLESPACE ASSM_TBS4);
 



데이터 조작

아래와 같이 데이터를 INSERT 하고 저장된 데이터를 확인해 봅니다.

INSERT INTO emp_list_pt VALUES(1, ’SMITH’,  ’CLERK’,     7902, SYSDATE,  800, NULL, 20);
INSERT INTO emp_list_pt VALUES(2, ’ALLEN’,  ’SALESMAN’,  7698, SYSDATE, 1600,  300, 30);
INSERT INTO emp_list_pt VALUES(3, ’WARD’,   ’SALESMAN’,  7698, SYSDATE, 1250,  500, 30);
INSERT INTO emp_list_pt VALUES(4, ’JONES’,  ’MANAGER’,   7839, SYSDATE,  2975, NULL, 20);
INSERT INTO emp_list_pt VALUES(5, ’MARTIN’, ’SALESMAN’,  7698, SYSDATE, 1250, 1400, 30);
INSERT INTO emp_list_pt VALUES(6, ’BLAKE’,  ’MANAGER’,   7839, SYSDATE,  2850, NULL, 30);
INSERT INTO emp_list_pt VALUES(7, ’CLARK’,  ’MANAGER’,   7839, SYSDATE,  2450, NULL, 10);
INSERT INTO emp_list_pt VALUES(8, ’SCOTT’,  ’ANALYST’,   7566, SYSDATE, 3000, NULL, 20);
INSERT INTO emp_list_pt VALUES(9, ’KING’,   ’PRESIDENT’, NULL, SYSDATE, 5000, NULL, 10);
INSERT INTO emp_list_pt VALUES(10, ’TURNER’, ’SALESMAN’,  7698,SYSDATE,  1500,    0, 30);
INSERT INTO emp_list_pt VALUES(11, ’ADAMS’, ’CLERK’, 7788,SYSDATE,1100,NULL,20);
INSERT INTO emp_list_pt VALUES(12, ’JAMES’,  ’CLERK’,     7698, SYSDATE,   950, NULL, 30);
INSERT INTO emp_list_pt VALUES(13, ’FORD’,   ’ANALYST’,   7566, SYSDATE,  3000, NULL, 20);
INSERT INTO emp_list_pt VALUES(14, ’MILLER’, ’CLERK’,     7782,  SYSDATE, 1300, NULL, 10); 
COMMIT;



 아래와 같이 데이터가 파티션 테이블 생성시 지정한 분할 방식으로 저장된 것을 확인 할 수 있습니다.


SELECT empno FROM emp_list_pt PARTITION (emp_list_pt1); --> 4,6,7
SELECT empno FROM emp_list_pt PARTITION (emp_list_pt2); --> 2,3,5,10
SELECT empno FROM emp_list_pt PARTITION (emp_list_pt3); --> 8,13
SELECT empno FROM emp_list_pt PARTITION (emp_list_pt4); --> 1,9,11,12,14
 



파티션 추가

 
추가되는 컬럼 값을 VALUES절 뒤에 기술을 해야 합니다.

  emp_list_pt 테이블에 emp_list_pt5 파티션을 추가하는 예제 입니다. 파티션 데이터는 job 컬럼의 데이터가 ’DBA’ 값을 가진 데이터만 저장 됩니다.


 ALTER TABLE
emp_list_pt
 ADD PARTITION
emp_list_pt5 VALUES (’DBA’) TABLESPACE ASSM_TBS5  NOLOGGING;
 




파티션 삭제

  Range Partition의 파티션 삭제 방법과 동일 합니다. 아래는 emp_list_pt 테이블의 emp_list_pt4 파티션을 삭제하는 예제 입니다.


 ALTER TABLE
emp_list_pt DROP PARTITION emp_list_pt5
 


좀 더 자세한 파티션 관리는 오라클 문서의 파티션 관리 표를 참고 하시기 바랍니다.
http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10739/partiti.htm#i1007638




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

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

Composite Range-List Partitioning  (0) 2009.10.31
Composite Range-Hash Partitioning  (0) 2009.10.31
Hash Partition  (0) 2009.10.31
Range Partition  (0) 2009.10.31
Partition Table 이란?  (0) 2009.10.31
Posted by 야동우
,