ช่วงนี้ได้มีแงะ Logic ตัวนึงครับ แต่ทว่ามันไม่มี Code เหลือแต่ DLL และมันยังทำงานได้อยู่ แต่ผมต้องมาเขียนใหม่เป็น C# แล้วจะแงะยังไงหละเนี่ย
จากการลอง Research มีวิธีการที่เป็นไปได้ 3 แบบ
Solution1: ROW CHANGE expression
- ข้อดี: Query ออกมาได้เลย
SELECT * FROM EMP_INFO WHERE EMP_INFOCHANGE <= CURRENT TIMESTAMP AND EMP_INFOCHANGE >= CURRENT TIMESTAMP - 30 DAYS;
- ข้อเสีย: ต้องปรับ Table ให้อยู่ในรูปแบบ "ROW CHANGE TIMESTAMP" ก่อน
CREATE TABLE EMP_INFO( EMPNO CHAR(6) NOT NULL, EMP_ADDRESS VARCHAR(300), EMP_PHONENO CHAR(20), EMP_INFOCHANGE NOT NULL GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP, PRIMARY KEY (EMPNO) );
Ref:
- ROW CHANGE expression - IBM Documentation
- Time-based update detection - IBM Documentation
- How to set timestamp for each row on update as row change in DB2 via liquibase - Community Answers - Liquibase
Solution2: Table SYSTABLESPACESTATS Column LASTDATACHANGE
เสียดาย ใน DB2 ปกติที่ผมใช้ 11.5 มันไม่มี มันตรงกับโจทย์ที่อยากได้เลย ว่า Table ไหนมี Data อะไรเปลี่ยน แต่ทว่าไปอยู่กับ Db2 for z/OS
Ref: SYSTABLESPACESTATS catalog table - IBM Documentation
Solution3: db2top D (Dynamic Query)
ใช้ utility db2top มันจะมีส่วน monitor query อยู่ครับ โดยใช้ flag D เพื่อดู Query ที่วิ่งผ่านในช่วงเวลานั้น จากนั้นมาจับคำว่า INSERT / UPDATE / DELETE แทนครับ มองดูตาก็เหนื่อยอยู่ครับ
แต่ทว่าเจ้า db2top ซึงเป็นหนทางเดียวและ มันมี batch mode
ช่วยให้เรา Run ตัวโปรแกรมเดิมไป จากนั้นให้ db2top ทำงานเป็น batch mode (-b) เข้ามาเก็บ Query ออกไปในรูปแบบ xml ครับ จากนั้นไปใช้พวก grep filter ตาม keyword ครับ รูปแบบคำสั่ง ประมาณนี้เลย
db2top -d DFCDB -i 1 -b D -X -o db2top.xml -m 6
อธิบาย Command
- -d DFCDB เชื่อมต่อกับ Database DFCDB
อันนี้ต้องรันจากเครื่องอื่นใส่
-n node
-u userid
-p password
-V your_db_schema - -i interval กำหนดได้น้อยสุด 1 วินาที เอาไว้บอก db2top ให้มัน dump หน้าจอลงไฟล์ xml ทุกๆกี่วินาที ของผมกำหนดไปเลยว่า 1 วินาที
- -b บอกว่าให้ทำงานเป็น batch mode โดยงานที่ให้ทำ D (Dynamic Query) และ -X -o db2top.xml (Export รูปแบบ XML ในไฟล์ชื่อ db2top.xml
- -m บอกระยะเวลาการเก็บข้อมูล ของผมกำหนดไว้ 6 นาทีครับ
Ref: db2top - Db2 monitoring tool command - IBM Documentation
ของผมเลือก Solution db2top เพราะแก้อะไรน้อยสุดแล้ว แต่ถ้าจัดการ DB ดีตัวที่มีประโยชน์จริงๆ ROW CHANGE expression / Query จาก SYSTABLESPACESTATS น่าจะดีกว่า
แต่ท้ายที่สุด ถ้ารู้ว่าระบบต้องออกแบบ จับเรื่อง Data Change บ่อยๆ ปรับ Design ให้เหมาะสมครับ เคสนี้มาแงะจากซาก 555
Reference
- ROW CHANGE expression - IBM Documentation
- Finding rows that were changed within a specified period of time - IBM Documentation
- sql - Db2 change a column to row update timestamp - Stack Overflow
- SYSTABLESPACESTATS catalog table - IBM Documentation
- db2top - Db2 monitoring tool command - IBM Documentation
- DB2 Basics: db2top – DataGeek.blog
- I am database: DB2 problem determination using db2top utility
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.