[转帖]ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired

ora,resource,busy,and,acquire,with,nowait,specified,or,timeout,expired · 浏览次数 : 0

小编点评

## Fault description: ```sqlplus ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired ``` **Explanation:** This error indicates that the database was unable to acquire a resource due to a deadlock situation. Deadlocks occur when two or more transactions are waiting for each other to release a resource, leading to a chain reaction of cascading failures. ## Troubleshooting steps: 1. **Identify the locked resource:** * Run the query `SELECT l.session_id, o.owner, o.object_name FROM v$locked_object l, dba_objects o WHERE l.object_id = o.object_id;` to find out which session is holding the lock on the `T_USER_LABEL` table. * Run the query `SELECT sid, serial#, username, osuser, terminal,program ,action, prev_exec_start FROM v$session WHERE sid = 2205;` to get detailed information about the session holding the lock. * Repeat the process for the session with ID `76`. 2. **Delete the lock:** * Based on the session information, find the corresponding SID and SERIAL# and then use `ALTER SYSTEM KILL SESSION 'sid,serial#'` to kill the sessions. * Run `ALTER SYSTEM KILL SESSION '2205,3045';` and `ALTER SYSTEM KILL SESSION '76,1677';` to release the locks on the specific sessions. 3. **Truncate the table:** * Once the locks are released, you can truncate the `T_USER_LABEL` table. * This will allow the database to reclaim the resources occupied by the deadlocked sessions. 4. **Repeat the process:** * After the table is truncated, repeat the entire process to ensure the issue has been resolved and the `T_USER_LABEL` table is available for proper truncation. ## Conclusion: By following these steps, you can diagnose and resolve the issue caused by resource deadlock in your database.

正文

一、故障描述:

早晨接到个开发人员的问题,truncat  table T_USER_LABEL表时,报错: ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired,如下图。按照字面意思,是资源忙,被占用了。处理思路:查到谁在占用资源,并且杀掉占用该资源的会话就可以了。有可能产生的原因有:1.创建索引时会产生的锁  2.dml 语句会产生的锁  3.索引创建时加上关键字 online时产生的锁。解决处理方法:1.等待其他会话释放资源 2.找出占用资源的会话,并删除 3.重启数据库,当然只有第2种比较适用。
 
pl-sql中报错:

sqlplus中报错:

REPORTUSER@test > truncate table t_user_label;

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

二、故障处理
1.检查哪个用户占用资源 T_USER_LABEL

SYS@test > 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
---------- ------------------------------ --------------------------------------------------
      2205 REPORTUSER T_USER_LABEL
        76 REPORTUSER T_USER_LABEL
      1849 REPORTUSER T_TEMPORARY_CHANNEL_CUSTOMER
2.利用查出来占用资源 T_USER_LABEL的session_id,查出更加详细的信息
点击(此处)折叠或打开

SYS@test > SELECT sid, serial#, username, oSUSEr, terminal,program ,action, prev_exec_start FROM v$session where sid = 2205;


      SID SERIAL# USERNAME OSUSE TERMINAL PROGRAM ACTION PREV_EXEC_START
---------- ---------- ------------ ----- ---------- --------------- ------------------------------ -------------------
      2205 3045 REPORTUSER huhw PTYY-003 plsqldev.exe - procedure P_USER_LABE 2016-06-29 11:31:02

SYS@test > SELECT sid, serial#, username, osuser, terminal,program ,action, prev_exec_start FROM v$session where sid = 76;

      SID SERIAL# USERNAME OSUSE TERMINAL PROGRAM ACTION PREV_EXEC_START
---------- ---------- ------------ ----- ---------- --------------- ------------------------------ -------------------
        76 1677 REPORTUSER huhw PTYY-003 plsqldev.exe SQL - ? 2016-06-29 14:00:54

3.根据上面查出来的 SID,SERIAL# 杀掉占用资源 T_USER_LABEL的两个会话

SYS@test > alter system kill session '2205,3045';


System altered.

SYS@test > alter system kill session '76,1677';

System altered.

4.再次执行truncate table 成功

REPORTUSER@test > truncate table T_USER_LABEL;

Table truncated.
 
三、总结
    问题回顾,通过上述查询信息中得出,有两个SESSION占用了T_USER_LABEL表资源,而且可以看出是在执行某个procedure,名字为P_USER_LABE,查看了这个procedure后,里面语句是通过查询其他表信息,最终要插入T_USER_LABEL表数据,在询问当事人后,昨天中午执行该procedure时,是强制中断了。导致最终没有提交事务,也未回滚,才会一直占用该资源。在这个案例中,学习掌握利用v$locked_object与dba_objects来找出哪个会话占用某对象,并且利用v$session来找出该会话的具体信息,包括SID,SERIAL#,如何连接,正在执行什么等等。最终使用alter system kill session ‘sid,serial#’; 来kill 掉占用资源的会话。

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树首页概览32220 人正在系统学习中

与[转帖]ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired相似的内容:

[转帖]ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired

一、故障描述: 早晨接到个开发人员的问题,truncat table T_USER_LABEL表时,报错: ORA-00054:resource busy and acquire with NOWAIT specified or timeout expired,如下图。按照字面意思,是资源忙,被占用

[转帖]一次ORA-3136的处理

https://oracleblog.org/working-case/deal-with-ora3136/ 最近收到一个告警,用户说数据库无法连接,但是从监控上看,oracle的后台进程已经侦听进程还是在的,没有任何的alert。 登录数据库,已经恢复正常,但是在数据库的alertlog中发现大量

[转帖]cx_Oracle.DatabaseError: ORA-28040

背景: python第三方库cx-Oracle连接Oracle数据库报错 ORA-28040 cx_Oracle.DatabaseError: ORA-28040: No matching authentication protocol 解决方法: 1- 安装驱动 【找不到上传附件的地方后补】 2-

[转帖]【杂学第十二篇】oracledb_exporter监听oracle19c数据库出现libclntsh、ORA-12162、ORA-00942异常解决

http://www.taodudu.cc/news/show-4845374.html docker run -d --name oracledb_exporter --restart=always -p 9161:9161 -e DATA_SOURCE_NAME='sys/Test2013112

[转帖]限制指定机器IP访问oracle数据库

https://blog.51cto.com/u_11310506/1971313 通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约束数据库访问控制提供了有效的手段。下面是实现这个目的的具

[转帖]从生命周期的角度来谈谈Oracle 软件的版本(12c/18c/19c/20c/21c)问题

2022-04-21 20:3720050原创Oracle 19c 本文链接:https://www.cndba.cn/dave/article/107944 在2017年之前,Oracle 的版本路线是非常清晰的,我接触过的几个版本有:9i、10g、11g、12c。 但是到了2018年之后,Ora

[转帖]并发delete导致oracle死锁问题的解决

项目中有一个批处理任务,用来删除数据库中过期的数据(包括说话人的语音、模型、记录等),当程序被分布式部署后,就会有多个批处理线程同时进行删除,不过不同的线程,会根据元信息表得到不同的说话人信息,从而删除不同的数据,并不存在竞争的问题,但是,当项目使用oracle数据库在线上运行时,却频繁出现了ORA

[转帖]Oracle 性能优化 之 游标及 SQL

https://www.cnblogs.com/augus007/articles/9273236.html 一、游标 我们要先说一下游标这个概念。 从 Oracle 数据库管理员的角度上说,游标是对存储在库缓存中的可执行对象的统称。SQL 语句是存储在库缓存中的,它是游标。除了它之外,还有 Ora

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻