在oracle中如何使用正确的姿势删除近亿级大表中的业务数据

项目背景

今天业务方要求对某张近亿级的大表只保留今年的业务数据,今年以前的业务数据全部删除,不再使用。

系统环境

oracle11.2.0.4 两台单节点ADG,主库对我司自己的微应用提供读写,备库对其他业务单位的应用提供读访问,备库上坏了一块磁盘,备库同步经常出现延迟。
目前该业务表今年的数据只有1200万条记录,总记录8000多万。

实现方式

1、批量多次少量删除业务数据
2、重新创建一张业务表A,将B表今年的业务数据插入到该新表中,将B表rename B_bak,将A表rename B.

两个方式对比

第一种方式的优点
1、不需要新建表且不需要确认该表是否存储其他引用对象
2、不会中断业务
第一种方式的缺点
1、需要进行多次批量删除,一次性删除可能导致undo争用且会生产大量的redo并传递的备库上。
2、delete方式删除仍有高水位问题
第二种方式的优点
1、产生的redo日志少
2、没有高水位问题
第二种方式的缺点
1、需要清楚表上引用对象有哪些
2、会中断写访问的业务,在rename时读写访问都会受到几秒钟的影响。
与业务人员沟通后,决定采用第二种方式来删除数据。

删除前的准备工作

技术层面
1、确认该表是否是分区表
2、确认该表是否有触发器、索引、序列和视图引用
3、评估数据删除所用时间
业务层面
1、在做insert into a select * from b where time>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值