最近大家讨论到各类数据库在新增字段带默认值时是否会锁表的问题,发现Oracle在不同的版本其实是有对应优化的,更新了下之前的知识点。

主要考虑以下三种情形,例如:

  • 不加default:alter table t1 add tel varchar2(20);
  • default+not null:alter table t1 add tel varchar2(20) default '13888888888' not null;
  • 仅加default:alter table t1 add tel varchar2(20) default '13888888888' ;
加列方式 / 版本 11g之前 11g 12c
不加default 不需全表更新 不需全表更新 不需全表更新
default+not null 全表更新

不需全表更新
更新数据字典sys.col$中default$的值,另外在sys.ecol$中记录默认值,在查询要用到时直接读取

可由隐含参数_ADD_COL_OPTIM_ENABLED控制

不需全表更新
更新数据字典sys.col$中default$的值,另外在sys.ecol$中记录默认值,在查询要用到时直接读取

可由隐含参数_ADD_COL_OPTIM_ENABLED控制

仅加default 全表更新 全表更新 不需全表更新
更新数据字典sys.col$中default$的值,
在sys.ecol$中记录默认值,且较11g会记录更多信息,在查询要用到时直接读取

全表更新对大表意味着更长的锁表时间,更大的事务量,更大的undo占用量,更长的业务影响时间。在11g及之前,这都是一个需要谨慎考量的变更,而从12c开始,影响明显降低。

具体的原理很多文章都有通过10046 trace分析,可以参考:

Oracle 11g中 ADD COLUMN 功能增强 说明_oracle column after-CSDN博客

Oracle 如何给大表添加字段,并带有默认值 - 墨天轮

​​​​​oracle大表添加字段default经验分享_ITPUB博客

add column时default null的问题 – OracleBlog

Oracle DDL性能改进-大表新增列行为分析 - 简书

ORACLE-BASE - DEFAULT Values for Table Columns : Enhancements in Oracle Database 12c Release 1 (12.1)

oracle column default remove,Oracle 12c column add default value功能增强_令和时代的柯南的博客-CSDN博客

ORACLE-BASE - DEFAULT ON NULL FOR INSERT AND UPDATE in Oracle Database 23c

</article>

[转帖]会长期锁表吗?Oracle add column default 在各版本的优化的更多相关文章

  1. Oralce进程信息查看,Oracle的锁表与解锁

    参考: oracle查看锁表进程,杀掉锁表进程 Oracle的锁表与解锁 查看锁表进程SQL语句: select * from v$session t1, v$locked_object t2 whe ...

  2. MySQL5.7之在线DDL不会锁表

    MySQL5.7在线修改varchar字段不在锁表,测试过程如下: mysql> select version(); +------------+ | version() | +-------- ...

  3. oracle 锁表问题

    oracle执行表数据更新的时候,会遇到锁表问题,比方说,会遇到这样的问题,主要原因是这张表被其他人占用,修改数据没有提交.oracle为了避免脏数据的产生,在其安全机制下,锁住该表. 执行如下操作, ...

  4. 查询Oracle锁表和解决方法

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...

  5. Oracle数据库锁表及解锁进程

    下午代码迁移,更新数据库记录时for update语句无法执行,数据库被锁,KILL掉几个进程搞定. Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实 ...

  6. Oracle锁表与解锁

    查看锁表语句:方法1:    select sess.sid,           sess.serial#,           lo.oracle_username,           lo.o ...

  7. Oracle的锁表与解锁

    Oracle的锁表与解锁 SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) ...

  8. oracle 查看锁表情况并处理锁表

    /* *locked *query locked object and analyse reason,kill it * */ select 'alter system kill session '' ...

  9. Oracle锁表(转载)

    锁定类型               行级锁               表级锁行级锁         ---- 行被排他锁定         ----在某行的锁被释放之前,其他用户不能修改此行    ...

  10. 查看Oracle是否锁表

    --Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容. --(1)锁表查询的代码有以下的形式: select ...

随机推荐

  1. ElasticSearch之cat transforms API

    命令样例如下: curl -X GET "https://localhost:9200/_cat/transforms?v=true&format=json" --cace ...

  2. 简单几行实现sliver上线提醒

    准备魔改sliver去掉一些特征什么的,这里记录一下最简单实现上线消息通过企业微信机器人提醒的方式,这很简单也有很多不足还需要接着改的 protobuf中对消息Beacon和Session的定义如下, ...

  3. Java单例模式的几种常见实现方式

    目录 Java单例模式的几种常见实现方式 懒汉or饿汉? 饿汉:不加锁,线程安全,用起来方便,容易产生垃圾对象 单线程下的单例模式(懒汉,线程不安全) 多线程下的单例模式(一)(懒汉,线程安全) 多线 ...

  4. 记录:websoket切换页面后重复执行问题

    问题描述 因为项目需求,实时播放执行信息.而项目的websoket只在这个页面,会有切换情况.从websoket连接得到执行列表数据.断开重连后会传递新连接数据+旧连接数据.也就是说,如果第一次进入页 ...

  5. GaussDB技术解读系列之应用无损透明(ALT)

    本文作者 :华为云GaussDB研发高级工程师 藏琦 1.背景 GaussDB作为一款企业级分布式数据库,提供了"同城跨AZ双活.两地三中心.双集群强一致"等极致的高可用容灾能力. ...

  6. 数据库的两个好帮手:pagehack和pg_xlogdump

    摘要:pagehack和pg_xlogdump可以帮助我们在数据库故障定位中,解析各种文件的页面头和xlog日志. 随着技术的演进,数据也发生了巨大的变化,数据规模越来愈大.数据种类呈现多样性,数据处 ...

  7. 华为云自研PB级分布式时序数据库揭秘第一期:初识GaussDB(for Influx)

    摘要:GaussDB(for Influx)提供了独特的数据存储管理解决方案,云原生的存储与计算架构,可根据业务变化快速扩容缩容:高效的数据压缩能力和数据冷热分离设计,可大幅降低数据存储成本:高吞吐的 ...

  8. PanGu-Coder:函数级的代码生成模型

    摘要:华为诺亚方舟实验室语音语义实验室联合华为云PaaS技术创新实验室基于PanGu-Alpha研制出了当前业界最新的模型PanGu-Coder 本文分享自华为云社区<PanGu-Coder 函 ...

  9. webpack原理(2):ES6 module在Webpack中如何Tree-shaking构建

    Tree-shaking 最早由打包工具 Rollup 提出 DCE 作用于模块内(webpack 的 DCE 通过 UglifyJS 完成),而 Tree-shaking 则是在打包的时候通过模块之 ...

  10. 下一代APP Store——GPT应用商店GPTs初体验

    uploading-image-126879.png 近期,OpenAI宣布GPT应用商店正式上线,目前拥有plus的用户已经可以体验了. OpenAI将GPT应用商店命名为GPTs,这也是之前发布会 ...