Oracle 報 “ORA-00054 資源正忙, 但指定以 NOWAIT 方式獲取資源, 或者超時失效” 問題的解決方法
阿新 • • 發佈:2019-01-25
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哈哈~