科研院所 db2 9.7

DB2 如何快速删除表中的部分数据 每次大约100万行

如题,主要是数据量较大,决定每天将数据从一张表中,转存到另一张表中,每次转存大约100万行,做法是将原来表中的部分数据load到新表中,然后将原来表中的那些数据删除掉,有什么比较快的删除数据的方法,不需要记日志。
参与17

16 同行回答

zhenda zhenda 数据库管理员 昆仑银行
回复 15# 共同进步    生产环境添加copy yes会做表空间级别备份,会中断业务。本案例中个人觉得可以做cursor + load方法,此方法直接通过内存传输数据减少了2次磁盘IO(读+写),直接读入内存,表数据传输,写入磁盘。100万条数据不是很大,确认100万条的数据量,这样能评估日志...显示全部
回复 15# 共同进步


   生产环境添加copy yes会做表空间级别备份,会中断业务。
本案例中个人觉得可以做cursor + load方法,此方法直接通过内存传输数据减少了2次磁盘IO(读+写),直接读入内存,表数据传输,写入磁盘。
100万条数据不是很大,确认100万条的数据量,这样能评估日志量,传输中减少并发,避免长事务和并发的日志填充。这样日志不会满,这样既保证不停服务,也能通过最小的修改,增加传输速度。


不记录日志可以用nonrecoverable

db2 "declare c_test cursor for select * from old table(delete from tabname where ......)"
db2 "load from c_test of cursor insert into tabname1 nonrecoverable"


之后做好在线备份。 收起
软件开发 · 2014-06-09
浏览2170
共同进步 共同进步 数据库架构师 中国金融电子化公司
并不是所有的情况都可以轻易地改成分区表,另外,不记日志的方式又需要提前做好DB备份,建议按照如下方式db2 "declare c_test cursor for select * from old table(delete from tabname where ......)"db2 "load from c_test of cursor insert into tabname1 copy yes to ..."...显示全部
并不是所有的情况都可以轻易地改成分区表,另外,不记日志的方式又需要提前做好DB备份,建议按照如下方式
db2 "declare c_test cursor for select * from old table(delete from tabname where ......)"
db2 "load from c_test of cursor insert into tabname1 copy yes to ..."
这可以减少一次对源表的查询,同时又可以使load数据不落地 收起
软件开发 · 2014-06-05
浏览2499

    提问者

    sunchaosailor
    软件开发工程师 SIA
    评论15

    相关问题

    问题状态

  • 发布时间:2014-05-29
  • 关注会员:1 人
  • 问题浏览:12368
  • 最近回答:2014-06-09
  • X社区推广