ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

1. 原因分析

出现这个问题的原因是正在执行的操作请求的资源正被其他事务锁定。即上述异常代表有事务没有提交,因为刚好有表正在被操作且被锁,因此资源还未释放,导致处理需要等待资源释放。

之后才搞清楚原来是有人对表执行了 delete 的 sql 语句,然后又突然给中断了,既没 commit 提交,也没 rollback 回滚,而导致的数据库锁表。即由于其他 Session 已经对目标表做了操作,并且已经有排他锁在表上了,所以新的 Session 无法再对表进行 DDL/MDL(除select语句外)操作。


2. 解决办法

v$locked_object 视图记录锁表相关的内容。这个视图的结果需要有锁表的情况才会出现,主要可以通过它 session_id 来关联其他表。

2.1 检查哪个用户占用资源


session_id:就是 session 会话 id。
owner:操作表的用户名
object_name :表名
根据出问题的表来找到所需要的 session_id。

select l.session_id,o.owner,o.object_name 
from v$locked_object l,dba_objects o 
where l.object_id=o.object_id;

2.2 利用查出来占用资源的 session_id,查出更加详细的信息


下面的 sid 就是上面查询出来的 session_id。这个查询将返回会话 ID、序列号、数据库用户名、操作系统用户名。

SELECT sid, serial#, username, oSUSEr,
terminal,program ,action, prev_exec_start
FROM v$session where sid = 143;

2.3 根据上面查出来的 sidserial# 杀掉占用资源的session会话

alter system kill session '143,29637';

参考链接:Oracle报错:ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired_oracle报错00054_冷漠;的博客-CSDN博客

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chen_PK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值