oracle如何最快的删除大数据量表中的多个字段

提到删除表的字段,我们最初想到的就是alter table xx drop column field1;

但是当我们要对生产环境中大数据量的表进行删除字段,而且不是删除一个两个,有可能删除多个字段,此方法是否可取。网上有文章说到可以先对要删除的字段进行unused的处理,然后在系统不忙的时候执行drop column,我个人认为此方法不是不可行,只不过我认为不是最快的。

我以我自己亲身处理的一个例子,介绍下我的方法,仅供参考。

文章开始前,先讲一下背景。

客户生产环境中数据量增量很大,每个月都要有五六十G的增量。尤其是几个大表,数据量每月都是千万级增量。由于历史原因,有的表中的字段多达200多个,但实际用到的字段也就只有七八十个,也就是有一百二三个字段要干掉,进行优化。

千万级的数据表,要干掉一百二三十个字段,而且还要尽可能的不影响业务的运行。那就要求在业务最不繁忙的时候,以最快的速度处理完,怎么办。

下面介绍下我的方法。

举个例子,然后上脚本吧。

假如有个表A,A中的数据量是5000w以上,A中有200个字段,你要删掉其中的120个字段。

脚本如下:

------------------脚本开始-----------------

-- 创建临时表
create table A_temp
tablespace ATEMP
nologging
as 
select 
field1,field2,,,,field80    -- 此处需要整理出A中要保留的字段

 from A;

/
-- 删除原表
drop table A;
-- 重命名表
ALTER TABLE A_temp RENAME TO A;
-- 使用nologging以及parallel快速重新添加索引
create index IND_Afile on A(field2) tablespace ATEMP nologging parallel 6;

alter table A add constraint PK_field primary key (field1) using index tablespace ATEMP  nologging;

------------------脚本结束-----------------

我自己试验的结果是5000w的数据表,三分钟内可以搞完。




  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值