首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到导致ORA-00054的原因?

如何找到导致ORA-00054的原因?
EN

Stack Overflow用户
提问于 2012-04-30 12:52:57
回答 3查看 14.3K关注 0票数 5

在过去的一段时间里,我注意到在对数据库进行大量并发更新期间,我们在尝试发出SELECT ... FOR UPDATE NOWAIT时出现了ORA-00054错误。这是我们的开发系统,我们真的没有任何其他用户,或者至少我们是这么认为的。

我们已经检查了应用程序的日志,看起来一切都很正常;没有线程试图更新同一行。

如何将Oracle db配置为生成一个日志,以便在发生此错误时让我知道持有锁的用户id?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-10 11:24:28

从这里:ORA-00054: resource busy and acquire with NOWAIT specified

您还可以查找sql、用户名、计算机、端口信息,并进入持有连接的实际进程

代码语言:javascript
复制
SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT 
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S, 
V$PROCESS P, V$SQL SQ 
WHERE L.OBJECT_ID = O.OBJECT_ID 
AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR 
AND S.SQL_ADDRESS = SQ.ADDRESS;
票数 9
EN

Stack Overflow用户

发布于 2012-04-30 16:12:55

删除NOWAIT,并监视DBA_BLOCKERS/DBA_WAITERS。

票数 3
EN

Stack Overflow用户

发布于 2012-04-30 13:45:46

请善意使用

代码语言:javascript
复制
select * from v$locked_object 

用于获取锁信息

由于它是开发环境,您可以尝试以下链接中提供的方法

https://forums.oracle.com/forums/thread.jspa?threadID=324530

在下面的链接中使用v$lock提供了一个更全面的方法

http://www.orafaq.com/node/854

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10378651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档