IBM DB2 9.7归档特定的表和列

时间:2013-05-08 12:24:09

标签: db2 archive

我想定期,例如每年一次,根据某些条件从DB2 9.7数据库归档一组表行。所以例如每年一次,归档所有创建日期早于1年前的EMPLOYEE行?

归档我的意思是数据被移出数据库模式并以可检索的格式存储在其他位置。这可能吗?

2 个答案:

答案 0 :(得分:2)

系统不需要访问存档数据

如果您不需要通过程序访问存档数据,那么我建议:

  • 创建导出(引用here)脚本,例如:
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 ';
  • 创建删除db2脚本,例如:
echo '===================== delete started ';
values current time;

delete from tablename.del of del 
where creation_date < (current date - 1 year)
;
commit;

echo '===================== delete finished ';
  • 编写批处理脚本,调用所有内容将新导出的文件复制到安全位置。在调用脚本时,我们希望确保在将数据放在safe:
  • 之前不进行删除
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
  • 将批处理脚本注册为cron作业以自动执行此操作

同样,由于删除是非常敏感的操作,我建议有多个备份机制以确保不会丢失任何数据(例如删除有一些不同的时间范围 - 例如删除比1。5年)。

系统应该访问存档数据

如果您需要系统访问存档数据,那么我建议使用以下方法之一:

  • 导出/导入到其他数据库或表/删除
  • 存储过程,它选择+插入到其他数据库或表/删除 - 例如,您可以在answer nr. 3 in this question中调整sp
  • 进行表格分区 - 参考here

答案 1 :(得分:0)

当然,为什么不呢?一个相当直接的方法是编写一个存储过程,它基本上会:

  • 提取要存档到临时表中的给定表的所有记录
  • 将这些临时记录插入存档表
  • 从主表位于临时表中的给定表中删除

如果您只想将一部分列放入存档,只要您仍然在临时文件中捕获主键,就可以从仅包含这些列的视图中提取。