簡體   English   中英

ORA-00054:資源繁忙並且使用NOWAIT指定獲取

[英]ORA-00054: resource busy and acquire with NOWAIT specified

我殺了一個正在更新表格的腳本。 現在當我重新運行我得到的腳本時,

ORA-00054:資源繁忙並且使用NOWAIT指定獲取

我認為桌子被鎖了? 如何解鎖桌子? 提前致謝。

步驟1:

select object_name, s.sid, s.serial#, p.spid 
from v$locked_object l, dba_objects o, v$session s, v$process p
where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;

第2步:

alter system kill session 'sid,serial#'; --`sid` and `serial#` get from step 1

更多信息: http//www.oracle-base.com/articles/misc/killing-oracle-sessions.php

感謝用戶'user712934'

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

你必須等一下。 被殺的會話是在事務中間並更新了大量記錄。 這些記錄必須回滾,一些后台進程正在處理。 在此期間,您無法修改被觸摸的記錄。

當您終止會話時,會話會以“KILLED”狀態掛起一段時間,而Oracle會在其后清除。

如果你絕對必須,你也可以殺死操作系統進程(查找v$process.spid ),這將釋放它所持有的任何鎖。

這個更詳細的信息。

根據您的具體情況,被鎖定的表可能只是正常操作的一部分,您不想只是殺死阻塞事務。 您要做的是讓您的語句等待其他資源。 Oracle 11g具有DDL超時,可以設置為處理此問題。

如果您正在處理10g,那么您必須獲得更多創意,並編寫一些PL / SQL來處理重試。 查看在Oracle 10g中搜索ORA-00054這會在發生resource_busy異常時重新運行您的語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM