【问题标题】:DB2 table change trackingDB2 表更改跟踪
【发布时间】:2018-02-12 22:27:51
【问题描述】:

我想跟踪 IBM DB2 表数据更改(插入、更新、删除),并将更改插入到另一个表中。

什么是最简单的解决方案?它是一个 IBM DB2 for iSeries on AS400。

例如,是否可以在我将轮询的特定表中添加触发器来跟踪这些更改?

谢谢。

【问题讨论】:

    标签: db2 db2-400


    【解决方案1】:

    您是否启用了日志功能并同时捕获前后图像?如果是,您可以从期刊中获取与数据更改相关的所有信息。

    【讨论】:

    • 我不知道,我只能使用 IBM DB2 应用程序访问 sql 控制台。我可以使用 SQL 检查它吗?或者我必须在哪里搜索信息?
    • 您可以使用表函数QSYS2.Display_Journal查看期刊信息。有关更多详细信息,请参阅以下链接。 ibm.com/developerworks/community/wikis/home/wiki/…
    【解决方案2】:

    我认为触发器最适合您。请注意,系统需要投入资源来跟踪这些情况,因此请告知您的系统操作员!

    我会这样做:

    1. 创建要跟踪更改的文件的副本:

      CREATE TABLE LIB.TABLEHST AS (SELECT * FROM LIB.TABLE) WITH NO DATA;
      
    2. 为操作和日期时间添加列:

      ALTER TABLE LIB.TABLEHST
      ADD COLUMN OPERATION CHAR(10),
      ADD COLUMN DATEMODIFIED TIMESTAMP DEFAULT '1970-01-01 00:00:00';
      
    3. 创建触发器以跟踪插入:

      CREATE TRIGGER LIB.TABLEINS
      AFTER INSERT ON LIB.TABLE
      REFERENCING NEW AS M
      FOR EACH ROW
      BEGIN ATOMIC
      INSERT INTO LIB.TABLEHST (COLUMN1, COLUMN2, OPERATION, DATEMODIFIED)
      VALUES (COLUMN1, COLUMN2, 'INSERT', CURRENT TIMESTAMP);
      END; 
      
    4. 创建触发器以跟踪更新:

      CREATE TRIGGER LIB.TABLEUPD
      AFTER UPDATE ON LIB.TABLE
      REFERENCING NEW AS M
      FOR EACH ROW
      BEGIN ATOMIC
      INSERT INTO LIB.TABLEHST (COLUMN1, COLUMN2, OPERATION, DATEMODIFIED)
      VALUES (COLUMN1, COLUMN2, 'UPDATE', CURRENT TIMESTAMP);
      END;
      
    5. 创建触发器以跟踪删除:

      CREATE TRIGGER LIB.TABLEDEL
      AFTER DELETE ON LIB.TABLE
      REFERENCING NEW AS M
      FOR EACH ROW
      BEGIN ATOMIC
      INSERT INTO LIB.TABLEHST (COLUMN1, COLUMN2, OPERATION, DATEMODIFIED)
      VALUES (COLUMN1, COLUMN2, 'DELETE', CURRENT TIMESTAMP);
      END;
      
    6. 编辑:通过插入、更新和删除来测试并确保一切正常!

    如果这有帮助,请告诉我!

    【讨论】:

      【解决方案3】:

      删除触发器需要引用 OLD 而不是 NEW。

      CREATE TRIGGER LIB.TABLEDEL
      AFTER DELETE ON LIB.TABLE
      REFERENCING **OLD** AS M
      FOR EACH ROW
      BEGIN ATOMIC
      INSERT INTO LIB.TABLEHST (COLUMN1, COLUMN2, OPERATION, DATEMODIFIED)
      VALUES (COLUMN1, COLUMN2, 'DELETE', CURRENT TIMESTAMP);
      END;
      

      【讨论】:

        猜你喜欢
        • 2017-09-05
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        相关资源
        最近更新 更多