表总量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就变成实际的了
可选方案如下,权衡后选择方案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/