ORA-00054 资源正忙

本文解析了Oracle中出现ORA-00054错误的原因,主要涉及行级锁和表级锁,以及如何通过forupdate语句、锁定检查和会话杀死来处理DDL操作中的资源冲突。包括了示例和实用步骤来解决这个问题。

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

在执行数据库DDL操作 时,有事会出现“Oracle 报 “ORA-00054 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效” 的问题。

1 原因
一般在用户修改记录之前,悲观锁就会发生作用,比如更新语句:

select ..for update,因为我在plsql端修改数据,执行了select * from xxx for update,引发了这个问题。
1
执行这条命令之后,oracle 将会对返回集中的数据建立行级封锁,以防止其他用户修改这些记录。

这时如果对这张表进行 ddl 操作将就会报 ORA-00054 错误。

一张表如果加了表级锁,那么就不允许对该表进行任何的 ddl 操作,否则也会报 ora-00054 错误。

truncate table hbhe.t1;
truncate table hbhe.t1
                    *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired


Elapsed: 00:00:00.00

查看具体哪张表被锁住
select l.session_id,o.owner,o.object_name
from v$locked_object l,dba_objects o where l.object_id=o.object_id;

SESSION_ID OWNER                OBJECT_NAME
---------- ---------------------------------------
       396 HBHE                 T1

Elapsed: 00:00:00.06

查看哪个SID,serial
select s.username,s.sid,s.serial#,s.logon_time
from  v$locked_object l,v$session s
where l.session_id=s.sid order by s.logon_time;

USERNAME        SID    SERIAL# LOGON_TI
-------------- ---------- ---------- --------
HBHE            396     26070 19:18:38

hbhe@ORCL 13:38:57> alter system kill session '396,26070';

System altered.

Elapsed: 00:00:00.02
hbhe@ORCL 13:39:44> commit;

Commit complete
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值