一个关于 ORA-00054 :资源正忙,但指定以nowait 方式等待 的测试

本文通过实验验证了在执行DDL操作时,如果存在DML语句正在访问该表,确实会导致NOWAIT等待。然而,对于普通的SELECT查询,即使在执行DDL时,也不会引发同样的等待现象。通过创建测试表和运行特定的查询,实验结果表明,除了SELECT for update之外的普通查询并不会造成NOWAIT等待。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



因为想要在生产上修改一个表的结构,但当执行 alter语句的时候提示 00054 错误。
把正在访问该表的SQL抓出来,发现有4个DML语句以及近20个select 语句。
毫无疑问,当有DML语句执行时执行DDL肯定会造成 NOWAIT 等待,但是对于select是否
会造成该错误,本人不太确定。于是小小测试一下:
1、随便建一张 test01表
2、开一个会话执行一个死循环的查询
   declare
v_id number;
begin
    loop
      select id into v_id from test01 where rownum <2;
      exit when
         1>2 ;
     end loop;
end;

开启第二个会话执行DDl, alter table test01 add address4 varchar(30);

结果发现,表结构是可以被修改的。

所以普通的查询是不会造成nowait 的(当然select for update 除外)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值