[DB2] LOCK & UNLOCK Table

บางครั้งเวลาที่เราพัฒนาระบบ เรามีความจำเป็นที่ Lock Table เพื่อบังคับให้มีการ Insert/Update Record ได้ทีละรายการเท่านั้น เพื่อจุดประสงค์บางอย่าง เช่น การ Approve ยืนยันรายการ เป็นต้น โดยรูปแบบของคำสั่ง LOCK มีรูปแบบ ดังนี้

2015-03-24_054723

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.