小汤姆的gravatar头像
小汤姆 2015-04-01 09:19:33

oracle上亿表海量数据进行大批量数据删除有什么好的解决方案?

oracle 上亿表数据进行 大批量数据删除,有什么好的解决方案吗? 程序一直超时

所有回答列表(4)
剑八的gravatar头像
剑八  LV2 2015年4月1日

1. 这种任务都要做离线计算。

2. 分批,保证每个事务删除的数据不超过500个

比如你要删除的条件是 a ='xx';

那么你就

while(true){

 List ids = select id from table where a='xx' limit 500;

 if(ids.isempty()){

   break; 

  }

 delete from table where id in (ids);

}

评论(1) 最佳答案
最代码官方的gravatar头像
最代码官方  LV168 2015年4月1日

按我的经验来讲,肯定是你程序在执行删除操作时,oracle服务端有connection timeout导致删除超时失败。可以把海量的数据分批删除,比如1亿分成4个2500w,直到你的删除不超时为止。

另外像这种操作在业务上会很少,我还是建议你到服务器命令行直接truncate或drop或delete吧

摆渡的虫的gravatar头像
摆渡的虫  LV6 2015年4月1日

之前在别的项目过一个千万级别的,有一个表也是上亿的。总的来说两种方案。

1、离线操作:rename表,然后新建一个表,把表数据导入到新表中,删除原表。

2、在线操作,最好就是nologing模式,把业务数据分成片进行操作,不然就是连接超时。

 

不管是哪种操作记得最终给自己留下统计分析的时间,回收表空间。不然数据是完成了,等应用程序启动后,系统奇慢无比。

余长城的gravatar头像
余长城  LV4 2015年4月7日

可以先备份表结构在drop表,在恢复表结构

这样是最快的。truncate

其次是truncate表,这样的速度比delete速度快很多,但是不能恢复数据的,这样删除是没有记录日志的。

 

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友