我需要能够根据DB2表中的用户标准(例如,超过3年)清除行。但是,对于我正在清除的那些行 - 我需要能够存档数据,以便它可以被解密"用于审计目的(不将数据重新加载/恢复到其表中)。
当然,已删除的DB2日志包含所有数据 - 但是如果我们以后必须查看它们(一两年后再说,出于审计目的),它们将不是我们/用户可以轻松的格式解码。我们不想重新加载,因为表和业务规则已经改变......甚至DB2版本也发生了变化。
那么有人知道是否有技术或实用工具来为这类问题提供解决方案吗?不寻找任何花哨的东西 - 也许有一个"泛型"将数据绑定到它的列名并将其保存到逗号分隔文件的技巧 - 或类似的东西。
感谢。
答案 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);
如果你的频率要求更高,你可能想要创建一个存储过程,它将采取截止日期并执行上述操作。