最近大家讨论到各类数据库在新增字段带默认值时是否会锁表的问题,发现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. shiro基于角色URL进行鉴权

    前言 shiro基于URL进行鉴权,网上有很多,但是多数都是copy不排版,眼睛都看花了,还不如自己看看源码. 2021年1月14日21:23:49最新的shiro是1.7,使用时发现了首次访问的一个 ...

  2. 1、Flutter把内容单独抽离成一个组件

    //代码块 importM import 'package:flutter/material.dart'; void main() { runApp( MaterialApp(       theme ...

  3. LeetCode DFS、BFS篇(102、200、111、752)

    102. 二叉树的层序遍历 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). 示例: 二叉树:[3,9,20,null,null,15,7], 3 / 9 ...

  4. 印尼Widya Robotics携手华为云,让建筑工地安全看得见

    摘要:AI落地效率提升30倍,实时智慧安全检测,全天候保障劳工人身安全. 本文分享自华为云社区<云上360行 丨 印尼Widya Robotics携手华为云,让建筑工地安全看得见>,作者: ...

  5. 9个问题,带你掌握流程控制语句中的java原理

    摘要:利用9个问题帮助记忆流程控制语句中的Java原理知识. 本文分享自华为云社区<流程控制语句知识点里的java原理>,作者:breakDraw . 相信大家经常会遇到这种问题 可是这个 ...

  6. 火山引擎 ByteHouse:双十一即将到来,如何用数据分析提升电商平台销售转化?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "双十一"电商大促脚步渐近,各大平台的战火又将燃起.直播电商以低成本.高转化率等优势备受商家青 ...

  7. HanLP — HMM隐马尔可夫模型 -- 预测

    https://www.bilibili.com/video/BV1aP4y147gA?p=8

  8. IIS 设置超时时间

    高级设置 => 限制 => 连接超时(秒),默认120秒,根据实际情况调整

  9. cxf 动态调用 WebService No compiler detected, make sure you are running on top of a JDK instead of a JRE

    WebService cxf No compiler detected, make sure you are running on top of a JDK instead of a JRE [202 ...

  10. python 解析字节码的相关方法

    python代码被解释器执行时分为两步走: 一.python编译器将代码编译成字节码 二.python虚拟机执行字节码 由于这两步是一起的,所以在python编程中很少能看到字节码.但是想要提高代码效 ...