[DB2] ดูว่า Table ไหนเปลี่ยนแปลง

ช่วงนี้ได้มีแงะ 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


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.