![](/img/trans.png)
[英]I Cant delete constraints of table so i can drop it. ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
[英]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.