Oracel 大表快速删除无用的 列 字段

新增字段,不小心新增到一个大表上了,近3000万的数据,一直有业务请求,使用物理删除会锁表影响业务:alter table  表名 drop column 字段名 ;不可行,即使停了业务,一个字段删除执行了一个小时也没有完成。尝试采用其他方式。

Oracle 8i之后提供了一个功能可以将字段先标记为未使用(逻辑删除)

alter table 表名 set ubused(字段名1,字段名2......)  online;--这个执行是秒级完成的,注意:这个操作理论上不可逆,慎用,有经验的DBA也可以恢复,但是风险高,需要做好备份。

online 关键字不会对业务造成阻塞。

被标记了“未使用”的字段的表可以在dba_unused_col_tabs中看到列数(只有列数)。

接下来等有空闲时间时,再对逻辑删除的列进行物理删除(完全删除,释放空间)

alter table 表名 drop unused columns ;

alter table 表名 drop unused columns  checkpoint 1000;--checkpoint是可选参数,设置检查点,避免UNDO空间耗尽引起错误,注意这个操作在间隔分区上执行会命中BUG 20598042,ALTER TABLE DROP COLUMN … CHECKPOINT on an INTERVAL PARTITIONED table fails with ORA-600 [17016]。这个BUG在使用补丁修复之前会导致表不可用。在drop过程中或drop报错后,会抛出ORA-12986异常,可以尝试通过继续执行删除字段操作完成整个drop后恢复

alter table 表名 drop unused columns  continue checkpoint 500;

2800万数据,删除了三个无效字段,花费了5多小时,中间出现了PGA的latch报警。

参考:Oracle删除字段的方式和风险,你都了解么? - 云+社区 - 腾讯云

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值