Transaction Management and Concurrency Control
Transaction คือ การกระทำใด ๆ ของ user program ใน DBMS ที่ใช้งานกลุ่มคำสั่งปฏิบัติงานที่ execute ข้อมูลในฐานข้อมูล โดยอาจเป็นได้ทั้งการอ่าน การเขียน การปรับปรุงหรือการลบข้อมูลในฐานข้อมูล เป็นหน่วยของการทำงานที่กระทำกับข้อมูลในฐานข้อมูล เพื่อเปลี่ยนสถานะของข้อมูลจากสถานะหนึ่งไปสู่อีกสถานะหนึ่ง ภายใน Transaction จะประกอบด้วยชุดของ operation ต่าง ๆ เรียงกันเป็นลำดับ
Example Transaction
Transaction Operations BEGIN_TRANSACTION : คำสั่งเริ่มการประมวลผลของ Transaction READ หรือ WRITE : เป็นคำสั่งที่ใช้ในการอ่านหรือเขียน ข้อมูลบนฐานข้อมูล END_TRANSACTION : เป็นคำสั่งที่จบการอ่านหรือเขียน ข้อมูลในฐานข้อมูล ซึ่งในจุดนี้จะมีการตรวจสอบว่าการปรับปรุงข้อมูลสำเร็จ (committed) หรือถูกยกเลิก (aborted) เพื่อเตรียมย้อนกลับการทำงาน (rollback)
Transaction Operations COMMIT TRANSACTION : เป็นคำสั่งที่บอกว่าหากการทำงานของ Transaction เสร็จสมบูรณ์ การเปลี่ยนแปลงต่าง ๆ ที่กระทำกับฐานข้อมูลจะไม่สามารถย้อนการทำงานกลับไปได้ (undone) ROLLBACK : เป็นคำสั่งที่บอกว่าหากการทำงานของ Transaction ไม่เสร็จสมบูรณ์การเปลี่ยนแปลงต่าง ๆ ที่กระทำกับฐานข้อมูลระหว่างการทำงานของ Transaction จะถูกยกเลิกและย้อนกลับไปสู่สถานะก่อนการเริ่ม ประมวลผล Transaction
สถานะของ Transaction แบ่งออกเป็น 5 สถานะคือ Active คือ สถานะเริ่มต้นการทำงานของ Transaction Partially Committed คือสถานะที่แต่ละการกระทำของ Transaction ทำงานเสร็จ Committed คือ สถานะที่ Transaction ทำงานเสร็จสมบูรณ์ Failed คือ สถานะที่มีข้อผิดพลาดเกิดขึ้นกับ Transaction นั้น Aborted คือ สถานะที่เกิดขึ้นหลังจากที่เกิดสถานะ Failed เพื่อหยุดการทำงานของ Transaction
State Transition Diagram for Transaction
คุณสมบัติของ Transactions เรียกย่อๆ ว่า ACID ซึ่งเป็นคุณสมบัติที่ DBMS ต้องคง คุณสมบัติทั้งหมดไว้ให้แก่การทำงานของ Transaction มี 4 คุณสมบัติ ดังนี้ Atomicity Consistency Isolation Durability
Atomicity เมื่อผู้ใช้ประมวลผลรายการเปลี่ยนแปลงแล้ว ทุก การกระทำของรายการเปลี่ยนแปลงต้องเสร็จ สมบูรณ์ทุกคำสั่ง (committed) หรือ ถ้ามีการทำงาน ใดในรายการเปลี่ยนแปลงไม่สมบูรณ์ก็ต้องยกเลิก (aborted) รายการเปลี่ยนแปลงนั้นและย้อนกลับการ ทำงาน (rolled back) เสมือนว่าไม่เคยประมวลผล รายการเปลี่ยนแปลงนั้นเลย
Consistency การประมวลผล Transaction จะส่งผลให้มีการ เปลี่ยนแปลงสถานะของฐานข้อมูล ดังนั้น Transaction จะต้องรักษาความถูกต้องของ ฐานข้อมูลที่สอดคล้องกับกฎเกณฑ์ต่าง ๆ ที่กำหนด ไว้ (Integrity Constraints) หลังการประมวลผล Transaction เสร็จ ฐานข้อมูล ต้องอยู่ในสถานะที่ถูกต้อง (consistent state)
Isolation Transaction ที่มีการทำงานพร้อมกันในเวลาเดียวกันโดยผู้ใช้หลายคน(Multi-users) จะต้องไม่รบกวนกัน หาก T1 และ T2 ทำงานในเวลาใกล้เคียงกัน ดังนี้ คุณสมบัติ Isolation จะถือเสมือนรายการทั้งสองทำงาน ดังนี้
Durability Transaction ที่ทำให้เกิดการเปลี่ยนแปลงของข้อมูล ในฐานข้อมูล เมื่อ Transaction ทำงานเสร็จสมบูรณ์ (committed) ผลจากการเปลี่ยนนั้นจะยังคงอยู่ถาวร เช่น การโอนเงินจาก A ไป B ถ้าทำสำเร็จ ผลที่ได้ จะคงอยู่ถาวร
DBMS Transaction Subsystem
DBMS Transaction Subsystem Transaction Manager เป็นตัวควบคุม transaction และตัดสินใจว่าจะให้คำสั่งไหนประมวลผล และมีการทำงานร่วมกับ application program และเชื่อมต่อกับ Scheduler Scheduler (lock manager, concurrency control manager) เป็นตัวจัดลำดับการประมวลผลของ transaction ให้เป็นแบบ serial execution Recovery manager เป็นตัวรับประกันว่าถ้าหากมีข้อผิดพลาดเกิดขึ้นระหว่าง transaction แล้วฐานข้อมูลจะต้องอยู่ในสถานะ consistent Buffer manager รับผิดชอบส่วนการส่งข้อมูลระหว่าง disk storage และ main memory
การกระทำเพื่อควบคุมการทำงานของTransactions เพื่อกำหนดให้ Transaction มีคุณสมบัติ Atomicity จึงได้มีการกำหนดการกระทำเพื่อควบคุมการทำงานของ Transaction ไว้ดังนี้ Commit Transaction เป็นการกระทำที่กำหนดขึ้นเพื่อแจ้งให้ระบบทราบว่า การทำงานของ Transaction อยู่ในสถานะ Committed Rollback Transaction เป็นการกระทำที่กำหนดขึ้นเพื่อแจ้งให้ระบบทราบว่า การทำงานของ Transaction อยู่ในสถานะ Aborted
Concurrency Control (การควมคุมสภาวะการทำงานพร้อมกัน) คือกระบวนการที่ใช้จัดการ Transaction ต่างๆ ที่ต้อง การใช้ข้อมูลชุดเดียวกันในเวลาเดียวกัน สาเหตุที่ทำให้เกิดสภาวะ concurrency มีอยู่ด้วยกัน3 สาเหตุดังนี้ Lost update problem Uncommitted dependency problem Inconsistent analysis problem
Lost Update Problem (ปัญหาการสูญเสียจากการปรับปรุงข้อมูล) สาเหตุนี้เกิดขึ้นในกรณีที่ 2 Transaction หรือมากกว่ามีการเรียกใช้ข้อมูลเดียวกัน แล้วต่างฝ่ายต่างปรับปรุงค่าของข้อมูล โดยไม่มีการป้องกันจากอีกฝ่ายหนึ่ง เช่น T1 ถอนเงิน 10 ฿ จากบัญชี balx (เงินในบัญชี = 100 ฿) T2 ฝากเงิน 100 ฿ เข้าไปในบัญชีเดียวกัน สุดท้ายเงินในบัญชีต้องคงเหลือ = 190 ฿
Lost Update Problem ปัญหานี้สามารถหลีกเลี่ยงได้ด้วยการป้องกัน T1 จากการอ่านค่า balx จนกระทั่งให้ T2 ได้อัปเดตอย่างสมบูณ์เสียก่อน
Uncommitted Dependency Problem (ปัญหาข้อมูลที่ยังไม่ได้รับการยอมรับความสมบูรณ์) เกิดขึ้นในกรณีที่ 2 Transaction หรือมากกว่า มีการเรียกใช้ข้อมูลเดียวกัน แต่มี Transaction หนึ่งที่มีการทำงานที่ยังไม่เสร็จสมบูรณ์และเกิดปัญหาขึ้น จึงต้องมีการยกเลิกทุกการกระทำก่อนหน้าของ Transaction นั้น ส่งผลให้ข้อมูลที่ Transaction นั้นเรียกใช้กลับไปมีค่าเดิม และทำให้ Transaction อื่นที่ใช้ข้อมูลเดียวกันได้รับข้อมูลที่ไม่ถูกต้องไปด้วย
Uncommitted Dependency Problem ช่วงเวลา t4 ทรานแซกชั่น T4 ได้มีการอัปเดตค่า balx เป็นค่า 200 แต่ในเวลาถัดมาก็ได้มีการยกเลิกทรานแซกชั่นดังกล่าว จึงมีการ Rollback กลับไป ทำให้ค่า balx กลับมาเป็นค่าเดิมคือ 100 T3 ได้มีการอ่านค่า balx ซึ่งเป็นค่าใหม่คือ 200 ในช่วงเวลา t5 ก่อนที่ T4 จะถูกยกเลิกทรานแซกชั่นในเวลา t6 และทรานแซกชั่น T3 ก็ได้นำค่า balx ที่ผิดไปคำนวณจึงส่งผลให้ผลลัพธ์ที่ได้ไม่ถูกต้อง
Uncommitted Dependency Problem ปัญหานี้หลีกเลี่ยงได้โดยการกำหนดให้ T3 จะสามารถอ่านค่า balx ได้ก็ต่อเมื่อ T4 มีสถานะ commits หรือ aborts แล้ว
Inconsistent Analysis Problem (ปัญหาความไม่สอดคล้องกันของข้อมูล) สาเหตุนี้เกิดขึ้นในกรณีที่ 2 Transaction หรือมากกว่ามีการเรียกใช้ข้อมูลเดียวกัน แต่มี Transaction หนึ่งที่ได้รับข้อมูลที่อยู่ในสถานะที่ไม่ถูกต้องไปใช้งาน ส่งผลให้การประมวลผลของ Transaction นั้นมีการประมวลผลที่ผิดพลาด
Inconsistent Analysis Problem T6 is totaling balances of account x (100฿), account y (50฿), and account z (25฿). Meantime, T5 has transferred 10฿ from balx to balz, so T6 now has wrong result (10฿ too high).
Inconsistent Analysis Problem ปัญหาดังกล่าวสามารถหลีกเลี่ยงได้ด้วยการป้องกัน T6 จะสามารถอ่านค่า balx และ baly ได้หลังจาก T5 ได้อัปเดตอย่างสมบูณ์เสียก่อน
Schedule เป็นแนวทางหนึ่งในการรักษาความถูกต้องให้กับข้อมูล คือ การกำหนดลำดับการทำงานให้แต่ละ Transaction ที่มีการเรียกใช้ข้อมูลพร้อม ๆ กัน ซึ่งเรียกว่า Schedule ใช้กำหนดลำดับก่อนหลังในการเรียกใช้ข้อมูลให้กับแต่ละ Transaction จะช่วยทำให้ข้อมูลที่แต่ละ Transaction นำไปใช้มีความถูกต้องอยู่เสมอ
รูปแบบของ Schedule มี 2 รูปแบบคือ Serial Schedule Concurrent Schedule (Nonserial Schedule)
Serial Schedule เป็นการกำหนดลำดับการทำงานให้กับแต่ละ Transaction โดยใช้หลักของการทำทีละงาน Transaction หนึ่งจะสามารถทำงานได้ ก็ต่อเมื่ออีก Transaction หนึ่งทำงานจนเสร็จสมบูรณ์แล้ว
Concurrent Schedule (Nonserial Schedule) เป็นการกำหนดลำดับการทำงานให้กับแต่ละ Transaction โดยการแบ่งแต่ละ Transaction ออกเป็นส่วน ๆ แล้วจึงนำแต่ละส่วนมาทำงานสลับกันไป อาจก่อให้เกิดปัญหาทางด้านความถูกต้องของข้อมูลได้ ในกรณีที่ถ้า 2 Transaction มีการนำข้อมูลตัวเดียวกันไปประมวลผล แล้วบันทึกผลที่ได้ลงในฐานข้อมูลในเวลาที่ต่างกัน
Examples of Schedule
Serializability คือ คุณสมบัติของการจัดลำดับการทำงานให้กับ Transaction ในแบบ Concurrency Schedule ที่สามารถควบคุมให้ผลลัพธ์ที่ได้มีผลเช่นเดียวกับการจัดลำดับการทำงานให้กับ Transaction ในแบบ Serial Schedule
Non-conflict serializable schedule
Concurrency Control Techniques เมื่อเกิดสภาวะพร้อมกันในระบบ DBMS จะมีเทคนิคในการจัดเรียงลำดับการทำงานของแต่ละ Transaction แบ่งออกเป็น 2 ประเภทหลักคือ การควบคุมภาวะพร้อมกันด้วยการล็อก (Locking) การควบคุมภาวะพร้อมกันโดยไม่ใช้วิธีการล็อก (Without Locking)
Lock-Based Concurrency Control (การควบคุมภาวะพร้อมกันด้วยการล็อก) Locking เป็นการกำหนดให้สถานะของ Transaction ที่ต้องการใช้งานอยู่ในสถานะล็อก เพื่อป้องกัน Transaction อื่น ๆ เข้ามาใช้งานข้อมูลนั้นจนกว่าข้อมูลที่อยู่ในสถานะล็อกนั้นทำงานเสร็จสมบูรณ์ (committed) และปลดล็อก เมื่อข้อมูลอยู่ในสถานะปลดล็อก Transaction อื่น ๆ จึงสามารถนำข้อมูลไปใช้งานต่อได้
Example - Lock-Based Bob Alice
พื้นฐานการล็อก ประกอบด้วย Read Lock Write Lock ถ้าทรานแซกชั่นใด ๆ มีการ write lock ข้อมูล จะสามารถทำได้ทั้งการอ่านและการอัปเดต
Type of Locks แบ่งออกเป็น 2 ชนิดด้วยกัน Shared Locks Exclusive Locks
Shared Locks เป็นการล็อกที่อนุญาตให้ทรานแซกชั่นอื่น ๆ สามารถทำการอ่านเรคอร์ดต่าง ๆ ได้ ในขณะที่จะไม่อนุญาตให้ทำการอัปเดตข้อมูลอย่างเด็ดขาด ผู้ใช้งานอื่น ๆ ยังสามารถอ่านข้อมูลต่าง ๆ ที่ถูกล็อกได้ แต่จะไม่อนุญาตให้มีการอัปเดตข้อมูล ซึ่งก็คือการ read lock นั่นเอง
Exclusive Locks เป็นการล็อกที่ไม่อนุญาตให้ทรานแซกชั่นอื่น ๆ ใช้ข้อมูลที่ถูกล็อกอยู่ ข้อมูลจะถูกใช้งานได้เพียงคนเดียวในขณะนั้น ผู้ใช้งานอื่น ๆ ที่ต้องการใช้งานจะไม่สามารถทำการอ่านและอัปเดตข้อมูลที่ถูกล็อกได้จนกว่าจะปลดล็อก ซึ่งก็คือการ write lock นั่นเอง
Two-Phase Locking (2PL) เป็นวิธีที่นำแนวคิดแบบล็อกมาจัดลำดับการทำงานของแต่ละ Transaction ให้อยู่ในรูปแบบ Serializability โดยกำหนดให้ Transaction มีการทำงานที่แบ่งออกเป็น 2 ระยะด้วยกันคือ Growing phase : เป็นระยะที่ทรานแซกชั่นทำการล็อกข้อมูลอย่างเดียว โดยไม่ปล่อยล็อก Shrinking phase : เป็นระยะที่ทรานแซกชั่นปล่อยล็อกข้อมูลอย่างเดียว โดยไม่สนใจการ ล็อกข้อมูลใหม่
Two-Phase Locking (2PL) เมื่อแต่ละ Transaction เริ่มต้นทำงานจะเข้าสู่ระยะ Growing ซึ่ง Transaction จะล็อกข้อมูลที่ต้องใช้งาน โดยไม่ปล่อยล็อกจนกว่า Transaction นั้นจะทำงานเสร็จ จึงจะทำงานในระยะ Shrinking เพื่อปล่อยล็อกข้อมูลต่าง ๆ ซึ่งการกำหนดระยะเวลาของการล็อกที่แยกออกจากกันจะทำให้ในแต่ละ Transaction ไม่สามารถเรียกใช้ข้อมูลที่ถูกเรียกใช้โดย Transaction อื่นได้
Two-Phase Locking (2PL)
Preventing Lost Update Problem using 2PL
Preventing Uncommitted Dependency Problem using 2PL
Preventing Inconsistent Analysis Problem using 2PL
Locking Level ระดับของการล็อกมี 4 ระดับดังนี้ Database Locking Table Locking Record Locking Field Locking
Database Locking เป็นการล็อกทั้งฐานข้อมูล เหมาะสมกับการปฏิบัติงานที่มีการประมวลผลแบบแบตซ์ (batch processing) หรือนำไปใช้ในการ Backup ข้อมูล ขณะที่ทำการประมวลผลอยู่ ฐานข้อมูลทั้งระบบจะถูกล็อกไม่ให้ใครคนอื่นสามารถใช้งานได้เลยจนกว่าจะปลดล็อก
Table Locking เป็นการล็อกรีเลชัน โดยจะทำการล็อกตารางใดตารางหนึ่งที่ต้องการ ส่งผลให้ผู้ใช้คนอื่น ๆ ไม่สามารถอ่านเรคอร์ดของตารางนั้นได้ จนกว่าจะมีการปลดล็อกตาราง
Record Locking เป็นการล็อกข้อมูลบางเรคอร์ดหรือบางแถวในตาราง แถวที่ถูกล็อก ส่งผลให้ผู้ใช้คนอื่นไม่สามารถเข้ามาใช้งานได้จนกว่าเรคอร์ดนั้นจะถูกปลดล็อก เหมาะกับงานที่ต้องการปรับปรุงข้อมูลบางเรคอร์ดที่ต้องการ
Field Locking เป็นการล็อกแอตตริบิวท์หรือคอลัมน์ที่มักจะถูกใช้งานหรือปรับปรุงบ่อย ๆ โดยผู้ใช้คนอื่นยังสามารถใช้งานข้อมูลต่าง ๆ ได้ยกเว้นแอตตริบิวท์ที่ล็อกอยู่ เหมาะกับการนำมาใช้กับการล็อกแอตตริบิวท์ที่มักจะมีการเปลี่ยนแปลงค่าอยู่เสมอ
DeadLock ภาวะติดตาย เกิดขึ้นจากการที่ทรานแซกชั่นตั้งแต่ 2 ทรานแซกชั่นหรือมากกว่าทำการล็อกข้อมูลที่ใช้งาน โดยในแต่ละทรานแซกชั่นต่างรอใช้งานข้อมูลของทรานแซกชั่นอื่นที่ใช้งานอยู่ จึงทำให้ไม่สามารถทำการประมวลผลต่อได้ หรือที่เรียกว่าเกิดภาวะติดตายขึ้น
Deadlock
การแก้ไข DeadLock ทำการสละ Transaction หนึ่งด้วยการปลด Lock Transaction นั้นออกจากลูป เพื่อให้ Transactionอื่นสามารถทำงานต่อได้ ระบบจะต้องค้นหาวงจรที่ก่อให้เกิด Deadlock นั้น แล้วเลือก Transaction หนึ่งในวงจร Deadlock นั้นมาทำการ Rollback เพื่อปลดปล่อย Lock ทั้งหมดที่ Transaction นั้นได้ทำไว้ และปล่อยให้ Transaction อื่นทำงานต่อไป Transaction ที่ถูกเลือกมาทำ Rollback จะถูกเรียกว่า “victim”
Without Locking มี 2 วิธีคือ Optimistic Concurrency Control Concurrency Control Without Locking (การควบคุมภาวะพร้อมกันโดยไม่ใช้วิธีการล็อก) Without Locking มี 2 วิธีคือ Optimistic Concurrency Control Timestamp-Based Concurrency Control
Optimistic Concurrency Control แนวคิดนี้จะอนุญาตให้ Transaction สามารถ execute ได้ตามปกติโดยไม่มีการตรวจสอบล่วงหน้า ซึ่งแต่ละ Transaction จะมีพื้นที่เป็นของตนเอง (Private Workspace) แต่จะมีการตรวจสอบก่อนที่จะบันทึกลงในฐานข้อมูลจริง
Optimistic Concurrency Control การตรวจสอบจะพิจารณาจาก “Transaction นั้นมีการทำงานที่ไม่เป็นไปตามลำดับ และทำให้เกิดการขัดกันกับ Transaction อื่นหรือไม่” ถ้ามีการขัดกัน จะทำการเริ่มต้นการทำงานของ Transaction นั้นใหม่ แต่ถ้าไม่มีการขัดกัน จะนำข้อมูลใน Private Workspace นี้บันทึกลงในฐานข้อมูลต่อไป
วิธี Optimistic Concurrency Control ประกอบด้วย 3 ขั้นตอน Read : ขั้นตอนการอ่าน Validation : ขั้นตอนการตรวจสอบ Write : ขั้นตอนการบันทึก
วิธี Optimistic Concurrency Control Read Transaction จะทำการอ่านข้อมูลจากฐานข้อมูล และทำการเขียนลงใน Private Workspace โดย Transaction อื่นไม่สามารถเข้ามาข้องเกี่ยวได้
วิธี Optimistic Concurrency Control Validation DBMS จะทำการตรวจสอบลำดับการทำงานของแต่ละ Transaction โดยพิจารณาจาก Transaction ที่มีการยืนยันความสำเร็จในการทำงานด้วยคำสั่ง commit แล้ว DBMS จะทำการตรวจสอบความเป็นไปได้ในการขัดกันกับ Transaction อื่น ถ้าเกิดการขัดกัน Transaction นั้นจะถูกยกเลิก และ Private Workspace จะถูก Clear และเริ่มต้นการทำงานใหม่
วิธี Optimistic Concurrency Control Write ในกรณีที่ไม่เกิดปัญหาการขัดกันระหว่าง Transaction ข้อมูลที่อยู่ใน Private Workspace จะถูกบันทึกลงในฐานข้อมูล
Timestamp-Based Concurrency Control วิธีนี้ DBMS จะเป็นตัวกำหนดลำดับของแต่ละ Transaction ในการเข้าทำงาน โดยเรียงตามลำดับการเกิดก่อนหลังของแต่ละ Transaction
Timestamp-Based Concurrency Control การกำหนดค่า Timestamp ให้กับแต่ละ Transaction ทำได้ดังนี้ ใช้เวลา system clock จะนำค่าเวลาระบบเป็นตัวแปรเก็บค่า Timestamp เพื่อใช้กำหนดลำดับที่ของแต่ละ Transaction ใช้ตัวแปร counter โดยตัวแปร counter จะเป็นตัวนับเพิ่มทีละ 1 เพื่อนำมาเป็นตัวกำหนดลำดับที่ให้กับแต่ละ Transaction
ลักษณะของเวลาที่บันทึกคู่กับข้อมูล Write-Timestamp เป็นเวลาล่าสุดที่ข้อมูลถูกเปลี่ยนแปลงค่าโดย Transaction ใด ๆ Read-Timestamp เป็นเวลาล่าสุดที่ข้อมูลถูกนำไปใช้งานโดย Transaction ใด ๆ เวลาทั้ง 2 ส่วนจะถูกนำไปใช้พิจารณาเปรียบเทียบกับกรณีต่าง ๆ
กรณีที่ Transaction มีการอ่านข้อมูล ถ้าเวลาที่ Transaction A เริ่มต้นทำงานเกิดขึ้นก่อนเวลา Write-Timestamp ของข้อมูลที่ Transaction นั้นนำมาใช้งาน Transaction A ต้องอ่านข้อมูลนั้นขึ้นมาใหม่ หรือเริ่มการทำงานของ Transaction A ใหม่ เนื่องจากในขณะที่ Transaction A กำลังทำงาน ข้อมูลนั้นได้ถูกเปลี่ยนแปลงค่าโดย Transaction อื่นไปแล้ว ส่งผลให้ค่าของข้อมูลที่ Transaction A เก็บอยู่ไม่ใช่ค่าล่าสุด
กรณีที่ Transaction มีการอ่านข้อมูล ถ้าเวลาที่ Transaction A เริ่มต้นทำงานเกิดขึ้นหลังจากหรือเวลาเดียวกับเวลา Write-Timestamp ของข้อมูลที่ Transaction A อ่านมาแล้ว แสดงว่าข้อมูลที่อ่านมานั้น สามารถนำไปประมวลผลได้ แต่จะต้องบันทึกเวลา Read-Timestamp ให้กับข้อมูลนั้นใหม่
กรณีที่ Transaction มีการบันทึกข้อมูล ถ้าเวลาที่ Transaction A เริ่มต้นทำงานเกิดขึ้นก่อนเวลา Read-Timestamp ของข้อมูลที่ Transaction นั้นอ่านมาแล้ว แสดงว่าข้อมูลนั้นได้ถูก Transaction อื่นอ่านไปใช้งานเช่นเดียวกัน ดังนั้นจึงไม่สามารถเปลี่ยนแปลงค่าของข้อมูลนั้นได้ ในกรณีนี้ให้เริ่มต้นการทำงาน Transaction A ใหม่ เนื่องจากข้อมูลถูกที่ Transaction A เปลี่ยนแปลงค่าอาจถูก Transaction B ที่นำข้อมูลเดียวกันนั้นไปใช้งาน และเปลี่ยน แปลงค่าทับค่าที่ Transaction A เปลี่ยนแปลงไว้ได้
กรณีที่ Transaction มีการบันทึกข้อมูล ถ้าเวลาที่ Transaction A เริ่มต้นทำงานเกิดขึ้นก่อนเวลา Write-Timestamp ของข้อมูลที่ Transaction นั้นอ่านมาแล้ว แสดงว่าระหว่างที่ Transaction A ทำงาน ข้อมูลนั้นได้ถูก Transaction B เปลี่ยนแปลงค่าของข้อมูลนั้นไปแล้ว ดังนั้น Transaction A จึงไม่สามารถเปลี่ยนแปลงค่าของข้อมูลนั้นได้เนื่องจากค่าที่ Transaction A เปลี่ยนแปลงจะทำให้ค่าของข้อมูลเดียวกันที่ Transaction B เปลี่ยนแปลงไว้สูญหาย ในกรณีนี้ให้เริ่มต้นการทำงาน Transaction A ใหม่
กรณีที่ Transaction มีการบันทึกข้อมูล ส่วนกรณีอื่น ๆ ที่นอกเหนือจาก 2 กรณีที่ผ่านมา ให้ Transaction ทำการเปลี่ยนแปลงค่าของข้อมูลนั้นได้ แต่จะต้องกำหนดเวลา Write-Timestamp ให้กับข้อมูลนั้นใหม่
Basic Timestamp Ordering
Database Recovery เป็นกระบวนการเรียกคืนฐานข้อมูลให้กับมาสู่สภาวะเดิมที่สามารถใช้งานได้ ในกรณีที่เกิดเหตุขัดข้องบางประการ ไม่ว่าจะเป็นความผิดพลาดจากผู้กระทำ ระบบคอมพิวเตอร์หรือ ความขัดข้องจากระบบไฟฟ้า
Types of Failures ระบบล่ม ความขัดข้องจากสื่อบันทึกข้อมูล ความผิดพลาดจากโปรแกรมแอพพลิเคชั่น ความขัดข้องจากภัยธรรมชาติ การไม่ดูแลเอาใจใส่ การก่อวินาศกรรม
ความจำเป็นในการกู้ข้อมูล การจัดเก็บข้อมูลในคอมพิวเตอร์จะต้องใช้กับอุปกรณ์ต่าง ๆ หลายประเภท เช่น หน่วยความจำ ดิสก์ เทปแม่เหล็ก ในขณะที่ข้อมูลผ่านอุปกรณ์เหล่านี้อาจมีข้อผิดพลาดเกิดขึ้นได้ จึงต้องคำนึงถึงประเภทของอุปกรณ์ที่ใช้จัดเก็บข้อมูลขณะที่เกิดข้อผิดพลาดขึ้นด้วย
ประเภทของหน่วยความจำสำรอง Volatile Storage Nonvolatile Storage Stable Storage
ประเภทของหน่วยความจำสำรอง Volatile Storage เป็นอุปกรณ์ที่จะจัดเก็บข้อมูลได้ก็ต่อเมื่อมีกระแสไฟฟ้า ในกรณีที่ไม่มีกระแสไฟฟ้าข้อมูลที่จัดเก็บอยู่ในอุปกรณ์จะหายไป อุปกรณ์ประเภทนี้จะใช้ในการจัดเก็บข้อมูลชั่วคราว เช่น RAM, Cache Memory
ประเภทของหน่วยความจำสำรอง Nonvolatile Storage เป็นอุปกรณ์ที่สามารถจัดเก็บข้อมูลได้โดยไม่ต้องใช้กระแสไฟฟ้า เช่น Hard Disk ปัญหาที่มักเกิดกับอุปกรณ์นี้ คือ Disk Crash
ประเภทของหน่วยความจำสำรอง Stable Storage เป็นอุปกรณ์ที่ไม่ต้องอาศัยกระแสไฟฟ้าในการจัดเก็บข้อมูล มักจะนำมาใช้ในการสำรองข้อมูลมากกว่าในการประมวลผล เช่น เทปแม่เหล็ก
ประเภทของความผิดพลาด Logical Error System Error System Crash Disk Failure
ประเภทของความผิดพลาด Logical Error เป็นความผิดพลาดที่เกิดจากมีขั้นตอนการทำงานที่ไม่ถูกต้อง หรือจากตัวข้อมูลที่ไม่สามารถรองรับการประมวลผลที่เกิดขึ้นได้ เช่น การกำหนดขนาดของฟิลด์ไม่เพียงพอต่อการจัดเก็บข้อมูล
ประเภทของความผิดพลาด System Error เป็นความผิดพลาดที่เกิดจากการทำงานตัวระบบที่ไม่ถูกต้อง หรือไม่ครบถ้วนพอ เช่น ปัญหาที่เกิดจากการจัดลำดับการทำงานของโปรแกรมต่าง ๆ ไม่ดีพอ และส่งผลให้เกิดปัญหาด้าน Deadlock ของข้อมูลขึ้น
ประเภทของความผิดพลาด System Crash เป็นความผิดพลาดต่าง ๆ ที่เกิดขึ้นอุปกรณ์ที่ใช้จัดเก็บข้อมูลประเภท Volatile Storage เช่น ปัญหาทางด้านกระแสไฟฟ้าที่ไม่สม่ำเสมอ ซึ่งส่งผลให้ข้อมูลที่จัดเก็บอยู่ในหน่วยความจำสูญหายไป
ประเภทของความผิดพลาด Disk Failure เป็นความผิดพลาดต่าง ๆ ที่เกิดขึ้นอุปกรณ์ที่ใช้จัดเก็บข้อมูลประเภท Nonvolatile Storage เช่น ปัญหาทางด้าน Disk Crash ซึ่งส่งผลให้ข้อมูลที่จัดเก็บอยู่ใน Disk บางส่วนสูญหายไป
การกู้ข้อมูลจาก Volatile Storage มี 3 แบบคือ การกู้ข้อมูลแบบ Log-Based การกู้ข้อมูลแบบ Shadow Paging การกู้ข้อมูลแบบ Checkpoints
การกู้ข้อมูลแบบ Log-Based เป็นการกู้ข้อมูลที่อาศัยข้อมูลจาก Log File ซึ่งเป็นแฟ้มข้อมูลที่ใช้บันทึกการกระทำต่าง ๆ ใน Transaction ที่ก่อให้เกิดการเปลี่ยนแปลงค่าของข้อมูล
Sample Log File
รูปแบบรายการที่บันทึกใน Log File แบ่งได้เป็น 3 ประเภทคือ Transaction Start เป็นรายการที่จะถูกบันทึกลงใน Log File เมื่อ Transaction เริ่มต้นทำงาน Transaction Commit เป็นรายการที่จะถูกบันทึกลงใน Log File เมื่อ Transaction ทำงานเสร็จ
รูปแบบรายการที่บันทึกใน Log File Update Activity เป็นรายการที่จะถูกบันทึกลงใน Log File ทุกครั้ง เมื่อการกระทำนั้นก่อให้เกิดการเปลี่ยนแปลงค่าของข้อมูล
รูปแบบการบันทึกข้อมูลใน Log File มี 2 รูปแบบคือ Deferred Database Modification ข้อมูลที่ได้จากการประมวลผลจะถูกบันทึกลงในฐานข้อมูลได้ก็ต่อเมื่อ Transaction นั้นทำงานเสร็จเรียบร้อยแล้ว Immediate Database Modification ข้อมูลที่ได้จากการประมวลผลจะถูกบันทึกลงในฐานข้อมูลได้ทันที โดยไม่ต้องรอให้ Transaction นั้นทำงานเสร็จเรียบร้อย
การกู้ข้อมูลจาก Log File Deferred Database Modification จะนำเอาข้อมูลที่บันทึกอยู่ใน Log File ทั้งหมดมาเลือกเฉพาะ Transaction ที่มีการทำงานที่เสร็จสมบูรณ์ ได้แก่ Transaction ที่มีรายการครบทั้ง Start และ Commit เพื่อนำรายการประเภท Update ไปเก็บลงในฐานข้อมูล
การกู้ข้อมูลจาก Log File Immediate Database Modification จะนำเอารายการประเภท Activity ของทุก Transaction ที่บันทึกไว้ใน Log File มาบันทึกลงในฐานข้อมูลใหม่ ถ้า Transaction มีการทำงานที่เสร็จสมบูรณ์ ค่าใหม่ของรายการ Update จะถูกบันทึกลงฐานข้อมูล ถ้า Transaction มีการทำงานที่ไม่สมบูรณ์ ค่าเดิมของข้อมูลก่อนการประมวลผลในรายการ Update จะถูกบันทึกลงฐานข้อมูลแทน
การกู้ข้อมูลแบบ Shadow Paging เป็นการจัดเก็บข้อมูลเพื่อนำมาใช้ในการกู้ข้อมูล โดยการกำหนดเนื้อที่ใน Disk ไว้ส่วนหนึ่ง เพื่อใช้ในการทำสำเนาข้อมูลที่จะถูกเรียกใช้ใน Transaction ไว้ก่อนที่ Transaction นั้นจะเริ่มต้นทำงาน ซึ่งเนื้อที่ที่เตรียมไว้สำหรับสำเนาข้อมูลจะเรียกว่า Shadow Page
การกู้ข้อมูลแบบ Shadow Paging ข้อมูลที่อยู่ใน Shadow Page จะไม่สามารถเปลี่ยนแปลงแก้ไขได้ และจะถูกนำมาใช้เมื่อ Transaction ที่ทำงานนั้นมีข้อผิดพลาดเกิดขึ้น โดยการนำข้อมูลใน Shadow Page มาบันทึกทับลงในฐานข้อมูลเดิม ในกรณีที่ Transaction ทำงานสมบูรณ์ ข้อมูลใน Shadow Page จะถูกยกเลิกไป
การกู้ข้อมูลแบบ Checkpoints เป็นการกู้ข้อมูลโดยการใช้ Log File แต่ในการบันทึกข้อมูลของ Log File จะกระทำเป็นช่วงแทน โดยมีการกำหนดจุดเริ่มต้นของ Transaction ที่เริ่มบันทึกรายการลงใน Log File ที่เรียกว่า จุด Checkpoint ไว้ เมื่อเกิดมี Transaction ที่ทำงานไม่สมบูรณ์ ก็จะนำข้อมูลใน Log File ตั้งแต่จุด checkpoint มาประมวลผลใหม่
การกู้ข้อมูลแบบ Checkpoints
การกู้ข้อมูลแบบ Checkpoints ทรานแซกชัน T1 เท่านั้น ซึ่งเสร็จสิ้นสมบูรณ์และปลอดภัย เพราะคอมมิต (COMMIT) แล้วก่อนจุดตรวจสอบครั้งสุดท้าย ณ เวลา Tc และข้อมูลได้ถูกเก็บไว้ในฐานข้อมูลจริงแล้ว ทรานแซกชัน T3,T5 ยังไม่ได้คอมมิตจึงต้องยกเลิก (UNDO) การทำงานทั้งหมด ทรานแซกชัน T2,T4 คอมมิตแล้ว ถึงแม้ว่าทรานแซกชัน T2 และ T4 จะเสร็จสิ้นสมบูรณ์แล้ว แต่ยังไม่ทันที่ทรานแซกชันทำงานเสร็จสิ้นก่อนจุดตรวจสอบเพื่อเคลื่อนย้ายข้อมูลไปสู่ฐานข้อมูลจริง ก็เกิดปัญหาขัดข้องเสียก่อน ดังนั้นจึงต้องทำซ้ำ (REDO) ทรานแซกชันนั้นใหม่อีกครั้ง
การกู้ข้อมูลจาก Nonvolatile Storage เริ่มจากการจัดเก็บข้อมูลทั้งหมดเพื่อไว้ใช้ในการกู้ข้อมูล โดยใช้วิธีการสำรองข้อมูล (Backup) ไว้ในอุปกรณ์ประเภท Stable Storage แทน เช่น การสำรองข้อมูลไว้ในเทปแม่เหล็ก ช่วงเวลาในการทำการสำรองข้อมูล ให้พิจารณาจากความสำคัญและปริมาณของข้อมูลที่เกิดขึ้น
การกู้ข้อมูลจาก Nonvolatile Storage การกู้ข้อมูลจะใช้การถ่ายโอนข้อมูลจาก Stable Storage กลับมายัง Nonvolatile Storage ทั้งหมด แล้วจึงนำเฉพาะ Transaction ที่จัดเก็บไว้ใน Log File และมีการทำงานที่เสร็จสมบูรณ์ มาบันทึกค่าของข้อมูลตามค่าที่เก็บไว้ในรายการประเภท Update Activity ลงในฐานข้อมูลใหม่
THE END