我怎样才能找到导致ORA-00054的原因?

时间:2012-04-30 04:52:57

标签: oracle oracle11g ora-00054

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

我们已经浏览了我们的应用程序的日志,似乎一切都井然有序;没有线程试图更新同一行。

如何配置Oracle数据库以生成一个日志,让我知道发生此错误时持有锁的用户ID?

3 个答案:

答案 0 :(得分:7)

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

您还可以查找sql​​,用户名,机器,端口信息并进入保存连接的实际进程

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;

答案 1 :(得分:3)

删除NOWAIT,并监视DBA_BLOCKERS / DBA_WAITERS。

答案 2 :(得分:1)

请使用

select * from v$locked_object 

获取锁定信息

由于它是开发环境,您可以尝试以下链接

中提供的方法

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

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

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