Professional Documents
Culture Documents
Transaction Management
Transaction Management
Transaction
Management
Transaction คืออะไร
• Transaction คือ หนวยของการทํางานในเชิงตรรกะ
(Logical unit of work:LUW) หนึ่งหนวย ที่กระทํากับ
ฐานขอมูลเพือ่ อานหรือเปลี่ยนสถานะของขอมูล
จากสถานะหนึ่งไปสูอกี สถานะหนึ่ง
• ภายในหนึ่งรายการเปลี่ยนแปลงอาจประกอบดวย
คําสัง่ ในการทํางานเพียงคําสั่งเดียวหรือหลายคําสั่ง
ก็ได
ผลจากการประมวลผลของ Transaction
ผลจากการประมวลผล Transaction สามารถมีได 2 สถานะ
(อยางใดอยางหนึ่ง)
• COMMIT หมายถึง คําสั่งทุกคําสั่งในรายการเปลี่ยนแปลง
ประมวลผลเสร็จสมบูรณทกุ คําสั่ง มีผลทําใหการเปลี่ยนแปลง
คาในฐานขอมูลคงอยูถาวร
• ROLLBACK หมายถึง มีการประมวลผลคําสั่งในรายการ
เปลี่ยนแปลงไมเสร็จสมบูรณ หรือมีเหตุขดั ของซึ่งเปนผลใหการ
ประมวลผลของรายการเปลี่ยนแปลงไมสมบูรณ หรือโปรแกรม
จบการทํางานแบบไมปกติ ทําใหการเปลี่ยนแปลงขอมูลใน
ฐานขอมูลถูกยกเลิก(aborted)และยอนการทํางานกลับไปยัง
จุดเริ่มตนกอนการประมวลผลรายการเปลี่ยนแปลง
ตัวอยาง Transaction
START TRANSACTION
Display greeting
Get account number , pin , type and amount
SELECT account number , type and balance
If balance is sufficient then
UPDATE account by posting debit
UPDATE account by posting credit
INSERT history record
Display final message and issue cash
Else
Write error message
End If
On Error : ROLLBACK
COMMIT
ตัวอยาง Transaction
START TRANSACTION
Display greeting
Get reservation preference
SELECT departure and return flight records
If reservation is acceptable then
UPDATE seats remaining of departure flight record
UPDATE seats remaining of return flight record
INSERT reservation record
Print ticket if requested
End If
On Error : ROLLBACK
COMMIT
ตัวอยาง Transaction
START TRANSACTION
Display greeting
Get order request
SELECT product records
If product is available then
UPDATE QOH of product record
INSERT order record
Send message to shipping department
End If
On Error : ROLLBACK
COMMIT
คุณสมบัติของ Transaction
เรียกยอๆ วา ACID ซึ่งเปนคุณสมบัติที่ DBMS ตองคง
คุณสมบัติทั้งหมดไวใหแกการทํางานของ
Transaction มี 4 คุณสมบัติ ดังนี้
• Atomicity
• Consistency
• Isolation
• Durability
Atomicity
• เมือ่ ผูใชประมวลผลรายการเปลี่ยนแปลงแลว ทุก
การกระทําของรายการเปลี่ยนแปลงตองเสร็จ
สมบูรณทุกคําสั่ง(committed) หรือ ถามีการทํางาน
ใดในรายการเปลี่ยนแปลงไมสมบูรณก็ตองยกเลิก
(aborted)รายการเปลี่ยนแปลงนั้นและยอนกลับการ
ทํางาน(rolled back) เสมือนวาไมเคยประมวลผล
รายการเปลี่ยนแปลงนั้นเลย
Consistency
• การประมวลผล Transaction จะสงผลใหมีการ
เปลีย่ นแปลงสถานะของฐานขอมูล ดังนั้น
Transaction จะตองรักษาความถูกตองของ
ฐานขอมูลที่สอดคลองกับกฎเกณฑตาง ๆ ที่กําหนด
ไว (Integrity Constraints)
• หลังการประมวลผล Transaction เสร็จ ฐานขอมูล
ตองอยูในสถานะที่ถูกตอง(consistent state)
Isolation
• Transaction ที่มีการทํางานพรอมกันในเวลาเดียวกัน
โดยผูใชหลายคน(Multiusers) จะตองไมรบกวนกัน
• หาก T1 และ T2 ทํางานในเวลาใกลเคียงกัน ดังนี้
T1
T2
Partially Committed
Committed COMMIT
BOT
Active
Time
ERROR!!
ERROR!!
ปญหาจาก Concurrent Transaction
เมื่อ Transaction ถูกประมวลผลพรอมกันโดยไมไดมีการ
ควบคุม มี 3 ประเภท ดังนี้
• ปญหาการสูญเสียจากการปรับปรุงขอมูล (The lost
update problem)
• ปญหาขอมูลที่ยังไมไดรับการยอมรับความสมบูรณ (The
uncommitted dependency problem)
• ปญหาการวิเคราะหผลลัพธที่ขดั แยงกัน (The inconsistent
analysis problem)
The Lost Update Problem
• เกิดขึ้นจากสาเหตุที่ มี รายการเปลี่ยนแปลง 2
รายการ หรือมากกวา มีการเรียกใชขอมูลเดียวกัน
แลวตางฝายตางปรับปรุงคาของขอมูล โดยไมมี
การปองกันการแกไขจากอีกรายการ
The Lost Update Problem
Time Transaction Transaction Comments
T1 T2
1 read_item(X) T1 อานขอมูล X จากฐานขอมูล
*** สมมุติ x มีคา 100
2 x := x - 40 read_item(x) T1 ปรับปรุงคาในตัวแปร X (x = 60)
T2 อานขอมูล X (ไดรับคา x = 100)
3 write_item(x) X := x + 20 T1 เขียนคา x ลงในฐานขอมูล (x = 60)
T2 ปรับปรุงคาในตัวแปร X ( x = 120)
4 write_item(x) T2 เขียนคา x ลงในฐานขอมูล ( x ใน
ฐานขอมูลมีคา 120)
The Uncommitted Dependency Problem
• เกิดขึ้นจากกรณีที่ รายการเปลี่ยนแปลง 2 รายการ
หรือ มากกวามีการเรียกใชขอมูลเดียวกัน แตมี
รายการเปลี่ยนแปลงหนึ่งที่มกี ารทํางานยังไมเสร็จ
สมบูรณ และเกิดปญหาขึ้น จึงตองมีการยกเลิกทุกการ
กระทํากอนหนาของรายการเปลี่ยนแปลงนั้น สงผลให
ขอมูลที่รายการเปลี่ยนแปลงนั้นเรียกใชกลับไปมีคา
ตามเดิม และทําให รายการเปลี่ยนแปลงอื่นที่เรียกใช
ขอมูลเดียวกันกอนหนาที่จะ ROLLBACK ไดรับขอมูล
ที่ไมถูกตองดวย
The Uncommitted Dependency Problem
Time Transaction Transaction Comments
T1 T2
1 read_item(X) T2 อานขอมูล X จากฐานขอมูล
*** สมมุติ x มีคา 100
2 x := x - 20 T2 ปรับปรุงคาในตัวแปร X
3 write_item(x) T2 เขียนคา x ลงในฐานขอมูลชั่วคราว
(x = 80)
4 read_item(X) T1 อานคา x ในฐานขอมูล ( ไดรับคา x
เปน 80)
5 ROLLBACK T2 ทํางานลมเหลว ตองยอนคา x กลับ
เปนคาเดิม (x = 100)
The dirty read
Time Transaction Transaction Comments
T1 T2
1 read_item(X)
2 x := x - 20
3 write_item(x) T2 เขียนคา x ลงในฐานขอมูลชั่วคราว
4 Read_item(x)
5 x := x + 100
6 write_item(x)
7 COMMIT
8 read_item(y)
… …. …
ROLLBACK T1 ขึ้นกับขอมูลทีย่ ังไมสมบูรณและขาดการ
ปรับปรุง
The Inconsistent Analysis Problem
• เกิดขึ้นในกรณีที่ รายการเปลี่ยนแปลง 2 รายการ หรือมากกวา มี
การใชขอมูลเดียวกัน แตมี รายการเปลี่ยนแปลงหนึ่งที่ไดรับขอมูล
ที่อยูในสถานะไมถูกตองไปใชงาน สงผลใหการประมวลผลของ
รายการเปลี่ยนแปลงนั้น มีการประมวลผลที่ผิดพลาด
• พิจารณาบัญชีทั้ง 3 ดังนี้
ACC1 ACC2 ACC3
40 50 30
2 x := x - 20
3 write_item(x)
(ไดรับ X Lock บน X)
4 read_item(X) T1 ตองการ S Lock บนขอมูล X แตตอง
(ตองการ S Lock บน X) รอจนกวา T2 จะปลอย X Lock กอน
5 wait
n+1 …
Two-Phase Locking(2PL)
• เปนการล็อกวิธีหนึ่งซึ่งเปนที่นิยม โดยการล็อกแบบ
2PL นั้นไดกําหนดไววา Transaction สามารถมีอยู 2
เฟสดวยกันคือ
– Growing phase(Lock) เปนชวงทีล่ ็อกขอมูลทุกอยางที่
จะตองใชใน Transaction จะสามารถอานขอมูลได แต
ไมสามารถทําการอัปเดตขอมูลได
– Shrinking phase(UnLock) เปนชวงทีป่ ลดปลอยการล็
อกขอมูลทั้งหมดที่ Transaction ล็อกไวใชงาน
การแกปญ
หา Lost Update ดวย 2PL
Time Transaction Transaction Comments
T1 T2
8 write_item(X)
(ไดรับ X Lock บน
ขอมูล X)
9 Commit / Unlock(X)
ภาวะติดตาย(Dead Lock)
• ในการล็อคขอมูล ถึงแมจะแกปญหาตาง ทีท่ ําให
เกิดความไมถูกตองของขอมูล แตถาการล็อค
ขอมูลของแตละ Transaction ไมสัมพันธกันแลว
สงผลใหเกิดปญหาที่แตละ Transaction ตางฝาย
ตางล็อคขอมูล จนกระทั่งทั้ง 2 ฝาย ไมสามารถ
ทํางานตอไปได เนื่องจากตองรอใหอีกฝายปลอย
Lock ขอมูลกอน ซึ่งปญหาการล็อคที่เกิดขึ้นแบบ
นี้เรียกวา การล็อคคาง(DeadLock)
ภาวะติดตาย(Dead Lock)
Time T7 T8
t1 Begin_Transaction
t2 write_lock(balx) Begin_Transaction
t3 read(balx) write_lock(baly)
t4 balx = balx - 10 read(baly)
t5 write(balx) baly = baly + 100
t6 write_lock(baly) write(baly)
t7 WAIT write_lock(balx)
t8 WAIT WAIT
t9 WAIT WAIT
t10 . WAIT
. .
. .
.
ภาวะติดตาย(Dead Lock)
• ภาวะติดตายสามารถแกไขไดโดย การสละ Transaction
หนึ่งดวยการปลดล็อก Transaction ใด Transaction หนึ่ง
ออกจากวงจร Dead Lock เพื่อให Transaction อื่นๆ
สามารถใชงานขอมูลที่ถูกล็อกได
• อาจใช Algorithmวิธีใดวิธหี นึ่งในการกําจัด Dead Lock
เชน วิธี Wait-Die หรือ Wound-Die
• โดย Transaction ที่ถูกกําจัดออกไปจะถูกนํามาเริ่มตน
ประมวลผลใหมอีกครั้ง
ระดับการล็อก
อก(Locking Level)
• รูปแบบของการล็อกขอมูลใน DBMS จะมีอยูหลาย
ระดับใหเลือกใชงานตามความเหมาะสม หรือตาม
ลักษณะงาน
• แบงระดับการล็อกเปนดังนี้
– การล็อกฐานขอมูล(Database Locking)
– การล็อกตาราง(Table Locking)
– การล็อกเรคอรด(Record Locking)
– การล็อกฟลด(Field Locking)
Database Locking
• เปนการล็อกทัง้ ฐานขอมูล
• เหมาะสมกับการประมวลผลแบบแบตซ(batch processing)
• ในขณะที่ทาํ การประมวลผลอยู ฐานขอมูลทั้งระบบจะถูกล็
อกไมใครคนอืน่ สามารถใชงานไดเลย จนกวาจะปลดล็อก
• เชน การสํารอขอมูล โดยระหวางทีส่ ํารองขอมูลอยูน นั้
ฐานขอมูลจะถูกล็อกไวไมใหใครเขามาใชงาน จนกวาจะ
สํารองขอมูลเสร็จสิน้ แลวจึงปลดล็อก
Table Locking
• เปนการล็อกรีเลชัน โดยทําการล็อกตารางใดตารางหนึ่งที่
ตองการ สางผลใหผูใชคนอื่น ๆ ไมสามารถอานขอมูล
หรือปรับปรุงขอมูลในตารางนั้นได จนกวาจะมีการปลดล็
อกตารางนั้น
• เหมาะสมกับงานที่ตอ งมีการปรับปรุงขอมูลทั้งตาราง
Record Locking
• เปนการล็อกขอมูลบางแถวในตาราง ซึ่งแถวขอมูลที่ถูกล็
อกอยูนั้นทําใหผูใชคนอื่นไมสามารถใชขอมูลในแถวนัน้
ได จนกวาแถวขอมูลนั้นจะถูกปลดล็อก
• เหมาะสมกับงานที่ตอ งการปรับปรุงขอมูลบางแถว เชน
ตองการเปลี่ยนแปลงที่อยูของพนักงาน ก็จะล็อกเฉพาะ
แถวขอมูลของพนักงานทีต่ องการเทานั้น ซึ่งในขณะที่ล็
อกแถวขอมูลอยูนั้น ผูใชคนอื่นก็จะไมสามารถใชงาน
ขอมูลแถวนั้นไดชั่วขณะ จนกวาแถวขอมูลจะถูกปลดล็อก
Field Locking
• เปนการล็อกฟลด/แอตทริบิวต/คอลัมนขอมูลที่มักถูกใช
งานหรือปรับปรุงขอมูลบอย ๆ
• โดยในขณะที่ล็อกฟลดขอมูลอยูนั้น ผูใชคนอื่นสามารถใช
งานขอมูลได ยกเวนขอมูลในฟลดที่ถกู ล็อก
การสํารองและกูคืนขอมูล
Backup
&
Recovery
การกูคนื ฐานขอมูล(Database Recovery)
• เปนกระบวนการเรียกคืนฐานขอมูลใหกลับสูภาวะเดิมที่
สามารถใชงานได ในกรณีที่เกิดเหตุขัดของบางประการใน
ระหวางการประมวลผล
• ประเภทของการเหตุขัดของที่เกิดกกับฐานขอมูล ไดแก
– System Failure หรือ Soft crash เชน ระบบไฟฟาขัดของทําให
เซิรฟเวอรทํางานไมได เหตุที่เกิดจากหนวยความจํา
– Media Failure หรือ Hard crash เชน แฟมถูกลบ สื่อบันทึก
ขอมูลเกิดความเสียหายเชน ฮารดดิสกพัง เปนตน
กระบวนการกูคืนขอมูล
• กระบวนการกูคืนขอมูลที่ใช จะขึ้นอยูกับชนิดของ
เหตุขัดของ
• เชนการกูคืนขอมูลที่เกิดจาก Hard crash ทําไดงาย
แตใชเวลานาน ดังนี้
– ฐานขอมูลจะถูกนํามาบันทึกใหมจากการสํารองขอมูล
ครั้งลาสุด
Transaction Log
• Transaction Log คือ ตารางขอมูลที่มีการจัดเก็บ
ประวัติการเปลี่ยนแปลงขอมูลในฐานขอมูล
บางครั้งเรียกวา Journal ในการกูค ืนขอมูลของ
ฐานขอมูล ตัวจัดการการกูค นื (Recovery manager)
ที่อยูในระบบการจัดการฐานขอมูลจะใชขอมูลใน
Transaction Log ชวยในการกูค นื ขอมูล
Transaction Log
• โดยทั่วไปในตาราง Log จะมีการจัดเก็บขอมูลดังนี้
– ลําดับหมายเลขรายการ(Log Sequence Number : LSN)
– หมายเลขรายการเปลี่ยนแปลง(Transaction Identifier)
– การกระทํา(Action)
– เวลา(Time)
– ตารางขอมูลที่มีการเปลี่ยนแปลง(Table)
– รายการขอมูลที่มีการเปลี่ยนแปลง(Record)
– ชื่อฟลด(Column)
– คาขอมูลทั้งเกา(Old value) บางครั้งเรียกวา Before Image
– คาขอมูลทั้งใหม(New value) บางครั้งเรียกวา After Image
Transaction Log
• ในกรณีมีการเพิ่มขอมูลในฐานขอมูลทุกฟลด จะใช
เครื่องหมาย * และคาขอมูล จะระบุหมายเลขรายการใน
ชองขอมูลใหมเทานั้น สวนในกรณีมีการลบขอมูล ก็จะ
บันทึกเฉพาะขอมูลเกาในชองคาขอมูล
• เมื่อระบบเกิดความขัดของขึ้นระบบการจัดการฐานขอมูล
จะดึงขอมูลจาก Transaction Log ขึ้นมาชวยในการกูคืน
ขอมูล
ตัวอยาง Transaction Log File
LSN TransNo Action Time Table Row Column Old New