ช่วงนี้ DB ที่บริษัทกับที่ Production ชอบค้างอยู่บ่อยๆครับ สำหรับในบริษัทได้ลองเขียน Query เพื่อที่ตรวจสอบว่าใคร Lock Database ซึ่งอาจะเป็นการเปิด Transaction แล้วลืม Commit ก็ได้ครับ สำหรับการทดสอบของผม ผมได้มี Query ชุดนึงที่มีหน้าทีควานหาว่า มีอะไรผิดแปลกกับ Database ครับ โดยผมมีรูปแบบการ Test ดังนี้
- VM ที่ลง DB2 ไว้ (ถ้าว่างๆจะย้ายลง Docker และ)
- Dump ข้อมูลใส่ใน Table Activeuser
- เครื่อง VM นี่แหละ Connect ผ่าน Toad และลบข้อมูล Table Activeuser ผ่าน Toad และปิด Auto Commit ไว้
- เครื่อง Host ลองเปิด Client App Connect เข้าไป เจอ Error ครับ เท่าที่ User แจ้งมานี่มีหลายแบบ อันนี้เป็นแบบหนึ่ง
- กลับเข้าไปใน VM เปิด Toad และลอง Run Query ทดสอบอีกครั้ง
SELECT LC.*, T.APPLICATION_NAME, T.CLIENT_WRKSTNNAME, T.APPLICATION_ID, T.CONNECTION_START_TIME, T.CLIENT_IDLE_WAIT_TIME, T.DEADLOCKS, T.LOCK_WAITS_GLOBAL, T.LOCK_TIMEOUTS_GLOBAL, T.LOCK_ESCALS_MAXLOCKS, T.LOCK_ESCALS_LOCKLIST, T.LOCK_ESCALS_GLOBAL FROM SYSIBMADM.LOCKS_HELD LC LEFT OUTER JOIN TABLE(MON_GET_CONNECTION(CAST(NULL AS BIGINT), -2)) AS T ON T.APPLICATION_HANDLE = AGENT_ID WHERE LOCK_ESCALATION = 0 AND DBPARTITIONNUM = 0
- ผลลัพธ์ที่ได้ครับ
- ลองมาจับโจรจาก Query นี้ดูครับ มีข้อมูลที่แกะได้จาก Query ดังนี้
- Client - win7sp164bit (VM ผมเองครับ)
- Application - toad.exe
- Table - SYSTEMCOUNTER, ACTIVEUSER
- Lock Type - TABLE_LOCK
- Lock Mode - IX
หากสังเกตุดีๆ Query ตัว SYSIBMADM.LOCKS_HELD หรือ LC ผมเอาหมดเลย เพราะบางตัวผมก็ไม่รู้ครับ และหากนำไปใช้งานจริง อย่างลืมเปิดสิทธิการ Execute ให้กับ "SYSPROC.MON_GET_CONNECTION" ไม่งั้นจะเอามันด่าแนวๆนี้ครับ
DB2 Database Error: ERROR [42501] [IBM][DB2/NT64] SQL0551N The statement failed because the authorization ID does not have the required authorization or privilege to perform the operation. Authorization ID: "INVEST". Operation: "EXECUTE". Object: "SYSPROC.MON_GET_CONNECTION".
และการนำไปใช้งานจริง อาจจะทำเป็น App แบบตอนสมัยปี 1
- กด 1 dump lock
- กด 2 exit
เมื่อเวลา DB มันค้าง ให้ DBA ที่ของ Site ลูกค้า Dump ออกมาเป็น TextFile และส่งกับมาที่บริษัทก็ได้ครับ ส่วนตอนนี้ขอไปจับโจรที Production ก่อนครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.