200G大表删除数据方案

表总量200G,6亿条记录,每天增量400M,100万行,需要删除15天前的数据。

可选方案如下,权衡后选择方案2
1.不停业务,按时间字段来进行删除,每天删除20G数据(每次删除大概5G,分四次完成),预计10天完成
优点:该表对应的业务不受影响
缺点:
时间长
时间字段没有索引,直接按时间字段删除太慢,时间字段建立索引的话,索引段就20G,索引建立时间超过1小时,期间还可能因为临时空间不足导致创建失败
时间字段建立索引后,删除20G数据需要4小时,且回滚段大大占用,容易引发其他程序报错回滚段不足


2.停业务,通过expdp 按条件导出最近15天数据,再对原表原索引原约束等对象改名,再impdp
优点:时间短,1小时即可完成,且可以对原表备份便于以后回滚
缺点:该表对应的业务必须停止1小时



操作步骤
步骤1:EXPDP导出,耗时40分钟
expdp system/manager directory=DUMP_DIR dumpfile=cuxmsc20170307.dmp tables=cux.cuxmsc query=cux.cuxmsc:\" where CREATION_DATE\>sysdate-15\"

步骤2:修改原索引、原约束、原触发器等的名称(system用户下操作)
alter index CUX.cuxmsc_N1 rename to cuxmsc_N1170307;

alter table cux.cuxmsc rename constraint cuxmsc_PK to cuxmsc_PK170307;
alter table cux.cuxmsc rename constraint SYS_C00938162 to SYS_C00938162170307;

步骤3:修改原表表名,即备份原表(system用户下操作)
ALTER TABLE cux.cuxmsc RENAME TO cuxmsc20170307

步骤4:IMPDP导入,耗时3分钟
impdp system/manager directory=DUMP_DIR dumpfile=cuxmsc20170307.dmp

步骤5:一周之内没有问题的话删除备份的原表
drop table cux.cuxmsc20170307 purge



expdp query也会导出索引、约束、触发器、comment、权限等信息
需要修改原索引、原约束、原触发器名称的原因是因为impdp会提示存在这些对象,导致这些对象无法导入

当然导完后新表的dba_segments.bytes变成了6G,原表是200G,但是新表的dba_tables.num_rows和dba_tables.blocks和原表一样,不代表高水位没有降下来,只要重新收集一下统计信息的话,新表的
dba_tables.num_rows 和dba_tables.blocks就变成实际的了

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30126024/viewspace-2134899/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30126024/viewspace-2134899/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值