ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Oracle 报 “ORA-00054 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效” 问题的解决方法

2022-07-19 17:00:59  阅读:209  来源: 互联网

标签:NOWAIT object session select sid Oracle serial id 00054


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

     

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

select ..for update
1
执行这条命令之后,oracle 将会对返回集中的数据建立行级封锁,以防止其他用户修改这些记录。

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

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

解决方案:

找出哪个会话锁住了哪张表:

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 为会话 ID。object_name 表名。
找出引发锁的会话:

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;
其中的 serial# 是我们需要用到的会话序列号

 杀掉会话
命令格式为:alter system kill session 'sid,serial#'

 

在执行过程中出现 :ora-00031:标记要终止的会话 

解决方法
从操作系统层杀掉该进程

操作步骤:
(1) 根据sid 查出 spid

select s.sid, s.serial#, s.LOGON_TIME, s.machine, p.spid, p.terminal
from v$session s, v$process p
where s.paddr = p.addr
and s.sid = 42 //42为sid的值

查出spid为104011

1. 在linux上,  kill -9 12345

2. 在windows上,C:Documents and Settingsgg>orakill orcl 12345

 

批量解锁语句:

DECLARE CURSOR mycur IS 
    SELECT B.SID,B.SERIAL# FROM V$LOCKED_OBJECT A,V$SESSION B 
        WHERE A.SESSION_ID = B.SID GROUP BY B.SID,B.SERIAL#;
 
 
BEGION
    FOR cur IN mycur
      loop
      EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION '''||cur.sid||','||cur.serial#||''' ');
      end loop;
END;

 

参考链接:

http://t.zoukankan.com/fashflying-p-6263981.html

https://blog.csdn.net/u014704612/article/details/122472826

https://blog.csdn.net/Ruishine/article/details/116593350

标签:NOWAIT,object,session,select,sid,Oracle,serial,id,00054
来源: https://www.cnblogs.com/amy720/p/16494739.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有