在Oracle 11g以前,如果要在一个大表中增加一列,并设置默认值,那将是一个非常悲剧的事情.有些时候不得不选择在线重定义功能来实现

Oracle 11g增加列,并带默认值的新特性

[日期:2014-04-05]

来源:Linux社区

作者:Linux

[字体:]

在Oracle 11g以前,如果要在一个大表中增加一列,并设置默认值,那将是一个非常悲剧的事情.有些时候不得不选择在线重定义功能来实现该需求.而在11g中增加新列并设置默认值,只是简单的修改数据字典来实现该功能,大大提供效率

10g加列(默认值)

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

SQL> create table t_xifenfei

2 as select object_id,object_name from dba_objects;

Table created.

SQL> select count(*) from t_xifenfei;

COUNT(*)

----------

49827

SQL> desc t_xifenfei

Name Null? Type

----------------------------------------- -------- ----------------------------

OBJECT_ID NUMBER

OBJECT_NAME VARCHAR2(128)

SQL> set timing on

SQL> alter table t_xifenfei add c_xff varchar2(100) default 'www.xifenfei.com' not null;

Table altered.

Elapsed: 00:00:06.13

--使用了6秒钟

SQL> select rowid,

2 dbms_rowid.rowid_relative_fno(rowid)rel_fno,

3 dbms_rowid.rowid_block_number(rowid)blockno,

4 dbms_rowid.rowid_row_number(rowid) rowno

5 from t_xifenfei where object_name='OBJ$';

ROWID REL_FNO BLOCKNO ROWNO

------------------ ---------- ---------- ----------

AAAMwJAAEAAAAB8AAr 4 124 43

SQL> alter system dump datafile 4 block 124;

System altered.

Elapsed: 00:00:00.08

11g增加列(默认值)

SQL> select * from v$version;

BANNER

-----------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

SQL> create table t_xifenfei

2 as select object_id,object_name from dba_objects;

Table created.

SQL> select count(*) from t_xifenfei;

COUNT(*)

----------

74605

SQL> select rowid,

2 dbms_rowid.rowid_relative_fno(rowid)rel_fno,

3 dbms_rowid.rowid_block_number(rowid)blockno,

4 dbms_rowid.rowid_row_number(rowid) rowno

5 from t_xifenfei where object_name='OBJ$';

ROWID REL_FNO BLOCKNO ROWNO

------------------ ---------- ---------- ----------

AAASpRAAEAAAACrAAu 4 171 46

SQL> alter system dump datafile 4 block 171;

System altered.

SQL> set timing on

SQL> alter table t_xifenfei add c_xff varchar2(100) default 'www.xifenfei.com' not null;

Table altered.

Elapsed: 00:00:00.19

--只是使用了0.19秒

SQL> select rowid,

2 dbms_rowid.rowid_relative_fno(rowid)rel_fno,

3 dbms_rowid.rowid_block_number(rowid)blockno,

4 dbms_rowid.rowid_row_number(rowid) rowno

5 from t_xifenfei where object_name='OBJ$';

ROWID REL_FNO BLOCKNO ROWNO

------------------ ---------- ---------- ----------

AAASpRAAEAAAACrAAu 4 171 46

Elapsed: 00:00:00.04

SQL> alter system dump datafile 4 block 171;

System altered.

通过10g和11g的增加相同列和默认值的对比可以发现,11g的速度要比10g快很多很多,下面我们通过上面dump出来相关的数据块来分析原因

dump分析

11g增加列之前dump

tab 0, row 0, @0x1f74

tl: 12 fb: --H-FL-- lb: 0x0 cc: 2

col 0: [ 2] c1 15

col 1: [ 5] 49 43 4f 4c 24

tab 0, row 1, @0x1f66

tl: 14 fb: --H-FL-- lb: 0x0 cc: 2

col 0: [ 2] c1 2f

col 1: [ 7] 49 5f 55 53 45 52 31

tab 0, row 2, @0x1f5b

tl: 11 fb: --H-FL-- lb: 0x0 cc: 2

col 0: [ 2] c1 1d

col 1: [ 4] 43 4f 4e 24

11g增加列之后dump

tab 0, row 0, @0x1f74

tl: 12 fb: --H-FL-- lb: 0x0 cc: 2

col 0: [ 2] c1 15

col 1: [ 5] 49 43 4f 4c 24

tab 0, row 1, @0x1f66

tl: 14 fb: --H-FL-- lb: 0x0 cc: 2

col 0: [ 2] c1 2f

col 1: [ 7] 49 5f 55 53 45 52 31

tab 0, row 2, @0x1f5b

tl: 11 fb: --H-FL-- lb: 0x0 cc: 2

col 0: [ 2] c1 1d

col 1: [ 4] 43 4f 4e 24

tab 0, row 3, @0x1f4f

tl: 12 fb: --H-FL-- lb: 0x0 cc: 2

col 0: [ 2] c1 10

col 1: [ 5] 55 4e 44 4f 24

10g增加列之后dump

因为10g在没有增加列之前的dump和11g未增加列之前类似,所以未dump出来

tab 0, row 0, @0x1f63

tl: 29 fb: --H-FL-- lb: 0x2 cc: 3

col 0: [ 2] c1 15

col 1: [ 5] 49 43 4f 4c 24

col 2: [16] 77 77 77 2e 78 69 66 65 6e 66 65 69 2e 63 6f 6d

tab 0, row 1, @0x1f44

tl: 31 fb: --H-FL-- lb: 0x2 cc: 3

col 0: [ 2] c1 2d

col 1: [ 7] 49 5f 55 53 45 52 31

col 2: [16] 77 77 77 2e 78 69 66 65 6e 66 65 69 2e 63 6f 6d

tab 0, row 2, @0x1f28

tl: 28 fb: --H-FL-- lb: 0x2 cc: 3

col 0: [ 2] c1 1d

col 1: [ 4] 43 4f 4e 24

col 2: [16] 77 77 77 2e 78 69 66 65 6e 66 65 69 2e 63 6f 6d

tab 0, row 3, @0x1f0b

tl: 29 fb: --H-FL-- lb: 0x2 cc: 3

col 0: [ 2] c1 10

col 1: [ 5] 55 4e 44 4f 24

col 2: [16] 77 77 77 2e 78 69 66 65 6e 66 65 69 2e 63 6f 6d

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

添加列oracle默认值,Oracle 11g增加列,并带默认值的新特性相关推荐

  1. Oracle中对现有表增加列

    altertable Tablename add(column1 varchar2(20),column2 number(7,2)...) --Oracle中修改列名不可以,但是可以删除列,增加列 a ...

  2. oracle jdk1.7 内存,JDK 16 正式发布,一次性发布 17 个新特性…不服不行!

    上一篇:Java 15 正式发布, 14 个新特性 JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. ...

  3. python pandas 增加一列_pandas删除行删除列增加行增加列的实现

    创建df: >>> df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD'), index=list(' ...

  4. c语言带默认参数吗,嵌入式C语言可以带“默认参数”的函数吗

    (文章来源:嵌入式时代) 使用C++开发过程序时,定义函数可以指定默认参数,例如 void fun(int x, int y=3); 在调用 fun() 时第二个参数可以不传递,此时 fun() 函数 ...

  5. c语言支持默认参数吗,嵌入式C语言可以带“默认参数”的函数吗

    描述 (文章来源:嵌入式时代) 使用C++开发过程序时,定义函数可以指定默认参数,例如 void fun(int x, int y=3); 在调用 fun() 时第二个参数可以不传递,此时 fun() ...

  6. oracle 添加默认值列,Oracle 11g增加列,并带默认值的新特性

    永久链接:http://www.ixdba.com/html/y2007/m08/159-oracle11g-add-column.html 老和尚在他的blog中描述了了这个问题,我这里做一个详细的 ...

  7. c oracle存储过程返回值,C#调用存储过程详解(带返回值、参数输入输出等)

    本文实例讲述了C#调用存储过程的方法.分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @stu ...

  8. Oracle 11g新特性之缓存与连接池

    Oracle 11g新特性之缓存与连接池 上一篇 /下一篇  2008-03-26 16:03:19 / 个人分类:Oracle 数据库 11g面向 DBA 和开发人员的重要新特性 查看( 414 ) ...

  9. sql server 数据库表中增加列,增加字段,插入列,插入字段,修改列,修改字段,

    格式 --增加列 alter table 表名 add 字段名 类型 null default 默认值--给列增加注释 execute sp_addextendedproperty 'MS_Descr ...

最新文章

  1. 关于《强化狼群等级制度的灰狼优化算法》的问题邮件回复
  2. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
  3. 去除桌面图标蓝底的方法步骤
  4. java通过ftp上传文件到服务器_java-通过FTP将文件传输到服务器,但结果以零...
  5. sql 2005 try catch
  6. 安装配置树莓派的最佳工具——NOOBS
  7. MFC小笔记:滑动条与编辑框
  8. 【项目实施随笔】销售和采购信息的打印
  9. 部分添加epel源失败的可以试试直接把mirror站网址写到baseurl里
  10. 【职场生活】跳槽离职要注意的那些坑?
  11. iphone4 通讯录数据库文件!
  12. java 实现用户登陆代码_Java Web用户登录实例代码
  13. 基于SSM流浪宠物管理系统
  14. python进阶到高阶大全(强烈推荐)
  15. mac下安装win7虚拟机
  16. 最适合Java程序员的Java学习全套资料分享
  17. Apache虚拟主机配置详细教程
  18. 多云时代下数据管理技术_建立一个混合的多云数据湖并使用Apache Spark执行数据处理...
  19. 【转载】API:简单实现多人聊天室
  20. 什么是IO流?什么是IO流?

热门文章

  1. [leetcode] Power of Two 判断一个数是否是2的平方
  2. 动态代理 and Listener监听器
  3. ssis合并连接链接键_在SSIS包中使用合并联接转换
  4. 游标sql server_了解游标并将其替换为SQL Server中的JOIN
  5. subversion使用_使用Subversion在SQL数据库中对象更改的修订历史记录
  6. 服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)
  7. python爬虫系列:做一个简单的动态代理池
  8. BCZM : 1.8
  9. PHP-CGI进程占用过多CPU
  10. 362. Design Hit Counter