DB2 - 清除和归档用户数据

时间:2014-03-26 16:09:19

标签: sql db2 archive purge

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

如果您的清除频率较低,请使用temp table捕获您要执行的用户身份。执行export加入所有表格(实质上是一个平面表格),将旧数据保存为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);

如果你的频率要求更高,你可能想要创建一个存储过程,它将采取截止日期并执行上述操作。