1. 程式人生 > >Oracle 報 “ORA-00054 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效” 問題的解決方法

Oracle 報 “ORA-00054 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效” 問題的解決方法

1 原因

一般在使用者修改記錄之前,悲觀鎖就會發生作用,比如更新語句:

select ..for update

執行這條命令之後,oracle 將會對返回集中的資料建立行級封鎖,以防止其他使用者修改這些記錄。

這時如果對這張表進行 ddl 操作將就會報 ORA-00054 錯誤。

一張表如果加了表級鎖,那麼就不允許對該表進行任何的 ddl 操作,否則也會報 ora-00054 錯誤。

2 解決

1.1 找出是哪個會話鎖住了哪張表

select l.session_id,o.owner,o.object_name
from v$locked_object l,dba_objects o
where l.object
_id=o.object_id;
  • session_id 為會話 ID。
  • object_name 表名。

1.2 找出引發鎖的會話

select s.username,s.sid,s.serial#,s.logon_time
from  v$locked_object l,v$session s
where l.session_id=s.sid 
order by s.logon_time;

其中的 serial# 是我們需要用到的會話序列號。

1.3 殺掉會話

命令格式為:alter system kill session 'sid,serial#'

比如:

alter system kill session
'115,7355';

是不是很簡單呀 O(∩_∩)O哈哈~