![]() |
|
![]() |
|
![]() |
ประเภทของการเกิดความขัอข้อง (Failare)1.ความหมายของการฟื้นสภาพการฟื้นสภาพ (recovery) คือ การที่ระบบจัดการฐานข้อมูลจัดการกับข้อมูลให้ย้อนไปอยู่ในสภาพเดิมที่ถูกต้อง ในการจัดการฐานข้อมูลการเกิดความขัดข้องหรือความเสียหายกับระบบไม่ว่ากรณีใด ๆ ที่อาจไปทำลายข้อมูลบางส่วน หรือทำให้ข้อมูลนั้นไม่ถูกต้อง ไม่น่าเชื่อถือได้ ดังนั้นจึงต้องมีวิธีการเพื่อจะนำข้อมูลที่ถูกทำลายไปกลับคืนมาและอยู่ในสภาพที่ถูกต้องน่าเชื่อถือดังเดิม ซึ่งถือเป็นหน้าที่หนึ่งที่สำคัญของระบบจัดการฐานข้อมูล การฟื้นสภาพเป็นการทำให้มั่นใจว่าทรานแซกชันที่ถูกยกเลิกหรือที่ทำผิดพลาดอันเกิดจากความขัดข้องต่างๆ เช่น ความผิดพลาดของโปรแกรม ดิสก์เสีย ระบบไฟฟ้าขัดข้อง เป็นต้น จะไม่ก่อให้เกิดความเสียหายกับฐานข้อมูล หรือทรานแซกชันอื่นที่ทำงานร่วมกัน 2.ประเภทของการเกิดความขัดข้องความขัดข้องที่เกิดขึ้นกับระบบนั้นมีหลายประการ ประเภทของความขัดข้องจำแนก (type of failures) ได้เป็น 3 ลักษณะ คือ ความขัดข้องของทรานแซกชัน ความขัดข้องของระบบ และความขัดข้องของสื่อข้อมูล 2.1 ความขัดข้องของระบบ (system failures) เป็นความขัดข้องที่จะเกิดผลกระทบต่อทรานแซกชันทั้งหมด หรือเกือบทั้งหมดที่กำลังดำเนินการอยู่ ความผิดพลาดของระบบปฏิบัติการ ทำให้ระบบไม่สามารถทำงานต่อไปได้ จำเป็นต้องปิดระบบคอมพิวเตอร์และเปิดเครื่องใหม่อีกครั้ง(restart) ซึ่งจะมีผลกับทุกทรานแซกชันที่กำลังดำเนินอยู่ แต่ไม่ทำลายฐานข้อมูลที่อยู่ในดิสก์ เรียกความขัดข้องลักษณะนี้ว่า ซอฟต์แครช (Soft crash) โดยข้อมูลที่บันทึกในฐานข้อมูลจะไม่สูญหาย แต่ข้อมูลที่อยู่ในหน่วยความจำหลักซึ่งอยู่ระหว่างการทำงานและยังไม่ได้บันทึกจะสูญหายไปได้ 2.2 ความขัดข้องของทรานแซกชัน (transaction failures) ความขัดข้องลักษณะนี้จะมีผลกระทบเฉพาะทรานแซกชันที่มีความขัดข้องเกิดขึ้นเท่านั้น ความขัดข้องของทรานแซกชันมี 2 ลักษณะ คือ 1) ความขัดข้องที่สามารถป้องกันได้โดยการตรวจสอบภายในโปรแกรม เช่น ทรานแซกชันการโอนเงิน ถ้ายอดเงินโอนมีค่ามากกว่ายอดเงินที่มีอยู่ในบัญชี เมื่อโปรแกรมตรวจพบจะแสดงข้อความผิดพลาด อาทิ ยอดเงินไม่เพียงพอ (insufficient fund) ซึ่งลักษณะนี้ต้องทำการยกเลิกการเปลี่ยนแปลงต่าง ๆ โดยปรับข้อมูลให้เป็นค่าเดิมเมื่อเริ่มต้น หรือ ผู้เขียนโปรแกรมกำหนดขอบเขตของทรานแซกชันไม่ถูกต้อง ความขัดข้องดังกล่าวสามารถป้องกันได้โดยผู้เขียนโปรแกรมต้องตรวจสอบความถูกต้องภายในโปรแกรมให้ครอบคลุมทุกกรณีที่มีโอกาสจะละเมิดกฎควบคุมความถูกต้อง และต้องกำหนดขอบเขตของทรานแซกชันให้ถูกต้อง 2) ความขัดข้องที่ไม่สามารถป้องกันได้โดยการตรวจสอบภายในโปรแกรม เช่น การล้น (overflow) เกินพื้นที่ในการทำงาน ซึ่งทำให้มีเนื้อที่ไม่เพียงพอต่อการปฎิบัติการของทรานแซกชัน ซึ่งอาจก่อให้เกิดความผิดพลาดแก่ทรานแซกชันได้ 2.3 ความขัดข้องของสื่อข้อมูล (media failures) เป็นความขัดข้องที่จะเกิดผลกระทบต่อทรานแซกชันทั้งหมด หรือเกือบทั้งหมดที่กำลังดำเนินการอยู่ เช่น หัวอ่านกระทบกับแผ่นดิสก์ หรือตัวควบคุมการทำงานของดิสก์ (disk controller) พัง ความขัดข้องของสื่อข้อมูลจะมีผลทำลายฐานข้อมูล หรือบางส่วนของฐานข้อมูล และมีผลกระทบต่อทรานแซกชันที่กำลังใช้งานฐานข้อมูลนั้นอยู่ เรียกความขัดข้องลักษณะนี้ว่าว่า ฮาร์ดแครช (hard crash) 3.วิธีการฟื้นสภาพการแก้ปัญหาความขัดข้องต่างๆ จะใช้ ไฟล์ประวัติ (log file) เข้ามาช่วยในการฟื้นสภาพ ซึ่งเรียกวิธีนี้ว่า การฟื้นสภาพแบบล็อกเบส (log-based recovery) มีหลักการ คือ การปฏิบัติการของทรานแซกชันเกี่ยวกับการบันทึก (write operation) จะต้องบันทึก (write) ไว้ในไฟล์ประวัติเสมอ เพื่อบอกถึงสถานะของข้อมูลและสถานะของทรานแซกชัน 3.1 รายละเอียดของไฟล์ประวัติ (logfile) จะประกอบด้วยสิ่งต่าง ๆ ดังนี้ · ชื่อทรานแซกชัน (tranasaction name) คือ ชื่อของทรานแซกชันที่กระทำการบันทึก (write operation) · ชื่อเดตาไอเท็ม (data item name) คือ ชื่อของรายการข้อมูลที่ถูกบันทึก · ค่าเก่า (old value) คือ ค่าเก่าของเดตาไอเท็มก่อนการบันทึก · ค่าใหม่ (new value) คือ ค่าใหม่ของเดตาไอเท็มหลังการบันทึก 3.2 วิธีการฟื้นสภาพ เนื่องจากการฟื้นสภาพแบบล็อกเบส จะต้องปฏิบัติตามกฎเกณฑ์การบันทึก (write-ahead protocal) โดยเรคอร์ดประวัติจะต้องบันทึก (write) ลงไฟล์ประวัติก่อนเสมอ จึงจะยอมให้มีการบันทึกข้อมูลจากที่พักข้อมูลชั่วคราว (buffer) ลงฐานข้อมูลได้ ด้วยกฎเกณฑ์นี้ทำให้เราสามารถที่จะยกเลิกหรือทำซ้ำการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นกับฐานข้อมูลได้โดยใช้ค่าเก่าหรือค่าใหม่ที่เก็บไว้ไฟล์ประวัติ (log file) การฟื้นสภาพมี 3 วิธี ดังนี้ คือ การยกเลิก การทำซ้ำ และจุดตรวจสอบ ซึ่งความขัดข้องบางกรณีอาจใช้เพียงวิธีใดวิธีหนึ่ง หรืออาจจะใช้ทั้ง 2 วิธี หรือใช้ทั้ง 3 วิธีร่วมกันได้ 1) การยกเลิก (UNDO) คือ การยกเลิกสิ่งที่ทำมาแล้วสำหรับทรานแซกชันที่กำลังทำงานอยู่แล้วเกิดความขัดข้องขึ้นระหว่างการดำเนินงานก่อนที่จะคอมมิต (COMMIT) ลักษณะนี้จะยกเลิกการกระทำที่ได้ทำมาแล้วทั้งหมด 2) การทำซ้ำ (REDO) คือ การทำซ้ำสำหรับทรานแซกชันที่ทำงานเสร็จสมบูรณ์แล้ว (COMMIT) แล้ว แต่ยังไม่มีการเคลื่อนย้ายข้อมูลจากที่พักข้อมูลชั่วคราว (buffer) ในหน่วยความจำหลักลงสู่ฐานข้อมูลจริงก็เกิดปัญหาขัดข้องเสียก่อน ซึ่งเสมือนว่าทรานแซกชันยังไม่ทำงาน ดังนั้นจึงต้องกระทำซ้ำทรานแซกชันนั้น 3) จุดตรวจสอบ (CHECKPOINT) คือ เวลา ณ ขณะใดขณะหนึ่งที่ระบบปฏิบัติการ (OS) และระบบจัดการฐานข้อมูล (DBMS) ใช้ทำการเคลื่อนย้ายข้อมูลจากที่พักข้อมูลชั่วคราว (buffer) ในหน่วยความจำหลักลงฐานข้อมูลในดิสก์ โดยจุดตรวจสอบจะถูกบันทึกในไฟล์ประวัติ (log file) เป็นระยะๆ เพื่อประโยชน์ในการฟื้นสภาพ การทำจุดตรวจสอบบ่อยหรือถี่ ๆ ย่อมทำให้การฟื้นสภาพเร็วขึ้นแต่อาจจะลดประสิทธิภาพการทำงานของระบบเพราะต้องติดต่อกับส่วนรับเข้า/ส่งออก (I/O) บ่อย ๆ ดังนั้นช่วงเวลาของการทำจุดตรวจสอบว่าจะเลือกให้ถี่แค่ไหนขึ้นกับลักษณะและปริมาณของทรานแซกชัน เช่น ถ้าเป็นทรานแซกชันขนาดใหญ่ ๆ ก็ไม่ควรให้ถี่นักเพราะต้องเสียเวลาเคลื่อนย้ายข้อมูล การกำหนดจุดตรวจสอบว่าควรจะบ่อยครั้งนั้นอาจมีผลเสียคือถ้าจุดตรวจสอบถี่ (checkpoint time หรือ Tc) จะทำให้การฟื้นสภาพเร็วขึ้น เพราะสามารถยกเลิก (UNDO) ทำซ้ำ (REDO) ทรานแซกชันที่เกิดข้อขัดข้องได้ในช่วงเวลาของจุดตรวจสอบนั้น โดยไม่ต้องฟื้นสภาพ ณ จุดเริ่มต้นของทรานแซกชัน แต่อาจทำให้เกิดปัญหาคอขวดขึ้น (bottle neck) ขึ้นได้ คือ อาจใช้เวลาในการเคลื่อนย้ายข้อมูลจากหน่วยความจำหลักลงฐานข้อมูลในดิสก์มากกว่าปกติ แต่ถ้าจุดตรวจสอบห่าง (checkpoint time หรือ Tc) อาจทำให้เปลืองเนื้อที่ในหน่วยความจำหลักเพราะต้องใช้ที่พักข้อมูลชั่วคราว (buffer) ขนาดใหญ่ในการเก็บข้อมูลจำนวนมากที่ยังไม่ได้เคลื่อนย้ายลงฐานข้อมูลในดิสก์ การฟื้นสภาพไม่ว่าจะเกิดจากความขัดข้องประการใดๆ จะใช้ไฟล์ประวัติ (log file) เข้ามาช่วยในการนำข้อมูลกลับคืนมาให้อยู่ในสภาวะที่ถูกต้อง
|
|
|