给表新增字段时,可能经常遇到错误:
ORA-00054:资源正忙但指定以NOWAIT方式获取资源或者超时失效
这种错误出现的情景在oracle 11.1 和 11.2 的版本中有点区别
以下实验中 表 :
create table hlb (id int); ,表中有数据,
ddl_lock_timeout 默认值为0.
版本:11.1
session 1:
SQL> delete from hlb;
1 row deleted
1 row deleted
session 2:
SQL> alter table hlb add (id1 int);
alter table hlb add (id1 int)
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 --添加空字段也会立马抛错
alter table hlb add (id1 int)
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 --添加空字段也会立马抛错
SQL> alter session set ddl_lock_timeout=10;
Session altered
SQL> alter table hlb add (id1 int);
alter table hlb add (id1 int)
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 --如果设置了ddl_lock_timeout,会等待 10s
Session altered
SQL> alter table hlb add (id1 int);
alter table hlb add (id1 int)
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 --如果设置了ddl_lock_timeout,会等待 10s
版本 :11.2
情景一: 添加空字段
session 1:
SQL> delete from hlb;
1 row deleted
1 row deleted
session 2:
SQL> alter table hlb add (id1 int);
--会一直处在等待状态,知道session 1 回滚或提交
情景二 :添加非空字段
session 1:
SQL> delete from hlb;
1 row deleted
1 row deleted
session 2:
SQL> alter table hlb add (id1 int default 1);
-- 立马抛错错误
SQL> alter session set ddl_lock_timeout=10;
Session altered
SQL> alter table hlb add (id1 int);
alter table hlb add (id1 int)
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 --如果设置了ddl_lock_timeout,会等待 10s
Session altered
SQL> alter table hlb add (id1 int);
alter table hlb add (id1 int)
ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 --如果设置了ddl_lock_timeout,会等待 10s