为什么我得到这个数据库错误时,我更新表?

第1行错误: ORA-00054:资源繁忙,指定NOWAIT或超时获取


当前回答

只需检查持有会话的进程并杀死它。一切恢复正常。

在SQL下面可以找到您的流程

SELECT s.inst_id,
   s.sid,
   s.serial#,
   p.spid,
   s.username,
   s.program FROM   gv$session s
   JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id;

然后杀死它

ALTER SYSTEM KILL SESSION 'sid,serial#'

OR

我在网上找到的一些例子似乎也需要实例id 删除系统会话:

其他回答

选择 c.owner, c.object_name, c.object_type, b.sid, b.serial #, b.status, b.osuser, b.machine 从 v locked_object美元, v $ b会话, dba_objects c 在哪里 B.sid = a.session_id 而且 A.object_id = c.object_id; 删除系统会话的sid

Shashi的链接给出的解决方案是最好的…不需要联系dba或其他人

备份

create table xxxx_backup as select * from xxxx;

删除所有行

delete from xxxx;
commit;

插入备份。

insert into xxxx (select * from xxxx_backup);
commit;

ORA-00054:资源繁忙,指定NOWAIT获取

您还可以查找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;

我设法击中这个错误时,只是简单地创建一个表!在一个还不存在的表上,显然不存在争用问题。CREATE TABLE语句包含一个约束fk_name FOREIGN KEY子句,引用一个填充良好的表。我不得不:

从CREATE TABLE语句中删除外键子句 在FK列上创建一个INDEX 创建FK

我也面临着类似的问题。程序员不需要做任何事情来解决这个错误。我通知了我的oracle DBA团队。他们扼杀了会议,并像一个魅力。