我殺了一個正在更新表中的腳本。現在,當我重新運行我收到劇本,ORA-00054:資源繁忙,並獲得與NOWAIT指定
ORA-00054:資源忙與NOWAIT獲得 指定
我相信表被鎖定?我如何解鎖桌子?提前致謝。
我殺了一個正在更新表中的腳本。現在,當我重新運行我收到劇本,ORA-00054:資源繁忙,並獲得與NOWAIT指定
ORA-00054:資源忙與NOWAIT獲得 指定
我相信表被鎖定?我如何解鎖桌子?提前致謝。
您必須等待。遇害的會議正處於交易中,並更新了很多記錄。這些記錄必須被回滾,並且一些後臺進程正在處理這個問題。在此期間,您無法修改所觸及的記錄。
當您終止會話時,會話在「KILLED」狀態下掛起一段時間,而Oracle在其後清理。
如果你絕對必須的話,你也可以殺死操作系統進程(查找v$process.spid
),這會釋放所有鎖。
有關詳細信息,請參閱this。
第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;
在本頁面的所有回覆中,這對我的幫助最大。當我遇到原始問題提到的錯誤時,我運行此查詢。該查詢告訴我當前鎖定了哪些表。驚訝它沒有更多upvotes .... – 2015-04-21 12:48:54
根據您的情況,被鎖定的表可能只是一個正常運行&的一部分,你不想殺了阻塞事務。 你想要做的是讓你的語句等待其他資源。 Oracle 11g has DDL timeouts which can be set來處理這個問題。
如果你正在處理10g,那麼你必須獲得更多的創造力,並編寫一些PL/SQL來處理重試。看看Getting around ORA-00054 in Oracle 10g當發生resource_busy異常時,這會重新運行您的語句。
當@ chyee的第1步沒有返回任何行時,這對我有效。 – stephen 2015-03-12 15:19:29