Partitioned
วชา การบรหารระบบฐานขอมล (DATABASE SYSTEM MANAGEMENT) รหสวชา 801306-46
เสนอ
อาจารยวสนต กลดลก
คณะผจดทา
นางสาวณฐนนท สมประสงค รหสนกศกษา 13530035
นางสาวนศาชล ชชวย รหสนกศกษา 13530062
นางสาวพรมา สรอยสงวาลย รหสนกศกษา 13530073
นางสาวภกธรา ลาประวต รหสนกศกษา 13530080
นางสาววชดา จาพมาย รหสนกศกษา 13530097
นายสทธโชค โตศะศข รหสนกศกษา 13530106
นายสรสทธ พนสวสด รหสนกศกษา 13530110
นางสาวเบญจพร พมไสว รหสนกศกษา 13530201
นางสาวอรวรรณ อภเลปน รหสนกศกษา 13530286
ภาคเรยนท 2 ปการศกษา 2554
มหาวทยาลยศลปากร
คานา
รายงานฉบบน จดทาขนเพอใหผอานไดรบความรในเรอง Partition ซงเปนสวนหนงของวชา การ
บรหารระบบฐานขอมล (DATABASE SYSTEM MANAGEMENT) โดย Partition แบงออกเปน 2
ประเภท คอ Partition Table และ Partition Index ซง Partition Table คอ ตารางขอมลทสามารถแบง
ออกเปนสวนยอยๆตามเงอนไขทกาหนดได สวน Partition Index คอ อนเดกซทสามารถแบงออกเปน
สวนยอยๆไดตามเงอนไขทใชในการแบงขอมลเพอสรางอนเดกซ ซงคณะผจดทาหวงวารายงานฉบบนจะ
เปนประโยชนแกผอานไมมากกนอย ถารายงานฉบบนมความผดพลาดประการใดทางคณะผจดทาตองขอ
อภยมา ณ ทนดวย
คณะผจดทา
สารบญ
เนอหา หนา
Partitioned Table คออะไร 1
รปแบบของการแบง Partitioned Table 2
Partitioned Index คออะไร 4
ประเภทของ Partitioned Index 4
วธสราง Partitioned Table 6
สรางตารางแบบ Range Partition 6
สรางตารางแบบ Hash Partition 15
จดการกบ Partition ของตาราง 19
เพม Partition ใหกบตาราง 19
ลบ Partition ทไมตองการออกจากตาราง 24
การยบรวม Partition ของตาราง 27
แยก Partition ของตารางออกเปน 2 Partition 29
วธสราง Partitioned Index 32
สราง Local Partitioned Index 32
สราง Global Partitioned Index 35
จดการกบ Partition ของอนเดกซ 41
สงใหลบ Partition ของอนเดกซ 41
การแยก Partition ของอนเดกซ 44
การ Rebuild Partitioned Index 47
การมอนเตอรการใชงาน Partitioned Table และ Partitioned Index 49
บทสรป 62
Partitioned Table และ Partitioned Index
Partitioned Table และ Partitioned Index ซงเปนการใชงานตารางและอนเดกซรปแบบใหม
สาหรบฐานขอมล Oracle เวอรชน 8i เปนตนไป โดยเราจะมาทาความรจกวา Partitioned Table และ
Partitioned Index คออะไร มวธการจดการอยางไร แตกตางจากการจดการกบตารางและอนเดกซในรป
แบบเดมทไมไดกาหนดเปนพารตชนอยางไร และปดทายดวยการมอนเตอรการใชงาน Partitioned Table
และ Partitioned Index ภายในฐานขอมล
Partitioned Table
รปแบบใหมของตารางขอมลใน Oracle 8i คอ ตารางขอมลทเรยกวา Partitioned Table ซงเปน
ตารางขอมลทสามารถแบงออกเปนสวนยอยๆ ตามเงอนไขทกาหนดได เราเรยกแตละสวนยอยของตาราง
วา Partition โดยแตละ Partition ของตารางสามารถแยกเกบไวใน Tablespace ตางกนได ซงจะแตกตาง
กบตารางขอมลตามปกตทตองสรางไวใน Tablespace เดยวเทานน
ยกตวอยางเชน ตาราง Sale_transation ทถกกาหนดใหเปน Partitioned Table โดยใชขอมลวนท
ของการขายเปนตวแบง Partitioned ออกเปน 4 สวนตาม Quarter ของการขาย และแตละสวนกแยกเกบ
ไวใน Tablespace 1-4 ตามลาดบ ดงรป
Note: ถงแมวาเราจะสามารถแยกเกบ Partitioned Table ไวใน Tablespace มากกวา 1 Tablespace
ไดกตาม แตในแตละ Partition จะยงคงเกบไดใน 1 Tablespace เทานน ไมสามารถกระจาย 1 Patition
ไวในหลายๆ Tablespace ได
ตารางขอมลแบบ Partitioned Table เหมาะกบการจดเกบขอมลทมขนาดใหญมากๆ เนองจากเรา
สามารถกระจายตารางไปเกบไวใน Tablespace ไดมากกวา 1 Tablespace ทาใหโอกาสของการสญเสย
ขอมลทงหมดในตารางลดลง และถาเราเกบขอมลเปนแบบ Partitioned Table แลวเกดมขอมลใน
Partition ไหนเสย ขอมลใน Partition อนๆ กจะยงคงอยและยสเซอรกยงคงใชงานขอมลใน Partition
นนๆ ไดตามปกตอกดวย
นอกจากนเรายงสามารถลบเฉพาะ Partition ทตองการทงไดในขณะทขอมลใน Partition อนๆ
ยงคงอยครบ และการอานขอมลทงตารางในแบบ Partitioned Table กยงทาไดเรวขนอกดวย เนองจากม
การแบงตารางออกเปนสวนๆ กระจายกนอยในหลายๆ Tablespace นนเอง
รปแบบของการแบง Partitioned Table
Partitioned Table ในฐานขอมล Oracle นนมอย 3ประเภท โดยแยกตามลกษณะเงอนไขในการ
แบง Partition ของตารางคอ
• ประเภทท 1 Range Partition เปน Partitioned Table ทใชคาขอมลของคอลมนทกาหนดใน
การแบงขอมลออกเปนชวงๆ (Range) ซงการสราง Partitioned Table แบบนจะมการกาหนดชวง
ของขอมลตายตวขอมลจงกระจายอยใน Partition ตามเงอนไขของขอมลวาตกอยในชวงไหน
ตวอยาง ถาเราตองการสรางตาราง Employee ใหเปนแบบ Range Partition โดยแบงขอมลของ
พนกงานตามปทพนกงานเขามาทางานเปนหลกกสามารถทาไดดงน
ถาพนกงานเขามาทางานกอนป 2000 จะเกบขอมลอยใน Partition ท 1
ถาพนกงานเขามาทางานในป 2000 จะเกบขอมลอยใน Partition ท 2
ถาพนกงานเขามาทางานในป 2001 จะเกบขอมลอยใน Partition ท 3
ถาพนกงานเขามาทางานตงแตป 2002 เปนตนไปจะเกบอยใน Partition ท 4
Note: ขนตอนการเพมขอมลเขามาในตารางแบบ Range Partition จะเรมตนทการตรวจสอบขอมลตาม
เงอนไขทกาหนดตงแต Partition แรกเปนตนไป โดยถาขอมลมเงอนไขตรงกบ Partition ใด ขอมลจะถก
เกบอยใน Partition นนทนท แตถาขอมลไมสามารถเกบลงใน Partition ใด ในตารางไดเลยกจะเกด
ขอผดพลาดขน
• ประเภทท 2 Hash Partition เปน Partitioned Table ทเราตองกาหนดคอลมนทใชแบงชวงของ
ขอมลเองแลวปลอยให Oracle เปนตวจดการแบง Partition ใหโดยอตโนมตโดยทเราจะไมทราบ
เลยวาเงอนไขทใชแบงขอมลคออะไร (เนองจาก Oracle จะกระจายขอมลลงใน Tablespace เอง)
ตวอยาง การแบงขอมลพนกงานดวยคาของรหสพนกงานเปนหลกโดยใช Hash Partition ดงรป
• ประเภทท 3 Composite Partition เปน Partitioned Table ทใชทง Range และ Hash ในการ
แบง Partition ของตาราง โดยเรมตนจะแบง Partition ของตารางโดยใชเงอนไขแบบ Range
กอนแลวแบงแตละ Partition โดยใช Hash Function อกครง
ตวอยาง การแบงขอมลพนกงานออกเปน Partition ตามปทพนกงานเขามาทางาน และแบงแตละ
Partition ตามรหสพนกงานอก ดงรป
Note: รปแบบของ Partitioned Table ทมการใชงานกนอยางแพรหลายกคอ แบบ Range Partition และ
Hash Partition สวน Composite Partition นนไมคอยไดรบความนยมในการใชงานเทาไหรนก
Partitioned Index
Partitioned Index คอ อนเดกซทสามารถแบงออกเปนสวนยอยๆไดตามเงอนไขทใชในการแบง
ขอมลเพอสรางอนเดกซ โดยเราจะเรยกแตละสวนของอนดกซทถกแบงวา Partition ซงเราสามารถแยก
เกบแตละ Partition ไวใน Tablespace ทตางกนได (แตกตางกบอนเดกซปกตทสามารถสรางไวไดภายใน
Tablespace เดยวเทานน) โดยการใชงาน Partitioned Index นนจะสามารถใชไดกบตารางขอมลทเปนแบบ
Partitioned Table เทานน
ประเภทของ Partitioned Index
Partitioned Index แบงออกไดเปน 2 ประเภทคอ
1. Local Partitioned Index เปนอนเดกซทสรางแยกออกเปนสวนยอยๆโดยแตละสวนสามารถ
จดเกบอยคนละ Tablespace ได และสามารถสรางไดบนตารางทเปน Partitioned Table เทานน
โดยจานวน Partition ของอนเดกซจะตองตรงกบจานวน Partition ของตารางขอมลทจดสรางอน
เดกซแบบนขน หากคอลมนทใชในการแบง Partitioned Table เปนสวนหนงของคอลมนทใชใน
การสราง Partitioned Index เราจะเรยกอนเดกซนวา Local Prefixed Index หากไมใชเราเรา
เรยกอนเดกซนนวา Local Nonprefixed Index
ตวอยางเชน ถาคอลมนทใชในการแบง Partitioned Table ของตาราง Sale_transaction คอ
Sale_date และ Partitioned Index ทสรางบนตาราง Sale_transaction มคอลมน Sale_date เปน
คอลมนแรกในการสรางอนเดกซเรากจะเรยกอนเดกซนวา Local Prefixed Index เปนตน
2. Global Partitioned Index เปนอนเดกซทใชงานกบ Partitioned Table เชนกน แตไมไดแบง
อนเดกซออกเปนสวนยอยๆตามจานวน Partition ของอนเดกซทสรางอาจจะมจานวนมากกวา
นอยกวา หรอเทากบจานวน Partition ของตารางขอมลกได
คอลมนทนามาสรางเปน Global Index จะตองเปนคอลมนทใชในการสราง Partitioned Table
ดวยเสมอ โดยเราอาจจะเรยกอนเดกซนวา Global Prefixed Index
Note: ในการใชงาน Partitioned Index นน หาก Partition ของตารางทใชสรางอนเดกซมการ
เปลยนแปลงจะสงผลกระทบกบสถานะของอนเดกซทงแบบ Local Index และ Global Index โดยจะทา
ใหสถานะของอนเดกซเปน Invalid หรอ Unusable
กรณทเปน Local Index จะสงผลใหอนเดกซใชงานไมไดเฉพาะ Partition ทมการเปลยนแปลง
เทานน แตถาเปน Global Index จะใชงานไมไดเลยทงหมด
วธแกปญหานคอ DBA จะตองสงใหทาการ Rebuild อนเดกซใน Partition ทใชงานไมได
เพอใหสถานะของอนเดกซเปลยนมาเปน Valid เชนเดมโดยวธการ Rebuild นน จะกลาวถงในหวขอ
ตอๆไป
วธสราง Partitioned Table
วธสรางและจดการกบ Partitioned Table ภายในฐานขอมล Oracle ทควรทราบและควรทาได
คอ การสราง Partitioned Table แบบ Range Partition และ Hash Partition ซงนยมใชกนเปนอยางมาก
เทานน โดยแตละแบบกมคาสงในการสรางแตกตางกนดงรายละเอยดตอไปน
สรางตารางแบบ Range Partition
วธสรางตารางแบบ Range Partition นน เราตองกาหนดเงอนไขในการแบง Partition ของตาราง
ออกเปนชวงๆ เอง โดยใชคาสงดงน
Syntax:
CREATE TABLE owner.table_name
(column1 datatype [costraint],
column2 datatype [costraint])
PARTITION BY RANGE (column_name)
(PARTITION partition1 VALUES LESS THAN (value1)
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)])
[ENABLE
ในรปแบบคาสงขางตนเราไดกาหนดสวนของการสราง Partition ไวตามหลงคอลมนสดทายของ
ตารางขอมล โดยถาตองการแบง Partition ดวยคอลมนมากกวา 1 คอลมนกทาไดโดยเพมเครองหมาย (,)
ตามดวยชอของคอลมนเพมเตมเขาไป เชน PARTITION BY RANGE (column1, column2) เปนตน
| DISABLE ROW MOVEMENT];
ความหมายในแตละประโยคคาสงมดงน
CREATE TABLE คาสงใหสรางตาราง
owner.table_name กาหนดเจาของตารางและชอตารางตามลาดบ
( column1 datatype (constraint),
column2 datatype (constraint)
กาหนดชอคอลมน (column1, column2) ประเภทขอมลทจดเกบ (datatype) และ
คา Constraint ของคอลมนนน ((constraint)) เชน เกบคา Null ไดหรอไม เปน
ตน
PARTITION BY RANGE
(column_name)
กาหนดใหแบง Partition แบบ Range โดยใชคอลมนทกาหนดเปนตวแบง ซง
คอลมนทใชในการแบง Partition อาจจะมมากกวา 1 คอลมนกได
PARTITION partition1 กาหนดชอ Partition (partition1, partition2)
VALUES LESS THAN (value1) กาหนดคาของขอมลใน Partition วาตองนอยกวาคาทกาหนด (value1, value2)
(TABLESPACE tablespace_name) กาหนดชอ Tablespace ทตองใชเกบ Partition
(STORAGE (storage_clause)) กาหนด Storage ในการสรางตารางภายใน Tablespace ทกาหนด
(ENABLE กาหนดวาขอมลสามารถยาย Partition ไดหรอไม กรณทมการ Update คา
คอลมนทใชในการแบง Partition โดยถากาหนดเปน Enable แสดงวาใหยายได
สวน Disable แสดงวายายไมได
| DISABLE ROW
MOVEMENT)
เมอมการเพมขอมลเขามาในตารางแบบ Partition น ขอมลดงกลาวจะถกตรวจสอบคาตามเงอนไข
ของคอลมนทกาหนดใน Partition แรกกอน ถาตรวจสอบแลวพบวาขอมลมคาตรงกบเงอนไขของ
Partition ขอมลจะถกเกบลงใน Partition นทนท
แตหากตรวจสอบแลวพบวาคาของขอมลไมตรงกบเงอนไขทกาหนด กจะทาการนาคาของขอมล
ไปตรวจสอบกบ Partition ตอไป ซงกคอ Partition ทสอง (ตามลาดบ) เปนเชนนจนกระทงเจอ Partition
ทขอมลสามารถเพมลงไปไดนนเอง
Note: คา Value ทใชเปนเงอนไขในการเปรยบเทยบนนจะมคาพเศษอย 1 คาคอ คา MAXVALUE ซง
เอาไวแทนคาขอมลทมากทสดโดยไมจากดวาเปนขอมลชนดใด ซง Partition ทเปน MAXVALUE นจะ
เปน Partition สดทายเสมอ เพราะถอวาเปนคาทมากทสด (ไมมคาไหนมากกวาคานแลว) คาขอมลท
เปน NULL ถอวาเปนคาสงสดเสมอ ดงนนการเพมคา NULL ลงไปจะตองม Partition ทมคา
MAXVALUE อยดวยจงจะสามารถทาได
ตวอยางท 1 ตองการสรางตาราง Sale_transaction ภายใตยสเซอร Retail เกบไวใน Tablespace
DATA2_TS โดยกาหนดพนทเรมตนในการจองเพอใชงานเทากบพนทของ Extent ถดไปคอ 2
เมกกะไบต และกาหนดใหการจองพนทเพมขนมขนาดเทากนเสมอ
โครงสรางของตารางทตองการสรางเปนดงน
คอลมน ประเภทขอมล
Item_id Number(3) NOT NULL
Customer_id Number(5)
Quantity Number(4)
Total_price Number(7,2)
Sale_id Number(3)
Sale_date Date
เราจะแบงขอมลในตารางนเปนสวนๆ ดวยคาคอลมน Sale_date โดยแบงตามเดอนทขายของดงน
ชอ Partition คาของขอมลทเกบ
Sale_1201 ขอมลของเดอนธนวาคม 2544
Sale_0102 ขอมลของเดอนมกราคม 2545
Sale_0202 ขอมลของเดอนกมภาพนธ 2545
Sale_0302 ขอมลของเดอนมนาคม 2545
Sale_0402 ขอมลของเดอนเมษายน 2545
วธท 1 ใชคาสง SQL ผาน SQL*Plus หรอ Svrmgrl
CREATE TABLE retail.sale_transaction
( item_id NUMBER(3) NOTNULL,
customer_id NUMBER(5)
quantity NUMBER(4)
total_price NUMBER(7,2)
sale_id NUMBER(3)
sale_date DATE)
PARTITION BY RANGE (sale_date)
( PARTITION sale_1201 VALUES LESS THAN (to_date(’01-jan-2002’,’dd-mon-yyyy’))
TABLESPACE data1_ts STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0),
PARTITION sale_0102 VALUES LESS THAN (to_date(’01-feb-2002’,’dd-mon-yyyy’))
TABLESPACE data1_ts STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0),
PARTITION sale_0202 VALUES LESS THAN (to_date(’01-mar-2002’,’dd-mon-yyyy’))
TABLESPACE data1_ts STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0),
PARTITION sale_1201 VALUES LESS THAN (to_date(’01-apr-2002’,’dd-mon-yyyy’))
TABLESPACE data1_ts STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0),
PARTITION sale_1201 VALUES LESS THAN (to_date(’01-jan-2002’,’dd-mon-yyyy’))
TABLESPACE data1_ts STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0))
ENABLE ROW MOVEMENT;
จากตวอยางเปนการสรางตาราง Sale_transaction ภายใตยสเซอร Retail โดยสรางเปน
Partitioned Table ทแบงขอมลออกเปนสวนยอยๆตามคอลมน Sale_date ซงคาทแบงไดคอ
Partition Sale_1201 เกบขอมลยอดขายทมคา Sale_date นอยกวาวนท 1 January 2002
Partition Sale_0102 เกบขอมลยอดขายทมคา Sale_date นอยกวาวนท 1 February
2002
Partition Sale_0202 เกบขอมลยอดขายทมคา Sale_date นอยกวาวนท 1 March 2002
Partition Sale_0302 เกบขอมลยอดขายทมคา Sale_date นอยกวาวนท 1 April 2002
Partition Sale_0402 เกบขอมลยอดขายทมคา Sale_date นอยกวาวนท 1 May 2002
ผลลพธของการสรางตารางขางตนแสดงดงรป
วธท 2
1. ขยาย Tree จากชอฐานขอมล ORCL > Schema > Table ดงรป หนาจอจะแสดงรายละเอยด
ของตารางทงหมดทมในฐานขอมล เชน แสดงเจาของ ชอตาราง และ Tablespace ทเกบตาราง เปนตน
ใช DBA Studio มขนตอนดงน
2. คลกขวาท Table ในหนาตางดานซายมอ จะแสดงเมนขนมาใหเลอกดงรป
3. คลกเลอกคาสง Create หนาจอจะแสดงหนาตางใหกาหนดรายละเอยดในการสรางตาราง
4. กาหนดโครงสรางตารางและชอตารางทตองการสรางทแทบ General ดงน
4.1 Name: กาหนดชอของตารางทตองการสราง ไดแก SALE_TRANSACTION
4.2 Schema: กาหนดชอยสเซอรทเปนเจาของตาราง ไดแก RETAIL
4.3 Table: กาหนดประเภทของตารางทตองการสราง ไดแก STANDARD
4.4 Define Column: กาหนดโครงสรางของตาราง ไดแก คอลมนตางๆตามทตองการ ดงรป
5. คลกแทบ Partitions เพอกาหนดการสราง Partition ของตารางหนาจอจะแบงออกเปน 2 สวน
โดยสวนบนจะแสดงคอลมนทงหมดของตาราง ซงเราจะใชกาหนดคอลมนทเปนเงอนไขในการแบง
Partition และสวนลางคอ Range Partition ซงจะใชกาหนดรายละเอยดของ Partition
6. กาหนดรายละเอยดของ Partition ดงน
6.1 คลกทชอง Range partition column order ของคอลมน SALE_DATE ในตารางสวนบน
(จะมหมายเลขปรากฏขนมาโดยอตโนมต) เพอกาหนดใหใชคอลมน SALE_DATE ในการแบง Partition
โดยหากคอลมนทใชในการแบงมมากกวา 1 คอลมนกใหเลอกคลกคอลมนทตองการตามลาดบใหครบถวน
6.2 ในสวนลางใหกาหนดชอ Partition ในชอง Partition Name กาหนดชอ Tablespace ทใช
ในการจดเกบในชอง Tablespace และกาหนดเงอนไขแตละ Partition ในชอง SALE_DATE-High values
ตวอยางเชน กาหนดใหเกบ Partition SALE_1201 ไวใน Tablespace DATA1_TS ลาหนดใหคาของ
ขอมลใน Partition นตองนอยกวาวนท 1 มกราคม 2002 เปนตน
7. คลกแทบ Storage
8. กาหนดคาการจองพนทตารางของทก Partition ใหมคาเทากนหมด ดงน
8.1 Initial Size = 2 MB
8.2 Next Size = 2 MB
8.3 Increase Size by = 0%
9. คลกปม เพอยนยนการสรางตาราง
10. รอจนกระทงแสดงหนาจอดงรป แสดงวาสรางตารางสาเรจแลว
Note: เราไมสามารถกาหนดเงอนไขของ Partition อนๆ ในตารางใหมคานอยกวา Partition แรกของ
ตารางได โดยจะเกดขอผดพลาดขนดงน
ORA-14037: partition bound of partition “partition_name” is too high
วธแกไขคอ กาหนดคาเงอนไขของ Partition ใหถกตองโดยเรยงลาดบจากนอยไปหามาก
สรางตารางแบบ Hash Partition
วธสรางตารางแบบ Hash Partition นนไมจาเปนตองกาหนดเงอนไขของแตละ Partition เอง
เนองจาก Oracle จะสรางเงอนไขในการแบงขอมลใหโดยอตโนมต
การสรางตารางแบบ Hash Partition ทาไดโดยใชคาสงดงน
CREATE TABLE owner.table_name
Syntax: แบบท 1
( column1 datatype [constraint],
column2 datatype [constraint])
[STORAGE (storange_clause)]
PARTITION BY HASH (column_name)
PARTITION number
[STORAGE IN (tablespace1, tablespace2)]
[ENABLE | DISABLE ROW MOVEMENT];
คาสงในการสรางตาราง Hash Partition แบบท 1 นเราจะกาหนดจานวน Partition ใหกบตาราง
วาตองการก Partition (PARTITIONS number)แลวปลอยให Oracle กาหนดเงอนไขในการแบงขอมลเอง
โดยสามารถกาหนดจานวนชอ Tablespace ทตองการจดเกบ Partition ของตารางได ซง Oracle
กจะกระจาย Partition ของตารางไปเกบไวใน Tablespace ตามทกาหนดเองโดยอตโนมตเชนกน
CREATE TABLE owner.table_name
Syntax: แบบท 2
( column1 datatype [constraint],
column2 datatype [constraint])
[STORAGE (storange_clause)]
PARTITION BY HASH (column_name)
(PARTITION partition1 [TABLESPACE tablespace1],
PARTITION partition2 [TABLESPACE tablespace2])
[ENABLE | DISABLE ROW MOVEMENT];
คาสงในรปแบบท 2 นจะแตกตางจากรปแบบท 1 ตรงทเราสามารถกาหนดชอ Partition ไดเอง
และยงสามารถกาหนดไดอกวาจะเกบ Partition นไวท Tablespace ใด โดยท Oracle จะแบงขอมล
ออกเปนสวนๆ ตามจานวนทกาหนดและจดเกบไวใน Tablespace ทกาหนดเอาไวในคาสงเชนเดยวกน
ความหมายในแตละประโยคคาสงมดงน
CREATE TABLE คาสงใหสรางตาราง
owner.tablespace_name กาหนดเจาของตารางและชอตารางตามลาดบ
( column1 datatype (constraint),
column2 datatype (constraint))
กาหนดชอคอลมน (column1, column2) ประเภทขอมลทจดเกบ (datatype) และ
คา Constraint ของคอลมนนน ((constraint)) เชน เกบคา Null ไดหรอไม เปน
ตน
STORAGE( storage_clause) กาหนดคาการจองพนท (Storage)ของการสรางตาราง
PARTITION BY HASH
(column_name) กาหนดการแบง Partition แบบ Hash โดยใชคอลมนทกาหนดเปนตวแบง
PARTITION number กาหนดจานวน Partition ทจะสรางทงหมด
STORE IN (tablespace1, tablespace2) กาหนด Tablespace ทตองใหเกบตาราง
(ENABLE กาหนดวาขอมลสามารถยาย Partition ไดหรอไม กรณทมการ Update คา
คอลมนทใชในการแบง Partition โดยถากาหนดเปน Enable แสดงวาใหยายได
สวน Disable แสดงวายายไมได
| DISABLE ROW
MOVEMENT)
PARTITION partition1 กาหนดชอ Partition ใหมชอตามคา partition1 ทกาหนด
(TABLESPACE tablespace_name) กาหนดชอ Tablespace ทตองการเกบ Partition
ตวอยางท 2 สรางตาราง Customer ภายใตยสเซอร Retail โดยแบงขอมลในตารางออกเปน
สวนๆตามคาของคอลมน Customer_id ดวยเงอนไขการแบงตารางแบบ Hash Partition โดยแบงทงหมด
ออกเปน 8 Partition เกบตารางไวใน Tablespace DATA2_TS และกาหนดใหตารางดงกลาวใชคาการ
จองพนทของ Tablespace DATA2_TS
ตาราง Customer มโครงสรางเปนดงน
คอลมน ประเภทขอมล
Customer_id Number(5)
First_name Varchar2(30)
Last_name Varchar2(30)
Address Varchar2(50)
Telephone Varchar2(10)
การสรางตาราง Customer แบบ Hash Partition สามารถทาไดโดยใชคาสงดงน
CREATE TABLE retail.customer
(customer_id NUMBER(5) NOTNULL,
first_name VARCHAR(30),
last_name VARCHAR(30),
address VARCHAR(50),
telephone VARCHAR(10))
PARTITION BY HASH (customer_id)
PARTITIONS 8
STORE IN (data2_ts);
คาสงทแสดงขางตนเปนคาสงในการสรางตาราง Customer แบบ Hash Partition โดยใชคอลมน
Customer_id ในการแบง Partition ซงเงอนไขนน Oracle จะกาหนดใหเองโดยอตโนมต จานวน
Partition ทแบงทงหมดม 8 Partition โดยเกบไวใน Tablesace DATA2_TS ทงหมด
คาการจองพนทของตารางจะใชคาเดยวกบคาการจองพนทของ Tablespace เนองจากไมไดกาหนด
สวนการจองพนทไวในคาสงสรางตาราง จงมการนาคาดฟอลตของ Tablespace มาใชนนเอง สาหรบ
ผลลพธกแสดงดงรป
Note: การสรางตารางแบบ Hash Partition นนไมสามารถสรางโดยใช DBA Studio ไดเนองจาก
โปรแกรม DBA Studio จะสรางไดเฉพะตารางแบบ Range Partition เทานน
การจดการกบ Partition ของตาราง
การจดการกบ Partition ของตารางทเปนพนฐานเพยง 4 แบบ ไดแก การเพม การลบ การยบ
รวม และการแยก Partition โดยการกระทาตางๆ นจะกลาวถงเฉพาะตารางทเปนแบบ Range Partition
และ Hash Partition เทานน
การจดการ Partition ใหกบตารางแบบ Range Partition ไดทง 4 แบบคอ การเพม การลบ การ
ยบรวม และการแยก Partition แตตารางแบบ Hash Partition นนจะสามารถทาไดเพยงแคการเพมและ
การลบ Partition เทานน
1. การเพม Partition ใหตรงกบตาราง
การเพม Partition ใหกบตาราง Range Partition นนสามารถเพมเขาไปไดเฉพาะ Partition
สดทายเทานน โดยคาทเปนเงอนไขของ Partition ทเพมเขาไปจะตองมคามากกวาเงอนไขใน Partition
อนๆทไดกาหนดเอาไวแลว
คาสงในการเพม Partition ใหกบตารางแบบ Range Partition คอ
Syntax: Range Partition
ALTER TABLE owner.table_name
ADD PARTITION partition_name VALUES LESS THAN (value)
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)];
สาหรบตารางแบบ Hash Partition นน Oracle จะเพม Partition และกาหนดเงอนไขของ
Partition ใหเองโดยอตโนมต ซงถาเราตองการเพม Partition ใหกบตารางแบบ Hash Partition กสามาทา
ไดโดยใชคาสงตอไปน
Syntax: Hash Partition
ALTER TABLE owner.table_name ADD PARTITION [partition_name]
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)];
หากในประโยคคาสงไมไดกาหนด Tablespace และคาการจองพนทสาหรบ Partitionทเพมขนมา
ใหม Partition ดงกลาวกจะสรางไวใน Tablespace ทเปนดฟอลตของยสเซอรและใชคา Storage ทเปนคา
ดฟอลตของ Tablespace นนโดยอตโนมต (รายละเอยดเกยวกบ Tablespace ทเปนดฟอลตของยสเซอร)
ความหมายของแตละประโยคในคาสงเปนดงน
ALTER TABLE คาสงใหมการเปลยนแปลงกบตาราง
owner.table_name กาหนดเจาของและตารางทตองการเปลยนแปลง
ADD PARTITION (partition_name) กาหนดใหเพม Partition
VALUES LESS THAN (value) กาหนดขอบเขตของ Partition
(TABLESPACE tablespace_name) กาหนดชอ Tablespace ทใชในการเกบขอมล
(STORAGE (storage_clause)) กาหนดคาในการจองพนทของตาราง
Note: สาหรบตารางแบบ Range Partition เราจะเพม Partition ไดเฉพาะ Partition สดทายเทานน โดย
ถา Partition สดทายของตารางมคาสงสดเปน Maxvalue แลว เราจะไมสามารถเพม Partition ใหมเขาไป
ในตารางได เนองจากคา Maxvalue เปนคาพเศษซงถอวาเปนคาสงสดของขอมล จงไมมคาไหนทจะมคา
มากกวาคานไดอกแลว ซงในกรณนจะมขอผดพลาดแสดงขนมาดงน
ORA-14074: partition bound must collate higher than that of the last partition
วธแกปญหาคอ ใหเปลยนมาใชวธแยก Partition สดทายแทนการเพม Partition ใหมเขาไปตาราง
ตวอยางท 3 ตองการเพม Partition ใหมชอวา Sale_x เขาไปในตาราง Retail.sale_transaction เพอเกบคา
ขอมลยอดขายของเดอนอนๆทมคามากกวาคาทกาหนดอยใน Partition สดทายของตาราง คขอบเขตสงสด
ของ Partition Sale_x ทตองการคอคา MAXVALUE กาหนดใหเกบ Partition ทสรางไวใน Tablespace
DATA1_TS คาการจองพนทเรมตนและคาการจองพนทถดไปของ Partition มคาเทากนคอ 2 เมกกะไบต
และกาหนดใหทก Extent มคาการจองพนทเพมขนเทากนเสมอ
วธท 1
ALTER TABLE retail.sale_transaction
ใชคาสง SQL ผาน SQL*Plus หรอ Svrmgrl
ADD PARTITION sale_x VALUES LESS THAN (MAXVALUE)
TABLESPACE data1_ts STORAGE (INITIAL 2M NEXT 2M PCTINCREASE 0);
ตาราง Sale_transaction ภายใตยสเซอร Retail เปนตารางแบบ Range Partition ซงถกสราง
ขนมาในตวอยางท 1 ดงนนเราจงตองใชคาสงการเพม Partition ของตารางแบบ Range Partition
Partition ทสรางขนมาใหมมชอวา Sale_x โดยมคาสงสดทเปนขอบเขตของ Partition เทากบคา
MAXVALUE กาหนดใหเกบ Partition ไวใน Tablespace DATA1_TS มคาการจองพนทตามทกาหนด
คอ Initial Extent = 2 MB, Next Extent = 2 MB และ Percent Increase =0 ผลลพธทไดแสดงดงรป
วธท 2
1. ขยาย Tree จากชอฐานขอมล ORCL > Schema > Table > Retail > SALE_TRANSACTION\
ใช DBA Studio มขนตอนดงน
ดงรป หนาจอจะแสดงโครงสรางตารางทเลอก
2. คลกแทบ Partitions หนาจอจะแสดงรายละเอยดของ Partition ในตารางดงรป
3. คลกปม Add เพอเพม Partitions โดยจะปรากฏหนาจอสาหรบเพม Partitions ขนมา
4.กาหนดรายละเอยดของ Partition ทตองการเพมดงน
4.1 Name: การกาหนดชอ Partition ทตองการเพมไดแก SALE_X
4.2 Tablespace: การกาหนด Tablespace ทจะเกบ Partition ไดแก DataA1_TS
4.3 High Value: กาหนดคาสงสดของ Partition ไดแก MAXVALUE
5. คลกแทบ Storage
6. กาหนดคาการจองพนทของ Partition ใหมดงน
6.1 Intial Size = 2 MB
6.2 Next Size = 2 MB
6.3 Increase Size by = 0%
7. คลกปม OK เพอเปนการยนยนการเพม Partition ในตาราง
2. ลบ Partition ทไมตองการออกจากตาราง
การลบ Partition สาหรบ Range Partition และ Hash Partition ทมลกษณะการทางานตางเลกนอย
กลาวคอ ในการลบ Partition สาหรบ Range Partition เราสามารถกาหนด Partition ทตองการลบได แต
สาหรบแบบ Hash Partition นนเราไมสามารถกาหนดไดวาจะใหลบ Partition ไหน เนองจากถกจดการโดย
Orecle เอง
การลบ Partition ของตารางแบบ Range Partition เราตองกาหนดชอ Partition ทตองการลบออกจาก
ตางราง ซงเมอ Partition ถกลบออกไปแลวขอมลใน Partition ทถกลบออกกจะหายไปเชนกน การลบทาได
โดยการใชคาสงดงน
Syntax: Range Partition
ALTER TABLE owner.table_name DROP PARTITION Partition_name;
สาหรบการลบ Partition ของตารางแบบ Hash Partition นนสามารถทาไดโดยการสงใหยบรวม
Partition ซงจะทาใหมการเปลยนแปลงโครงสรางของ Partition เองอตโนมต และขอมลใน Partition จะยง
อยครบไมหายไปไหนโดยจะยบรวมกนไปอยใน Partition อนๆ การลบ Partition ของตารางแบบ Hash
Partition ใชคาสงได ดงน
Syntax: Hash Partition
ALTER TABLE owner.table_name COALESCE PARTITION;
ความหมายแตละประโยคคาสงตอไปน
ALTER TABLE คาสงใหมการเปลยนแปลงในตาราง
Owner.table_name กาหนดเจาของตารางทการเปลยนแปลง
DROP PARTITION Partition_name กาหนดใหลบ Partition ตามทกาหนด
COALESCE PARTITION สงใหลบ Partition สาหรบ Hash Partition
ตวอยางท 4 ตองการลบ Partition ทชอวา Sale_1201 ออกไปจากตาราง Restail.sale_transaction
เนองจากไมตองการใชงานขอมลในสวนนนแลว
วธท1
ALTER TABLE restail.sale_transaction DROP PARTITION sale_1201;
ใชคาสง SQL ผาน SQL’Plus หรอ Range Partition เราจงสามารถกาหนดชอ Partition ทตองการลบ
ไดเลย โดยขอมลทเกบอยใน Partition ดงกลาวจะหายไปพรอมๆกบการลบ Partition ดวยผลลพธทแสดงดง
รป
จากตวอยางตาราง Sale_transaction เปนตารางแบบ
วธท 2
1. ขยาย Tree จากการเชอมฐานขอมล ORCL > Schema > Table > Retail > SALE_TRANSACTION
ดงรป หนาจอจะแสดงโครงสรางทตารางเลอก
ใช DBA Studio มขนตอนดงน
2. คลกแฟม Partition หนาจอจะแสดง Partition ทงหมดของตาราง Sale_transaction
3. คลกเลอก Partition SALE_1201 ทตองการลบในสวน Range Partitions ใหเกดเปนแทบส
4. คลกปม Delete เพอลบ Partition
5. คลกปม Apply เพอเปนการยนยนการลบ Partition ในตาราง
3. การยบรวม Partition ของตาราง
ถาขอมลทเกบอยในแตละ Partition เหลอนอยเราสามรถรวมขอมลดงกลาวไวดวยกนเปน
Partition ทมขนาดใหญได นอกจากนเราอาจจะบบรวม Partition เพอเกบขอมลใหมขนาดใหญขน
เชน ยบรวม Partition ทเกบขอมลของแตละวนในสปดาหเปน Partition เดยวซงเกบขอมลของทง
สปดาหเลยกได
การยบรวม Partition หรอการ Merge Partition น สามารถทาไดเฉพาะกบตารางแบบ
Range Partition เทานน ในตารางแบบ Hash Partition เราสามารบรวม Partition ไดโดยตรง แตไม
สามารถใชคาสงในการลบ Partition ของตาราง Hash Partition ทาไดแทนซงกใหผลเหมอนกบการ
ระบรวม Partition นนเอง
การยบรวม Partition ของตารางแบบ Range Partition ทาไดโดยใชคาสงดงน
Syntax Range Partition
ALTER TABLE owner.table_name
MERGE PARTITION pattition1, partition2
INTO PARTITION partition3
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)];
จากการระบรปแบบคาสงใหยบรวม Partition จะมการยายขอมลทอยใน Partition1 และ Partition 2
ไปเกบไวใน Partition 3 จากนน Partition 1 และ Partition 2 จะถกลบโดยอตโนมต สดทายกจะเหลอ
Partition3 ไวเพยง 1 Partition เทานน
ความหมายของแตละประโยคคาสงเปนดงน
ALTER TABLE คาสงสาหรบการเปลยนแปลงในตาราง
Owner.table_name กาหนดเจาของและตารางทการเปลยนแปลง
MERGE PARTITION pattition1, partition2 กาหนดใหรวม pattition1 กบ partition2 เขาดวย
INTO PARTITION partition กาหนดใหรวม Partition ไวท Partition3
[TABLESPACE tablespace_name] กาหนดชอ Tablespace ทใชเกบขอมล
[STORAGE (storage_clause)] กาหนดคาของการจองพนทของตาราง
ตวอยางท5 ตองการยบรวม Partition SALE_0102, SALE_0202 ของตาราง Sale_Transaction
ภายใต ยสเซอร Retail เขาดวยกน โดยจะสรางเปน Partition ใหมชอวา SALE_0102_0202 เกบไวท
Transaction DATA1_TS กาหนดใหคาการจองพนทเรมตนและคาการจองพนทถดไปของ Partition มคา
เทากนคอ 2 MB และกาหนดใหทกๆ Extent มคาการจองพนทเพมเทากนเสมอ
เราสามารถทาไดโดยใชคาสง SQL ผาน SQL*Plus หรอ Svmgrl ดงน
ALTER TABLE retail. sale_transaction
MERGE PARTITION sale_0102, sale_0202
INTO PARTITION sale_0102 _0202
TABLESPACE data1_ts
STORAGE (INTIAL 2M NEXT 2M PCTINCRESE);
จากตวอยางเราตองการระบรวม Partition ทงสอง แลวขอมลจาก Partition เกา จะยายมารวมกนใน
Partition ใหม และคาขอบเขตสงสดของ Sale_0101_0202 จะเทากบคาขอบเขตสงสดของ Sale_0202
4. แยก Partition ของตารางออกเปน 2 Partition
การแยก Partition หรอการ Split Partition เปนการกาหนดแยก 1 Partition ออกเปน 2 Partition
(สามารถทาไดกบตาราง Range Partition เทานน) โดยขอมลเกาใน Partition เดมจะถก กระจายไปเกบอยใน
Partition ทแยกขนมาใหมทง 2 Partition ตามเงอนไงทกาหนด
คาสงทใชสาหรบแยก Partition เปนดงน
Syntax: Range Partition
ALTER TABLE owner.table_name
SPLIT PARTITION pattitionAT (value)
INTO (PARTITION partition2
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)]
, PARTITION Partition3
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)];
ความหมายของแตละประโยคคาสงเปนดงน
ALTER TABLE คาสงสาหรบการเปลยนแปลงในตาราง
Owner.table_name กาหนดเจาของและตารางทการเปลยนแปลง
SPLIT PARTITION pattitionAT (value) กาหนดใหรวม partition1 ทคา value
INTO (PARTITION partition2..
PARTITION Partition3
กาหนดการแยก Partition เปน Partition2 และ Partition
3 โดยถามขอมลนอยกวา value จะใหเกบไวท
Partition2 ถาขอมลมากกวา value จะเกบไวท Partition3
[TABLESPACE( tablespace_name)] กาหนดชอ Tablespace ทใชเกบขอมล
[STORAGE (storage_clause)] กาหนดคาของการจองพนทของตาราง
คาขอบเขตสงสดของ Partition ใหมทไดจาการแยก Partition นนนามาจากคา value แตละคาทเปน
ขอบเขตสงสดของ Partition เดม โดย Partition2 จะมคาขอบเขตสงสด เทากบคา value ทกาหนด และ
Partition 3 จะมคาขอบเขตของ Partition1 ซงเปน Partition เดม ดงนนในการกาหนดคา value ซงใชสาหรบ
แยก Partition ออกเปน 2 Partition จงไมควรเกนขอบเขตของ Partition เดม
ตวอยางท 6 ตองการแยก Partition SALE_X ของตาราง Retail.Sale_Transaction โดยแบง
ขอมลออกเปน 2 สวนคอ ถาคาของขอมลนอยกวา 01-jun-2002 จะเกบไวท Partition.SALE_0502
สวนขอมลทเหลอจะเกบไวท Partition.SALE_X เชนเดม กาหนดให Tablespace ทใชเกบขอมลคอ
DATA1_TS และกาหนดการจองพนทใหเหมอนตวอยางท 5
เราสามารถทาไดโดยใชคาสง SQL ผาน SQL*Plus หรอ Svmgrl ดงน
ALTER TABLE retail. sale_transaction
SPLIT PARTITION sale_x AT(TO_DATE(’01-JUN-2002’DD-MM-YYYY))
INTO (PARTITION sale_0502 TABLESPACE data1_ts
STORANG (INITIAL 2M NEXT 2M PCTINCREASE 0),
PARTITION.sale_x TABLESPACE data1_ts
STORANG (INITIAL 2M NEXT 2M PCTINCREASE 0));
จากตวอยางเราจะแยก Partition. SALE_X ของตาราง Retail.Sale_Transaction ออกเปน 2 สวน โดย
ถาขอมลมนอยกวาวนท 1 มถนายน จะเกบไวท SALE_0502 แตถามมากกวาคานเกบไวใน SALE_X
เชนเดม
วธ
สราง Partition Index
วธการจดการกบ Partition Index ประกอบดวย 3 หวขอ ไดแก การสราง Partition Index
การจดการกบ Partition ของอนเดกซ และการ Rebuild Partition Index
ในการสราง Partition Index นนเราสามารถทาไดบนตารางทเปน Partition Table เทานน
ดงทกลาวมาแลวในตอนตนวา Partition Index แบงออกเปนสองแบบ คอ Local Index และ Global
Index โดยทงสองแบบกมลกษณะตางกนคอ Local Index จะแบงอนเดกซออกเปนสวนยอยๆ ตาม
Partition Table ในขณะท Gobal Index ไมจาเปนตองแบงออกเปนสวนยอย ตาม Partition Table
วธการสรางอนเดกซ ทง 2 แบบ มรายละเอยด ดงน
1. การสราง Local Partition Index
วธการสราง Local Partition Index บนตารางแบบ Partition Table นนจะตองกาหนด
จานวน Partition ของ อนเดกซ ใหเทากบจานวน Partition ของตารางเสมอ และคอลมนทนามาใช
ในการสรางอนเดกซ กจะตองเปนคอลมนทเปนเงอนไขในการสราง Partition ของตารางดวยเสมอ
เชนเดยวกน
การสรางอนเดกซแบบน มรายละเอยด ดงน
Syntax: แบบท 1
CREATE [NONUNIQUE|UNIQUE] INDEX owner.index_name
ON schema.table_name (column_name) LOCAL
[STORE IN (tablespace1,tablespace2)]
คาสงในรปแบบท1 เปนการกาหนดการสรางอนเดกซแบบ LOCAL โดยไมตองกาหนด
จานวน Partition ของ อนเดกซ เนองจากคาสงนจะสรางอนเดกซจานวน Partition เทากบตาราง
นนๆ โดยอตโนมต ซงคอลมนทนามาสรางเปนอนเดกซ จะตองเปนสวนหนงของคอลมนทใชใน
การ Partition ของตารางโดยอาจมากกวา 1 คอลมนได
การสรางอนเดกซแบบนเราสามารถกาหนด Tablespace ทจะใหเกบอนเดกซได โดย
Oracle จะกระจายอนเดกซกลบไปไวใน Tablespace ทกาหนดไว ใหเองโดนอตโนมต
Syntax:
CREATE [NONUNIQUE|UNIQUE] INDEX owner.index_name
แบบท 2
ON schema.table_name (column_name) LOCAL
(PARTITION partition1
[TABLESPACE tablespace_name ][STORAGE(storage_clause)]
, PARTITION Partition2
[TABLESPACE tablespace_name ][STORAGE (storage_clause)]
คาสงในรปแบบท 2 นเปนการสรางอนเดกซโดยกาหนดจานวน Partition ทตองการสราง
เอง ซงเราตองกาหนดจานวน Partition ของอนเดกซใหเทากบจานวน Partition ของตาราง โดย
สามารถกาหนด Tablespace รวมทงพนทการจองของแตละ Partition ไดเชนเดยวกน
ความหมายของแตละประโยคคาสงเปนดงน
CREATE INDEX คาสงในการสราง Index
[NONUNIQUE|UNIQUE] กาหนดอนเดกซทสรางเปน Non-Unique-Index หรอ
Unique Index ซงคาดฟอลคอ Non-Unique
owner.index_name กาหนดเจาของอนเดกซและชออนเดกซทตองการ
ON schema.table_name (column_name)
กาหนดเจาของตารางขอมลทจะสรางอนเดกซ โดย column
_name คอชอคอลมนทตองการสรางอนเดกซ ซงหาก
คอลมนมมากกวา 1 คอลมน เราสามารถทาไดโดยเพม
เครองหมาย(,) เขาไป
LOCAL สรางอนเดกซแบบ LOCAL PARTITION INDEX
[TABLESPACE( tablespace_name)]
[STORAGE (storage_clause)]
กาหนดชอ Partition ทจะสรางอนเดกซ และคาการจอง
พนทภายในอนเดกซ
[STRONG IN( tablespace1, tablespace2)] กาหนดชอ Tablespace ทใชเกบขอมล
ตวอยางท 7 ตองการสรางอนเดกซ ชอวา Sale_Transaction_ind1 ภายใต ยเซอร Retail โดยสรางบน
คอลมน Sale_Date และ Item_Id ในตาราง Retail. Sale_Transaction กาหนดใหเกบอยใน
Tablespace INDX_TS มการจองพนทเรมตนเทากบ 500 KB และคาการจองพนทถดไปของอน
เดกซเทากบ 500 KB กาหนดใหการจองพนทแตละ Extent เทากนเสมอ โดยออกเปนเปนสวนยอยๆ
Partition ของตารางดงน
ใชคาสง SQL ผาน SQL*PULS หรอ Svrmgrl
CREATE INDEX retail.sale_transaction_ind1
ON retail.sale_transaction_ind1 (sale_date,item_id)
LOCAL
(PARTITION index_0202 TABLESPACE tablespace_ts,
PARTITION index_0302 TABLESPACE tablespace_ts,
PARTITION index_0402 TABLESPACE tablespace_ts,
PARTITION index_0502 TABLESPACE tablespace_ts,
PARTITION index_x TABLESPACE ind_x);
คอลมนทนามาสรางอนเดกซคอ Sale_Date ซงคอคอลมนดงกลาวทใชในการแบง Partition ของ
ตารางเชนกน กาหนดใหเกบอนเดกซไวท Tablespace INDEX_TS โดยมการจองพนทอนเดกซในทก
Partition เทากนหมดคอ Intial Extent = 500 KB, Next Extent = 500 KB และ Percent Increase=0
2. การสราง Global Partitioned Index
การสราง Global Partition Index สามารถสรางไดบน Partition โดยคอลมนทใชในการแบง
Partition ของอนเดกซนนไมจาเปนคอลมนทใชในการแบง Partition ของตาราง นอกจากนแลว จานวน
Partition ของอนเดกซ ไมจาเปนตองเทากบจานวน Partition ของตารางดวยเชนกน
การสรางอนเดกซแบบนทาไดโดยใชคาสง
CREATE [NONUNIQUE
ON schema.table_name (column1,column2)
|UNIQUE] INDEX owner.index_name
GLOBAL PARTITION BY RANGE (column1,column2)
(PARTITION partition1 VALUES LESS THAN (value1)
[TABLESPACE tablespace_name ]
[STORAGE (storage_clause)]
, PARTITION Partition2 VALUES LESS THAN (value2)
[TABLESPACE tablespace_name ]
[STORAGE (storage_clause)]);
ตวอยาง การกาหนดใหเกบอนเดกซทสรางใน Tablespace INDX_TS มการจองพนทเรมตนเทากบ
500 KB และคาการจองพนทถดไปของอนเดกซเทากบ 500 KB กาหนดใหการจองพนทแตละ Extent เทากน
เสม
วธท 1 ใชคาสง SQL ผาน SQL*PULS หรอ Svrmgrl
CREATE INDEX retail.sale_transaction_ind2
ON retail.customer (first_name)
TABLESPACE indx_ts
STORAGE (INITIAL 500K NEXT 500K PCTINCREASE 0)
GLOBAL PARTITION BY RANGE (frist_name)
(PARTITION index_1 VALUES LESS THAN (‘OZONE’),
PARTITION index_2 VALUES LESS THAN (‘TIROLESE’),
PARTITION index_x VALUES LESS THAN (‘MAXVALUE’));
PARTITION index_0502 TABLESPACE tablespace_ts,
PARTITION index_x TABLESPACE ind_x));
ผลลพธทได ดงรป
วธท 2
1. ขยาย Tree จากการเชอมตอฐานขอมล ORCL>Schema> Index ดงรป
ใช DBA Studio มขนตอนดงน
2. คลกขวาท Index ในหนาตางดานซายมอ จะแสดงเมนขนมาใหเลอก ดงรป
3. คลกเลอก create หนาจอจะแสดงหนาตางใหสราง Index
4. กาหนดรายละเอยดของอนเดกซทตองการสรางทแทบ General ดงน
4.1 Name: กาหนดชอของอนเดกซทตองการสราง ไดแก CUSTOMER_IND2
4.2 Schema: กาหนดชอเจาของอนเดกซ ไดแก RETAIL
4.3 Tablespace: กาหนดชอ Tablespace ทจะจดเกบอนเดกซ ไดแก INDX_TS
4.4 Index on: กาหนดออบเจกตทตองการสรางอนเดกซ ไดแก Table
4.5 Schema: กาหนดเจาของตารางทตองการสรางอนเดกซ ไดแก RETAIL
4.6 Table: กาหนดชอตารางทตองการสรางอนเดกซ โดยคลกทชอง Order ตามลาดบของคอลมน
ในทนคอคลกท แถว FIRST_NAME
5.คลกแทบ Partitions
6. สราง Partitioned Index ตามรายละเอยดทกาหนดดงน
6.1 เลอก Global เพอกาหนดการสรางอนเดกซเปนแบบ Global
6.2 กาหนดคอลมนทใชในการแบง Partition โดยคลกทชอง Range partition column order หลงชอ
คอลมน FIRST_NAME ซงจะทาใหมหมายเลข 1 แสดงขนมาโดยอตโนมต
6.3 กาหนดชอของ Partition ทชอง Partition Name ในสวน Range Partitions เปน INDX_1,
INDX_2 และ INDX_X ตามลาดบ
6.4 ทชอง Tablespace ใหใชคาดฟอลต
6.5 กาหนดคา High Value ของแตละ Partition ในชอง FIRST_NAME-High value ซงจะใชเปน
เงอนไขในการแบง Partition ของอนเดกซ โดยคาทกาหนดคอ OZONE, TIROLESE และ MAXVALUE
ตามลาดบ
7. คลกแทบ Storrage
8. กาหนดคาการจองพนทของอนเดกซโดยมรายละเอยดดงน
8.1 Initial Size = 500 KB
8.2 Next Size = 500 KB
8.3 Increase Size by = 0%
9. คลกปม เพอยนยนการสรางอนเดกซ
10. รอจนกระทงแสดงหนาจอดงรป แสดงวา สรางอนเดกซสาเรจแลว
จดการกบ Partition ของ Index
เมอสราง Partitioned Index ขนมาในฐานขอมลแลว หากตารางทสรางอนเดกซ นนเกดการ
เปลยนแปลง โครงสรางไปกจะสงผลถง Partitioned Index ทาใหตองมการจดการกบ Partition ของอนเดกซ
ดวยเชนกน หากอนเดกซทสรางเปนแบบ Local Partitioned Index เมอมการลบ เพมหรอรวม Partition ของ
ตารางขอมล Oracle จะจดการกบ Local Partitioned Index ใหเองโดยอางองมาจากโครงสราง Partition ของ
ตาราง แตสาหรบ Global Partitioned Index การเปลยนแปลงโครงสราง Partition ของตารางจะไมม
ผลกระทบกบโครงสรางของ Partition ของอนเดกซ เนองจากโครงสรางของอนเดกซไมตรงกบโครงสราง
Partition ของตารางอยแลว แตหาก DBA ตองการเปลยนแปลงโครงสรางเองกสามารถทาไดเชนกน ในทน
จะกลาวถงการจดการกบ Partition ของอนเดกซเพยง 2 แบบ ทมการใชงานบอยๆ นนกคอ การลบและการ
แยก Partition ของอนเดกซ
1. สงใหลบ Partition ของอนเดกซ
เมอมการสงใหลบ Partition ของอนเดกซออกไปแลวเราจาเปนทจะตองสง Rebuild อนเดกซใน
Partition ทมลาดบสงกวาดวยทกครง เนองจากสถานะของอนเดกซใน Partition ทถกลบจะเปน Unusable
เนองมาจากมการเปลยนแปลงโครงสราง Partition ของอนเดกซนงเอง การลบสามารถทาไดโดยใชคาสง
ดงน
Syntax: ALTER INDEX owner.index_name
DROP PARTITION paitition_name;
ความหมายของแตละประโยคในคาสงเปนดงน
ALTER INDEX คาสงใหมการเปลยนแปลงกบอนเดกซ
Owner.index_name กาหนดเจาของและอนเดกซทตองการเปลยนแปลง
DROP PARTITION กาหนดใหลบ Partition
paitition_name กาหนดชอ Partition ของอนเดกซทตองการลบ
ตวอยางท 8 ตองการเปลยนแปลงโครงสราง Partition ของอนเดกซ Retail.Customer_Ind2 โดยตองการลบ
Partition ชอวา INDX_1 ออกไป สามารถทาไดดงน
วธท 1
ALTER INDEX retail.customer_ind2 DROP PARTITION indx_1;
ใชคาสง SQL ผาน SQL*Plus หรอ Svrmgrl
จากตวอยางเราตองการลบ Partition INDX_1 ออกไปซงทาไดโดยใชคาสงทแสดงขางตน ซงเมอ
ลบ Partition INDX_1 ออกไปแลวกตองสงให Rebuild อนเดกซใน Partition ทอยสงกวา Partition นดวย
ผลลพธของคาสง SQL ขางตนแสดงไดดงรป
วธท 2
1. ขยาย Tree จากชอฐานขอมล ORCL > Schema > Index > RETAIL ดงรป หนาจอจะแสดงรายละเอยด
ของอนเดกซทงหมดทมภายในยสเซอร Retail
ใช DBA Studio มขนตอนดงน
2. ดบเบลคลกทหนาชออเดกซ CUSTOMER_IND2 ในหนาตางดานขวามอ หนาจอจะแสดงดงรป
3. คลกแทบ Partitions หนาจอจะแสดงรายละเอยดเกยวกบ Partition ของอนเดกซทเลอก
4. คลกเลอก Partition ทตองลบ ไดแก INDX_1 ในสวน Range Partitions ใหเกดเปนแถบสดงรป
5. คลกปม เพอลบ Partition ทตองการ
6. คลกปม เพอยนยนการเปลยนแปลง
2. การแยก Partition ของอนเดกซ
การแยก Partition หรอการ Split Partition ของอนเดกซจะสามารถทาไดกตอเมอ DBA ตองการกระจาย
จานวนขอมลใน Partition ออกเปน 2 Partition เนองจากขอมลใน Partition นนมเปนจานวนมาก
คาสงทใชในการแยก Partition นสามารถทาไดดงน
Syntax:
ALTER INDEX owner.index_name
SPLIT PARTITION partition1 AT VALUE LESS THAN (value)
INTO ( PARTITION partition2
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)]
, PARTITION partition2
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)];
หลงจากใชคาสงในการแยก Partition ของอนเดกซดงรปแบบขางตนกจะมการแยกอนเดกซใน
partition1 ออกไปไวใน partition2 และ partition3 โดยใชเงอนไขคอ หากขอมลใน partition1 มคานอยกวา
value ทกาหนดกใหเกบขอมลดงกลาวไวใน partition2 แตถามมากกวากใหเกบขอมลไวใน partition3 แทน
ความหมายแตละประโยคในคาสงเปนดงน
ALTER INDEX คาสงใหมการเปลยนแปลงกบอนเดกซ
owner.index_name กาหนดเจาของและตารางทตองการเปลยนแปลง
SPLIT PARTITION partition1 AT VALUE LESS
THAN (value)
กาหนดใหแยก partition1 ทคา value
INTO ( PARTITION partition2 … PARTITION กาหนดใหแยก Partition เปน partition2 และ
partition3 ) partition3 โดยถาขอมลมคานอยกวา value จะเกบไว
ท partition3
(TABLESPACE tablespace_name) กาหนดชอ Tablespace ทใชในการเกบอนเดกซ
(STORAGE (storage_clause)) กาหนดคาของการจองพนทของอนเดกซ
ตวอยางท 9 ตองการแยก Partition INDX_X ของอนเดกซ Retail.Customer_Ind2 ทคาขอมลนอยกวา
“WRY” ไวท Partition INDX_3 สวนทเหลอใหเกบไวท INDX_X เชนเดม โดยกาหนดใหสราง Partition
ใหมไวท Tablespace INDX_TS คาการจองพนทเรมตนของอนเดกซเทากบ 500 กโลไบต และคาการจอง
พนทถดไปของอนเดกซเทากบคาการจองพนทเรมตนเสมอ
เราสามารถทาตามทตองการไดโดยใชคาสง SQL ผาน SQL*Plus หรอ Svrmgrl ดงน
ALTER INDEX retail.customer_ind2
SPLIT PARTITION indx_x AT (‘WRY’)
INTO (PARTITION indx_3 TABLESPACE indx_ts
STORAGE(INITIAL 500K NEXT 500K PCTINCREASE 0),
PARTITION indx_x TABLESPACE indx_ts
STORAGE(INITIAL 500K NEXT 500K PCTINCREASE 0));
คาสง SQL ขางตนเปนการแยก Partition indx_x ออกเปน 2 สวน โดยถาคาขอมลนอยกวา ‘WRY’ จะเกบไว
ท Partition indx_3 แตถามากกวาจะเกบไวใน Partition indx_x โดยเราจะเกบทง 2 Partition ไวท Tablespace
indx_ts โดยมคาการจองพนทคอ Initial Extent = 500 KB, Next Extent = 500 KB และ Percent Increase = 0
ผลลพธทไดแสดงดงรป
การ Rebuild Partitioned Index
หลงจากทสรางอนเดกซขนมาแลวอาจจะมหลายกรณดวยกนท DBA ตองการสงใหสรางอนเดกซ
ขนมาใหม โดยสรางอนเดกซใหมขนมากอนแลวจงลบอนเดกซเดมออกไป ซงเราจะเรยกการกระทาแบบน
วา Rebuild Index
ในกรณของ Partitioned Index นน DBA จะทาการ Rebuild Index กตอเมอโครงสราง Partition ของ
ตารางทอนเดกซนนสรางอยมการเปลยนแปลงไป ซงทาใหสถานะของอนเดกซเปลยนเปน Unusable และ
ทาใหยสเซอรไมสามารถใชงานอนเดกซนนได
การสง Rebuild Partitioned Index ดงทกลาวมาสามารถทาไดโดยใชคาสงดงน
Syntax:
ALTER INDEX owner.index_name REBUILD
PARTITION partition_name
[TABLESPACE tablespace_name]
[STORAGE (storage_clause)];
ความหมายของแตละประโยคในคาสงเปนดงน
ALTER INDEX คาสงใหมการเปลยนแปลงกบอนเดกซ
owner.index_name กาหนดเจาของและอนเดกซทตองการเปลยนแปลง
PARTITION partition_name กาหนด Partition ทจะทาการ Rebuild
(TABLESPACE tablespace_name) กาหนด Transpace ของอนเดกซ
(STORAGE (storage_clause)) กาหนดคาของการจองพนทของอนเดกซ
ถาไมไดกาหนด Tablespace และคาการจองพนทใหมในคาสง Rebuild Partitioned Index ขางตน
อนเดกซกจะถกสรางไวท Tablespace เดม และคา Initial Extent กจะเทากบพนทรวมทงหมดทอนเดกซเดม
ใชงานอย สวนคาอนๆจะใชเหมอนเดม แตถามการกาหนดคา Storage ใหมกจะใชคาใหมทกาหนดแทน
ตวอยางท 10 ตองการ Rebuild อนเดกซ Retail.Sale_Transaction_Ind1 บนตาราง Retail.Sale_Transaction
เฉพาะ Partition INDX_0202 เพยง Partition เดยว โดยกาหนดใหเกบอนเดกซไวท Tablespace เดมแต
เปลยนคาการจองพนทเรมตนของอนเดกซเปน 1 เมกกะไบต สวนคาการจองพนทถดไปใหมคาเทากบคา
การจองพนทเรมตน
เราสามารถทาไดโดยใชคาสง SQL ผาน SQL*Plus หรอ Svrmgrl ดงน
ALTER INDEX retail.sale_transaction_ind1 REBUILD
PARTITION indx_0202
STORAGE (INITIAL 1 M NEXT 1M);
จากตวอยาง อนเดกซ Sale_Transaction_Ind1เปน Partitioned Index ดงนนการสง Rebuild Index
จงตองกาหนดชอ Partition ทตองการดวยซงกไดแก indx_0202
ในตวอยางเราไมไดกาหนด Tablespace แสดงวาเมอสรางเสรจแลวใหเกบอนเดกซไวท Tablespace
เดม แตคาการจองพนทจะเปลยนไปโดยใชคา Initial Extent = Next Extent = 1 MB
การมอนเตอรการใชงาน Patitioned Table และ Patitioned Index
การมอนเตอรการใชงาน Patitioned Table และ Patitioned Index ภายในฐานขอมลเปนสงทจาเปน
อยางยงสาหรบ DBA เนองจากหากสถานะของอนเดกซไมสามารถใชงานไดจะมผลกระทบตอการทางาน
ของยสเซอรในฐานขอมล
นอกจากนการตรวจสอบโครงสราง Partition ของทงตารางและอนเดกซกเปนสงท DBA ตองทา
ความคนเคยดวยเชนกน ซงสงท DBA จะตองตรวจสอบเกยวกบ Partitioned Table และ Partitioned Index ท
มการใชงานบอยๆ กคอ
- ตารางขอมลทสรางเปนประเภทไหน เปน Partition หรอไม และแตละ Partition เกบอยทไหน
- พนทการใชงานของตารางและอนเดกซสรางอยดวยหรอไม และเปน Partition Index ประเภทไหน
เกบอยทไหน
- โครงสราง Partition ของตารางและอนเดกซเปนอยางไร
- สถานะของ Partitioned Index ในฐานขอมลเปนอยางไร สามารถใชงานไดหรอไม
ววใน Data Dictionary ของ Oracle ทใชสาหรบมอนเตอรตารางขอมลมดงน
ชอ View ขอมลทเกบ
DBA_PART_TABLES รายละเอยดของตารางขอมลทเปน Partition
DBA_TAB_PARTITIONS รายละเอยดเกยวกบ Partition ของตารางขอมล
DBA_PART_INDEXES รายละเอยดของอนเดกซทเปน Partition
DBA_IND_PARTITIONS รายละเอยดเกยวกบ Partition ของอนเดกซ
DBA_PART_KEY_COLUMNS รายละเอยดของคอลทนทใชในการแบง Partition
ของตารางหรออนเดกซ
DBA_SEGMENTS รายละเอยดของแตละ Segment ในฐานขอมล
ตวอยางท 11 ตองการตรวจสอบวาตารางขอมลภายใตยสเซอร Retail มตารางไหนทเปน Partitioned Table
บาง และมจานวน Partition เทาไหร ใชคาสงดงน
SELECT table_name, partitioning_type, subpartitioning_type, partition_count,
partitioning_key_count, deg_tablespace_name, def_initial_extent, def_next_extent
FROM DBA_PART_TABLES
WHERE owner = ‘retail’;
ผลลพธของคาสง SQL ขางตนแสดงดงรป
แตละคอลมนจาก DBA_PART_TABLES ทเรยกมาดมความหมายดงน
ชอคอลมน คาอธบาย
OWNER ยสเซอรทเปนเจาของตาราง
TABLE_NAME ชอตาราง
PARTITIONING_TYPE ประเภท Partition ของตารางซงคาทเปนไปไดคอ
RANGE (Range Partition) และ HASH (Hash
Partition)
SUBPARTITION_TYPE ประเภท Sub Partition ของตารางแบบ Composite
ซงคาทเปนไปไดคอ HASH (Hash partition) และ
NONE (ไมม Sub partition ในตาราง)
ชอคอลมน คาอธบาย
PARTITION_COUNT จานวน Partition ของตาราง
PARTITIONING_KEY_COUNT จานวนคอลมนทใชเปนเงอนไขในการแบง Partition
DEF_TABLESPACE_NAME คาดฟอลตของ Tablespace ในกรณทมการเพม
Partition เขาไปในตาราง ถาแสดงเปนคา
DEFAULT แสดงวาตารางนไมมการกาหนด
Tablespace จงใชคาดฟอลตของยสเซอรแทน
DEF_INITIAL_EXTENT คาดฟอลตของคาการจองพนทเรมตนของ Partition
ใหมเขาไปในตาราง ถาแสดงเปนคา DEFAULT
แสดงวาไมมกาหนดจงใชคาดฟอลตของ Transpace
แทน มหนวยเปน Block
DEF_NEXT_EXTENT คาดฟอลตของคาการจองพนทของ Extent ถดไป
ของ Partition ใหมทเพมเขาไปในตาราง ถาแสดง
เปนคา DEFAULT แสดงวาไมมการกาหนดไวจงใช
คาดฟอลตของ Tablespace แทน มหนวยเปน Block
จากผลลพธจะเหนวาภายใตยสเซอร Retail มตารางอย 2 ตารางทเปน Partition ไดแก ตาราง
Customer และตาราง Sale_Transaction
ตาราง Customer เปน Hash Partition ทมจานวน Partition ทงหมด 8 Partition โดยคอลมนทใชใน
การแบง Partition มจานวน 1 คอลมน และคาการจองพนทของตาราง Customer จะใชคาดฟอลตของ
Tablespace
สวนตาราง Sale_Transaction นนเปน Range Partition ทมจานวน Partition ทงหมด 5 Partition โดย
คอลมนทใชในการแบง Partition ของตารางนมจานวน 1 คอลมน และมการกาหนดคา Initial Extent = Next
Extent = 256 Block ซงเทากบ 256 x 8 = 2048 กโลไบต หรอ 2 เมกกะไบต (1 Block มคาเทากบ 8 กโลไบต
โดยอางองตามคาพารามเตอร DB_BLOCK_SIZE ของฐานขอมล ซงในตวอยางนไดกาหนด
DB_BLOCK_SIZE = 8 KB)
หากมการเพม Partition ใหมเขาไปในตารางทง 2 ตารางน Partition ทเพมเขาไปใหมจะถกเกบไวท
Tablespace DATA1_TS เชนเดยวกน
ตวอยางท 12 ตองการตรวจสอบวาตารางขอมล Sale_Transaction ภายใตยสเซอร Retail มการแบง Partition
อยางไร ใชคาสงดงน
SELECT partition_position, partition_name, high_value, tablespace_name, initial_extent,
next_extent
FROM DBA_TAB_PARTITIONS
WHERE table_owner=’RETAIL’
AND table_name=’SALE_TRANCTION’
ORDER BY partition_position;
ผลลพธทไดแสดงดงรป
แตละคอลมนจาก DBA_TAB_PARTITIONS ทเรยกมาดมความหมายดงน
ชอคอลมน คาอธบาย
TABLE_OWNER ยสเซอรเปนเจาของตาราง
TABLE_NAME ชอตารางขอมล
PARTITION_POSITION ลาดบของ Partition ในตาราง
PARTITION_NAME ชอ Partition
HIGH_VALUE คาสงสดของ Partition
TABLESPACE_NAME ชอ Tablespace ทเกบ Partition
INITIAL_EXTENT คาเรมตนการจองพนท หนวยเปนไบต
NEXT_EXTENT คาการจองพนทของ Extent ถดไป หนวยเปนไบต
ตาราง Retail.Sale_Transaction ถกแบงออกเปน 5 Partition ไดแก SALE_0102_0202,
SALE_0302, SALE_0402, SALE_0502 และ SALE_X ตามลาดบ โดยคาการจองพนทของแตละ Partition
คอ Tnitial Extent = 2 MB และ Next Extent = 2 MB
ในแตละ Partition กมคาสงสดทใชเปนเงอนไขในการเกบขอมลตามทแสดงใน HIGH_VALUE
เชน ใน Partition SALE_0102_0202 ขอมลทเกบอยจะตองมวนทนอยกวาวนท 1 มนาคม 2545 เปนตน
จากหนาจอทแสดงผลลพธเราจะเหนวาในชอง HIGH_VALUE มการแสดงผลอยในรปแบบ
TO_DATE(‘2002-06-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’,
‘NLS_CALENDAR=GREGORIAN’) ซงหมายความวาใหแสดงวนทอยในแบบป เดอน วน และเวลา
ตามลาดบ โดยใชรปแบบวนทในแบบกรก (NLS_CALENDAR=GREGORIAN)
ตวอยางท 13 ตองการดวาตารางขอมลทงหมดทเปน Partition ภายใตยสเซอร Retail ใชพนทจรงไปแลว
เทาใด ใชคาสงดงน
SELECT segment_name, partition_name, tablespace_name, bytes, extents
FROM DBA_SEGMENTS
WHERE owner=’RETAIL’
AND segment_type = ‘TABLE PARTITION’
ORDER BY segment_name, partition_name;
จากคาสง SQL ขางตนจะไดผลลพธแสดงดงรป
แตละคอลมนจาก DBA_SEGMENTS ทเรยกมาดมความหมายดงน
ชอคอลมน คาอธบาย
OWNER ยสเซอรทเปนเจาของ Segment
SEGMENT_NAME ชอ Segment
PARTITION_NAME ชอ Partition
SEGMENT_TYPE ประเภทของ Segment ซงในทนเราตองการด Partitioned
Table จงมคาเทากบ TABLE PARTITION
TABLESPACE_NAME ชอ Tablespace ทเกบ Segment นน
BYTES จานวนไบตทงหมดทถกใชโดย Segment นน
EXTENTS จานวน Extent ทงหมดของ Segment ทใชงานจรง
จากผลลพธจะเหนวาตารางทเปน Partitioned Table จะมคา Segment Type เปน TABLE
PARTITION ซงจะแตกตางกบตารางธรรมดาทจะมคา Segment Type เทากบ TABLE แตชอของ Segment
ทเปน TABLE PARTITION นนจะเปนชอของตาราง โดยจะมชอของ Partition กากบอกตางหาก
พนทการใชงานจรงของแตละ Partition ถกแสดงอยในชอง Bytes เชน Partition SALE_0102_0202
ของตาราง Sale_Transaction ใชพนทใน Tablespace DATA1_TS ไปแลวทงหมด 2,129,920 ไบต และ
จานวน Extent ทใชงานไปแลวทงหมดกเทากบ 1 Extent
ตวอยางท 14 ตองการดวาตารางทเปน Partition Table ภายใตยสเซอร Retail ใชคอลมนอะไรในการแบง
เงอนไขของ Partition ใชคาสงดงน
SELECT name, column_name, column_position
FROM DBA_PART_KEY_COLUMNS
WHERE owner = ‘RETAIL’
AND object_type LIKE ‘TABLE%’
ORDER BY name, column_position;
ผลลพธทไดแสดงดงรป
แตละคอลมนจาก DBA_PART_KEY_COLUMNS ทเรยกมาดมความหมายดงน
ชอคอลมน คาอธบาย
OWNER ยสเซอรทเปนเจาของออบเจกต
OBJECT_TYPE ประเภทของออบเจกตทตองการ ไดแก TABLE และ INDEX
NAME ชอของออบเจกต
COLUMN_NAME ชอคอลมนทใชในการแบง Partition
COLUMN_POSITION ลาดบของคอลมนทใช
จากผลลพธแสดงใหเหนวาตาราง Customer ใชคอลมน Customer_Id ในการแบงเงอนไขของ
Partition เพยงคอลมนเดยว สวนตาราง Sale_Transaction ใชคอลมน Sale_Date เพยวคอลมนเดยวในการ
แบงเงอนไขเชนเดยวกน
ตวอยางท 15 ตองการดวาอนเดกซภายใตยสเซอรทกาหนด มอนเดกซอะไรทเปน Partitioned Index บาง
และมจานวน Partition เทาไร ใชคาสงดงน
SELECT index_name, table_name, partitioning_type, partition_count, partitioning_key_count,
deg_tablespace_name, def_initial_extent, def_next_extent
FROM DBA_PART_INDEXES
WHERE owner = ‘RETAIL’;
แตละคอลมนจาก DBA_PART_INDEXES ทเรยกมาดมความหมายดงน
ชอคอลมน คาอธบาย
OWNER ยสเซอรทเปนเจาของอนเดกซ
INDEX_NAME ชออนเดกซ
TABLE_NAME ชอตารางทสรางอนเดกซ
PARTITIONING_TYPE ประเภท Partition ของอนเดกซซงมคาทเปนไปไดคอ RANGE
(Range Partition) และ HASH (Hash Partition)
PARTITION_COUNT จานวน Partition ของอนเดกซ
PARTITIONING_KEY_COUNT จานวนคอลมนทใชเปนเงอนไขในการแบง Partition
DEF_TABLESPACE_NAME คาดฟอลตของ Tablespace ในกรณทมการเพม Partition เขา
ไปในอนเดกซ โดยถาเปนคา DEFAULT แสดงวาอนเดกซน
ไมมการกาหนด Tablespace จงใชคาดฟอลตของยสเซอรแทน
ชอคอลมน คาอธบาย
DEF_INITIAL_EXTENT
คาดฟอลตของคาการจองพนทเรมตนของ Partition ใหมทเพม
เขาไปในอนเดกซ ถาเปนคา DEFAULT แสดงวาไมไดกาหนด
จงใชคาดฟอลตของ Tablespace แทน มหนวยเปน Block
DEF_NEXT_EXTENT
คาดฟอลตของคาการจองพนทของ Extent ถดไปของ Partition
ใหมทเพมเขาไปในอนเดกซ ถาเปนคา DEFAULT แสดงวา
ไมไดกาหนดจงใชคาดฟอลตของ Tablespace แทน มหนวย
เปน Block
ภายใตยสเซอร Retail มอนเดกซ 3 ตวทเปน Partitioned Index คอ Customer_Ind1 สรางอยบน
ตาราง Customer มจานวน Partition ทงหมด 8 Partition ประเภทของอนเดกซเปนแบบ Hash Partitioned
Index Customer_Ind2 สรางบนตาราง Customer เชนกน มทงหมด 3 Partition เปนแบบ Range Partitioned
Index Sale_Transaction_Ind1 สรางอยบนตาราง Sale_Transaction มจานวน Partition ทงหมด 5 Partition
และเปน Range Partitioned Index
ในกรณทมการเพม Partition ใหมของอนเดกซทง 3 ตว ตวแรกจะเกบไวในTablespace ทเปนด
ฟอลตของยสเซอร สวนอก 2 ตวทเหลอจะเกบไวท Tablespace INDX_TS โดยคาการจองพนทของอนเดกซ
จะเทากนทง Initial Extent และ Next Extent คอ 63 x 8 KB = 500 KB
ตวอยางท 16 ตองการดวาอนเดกซ Customer_ind2 ภายใตยสเซอร Retail มการแบง Partition อยางไร และม
สถานะเปนอยางไร ใชคาสงดงน
SELECT partition_position, partition_name, high_value, tablespace_name, initial_extent,
next_extent, status
FROM DBA_IND_PARTITIONS
WHRER index_owner = ‘RATAIL’
AND index_name = ‘CUSTOMER_IND2’
ORDER BY partition_position;
ผลลพธทไดแสดงดงรป
แตละคอลมนจาก DBA_IND_PARTITIONS ทเรยกมาดมความหมายดงน
ชอคอลมน คาอธบาย
INDEX_OWNER ยสเซอรทเปนเจาของอนเดกซ
INDEX_NAME ชอของอนเดกซ
PARTITION_POSITION ลาดบ Partition ของอนเดกซ
PARTITION_NAME ชอ Partition ของอนเดกซ
HIGH_VALUE คาสงสดของ Partition
TABLESPACE_NAME ชอ Tablespace ทเกบ Partition
INITIAL_EXTENT คาเรมตนของการจองพนทของ Extent ถดไป มหนวยเปนไบต
NEXT_EXTENT คาการจองพนทของ Extent ถดไป มหนวยเปนไบต
STATUS สถานะของอนเดกซใน Partition
อนเดกซ Retail.Customer_Ind2 ถกแบงออกเปน 3 Partition ไดแก INDX_2, INDX_3 และ
INDX_X โดยในแตละ Partition มคาของเขตสงสดทใชเปนเงอนไขในการเกบขอมลคอ ‘TIROLESE’,
‘WRY’ และ MAXVALUE ตามลาดบ
กาหนดคาการจองพนทของแตละ Partition เปน Initial Extent = 500 KB และ Next Extent = 500
KB โดยสถานะของอนเดกซในแตละ Partition เทากบ USABLE แสดงวายงสามารถใชงานได ยกเวน
Partition INDX_2 ซงมสถานะเปน Unusable ทาใหการเรยกใชงานขอมลใน Partition นไมสามารถทาได
ตวอยางท 17 ตองการดวาอนเดกซทเปน Partitioned Index ภายใตยสเซอร Retail ใชคอลมนอะไรในการ
แบงเงอนไขของ Partition สามารถทาไดโดยใชคาสงดงน
SELECT name, column_name, column_position
FROM DBA_PART_KEY_COLUMNS
WHERE owner = ‘RATAIL’
AND object_type LIKE ‘INDEX%’
ORDER BY name, column_position;
ผลลพธทไดแสดงดงรป
จากผลลพธทไดแสดงใหเหนวาอนเดกซ Customer_Ind1, Customer_Ind2 และ Sale_Transaction_Ind1 ใช
คอลมน Customer_Id, First_Name และ Sale_Date เปนเงอนไขในการแบง Partition เพยงคอลมนเดยว
ตามลาดบ
บทสรป
รายงานฉบบนเปนการ Partitioned Table และ Partitioned Index ซงเปนการทางานแบบใหมใน
ฐานขอมล โดย Partitioned Table และ Partitioned Index ชวยใหเราสามารถแบงขอมลออกเปนสวนยอยๆ ท
เรยกวา Partition ได และยงสามารถแยกเกบแตละ Partition ไวในหลาย Tablespace ไดอกดวย
เราจาเปนจะตองมอนเตอรการใชงานตารางและอนเดกซทเปน Partition ในฐานขอมลเพอ
ตรวจสอบสถานะ การใชงานของตารางและอนเดกซใหสามารถใชงานไดอยเสมอ และเพอใหการทางานกบ
ตารางและอนเดกซมประสทธภาพมากยงขน
บรรณานกรม
http://dev.mysql.com/doc/refman/5.5/en/partitioning.html
http://oracle.jookku.com/2011/07/interval-partitioning/
การจดการระบบฐานขอมลอยางมออาชพ (Oracle DBA).นนทบร : อนโฟเพรส, 2546
Recommended