partitioned - wordpress.compartition ไหนเส ย ข อม ลใน partition อ นๆ...

63
Partitioned วิชา การบริหารระบบฐานข้อมูล (DATABASE SYSTEM MANAGEMENT) รหัสวิชา 801306-46 เสนอ อาจารย์วสันต์ กุลดิลก คณะผู ้จัดทํา นางสาวณัฐนันท์ สมประสงค์ รหัสนักศึกษา 13530035 นางสาวนิศาชล ชูช่วย รหัสนักศึกษา 13530062 นางสาวพริมา สร้อยสังวาลย์ รหัสนักศึกษา 13530073 นางสาวภักธิรา ลาประวัติ รหัสนักศึกษา 13530080 นางสาววิชุดา จ๋าพิมาย รหัสนักศึกษา 13530097 นายสิทธิโชค โตศะศุข รหัสนักศึกษา 13530106 นายสุรสิทธิ พูนสวัสดิ รหัสนักศึกษา 13530110 นางสาวเบญจพร พุ ่มไสว รหัสนักศึกษา 13530201 นางสาวอรวรรณ อภิเลปน์ รหัสนักศึกษา 13530286 ภาคเรียนที 2 ปีการศึกษา 2554 มหาวิทยาลัยศิลปากร

Upload: others

Post on 31-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

Partitioned

วชา การบรหารระบบฐานขอมล (DATABASE SYSTEM MANAGEMENT) รหสวชา 801306-46

เสนอ

อาจารยวสนต กลดลก

คณะผจดทา

นางสาวณฐนนท สมประสงค รหสนกศกษา 13530035

นางสาวนศาชล ชชวย รหสนกศกษา 13530062

นางสาวพรมา สรอยสงวาลย รหสนกศกษา 13530073

นางสาวภกธรา ลาประวต รหสนกศกษา 13530080

นางสาววชดา จาพมาย รหสนกศกษา 13530097

นายสทธโชค โตศะศข รหสนกศกษา 13530106

นายสรสทธ พนสวสด รหสนกศกษา 13530110

นางสาวเบญจพร พมไสว รหสนกศกษา 13530201

นางสาวอรวรรณ อภเลปน รหสนกศกษา 13530286

ภาคเรยนท 2 ปการศกษา 2554

มหาวทยาลยศลปากร

Page 2: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

คานา

รายงานฉบบน จดทาขนเพอใหผอานไดรบความรในเรอง Partition ซงเปนสวนหนงของวชา การ

บรหารระบบฐานขอมล (DATABASE SYSTEM MANAGEMENT) โดย Partition แบงออกเปน 2

ประเภท คอ Partition Table และ Partition Index ซง Partition Table คอ ตารางขอมลทสามารถแบง

ออกเปนสวนยอยๆตามเงอนไขทกาหนดได สวน Partition Index คอ อนเดกซทสามารถแบงออกเปน

สวนยอยๆไดตามเงอนไขทใชในการแบงขอมลเพอสรางอนเดกซ ซงคณะผจดทาหวงวารายงานฉบบนจะ

เปนประโยชนแกผอานไมมากกนอย ถารายงานฉบบนมความผดพลาดประการใดทางคณะผจดทาตองขอ

อภยมา ณ ทนดวย

คณะผจดทา

Page 3: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

สารบญ

เนอหา หนา

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

Page 4: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 ได

Page 5: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

ตารางขอมลแบบ 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

Page 6: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 ตามรหสพนกงานอก ดงรป

Page 7: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 เปนตน

Page 8: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 นน จะกลาวถงในหวขอ

ตอๆไป

Page 9: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

วธสราง 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];

ความหมายในแตละประโยคคาสงมดงน

Page 10: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 อยดวยจงจะสามารถทาได

Page 11: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

ตวอยางท 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

Page 12: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 ซงคาทแบงไดคอ

Page 13: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 มขนตอนดงน

Page 14: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

2. คลกขวาท Table ในหนาตางดานซายมอ จะแสดงเมนขนมาใหเลอกดงรป

3. คลกเลอกคาสง Create หนาจอจะแสดงหนาตางใหกาหนดรายละเอยดในการสรางตาราง

4. กาหนดโครงสรางตารางและชอตารางทตองการสรางทแทบ General ดงน

4.1 Name: กาหนดชอของตารางทตองการสราง ไดแก SALE_TRANSACTION

4.2 Schema: กาหนดชอยสเซอรทเปนเจาของตาราง ไดแก RETAIL

4.3 Table: กาหนดประเภทของตารางทตองการสราง ไดแก STANDARD

Page 15: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 เปนตน

Page 16: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

7. คลกแทบ Storage

8. กาหนดคาการจองพนทตารางของทก Partition ใหมคาเทากนหมด ดงน

8.1 Initial Size = 2 MB

8.2 Next Size = 2 MB

8.3 Increase Size by = 0%

9. คลกปม เพอยนยนการสรางตาราง

Page 17: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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])

Page 18: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

[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];

Page 19: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

คาสงในรปแบบท 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)

Page 20: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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);

Page 21: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

คาสงทแสดงขางตนเปนคาสงในการสรางตาราง 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 ใหตรงกบตาราง

Page 22: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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)];

Page 23: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

หากในประโยคคาสงไมไดกาหนด 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)

Page 24: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 ขนมา

Page 25: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 ใหมดงน

Page 26: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 ทถกลบออกกจะหายไปเชนกน การลบทาได

โดยการใชคาสงดงน

Page 27: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 ดวยผลลพธทแสดงดง

รป

Page 28: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 ในตาราง

Page 29: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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)];

Page 30: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

จากการระบรปแบบคาสงใหยบรวม 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);

Page 31: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

จากตวอยางเราตองการระบรวม 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 คาสงสาหรบการเปลยนแปลงในตาราง

Page 32: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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

เชนเดม

Page 33: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

วธ

สราง 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 เทากบตาราง

Page 34: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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

Page 35: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

[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

Page 36: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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

Page 37: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 มขนตอนดงน

Page 38: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

2. คลกขวาท Index ในหนาตางดานซายมอ จะแสดงเมนขนมาใหเลอก ดงรป

3. คลกเลอก create หนาจอจะแสดงหนาตางใหสราง Index

4. กาหนดรายละเอยดของอนเดกซทตองการสรางทแทบ General ดงน

4.1 Name: กาหนดชอของอนเดกซทตองการสราง ไดแก CUSTOMER_IND2

4.2 Schema: กาหนดชอเจาของอนเดกซ ไดแก RETAIL

Page 39: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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 ตามลาดบ

Page 40: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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. คลกปม เพอยนยนการสรางอนเดกซ

Page 41: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

10. รอจนกระทงแสดงหนาจอดงรป แสดงวา สรางอนเดกซสาเรจแลว

จดการกบ Partition ของ Index

เมอสราง Partitioned Index ขนมาในฐานขอมลแลว หากตารางทสรางอนเดกซ นนเกดการ

เปลยนแปลง โครงสรางไปกจะสงผลถง Partitioned Index ทาใหตองมการจดการกบ Partition ของอนเดกซ

ดวยเชนกน หากอนเดกซทสรางเปนแบบ Local Partitioned Index เมอมการลบ เพมหรอรวม Partition ของ

ตารางขอมล Oracle จะจดการกบ Local Partitioned Index ใหเองโดยอางองมาจากโครงสราง Partition ของ

ตาราง แตสาหรบ Global Partitioned Index การเปลยนแปลงโครงสราง Partition ของตารางจะไมม

ผลกระทบกบโครงสรางของ Partition ของอนเดกซ เนองจากโครงสรางของอนเดกซไมตรงกบโครงสราง

Partition ของตารางอยแลว แตหาก DBA ตองการเปลยนแปลงโครงสรางเองกสามารถทาไดเชนกน ในทน

Page 42: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

จะกลาวถงการจดการกบ 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 ขางตนแสดงไดดงรป

Page 43: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

วธท 2

1. ขยาย Tree จากชอฐานขอมล ORCL > Schema > Index > RETAIL ดงรป หนาจอจะแสดงรายละเอยด

ของอนเดกซทงหมดทมภายในยสเซอร Retail

ใช DBA Studio มขนตอนดงน

2. ดบเบลคลกทหนาชออเดกซ CUSTOMER_IND2 ในหนาตางดานขวามอ หนาจอจะแสดงดงรป

3. คลกแทบ Partitions หนาจอจะแสดงรายละเอยดเกยวกบ Partition ของอนเดกซทเลอก

Page 44: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

4. คลกเลอก Partition ทตองลบ ไดแก INDX_1 ในสวน Range Partitions ใหเกดเปนแถบสดงรป

5. คลกปม เพอลบ Partition ทตองการ

6. คลกปม เพอยนยนการเปลยนแปลง

2. การแยก Partition ของอนเดกซ

Page 45: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 และ

Page 46: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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

ผลลพธทไดแสดงดงรป

Page 47: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

การ 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)];

Page 48: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

ความหมายของแตละประโยคในคาสงเปนดงน

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

Page 49: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

การมอนเตอรการใชงาน 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 ของตารางขอมล

Page 50: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 ชอตาราง

Page 51: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

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

Page 52: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

ตาราง 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;

ผลลพธทไดแสดงดงรป

Page 53: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

แตละคอลมนจาก 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 เปนตน

Page 54: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

จากหนาจอทแสดงผลลพธเราจะเหนวาในชอง 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 ขางตนจะไดผลลพธแสดงดงรป

Page 55: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

แตละคอลมนจาก 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

Page 56: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

ตวอยางท 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

Page 57: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 เขา

Page 58: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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

Page 59: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

ตวอยางท 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;

ผลลพธทไดแสดงดงรป

Page 60: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

แตละคอลมนจาก 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 สามารถทาไดโดยใชคาสงดงน

Page 61: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน 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 เพยงคอลมนเดยว

ตามลาดบ

Page 62: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

บทสรป

รายงานฉบบนเปนการ Partitioned Table และ Partitioned Index ซงเปนการทางานแบบใหมใน

ฐานขอมล โดย Partitioned Table และ Partitioned Index ชวยใหเราสามารถแบงขอมลออกเปนสวนยอยๆ ท

เรยกวา Partition ได และยงสามารถแยกเกบแตละ Partition ไวในหลาย Tablespace ไดอกดวย

เราจาเปนจะตองมอนเตอรการใชงานตารางและอนเดกซทเปน Partition ในฐานขอมลเพอ

ตรวจสอบสถานะ การใชงานของตารางและอนเดกซใหสามารถใชงานไดอยเสมอ และเพอใหการทางานกบ

ตารางและอนเดกซมประสทธภาพมากยงขน

Page 63: Partitioned - WordPress.comPartition ไหนเส ย ข อม ลใน Partition อ นๆ ก จะย งคงอย และย สเซอร ก ย งคงใช

บรรณานกรม

http://dev.mysql.com/doc/refman/5.5/en/partitioning.html

http://oracle.jookku.com/2011/07/interval-partitioning/

การจดการระบบฐานขอมลอยางมออาชพ (Oracle DBA).นนทบร : อนโฟเพรส, 2546