在数个百万级表中按日期删除数据,求稳妥快速的解决方案?

土门子拉马努金 2019-10-04 09:06:25
任务要求是:
1.定期删除21张表中的过时数据,这些表中超过百万级的有三张,十万级的大约8张,其余基本在万级别。
2.每次任务执行时删除N个月之前的数据,N由配置文件指定。每张表都有一个datetime类型的created_datetime字段,这个字段存储的时间如果在N月前就该被删除。
3.这些表数据存在关联性,如果删除出现异常,希望21张表一起回滚。根据这个要求产生两个方案,PlanA是21张一起将N个月前的数据删除,遇到异常一起回滚;PlanB是将N个月分为m天,一天天的删除,遇到异常则回滚一天的数据。

现在对一张表填充两百万数据进行测试,PlanA大约需要6分钟,PlanB大约在8-9分钟。客户觉得耗时较长。

请大家帮忙,看有没有什么稳妥快速的高招没?SQL方面的和Java方面的都行(但是DB动不了,这是没办法的事情)。
...全文
216 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2019-10-10
  • 打赏
  • 举报
回复
当前的条件和设计,慢慢删吧,无解。 即使能动表结构让你在线重定义成分区表,也没办法,分区一级的操作都是DDL,所以它们非常快,但是Oracle中的DDL都是隐式提交的,所以无法保持多表数据一致,除非你自己先备份好数据,但这么一来,备份数据又要花一定时间。
AHUA1001 2019-10-10
  • 打赏
  • 举报
回复
大表,按月分区,需要删除数据的时候,直接删除分区。
  • 打赏
  • 举报
回复
注:只能调整Java代码和Java调用的SQL,写PL/SQL,在数据库方面做调整是不让的。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧