在更新过程中,数据库在表上使用排它锁,限制其他用户访问。
如果表有大量的行,则会产生大量的REDO和UNDO,并耗费大量的时间。
SQL> select * from T;
ID NAME
---------- --------------------
1 ICOL$
2 I_USER1
3 CON$
4 UNDO$
5 JXL
6 I_OBJ#
7 PROXY_ROLE_DATA$
8 I_IND1
9 I_CDEF2
10 I_PROXY_ROLE_DATA$_1
SQL> alter table T add (sex varchar2(4) default 'man');
Table altered.
Elapsed: 00:00:00.79
SQL> select * from T;
ID NAME SEX
---------- -------------------- --------
1 ICOL$ man
2 I_USER1 man
3 CON$ man
4 UNDO$ man
5 JXL man
6 I_OBJ# man
7 PROXY_ROLE_DATA$ man
8 I_IND1 man
9 I_CDEF2 man
10 I_PROXY_ROLE_DATA$_1 man
ORACLE11G 开始,为指定为not null的列所指定的任何默认值都存储在数据字典中,而非表中。因此新列的增加只是瞬间的银耳消除DBA增加新列的主要障碍。
新列的增加所涉及的就是用表示新列的默认值一次性更新数据字典,。这样做忽略了表的尺寸。另外最大的优点是为新列添加默认值时不使用任何空间。
SQL> select * from T;
ID NAME
---------- --------------------
1 ICOL$
2 I_USER1
3 CON$
4 UNDO$
5 JXL
6 I_OBJ#
7 PROXY_ROLE_DATA$
8 I_IND1
9 I_CDEF2
10 I_PROXY_ROLE_DATA$_1
SQL> alter table T add (sex varchar2(4) default 'man');
Table altered.
Elapsed: 00:00:00.73
SQL> alter table T add (sex2 varchar2(4) default 'wman' not null);
Table altered.
Elapsed: 00:00:00.15
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15412087/viewspace-1847027/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15412087/viewspace-1847027/