บางครั้งเวลาที่เราพัฒนาระบบ เรามีความจำเป็นที่ Lock Table เพื่อบังคับให้มีการ Insert/Update Record ได้ทีละรายการเท่านั้น เพื่อจุดประสงค์บางอย่าง เช่น การ Approve ยืนยันรายการ เป็นต้น โดยรูปแบบของคำสั่ง LOCK มีรูปแบบ ดังนี้
Mode การ Lock มี 2 แบบ ได้แก่
- IN SHARE MODE คือ Lock ทุกอย่าง แต่ยังสามารถ Read ข้อมูลใน Table ได้ ดังตัวอย่าง
[sql]LOCK TABLE INVEST.COMPANY IN SHARE MODE[/sql]
- IN EXCLUSIVE MODE คือ Lock ทุกอย่างเลย ดังตัวอย่าง
[sql]LOCK TABLE INVEST.COMPANY IN EXCLUSIVE MODE[/sql]
สิ่งที่ควรระวัง
- ถ้าอีก Process นึงที่มีการยุ่งเกี่ยวกับ Table เดียวกัน และกำหนด Isolation level เป็น Uncommitted Read (UR) แล้ว Process นั้นสามารถอ่านข้อมูลได้ แม้ว่าจะ Lock ในระดับ Exclusive แล้วก็ตาม
- การระบุชื่อ Table ที่จะ LOCK ควรระบุชื่อ Schema เข้าไปด้วย เพราะเมื่อ Upgrade DB Server หรือ Client จะได้ไม่มีปัญหาที่เกิดจาก Defect ของทาง IBM เอง เพราะเท่าที่พบเคยเจอปัญหาใน 10.5 ครับ
เมื่อ Lock ไปแล้ว เราจะ Unlock ได้ 3 วิธี ดังนี้
- เมื่อมีการ Commit
- เมื่อมีการ Rollback
- เมื่อมีการ Disconnect
Reference
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.