暂无图片
分享
曉鵬滋
2019-05-27
oracle删除数据表特定时间点以前的数据

数据库2013年启动至今,现在需要把数据表里2015年以前的数据删除,有什么便捷的方法

收藏
分享
5条回答
默认
最新
章芋文

首先如果delete会产生很多碎片,且空间需要move表之后才会释放,所以建议一次到位,找停机时间把表改造成分区表,以后清理数据直接清空分区即可。

create 分区表 as select * from 原表。

如果没有停机窗口,可以考虑在线重定义,静态数据再迁移等方式。

暂无图片 评论
暂无图片 有用 0
lastwinner

最简单的方法是

每天业务低谷期,小批量多批次删除2015年以前的数据,比如一次删1万,一天删50次,这样将大任务换成小任务,对系统影响小

暂无图片 评论
暂无图片 有用 0
曉鵬滋

试过在线重定义做分区表,但是速度特别慢,长时间锁表造成应用无法正常登录使用

暂无图片 评论
暂无图片 有用 0
盖国强

在线重定义是很慢,需要慢工出细活。但是是可以解决的。

如果分批量删除,最后回收空间同样麻烦。


如果调控不好在线重定义。可以采纳 lastwinner 的方法,小批量慢慢删除。但是注意会产生大量归档日志。

暂无图片 评论
暂无图片 有用 0
曉鵬滋
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏