请问大表删除大部分数据,有没有啥思路和建议?
5M好几个1T的分区表,在不停机或停机半小时内的情况下,按一定条件删除掉表中80%的数据,大家有没有啥好的思路和建议?
(说明:按rename+ctas的方式,停机半小时的情况下,来不及)
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
6条回答
默认
最新
这个可以配合多次停机半小时来处理,每次根据实际情况处理若干个分区
1,将分区表的某个分区的数据置换出来
可以使用分区转换 ,不过要rebuild全局索引ALTER TABLE test_part EXCHANGE PARTITION SYS_P268 WITH TABLE tem_test_part;
也可以根据分区键使用ctas将一个分区的数据导出来,然后在truncate 该分区
2,在临时表中将需要的数据查找出来insert到分区表中,清空临时表
一次清理一个分区的话时间应该是够的,或者提前将执行脚本写好,多开几个窗口,一次多跑几个分区数据
评论
有用 1
DELETE FROM table_name WHERE condition;
其中,table_name为您需要删除数据的表名;condition为您需要满足的条件。
注意:在执行delete命令时,请务必谨慎操作。建议在执行前先备份好数据。
评论
有用 1导出不需要删除的数据,TRUNCATE 表,然后再导入数据。
注意:请务必谨慎操作。建议在执行前先备份好数据。
评论
有用 1你这边找到解决方法的吗
今天在处理同样的问题的时候又想到了一个简单粗暴方案,可能比较合适,不过对磁盘的IO要求比较高
准备阶段:
1,将需要的数据通过查询条件创建物化视图,同步数据,如mv_tt
执行阶段:
停机
创建和原表结构一模一样的临时表
create table t as select * from mv_tt;
评论
有用 1回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

