** Oracle provides the following partitioning methods **
1. Range Partitioning
2. Hash Partitioning
3. List Partitioning (9i~)
4. Composite Partitioning
<ÆÄƼ¼Å´×ÀÇ ÀåÁ¡ ¹× Çʿ伺>
---------------------------
- full scan½Ã È¿°ú¸¦ º¼¼ö ÀÖ´Ù
- °ü¸® µ¥ÀÌÅÍ Å©±â°¡ Ä¿Áü¿¡ µû¶ó °ü¸®, Á¶ÀÛÀÇ ¹®Á¦Á¡ ¹ß»ý (VLDB, DW)
- ÆÄƼ¼Çº°·Î µ¶¸³ÀûÀÎ ¹é¾÷ ¹× º¹±¸ °¡´É
- ½Ã½ºÅÛ Àå¾Ö ¹ß»ý½Ã µ¥ÀÌÅÍ ¼Õ»ó Á¤µµ¸¦ ÃÖ¼ÒÈ
- ºÒÇÊ¿äÇÑ µ¥ÀÌÅÍ ¾×¼¼½º ¹æÁö(ÆÄƼ¼Ç Ǫ·ç´×)
- I/OºÐ»ê¿¡ ÀÇÇÑ ¼º´É Çâ»ó
- µ¶¸³ÀûÀÎ DML¹® ¼öÇà
- divide-and-conquer ¼Ö·ç¼ÇÀ» Á¦°ø
================================================================================================
1. Range Partitioning(8~)
- CREATE TABLE table_name( ... )
PARTITION BY RANGE (key_column)
(PARTITION partition_name VALUES LESS THAN (condition) TABLESPACE tablespace_name,
PARTITION partition_name VALUES LESS THAN (condition) TABLESPACE tablespace_name,
PARTITION partition_name VALUES LESS THAN (condition) TABLESPACE tablespace_name,
...
PARTITION partition_name VALUE LESS THAN (MAXVALUE) TABLESPACE tablespace_name);
- ºÐÇÒÅ°´Â ÃÖ´ë 16°³ Ä÷³À¸·Î »ý¼º°¡´É.
- long, LONGRAW ºÐÇÒ Ä÷³ ¼³Á¤ ºÒ°¡´É.
- Ä÷³°ªÀÌ NULLÀÎ °ÍÀº MAXVALUE°ª¿¡ ÇØ´ç.
ex)
create table jeon
(idate date,
no char(2),
qty number)
partition by range(idate)
(partition t1 values less than (to_date('2000/01/01', 'yyyy/mm/dd')) tablespace test01,
partition t2 values less than (to_date('2001/01/01', 'yyyy/mm/dd')) tablespace test02,
partition t3 values less than (maxvalue) tablespace test03);
SQL> alter session set nls_date_format = 'yyyy-mm-dd';
SQL> insert into jeon values(to_date('1999-12-01'), '01',120);
SQL> insert into jeon values(to_date('2000-06-12'), '02', 30);
SQL> insert into jeon values(to_date('2001-02-01'), '03', 25);
SQL> insert into jeon values(to_date('2002-07-03'), '04', 43);
SQL> commit;
- UPDATE¹®À» »ç¿ëÇÏ¿© ºÐÇÒÅ° Ä÷³ÀÇ °ªÀ» º¯°æ
SQL> ALTER TABLE jeon ENABLE ROW MOVEMENT; ---> DBMS°¡ ÀÚµ¿À¸·Î À̵¿½ÃÄÑÁØ´Ù.
SQL> UPDATE jeon SET idate = to_date('2000-12-01')
WHERE idate = to_date('1999-12-01');
SQL> commit;
** Range ÆÄƼ¼ÇÅ×À̺í add **
ALTER TABLE PARTRANGE ADD PARTITION P1 VALUES LESS THAN (2003,4,1) TABLESPACE TEST01;
ALTER TABLE PARTRANGE ADD PARTITION P2 VALUES LESS THAN (2003,7,1) TABLESPACE TEST02;
ALTER TABLE PARTRANGE ADD PARTITION P3 VALUES LESS THAN (2003,10,1) TABLESPACE TEST03;
ALTER TABLE PARTRANGE ADD PARTITION P4 VALUES LESS THAN (2004,1,1) TABLESPACE TEST04;
ALTER TABLE PARTRANGE ADD PARTITION OVER VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE) TABLESPACE TEST01;
ALTER TABLE PARTRANGE ADD PARTITION P5 VALUES LESS THAN (2004,4,1) TABLESPACE TEST01;
** Range ÆÄƼ¼ÇÅ×À̺í drop **
ALTER TABLE PARTRANGE DROP PARTITION OVER;
** Range ÆÄƼ¼ÇÅ×À̺í rename **
ALTER TABLE partrange RENAME PARTITION p4 TO p5;
** Range ÆÄƼ¼ÇÅ×À̺í move **
ALTER TABLE emp_pt MOVE PARTITION emp_p3 TABLESPACE p4 nologging;
** Range ÆÄƼ¼ÇÅ×À̺í truncate **
ALTER TABLE emp_pt TRUNCATE PARTITION emp_p3;
insert into partrange values(1, 1, 2004, 373);
** View **
DBA_PART_KEY_COLUMNS
DBA_PART_COL_STATISTICS
DBA_PART_HISTOGRAMS
DBA_PART_INDEXES
DBA_IND_PARTITIONS
DBA_PART_TABLES
DBA_TAB_PARTITIONS
DBA_PART_LOBS
DBA_LOB_PARTITIONS
** Version 8.1 offers new views to administer this level of granularity:
DBA_SUBPART_COL_STATISTICS
DBA_SUBPART_HISTOGRAMS
DBA_SUBPART_KEY_COLUMNS
DBA_IND_SUBPARTITIONS
DBA_LOB_SUBPARTITIONS
DBA_TAB_SUBPARTITIONS
============================================================================================
2. Hash Partitioning(8i~)
- ¿À¶óŬ ¼¹ö°¡ ÁöÁ¤µÈ µ¥ÀÌÅÍ ÆÄÀÏ¿¡ ÀûÀýÈ÷ ³ª´©¾î¼ ÀúÀåÇÑ´Ù.
- Çؽà ¾Ë°í¸®Áò¿¡ ÀÇÇØ Ã³¸®µÇ¹Ç·Î ¹üÀ§ ºÐÇÒº¸´Ù ºÐÆ÷µµ°¡ ÈξÀ ÁÁÀ»¼ö ÀÖ´Ù.
- ¹®¹ý
- CREATE TABLE table_name( ... )
PARTITION BY HASH (key_column) PARTITIONS [ºÐÇÒ¼ö]
STORE IN (tablespace, ...); ¶Ç´Â
- CREATE TABLE table_name( ... )
PARTITION BY HASH (key_column)
(PARTITION partition_name TABLESPACE tablespace_name,
PARTITION partition_name TABLESPACE tablespace_name,
... );
ex)
- create table jeon1
(id date,
name char(2))
partiton by hash (id) partitions 3
store in (test01, test02, test03);
or
- create table jeon1
(id date,
name char(2))
partiton by hash (id)
(partition p1 tablespace test01,
partition p2 tablespace test02,
partition p3 tablespace test03);
=============================================================================================
3. List Partitioning(9i~)
- ƯÁ¤ ¸®½ºÆ®¿¡ ÀÇÇØ ºÐÇÒÇØ¾ß ÇÒ °æ¿ì.
- ¹®¹ý
- CREATE TABLE table_name( ... )
PARTITION BY LIST(key_column)
(PARTITION partition_name VALUES ( ... ) STORAGE( ... ) TABLESPACE tablespace_name,
PARTITION partition_name VALUES ( ... ) STORAGE( ... ) TABLESPACE tablespace_name,
PARTITION partition_name VALUES ( ... ) STORAGE( ... ) TABLESPACE tablespace_name,
... );
- ºÐÇÒ »çÀÌ¿¡´Â ¾î¶°ÇÑ °ü°èµµ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
- µ¥ÀÌÅÍÀÇ ºÐÇÒ ¹× ¼º´É Çâ»ó È¿°ú¸¦ ±â´ëÇÒ ¼ö ÀÖ´Ù.
=====================================
PARTITION TABLEÀÇ °ü¸®¸¦ À§ÇÑ COMMAND
=====================================
Purpose
-------
Oracle8 ºÎÅÍ »ç¿ë°¡´ÉÇÑ Partition tableÀ» handling Çϱâ À§ÇÑ
´Ù¾çÇÑ commandµéÀ» È®ÀÎÇØ º¸ÀÚ.
SCOPE
-----
8~10g Standard Edition ¿¡¼´Â Partitioning Option Àº Áö¿øÇÏÁö ¾Ê´Â´Ù.
Explanation
-----------
[¿¹Á¦] ¾Æ·¡¿Í °°ÀÌ partition tableÀ» »ý¼ºÇÑ´Ù.
SQL> create table part_tbl
( in_date number primary key ,
empno number,
ename varchar2(20),
job varchar2(20) )
partition by range (in_date)
(partition part_tbl_03 values less than (20000331)
tablespace pts_03,
partition part_tbl_04 values less than (20000430)
tablespace pts_04,
partition part_tbl_05 values less than (20000531)
tablespace pts_05,
partition part_tbl_06 values less than (20000630)
tablespace pts_06,
partition part_tbl_07 values less than (20000731)
tablespace pts_07,
partition part_tbl_08 values less than (20000831)
tablespace pts_08,
partition part_tbl_09 values less than (20000930)
tablespace pts_09,
partition part_tbl_10 values less than (20001031)
tablespace pts_10 );
1. partition À» addÇÏ´Â ¹æ¹ý
11¿ù°ú 12¿ù¿¡ ´ëÇØ partitionÀ» addÇÏ°í ½ÍÀº °æ¿ì ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù.
SQL> alter table part_tbl add partition part_tbl_11
values less than (20001130) tablespace pts_11;
SQL> alter table part_tbl add partition part_tbl_12
values less than (20001231) tablespace pts_12;
2. ƯÁ¤ partition À» »èÁ¦ÇÏ´Â ¹æ¹ý
8¿ù¿¡ ÇØ´çÇÏ´Â partitionÀ» ¾ø¾Ö°í ½ÍÀº °æ¿ì´Â ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù.
SQL> alter table part_tbl drop partition part_tbl_08;
dropµÈ ÈÄ¿¡ »õ·Î 8¿ù¿¡ ÇØ´çÇÏ´Â µ¥ÀÌŸ°¡ ÀԷµǸé
9¿ùÀÇ partitionÀÌ less then (20000930) À¸·Î µÇ¾î ÀÖÀ¸¹Ç·Î
9¿ù¿¡ ÇØ´çÇÏ´Â partition¿¡ ÀúÀåµÈ´Ù.
3. partitionÀ» ³ª´©´Â ¹æ¹ý
1¿ù, 2¿ù¿¡ ÇØ´çÇÏ´Â partitionÀ» »ý¼ºÇÏ·Á¸é partitionÀ»
addÇÏ´Â °ÍÀ¸·Î´Â ºÒ°¡´ÉÇÏ°í ±âÁ¸ÀÇ partition¿¡¼ split ÇØ¾ß ÇÑ´Ù.
SQL> alter table part_tbl split partition part_tbl_03
at (20000229)
into (partition part_tbl_02 tablespace pts_02,
partition part_tbl_03_1 tablespace pts_03);
À§¿Í °°ÀÌ ÇÏ¸é ±âÁ¸ÀÇ partition¿¡¼ 2¿ù29ÀÏÀ» ±âÁØÀ¸·Î 2¿ù°ú 3¿ù·Î
partitionÀÌ ³ª´«´Ù. ±×¸®°í ³ª¼ ´Ù½Ã split ÇؾßÇÑ´Ù.
SQL> alter table part_tbl split partition part_tbl_02
at (20000131)
into (partition part_tbl_01 tablespace pts_01,
partition part_tbl_02_1 tablespace pts_02);
4. partition nameÀ» º¯°æÇÏ´Â ¹æ¹ý
partition name À» ¹Ù²Ù°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÑ´Ù.
SQL> alter table part_tbl rename partition part_tbl_02_1 to part_tbl_02;
SQL> alter table part_tbl rename partition part_tbl_03_1 to part_tbl_03;
5. partitionÀÇ tablespace¸¦ ¿Å±â´Â ¹æ¹ý
partition part_tbl_10À» ÀúÀåÇÏ´Â tablespace¸¦ pts_10 ¿¡¼ pts_10_1·Î
¹Ù²Ù°í ½ÍÀº °æ¿ì ¾Æ·¡¿Í °°Àº command¸¦ »ç¿ëÇÑ´Ù.
SQL> alter table part_tbl move partition part_tbl_10
tablespace pts_10_1 nologging;
6. ƯÁ¤ partitionÀÇ data¸¦ truncateÇÏ´Â ¹æ¹ý
partitionÀÇ data¸¦ ¸ðµÎ »èÁ¦ÇÏ·Á¸é truncateÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö°¡
ÀÖ´Â µ¥, truncate´Â rollback ÀÌ ºÒ°¡´ÉÇϸç ƯÁ¤ partition Àüü¸¦
»èÁ¦ÇϹǷΠÁÖÀÇÇÏ¿© »ç¿ëÇÏ¿©¾ß ÇÑ´Ù.
SQL> alter table part_tbl truncate partition part_tbl_02;
7. Partition tableÀÇ ¹°¸®ÀûÀÎ ¼Ó¼º º¯°æ
partition tableÀº ƯÁ¤ partitionÀÇ ¼Ó¼º¸¸ º¯°æÇÒ ¼ö ÀÖ°í,
tableÀÇ ¼Ó¼ºÀ» º¯°æÇÏ¿© Àüü partition¿¡ ´ëÇØ µ¿ÀÏÇÑ º¯°æÀ» ÇÒ ¼ö ÀÖ´Ù.
SQL> alter table part_tbl storage( next 10M);
-> part_tbl ÀÇ ¸ðµç partitionÀÇ next °ªÀÌ º¯°æµÈ´Ù.
SQL> alter table part_tbl modify partition part_tbl_05
storage ( maxextents 1000 );
-> part_tbl_05 partitionÀÇ maxextents °ª¸¸ º¯°æÇÑ´Ù.
8. IndexÀÇ °ü¸®
À§¿Í °°ÀÌ partition table °ü·Ã ÀÛ¾÷À» ÇÑ ÈÄ¿¡´Â table¿¡ °É·Á ÀÖ´Â
local(partitioned) index ³ª global index¸¦ ¹Ýµå½Ã rebuildÇØ ÁÖ¾î¾ß ÇÑ´Ù.
ƯÁ¤ partitionÀÇ index¸¦ rebuild ÇÏ·Á¸é
SQL> alter index ind_part_tbl rebuild partition i_part_tbl_02;
±×¸®°í global index¸¦ rebuildÇÏ·Á¸é
SQL> alter index part_tbl_pk rebuild;
Reference Document
------------------
partition table¿¡¼ÀÇ index °ü¸®¿¡ ´ëÇؼ´Â <Bul:11672> ¸¦ Âü°í.
** ÆÄƼ¼Ç À妽º **
1. ºÐÇÒ ±¸Á¶Àû ±âÁØ
- global index : index coverage scopeÀÌ partitioned table Àüü.
- local index : index coverage scopeÀÌ ÇØ´ç partitioned table segmentÀÌ´Ù.
2. ºÐÇÒÅ°ÀÇ »ç¿ë ±âÁØ
- prefix index : partition key°¡ À妽ºÀÇ ¼±µÎ Ä÷³À¸·Î ±¸¼º.
- non-prefix index : partition key°¡ À妽ºÀÇ ¼±µÎ Ä÷³À¸·Î ½ÃÀÛÇÏÁö ¾Ê´Â °æ¿ì.
3. Partitoned index vs Non-partitoned index
- index partitionÀº table partition°ú´Â º°°³À̹ǷΠindex partition¸¸ÀÇ storage¿Í
partition key°¡ Á¤ÀǵȴÙ. Áï, Local index´Â ´ÜÁö table partition°ú Equi-Partitioning
À̹ǷΠtable partition key°¡ index partition key¿Í µ¿ÀÏÇÒ »ÓÀÌ´Ù.
============================================================================================
1. ±Û·Î¹ú ºÐÇÒ À妽º
SQL> create table jeon
(idate date,
no char(2),
qty number)
partition by range(idate)
(partition t1 values less than (to_date('2000/01/01', 'yyyy/mm/dd')) tablespace test01,
partition t2 values less than (to_date('2001/01/01', 'yyyy/mm/dd')) tablespace test02,
partition t3 values less than (maxvalue) tablespace test03);
SQL> CREATE INDEX i_jeon ON jeon(idate)
GLOBAL
PARTITION BY RANGE(idate)
(PARTITION t1 VALUES LESS THAN (to_date('1999/01/01', 'yyyy/mm/dd')) TABLESPACE test01,
PARTITION t2 VALUES LESS THAN (MAXVALUE) TABLESPACE test02);
- Å×À̺í°ú À妽ºÀÇ ÆÄƼ¼Ç ¹üÀ§¿Í °³¼ö°¡ Ʋ¸®´Ù.
===============================================================================================
2. ·ÎÄà ºÐÇÒ À妽º
SQL> CREATE INDEX i_jeon ON jeon(idate)
LOCAL
PARTITION BY RANGE(idate)
(PARTITION t1 VALUES LESS THAN (to_date('2000/01/01', 'yyyy/mm/dd')) TABLESPACE test01,
PARTITION t2 VALUES LESS THAN (to_date('2001/01/01', 'yyyy/mm/dd')) TABLESPACE test02,
PARTITION t3 VALUES LESS THAN (MAXVALUE) TABLESPACE test03);
- Å×À̺í°ú À妽ºÀÇ ÆÄƼ¼Ç ¹üÀ§¿Í °³¼ö°¡ °°´Ù.
===============================================================================================
3. prefix index
- ºÐÇÒ Å×À̺í°ú ºÐÇÒ À妽ºÀÇ ºÐÇÒ ±¸Á¶¿Í´Â »ó°ü¾øÀÌ °°Àº ºÐÇÒ Ä÷³À¸·Î »ý¼ºµÉ¶§.
- ±Û·Î¹ú ºÐÇÒ À妽º, ·ÎÄà ºÐÇÒ À妽º ±â¹ý°ú ÇÔ²² »ç¿ëµÈ´Ù.
SQL> CREATE INDEX i_jeon ON jeon(idate)
GLOBAL
PARTITION BY RANGE(idate)
(PARTITION t1 VALUES LESS THAN (to_date('1999/01/01', 'yyyy/mm/dd')) TABLESPACE test01,
PARTITION t2 VALUES LESS THAN (MAXVALUE) TABLESPACE test02);
================================================================================================
4. non-prefix index
- ºÐÇÒ Å×À̺í°ú ºÐÇÒ À妽ºÀÇ ºÐÇÒ Ä÷³ÀÌ ¼·Î ´Ù¸¥ °æ¿ì.
SQL> CREATE INDEX i_jeon ON jeon(idate)
LOCAL
PARTITION BY RANGE(no)
(PARTITION t1 VALUES LESS THAN ('M') TABLESPACE test01,
PARTITION t2 VALUES LESS THAN (MAXVALUE) TABLESPACE test02);
=================================================================================================
1. local prefix index: OLTPȯ°æ¿¡¼ È¿°úÀû.
2. global prefix index: Unique KeyÀÎ °æ¿ì È¿°úÀû.
3. local non-prefix index: DDSȯ°æ¿¡¼ È¿°úÀû.
=================================================================================================
<<house ¼¹ö partrange Å×ÀÌºí¿¡ À妽º »ý¼º Å×½ºÆ®>>
CREATE INDEX PARTRANGE_IND ON PARTRANGE(ORD_YEAR)
LOCAL
(PARTITION P1 TABLESPACE TEST01 STORAGE(INITIAL 1M NEXT 1M),
PARTITION P2 TABLESPACE TEST02 STORAGE(INITIAL 1M NEXT 1M),
PARTITION P3 TABLESPACE TEST03 STORAGE(INITIAL 1M NEXT 1M),
PARTITION OVER TABLESPACE TEST04 STORAGE(INITIAL 1M NEXT 1M));
<<Âü°í>>
==========================================================================
¼ºê ÆÄƼ¼Ç Å×À̺í Ãß°¡½Ã ÆÄƼ¼Ç À妽º´Â Ãß°¡µÇ´Â ÆÄƼ¼Ç Å×ÀÌºí¿¡ ÁöÁ¤µÈ
Å×ÀÌºí½ºÆäÀ̽º¿¡ µðÆúÆ® initial_extent Å©±â¸¸Å ÇÒ´çµÇ¾î »ý¼ºµÈ´Ù.
==========================================================================
|
|
|