oracle大表添加字段default经验分享-阿里云开发者社区

开发者社区> 小麦苗> 正文

oracle大表添加字段default经验分享

简介: 当oracle单表数据量上亿时,对表进行alter table aa add column_1 varchar2(2) defalut 'Y';时,效率及安全性是必须考虑的因素。
+关注继续查看
当oracle单表数据量上亿时,对表进行alter table aa add column_1 varchar2(2) defalut 'Y';时,效率及安全性是必须考虑的因素。

本帖以2亿的数据表aa举例:
alter table aa add column_1 varchar2(2) defalut 'Y';
Table altered
Executed in 3600 seconds
直接用了一个小时,而且在这过程中是加上了表级锁,也就是连查询都是会被等待的,这是相当危险的操作。

为什么会这样,原来oracle在执行上面语句时不仅要更新数据字典,还会刷新全部的记录。一次update 2 亿条数据当然需要一个小时,并且还会导致undo空间暴涨。

如果我们把更新数据字典和更新字段值分开,会不会好一点?
alter table aa add column_1 varchar2(2);
Table altered Executed in 0.016 seconds
alter table aa modify column_1 varchar2(2) defalut 'Y';
Table altered
Executed in 0.003 seconds

答案是快100万倍,那效果呢?经测试发现在第二种方法不会更新以前的数据,我们可以自己写一个匿名块循环update,一次commit 10000条,达到效率与安全的完美结合。

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【原】Oracle VirtualBox搭建RAC共享存储划分
作者:david_zhang@sh 【转载时请以超链接形式标明文章】 链接:http://www.cnblogs.com/david-zhang-index/archive/2012/07/12/2587826.
929 0
discuz论坛发帖添加字段
1 后台--论坛-- 分类信息   字段管理:添加字段。 分类管理:添加一个分类,将该分类添加几个字段; 2论坛---》 选择一个模块--》分类信息---》开启----》启用分类勾选上即可。
614 0
为Monorail添加多个Controller的程序集
            MonoRailConfiguration.GetConfig().ControllersConfig.Assemblies = new string[] {                     "程序集1","程序集2"...            };
486 0
Linux问题情报分享(1):内核Stack Clash补丁导致Java程序启动失败
突然发现Java程序无法启动。或者内核升级后Java程序无法启动。那么,很可能是内核Stack Clash补丁导致的。
2443 0
Ant Design 开源项目经验分享,你想知道的都在这儿了
如何成功的运作一个开源项目?来自Ant Design灵魂人物偏右的全干货分享。
2078 0
MySQL添加字段和修改字段的方法
添加表字段 alter table table1 add transactor varchar(10) not Null; alter table   table1 add id int unsigned not Null auto_increment primary key 修改某个表的字段...
644 0
ORACLE SQL脚本能否修改字段名称?
在看到标题时,你先想想:在ORACLE中能否修改一个表的某个字段名呢?如果能的话,你是否还记得SQL脚本如何写的呢,呵呵,写这个的目的是因为在论坛上看见许多信誓旦旦的说ORACLE中不能修改字段名称,只能先删除、后添加字段或是其它方法来处理。
676 0
oracle修改表字段
增加字段     alter   table   docdsp     add   dspcode   char(200)     删除字段     ALTER   TABLE   table_NAME   DROP   COLUMN   column_NAME     修改字段类型     ALTER   TABLE   table_name     ALTER   COLUMN   column_name   new_data_type     改名     sp_rename     更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
588 0
ESP8266在Alios-Things上的入门开发指南 (二)ESP8266开启CLI功能及添加CLI函数
Alios-Things支持几种调试方式,具体作用及使用可参考链接地址 https://github.com/alibaba/AliOS-Things/wiki/Debugging-Overview.zh     今天我们主要关注CLI调试的开启,及增加CLI函数。
3478 0
解决Druid设置Oracle的Clob字段时的小坑
众所周知,Oracle有很多坑, 所以才有了去IOE。 在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的。【如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑】 用Druid连接池,通过JDBC往Oracle数据库的Clob字段插入数据,或者更新数据时,一个问题出现了。
2021 0
+关注
小麦苗
网名:小麦苗 | 微信公众号:DB宝 | 11g和12c OCM | 《数据库笔试面试宝典》作者,博客地址:http://blog.itpub.net/26736162/abstract/1/
889
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载