我想定期(例如每年一次)根据某些标准从我们的 DB2 9.7 数据库中归档一组表行。例如,每年一次,归档所有创建日期早于 1 年前的 EMPLOYEE 行?
归档是指将数据移出数据库模式并以可检索的格式存储在其他位置。这可能吗?
如果您不需要通过程序访问存档数据,那么我建议您这样做:
echo '===================== export started '; values current time; -- maybe ixf format would be better? export to tablename.del of del select * from tablename where creation_date < (current date - 1 year) ; echo '===================== export finished ';
echo '===================== delete started '; values current time; delete from tablename.del of del where creation_date < (current date - 1 year) ; commit; echo '===================== delete finished ';
db2 connect to db user xx using xxx db2 -s -vtf export.sql 7z a safe-location-<date-time>.7z tablename.del if no errors till now: db2 -s -vtf delete.sql
同样,由于删除是非常敏感的操作,我建议使用多个备份机制来确保不会丢失任何数据(例如删除以具有一些不同的时间范围 - 例如删除超过 1.5 年)。
如果您需要您的系统访问存档数据,那么我建议您使用以下方法之一:
当然,为什么不呢?一种相当直接的方法是编写一个存储过程 thab 基本上会:
如果您只想将一部分列放入存档中,则可以从仅包含这些列的视图中提取,只要您仍然在临时文件中捕获主键。