oracle 大表添加字段方法

oracle 大表添加字段方法

近期,考虑到生产一线大表需要进行表结构更改,自身测试了一把,如下:

操作系统版本:centos 6.5
数据库版本:oracle 11.2.0.4
数据表:中小型堆表,千万级

  • 先分享一个创建测试表、序列、数据的小脚本

创建测试表

create table insert_test(
	id number,
	address varchar2(20),
	QRcode varchar2(20),
	password varchar2(30)
);

创建一个自用序列

create sequence wyl_seq
start with 1
increment by 1
nomaxvalue
nominvalue
nocycle
nocache;

插入12000000行数据,47分钟。。。。。

begin
	for i in 1 .. 12000000 loop
		insert into insert_test values(WYL_SEQ.NEXTVAL,'www.baidu.com',dbms_random.string('x', 20),dbms_random.string('p',30));
	end loop;
	commit;
end;
/

在这里插入图片描述

在这里插入图片描述

  • 现在进行加字段并设置默认值测试,主要有两种方法(一是直接添加并设置默认值,二是先添加,然后modify默认值

我们先测试一下第二种方法

alter table insert_test add str_te varchar2(10);
alter table insert_test modify str_te default '0';

在这里插入图片描述
发现很快就完成了,时间可以忽略不计,下面测试一下第一种方法

alter table insert_test add str_te varchar2(10) default '0';

在这里插入图片描述
竟然达到了21分钟。。。。

结论:alter table add
语句加上defalut时会刷新存量数据并产生表级锁,需慎用。特别是大表,生产环境,业务产生期间就应该禁止此操作。 改为add table
add不带缺省值,接着来个alter table aa modify column_1 varchar2(2) default
‘Y’;更新存量数据可放到业务较少的凌晨跑。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值