【发布时间】:2018-02-12 22:27:51
【问题描述】:
我想跟踪 IBM DB2 表数据更改(插入、更新、删除),并将更改插入到另一个表中。
什么是最简单的解决方案?它是一个 IBM DB2 for iSeries on AS400。
例如,是否可以在我将轮询的特定表中添加触发器来跟踪这些更改?
谢谢。
【问题讨论】:
我想跟踪 IBM DB2 表数据更改(插入、更新、删除),并将更改插入到另一个表中。
什么是最简单的解决方案?它是一个 IBM DB2 for iSeries on AS400。
例如,是否可以在我将轮询的特定表中添加触发器来跟踪这些更改?
谢谢。
【问题讨论】:
您是否启用了日志功能并同时捕获前后图像?如果是,您可以从期刊中获取与数据更改相关的所有信息。
【讨论】:
我认为触发器最适合您。请注意,系统需要投入资源来跟踪这些情况,因此请告知您的系统操作员!
我会这样做:
创建要跟踪更改的文件的副本:
CREATE TABLE LIB.TABLEHST AS (SELECT * FROM LIB.TABLE) WITH NO DATA;
为操作和日期时间添加列:
ALTER TABLE LIB.TABLEHST
ADD COLUMN OPERATION CHAR(10),
ADD COLUMN DATEMODIFIED TIMESTAMP DEFAULT '1970-01-01 00:00:00';
创建触发器以跟踪插入:
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;
创建触发器以跟踪更新:
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;
创建触发器以跟踪删除:
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;
编辑:通过插入、更新和删除来测试并确保一切正常!
如果这有帮助,请告诉我!
【讨论】:
删除触发器需要引用 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;
【讨论】: