บทที่7
- 3. รายการ (Transaction)
รายการ หมายถึง ชุดของคาสั่งที่จัดการกับข้อมูลในฐานข้อมูลในลักษณะต่างๆ เช่น การอ่าน
ข้อมูล การเขียนข้อมูล การปรับปรุงข้อมูล (เพิ่ม,ลบ,แก้ไข) ซึ่งเมื่อชุดคาสั่งเหล่านั้นทางานเสร็จเรียบร้อย
แล้ว จะทาให้ข้อมูลในฐานข้อมูลอยู่ในสภาพที่ถูกต้อง
ตัวอย่างเช่น ถ้าต้องการปรับปรุงข้อมูล จานวนสั่งสินค้าในรีเลชัน ORDERING ในรายการ
สินค้า P-402 จากจานวนสั่งเดิม 60 ชิ้น สั่งเพิ่มอีก 40 ชิ้น สามาแสดงได้คาสั่ง SQL
จากตัวอย่างในรูปที่ 7.1 คาสั่ง COMMIT เป็นการบอกว่ารายการปรับปรุงนั้นเสร็จสิ้นสมบูรณ์ แต่
หากมีปัญหาเกิด ก็จะทาให้รายการนั้นๆ กลับไปสู่จัดเริ่มต้น (Rollback) ทาให้ข้อมูลกลับคืนเป็นค่าเดิมก่อนที่
จะมีการปรับปรุง
- 4. การเกิดภาวะขัดข้อง (Transaction Fail)
รายการใดๆ ที่ถูกส่งเข้าประมวลผลอาจเกิดความขัดข้อง (Transaction Fail) ขึ้นได้เนื่องจากสาเหตุ
หลายประการ ได้แก่
ระบบเกิดความขัดข้อง (System Failure)
เป็นความขัดข้องที่เกิดในขณะที่รายหนึ่งๆ กาลังถูกกระทา ทาให้มีผลต่อข้อมูลที่เก็บอยู่ใน
หน่วยความจาหลัก แต่ไม่มีผลต่อข้อมูลที่เก็บอยู่ในระบบฐานข้อมูล
ความผิดพลาดของสื่อบันทึกข้อมูล (Media Failure)
เป็นความผิดพลาดที่เกิดจากสื่อบันทึกข้อมูล เช่น Disk อาจเกิดความเสียหาย ทาให้ข้อมูลสูญ
หายไปด้วย ความผิดพลาดประเภทนี้จึงอาจทาให้ข้อมูลในฐานข้อมูลเสียหายได้
จากภาวะขัดข้องทั้ง 2 ลักษณะ ที่อาจเกิดขึ้นได้ในระบบ จึงต้องมีการกู้ (Recovery) รายการที่เกิด
ความขัดข้อง โดยระบบจะต้องสามารถตรวจสอบได้ว่า ข้อมูลของรายการที่ถูกกระทานั้นได้ถูกบันทึกลงใน
ฐานข้อมูลแล้วหรือยัง ส่วนรายการที่ถูกบันทึกลงในฐานข้อมูลแล้วถือว่ารายการนั้นถูกกระทาจนเสร็จ
สมบูรณ์แล้ว ส่วนรายการที่ยังไม่ได้ถูกบันทึกข้อมูลรายการนั้นๆ การที่ระบบจะทราบข้อขัดข้องที่เกิดขึ้นเพื่อ
แก้ปัญหานั้น สามารถทาได้โดยใช้ระบบการลงบันทึก (System Log) ซึ่งจะบันทึกการทางานของทุกรายการที่
มีผลต่อข้อมูลในฐานข้อมูล
- 5. ระบบการลงบันทึก (System Log)
ระบบการลงบันทึกรายการ จะเป็นระบบที่ทาการบันทึกค่าของข้อมูลทั้งก่อนและหลังการแก้ไขลง
ใน Log File หรือJournal การลงบันทึกจะเริ่มเมื่อมีการกระทาเกิดขึ้นกับรายการ และจะบันทึกรายการที่มีผล
ต่อการเปลี่ยนแปลงข้อมูลในฐานข้อมูล จึงอ่านค่าใหม่เพื่อบันทึกลงในฐานข้อมูล ณ จุดนั้นถือได้ว่ารายการ
นั้นได้ถูกกระทาจนเสร็จสมบูรณ์แล้ว (Commit)
การใช้เทคนิคของจุดตรวจสอบ (Check Point) ซึ่งระบบจะกาหนดช่วงเวลาที่จะทาจุดตรวจสอบ
ขึ้น เพื่อบันทึกข้อมูลลงในฐานข้อมูล และบันทึกเวลาของจุดตรวจสอบลงใน Log File หากรายการใดทาเสร็จ
ก่อน ถึงจุดตรวจสอบแล้วเกิดความผิดพลาดของระบบ รายการนั้นจะไม่จาเป็นต้องทาใหม่ (Redo) รายการใด
ที่ยังทาไม่เสร็จ แต่ระบบเกิดขัดข้องรายการนั้นจะต้องถูกยกเลิก (Undo) ส่วนรายการที่ต้องทาใหม่ ก็คือ
รายการที่ยังทาไม่เสร็จ ขณะที่มีการบันทึกรายการที่ผ่านจุดตรวจสอบ แต่รายการนั้นได้ถูกทาเสร็จก่อนที่
ระบบเกิดความขัดข้องขึ้น
- 6. รูปที่ 7.2 แสดงรายการเปลี่ยนแปลงในช่วงเวลาที่ทาการตรวจสอบ
จากรูปที่ 7.2 จะเห็นได้ว่า
1. รายการ T1 ได้ถูกกระทาเสร็จสมบูรณ์ก่อนถึงจุดตรวจสอบ
2. รายการ T2 เกิดขึ้นก่อนจุดตรวจสอบ และเสร็จสิ้นก่อนระบบเกิดความขัดข้อง
3. รายการ T3 เกิดขึ้นก่อนจุดตรวจสอบและยังทาไม่เสร็จ เมื่อระบบเกิดความขัดข้อง
4. รายการ T4 เกิดขึ้นหลังจุดตรวจสอบ และเสร็จสิ้นก่อนระบบเกิดความขัดข้อง
5. รายการ T5 เกิดขึ้นหลังจุกตรวจสอบ และยังทาไม่สาเสร็จ เมื่อระบบเกิดความขัดข้อง หากพบ
รายการลักษณะนี้เกิดขึ้นจึงควรพิจารณาดังนี้
- 7. 5.1 รายการ T1 จะไม่ต้องทาใหม่ เพราะได้บันทึกรายการเปลี่ยนแปลงลงในฐานข้อมูล
เรียบร้อยแล้ว
5.2 รายการ T2 และ T4 จะต้องทาซ้าใหม่ (Redo)
5.3 รายการ T3 และ T5 และต้องยกเลิก (Undo) และกลับเป็นค่าเริ่มต้น เพราะรายการ
ทั้งสองยังทาไม่เสร็จการ
การกู้ (Recovery)
ดังกล่าวแล้วว่า การเกิดภาวะขัดข้องนั้นอาจเนื่องมาจากสาเหตุ ที่ระบบเกิดความขัดข้องหรืออาจ
เกิดจากสาเหตุความผิดพลาดของสื่อบันทึกข้อมูล ซึ่งการกู้ข้อมูลที่เกิดสาเหตุภาวะขัดข้องที่ต่างกัน ก็จะใช้
วิธีการแก้ไขปัญหาที่ต่างกันด้วย ในหัวข้อนี้จะกล่าวถึง ชนิดของการกู้ได้แก่
1. การกู้ที่เกิดจากระบบเกิดความขัดข้อง (System Recovery)
เป็นความขัดข้องที่มีผลต่อข้อมูลที่อยู่ในหน่วยความจาขณะที่มีการประมวลผล วิธีที่จะนามาใช้
ในการกู้ก็คือการนามาใช้ในการกู้ ก็คือ การนาระบบการลงบันทึกดังกล่าวข้างต้นมาใช้
2. การกู้ที่เกิดจากความผิดพลาดของสื่อบันทึก (Media Recovery)
เป็นความขัดข้องที่มีผลทาให้ข้อมูลบนสื่อบันทึกเสียหายหรือถูกทาลาย วิธีที่จะนามาใช้ในการกู้
ก็คือ การทาการสารองข้อมูล (Backup) ไว้เป็นระยะๆ เมื่อเกิดความขัดข้องกับสื่อบันทึกข้อมูลที่ใช้งานอยู่ ก็
จะนาฐานข้อมูลสารองที่ทาไว้ล่าสุด มาถ่ายลงในสื่อบันทึกชุดใหม่และใช้ระบบการลงบันทึกมาช่วยเพื่อ
พิจารณารายการที่ต้องใหม่ ซึ่งเกิดหลังจากการทาการสารองข้อมูลครั้งสุดท้ายไว้
- 8. การเกิดภาวะพร้อมกัน (Concurrency)
ในระบบฐานขอมูลที่ใช้กัน มักจะเป็นระบบที่ผู้ใช้หลาย ๆ คน สามารถใช้ข้อมูลพร้อมกันได้ใน
เวลาเดียวกัน ปัญหาจึงมาจากการที่ผู้ใช้หลาย ๆ คน มีการเรียกใช้ข้อมูลชุดเดียวกันในเวลาพร้อม ๆ กัน จึง
ทาให้เกิดภาวะพร้อมกัน และหากไม่มีการควบคุมที่ดี ก็จะทาให้เกิดปัญหาตามมาได้แก่
1ปัญหาข้อมูลไม่ได้ถูกแก้ไขให้ถูกต้อง
สมมติให้มีการเปลี่ยนแปลง 2 รายการ คือ C1 และ C2 ที่จะไปทาการแก้ไขข้อมูลชุดเดียวกัน คือ
ข้อมูล N ดังรูป
จากรูปข้างต้นรายการ C1 จะเริ่มทางานก่อน แต่ยังแก้ไขข้อมูล N ไม่เสร็จ รายการ C2 เริ่มทาแทรก
เข้ามา ข้อมูล N จะต้องถูกอ่านเข้ามาก่อนจึงทาการแก้ไขได้ที่ถูกต้องแล้ว รายการ C1 เกิดขึ้นก่อนรายการ C2
จึงควรนาผลหลังจากรายการ C1 ได้ทาการแก้ไขแล้ว มาทาการแก้ไขต่อ
- 9. เพื่อให้ชัดเจนขึ้น จะขอสมมติค่าให้ N มีค่าเท่ากับ 10 และ C1 มีค่าเท่ากับ 2 ส่วน C2 มีค่า
เท่ากับ 4 ถ้าระบบดังกล่าวทางานถูกต้อง ก็ควรให้ค่า N เป็น 16
แต่จากรูป 7.3 รายการ C1 จะอ่านค่า N เท่ากับ 10 ไปเก็บที่บัฟเฟอร์ แล้วรายการ C2 ก็อ่านค่า
N ซึ่งเท่ากับ 10 เช่นเดียวกัน รายการ C1 จะเปลี่ยนแปลงค่า N เป็น 10+2=12 และรายการ C2 ก็จะปลี่ยน
แปลงค่า N เป็น 10+4 =14 ทาให้สรุปค่า N เท่ากับ 14 แทนที่ N จะมีค่าเท่ากับ 16
2. ปัญหาการแก้ไขข้อมูลยังไม่ได้มีการ Commit
ปัญหานี้เกิดจากการที่ระบบทาการปรับปรุงข้อมูลของรายการหนึ่งยังไม่เสร็จสมบูรณ์ต้องทา
การย้อนกลับ (Rollback) ข้อมูลนั้นจึงยังคงเป็นค่าเดิม แต่ยอมให้รายการเปลี่ยนแปลงอีกรายการหนึ่ง มา
เรียกข้อมูลนั้นไปใช้จึงทาให้ได้รับข้อมูลที่มีค่าไม่ถูกต้องไปใช้งาน
3. ปัญหาการได้ผลลัพธ์ที่ขัดแย้งกับความเป็นจริง
ปัญหานี้เกิดจากการที่มีรายการถูกส่งเข้าประมวลผลพร้อมๆ กัน โดยการประมวลผลค่าของ
รายการหนึ่งยังไม่ได้ถูกต้อง ขณะเดียวกันก็มีรายการอื่นมาเรียกใช้ข้อมูลค่านั้น ระบบก็จะนาเอาค่าที่ยัง
ไม่ได้ถูกปรับไปใช้ทาให้ผลที่ได้จากการประมวลผลขัดแย้งกับความเป็นจริง
จึงเป็นหน้าที่ของระบบจัดการฐานข้อมูล ที่จะต้องควบคุมการเกิดภาวะพร้อมกัน เพื่อมิให้เกิด
ปัญหาต่างๆ ดังกล่าวมาข้างต้น
- 10. เทคนิคการปิดกั้น (Lock Technique)
จากที่กล่าวมาข้างต้น คงจะทาให้พอเห็นถึงปัญหาของการเกิดภาวะพร้อมกัน อันเนื่องมาจากการ
ที่ผู้ใช้หลายคนเรียกใช้ข้อมูลพร้อมๆ กัน โดยที่ข้อมูลรายการนั้นๆ อยู่ระหว่างการปรับปรุงค่าและยังทาไม่
เสร็จ ทาให้ผู้ใช้คนอื่นได้ค่าที่ไม่ถูกต้องไปใช้งาน
วิธีแก้ปัญหาสามารถทาได้โดยใช้เทคนิคการปิดกั้น (Lock Technique) ซึ่งจะกล่าวรายละเอียด
ดังต่อไปนี้
ชนิดของการปิดกั้น มี 2 ชนิด คือ
1.การปิดกั้นเฉพาะ (Exclusive Lock)
เป็นการปิดกั้นที่ผู้ใช้คนหนึ่งทาการปิดกั้นแบบเฉพาะ เมื่อต้องการปรับปรุงข้อมูลจนกว่าจะ
ปล่อยการปิดกั้น ผู้ใช้คนอื่นจึงสามารถปรับปรุงแก้ไขรายการนั้นได้
2.การปิดกั้นแบบร่วม (Shared Lock)
เป็นการปิดกั้นที่ผู้ใช้หลายๆ คน จะสามารถอ่านรายการใดรายการหนึ่งร่วมกันได้แต่แก้ไขไม่ได้
- 11. โดยปกติระบบจัดการฐานข้อมูล จะทาการปิดกั้นรายการโดยอัตโนมัติ เมื่อเริ่มมีการ
เปลี่ยนแปลงข้อมูลรายการนั้นๆ เพื่อป้องกันไม่ได้รายการอื่นแทรกเข้ามา จนกว่ารายการเปลี่ยนแปลงนั้น
จะเสร็จสิ้นสมบูรณ์ (Commit) หรือทาการย้อนกลับ (Rollback) ไปเป็นค่าเดิม โดยถ้าเป็นกาเรียกดูข้อมูล ก็
จะทาการปิดกั้นแบบร่วม แต่ถ้าเป็นการแก้ไขข้อมูลก็จะทาการปิดกั้นแบบเฉพาะ ดังนั้นถ้าในการ
เปลี่ยนแปลงข้อมูล ซึ่งจะต้องเริ่มด้วยการอ่านข้อมูลเข้ามา แล้วทาการปรับปรุงเปลี่ยนแปลงค่า จึงต้องมีการ
ปิดกั้นเป็น 2 ช่วง คือ ขณะที่อ่านข้อมูลเข้ามาจะปิดกั้นแบบเฉพาะ
ด้วยเทคนิคการปิดกั้นดังได้กล่าวมา จึงช่วยแก้ไขปัญหาของการเกิดภาวะพร้อมกันได้แต่ปัญหา
ตามมาที่อาจเกิดจากการใช้เทคนิคปิดกั้น ก็คือ การติดตายของรายการ (Deadlock)ซึ่งเกิดจากการที่มี
รายการตั้งแต่ 2 รายการขึ้นไปต่างหยุดรอซึ่งกันและกัน จนทาให้ไม่สามารถทางานต่อไปได้ระบบจึงต้อง
ตรวจสอบให้พบและดาเนินการแก้ไข โดยเลือกรายการใดรายการหนึ่งให้ปล่อยการปิดกั้น เพื่อให้รายการ
อื่นทางานต่อไป ส่วนรายการที่ปล่อยการปิดกั้นนั้นก็จะต้องทาการย้อนกลับด้วย