0

我需要能够根据用户标准(例如超过 3 年)从我们的 DB2 表中清除行。但是,对于我正在清除的那些行 -我需要能够存档数据,以便可以“破译”用于审计目的(而不是将数据重新加载/恢复到其表中)。

当然,已删除的 DB2 日志包含所有数据 - 但如果我们必须稍后查看它们(一两年后,例如出于审计目的),它们将不是我们/用户可以轻松破译的格式。我们不想重新加载,因为表和业务规则已经改变……甚至可能 DB2 版本已经改变。

那么有人知道是否有一种技术或实用程序可以为这类问题提供解决方案吗? 不寻找任何花哨的东西 - 也许有一个“通用”技巧可以将数据绑定到它的列名并将其保存到逗号分隔的文件中 - 或类似的东西。

谢谢。

4

1 回答 1

0

如果您的清除频率较低,请使用临时表来捕获您要操作的用户身份。执行连接所有表的导出(实质上是一个平面表),将旧数据保存到 CSV。然后在导出完成后,执行行删除。确保分别执行每个以确保数据完整性。

CREATE GLOBAL TEMPORARY TABLE OLDUSERS
AS (SELECT USERID FROM USERTABLE) DEFINITION ONLY
ON COMMIT PRESERVE ROWS;

INSERT INTO OLDUSERS
SELECT USERID
FROM USERTABLE
JOIN USERINFOTABLE ON USERTABLE.USERID=USERINFOTABLE.USERID
WHERE USERINFOTABLE.LASTLOGING < '2011-01-01 00:00:00.0';

EXPORT TO filename OF DEL
SELECT USERID, USERNAME, ...
FROM USERTABLE
JOIN USERINFOTABLE ON USERTABLE.USERID=USERINFOTABLE.USERID
WHERE USERID IN (SELECT USERID FROM OLDUSERS);

DELETE FROM USERINFOTABLE WHERE USERID IN 
(SELECT USERID FROM OLDUSERS);

DELETE FROM USERTABLE WHERE USERID IN 
(SELECT USERID FROM OLDUSERS);

如果您执行此操作的频率要求更高,您可能需要创建一个存储过程,该过程将采用截止日期并执行上述操作。

于 2014-03-26T21:09:19.883 回答