祝大家新年快樂,有任何問題可與我聯系:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yNjFTOkhTMkN2YkF2YxEjY5QDZkZDNxQTNxcTY1YTOw8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一、被鎖的現象及原因
首先說一下被鎖的現象,當你持行一條SQL語句的時候,一直處于等待狀态,就感覺沒有連接配接資料庫一樣,但是持行另外的SQL語句卻能夠正常持行。
為什麼這出現這種情況了?
1、當兩個使用者同時對一個表執行了DML語句而沒有COMMIT時,另一個使用者也需要對表進行DML操作;
2、一個使用者對表執行DML語句過程中程式中斷,此時SQL語句得不到應有的傳回;
二、解決方法
1、首先得修改程式的邏輯才能避免下次出現同樣的問題;
2、對已經出現的鎖進行解鎖:
a、查找出鎖的SID和SERIAL#
SELECT
lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
o.owner,
o.object_name,
o.object_type,
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
ORDER BY
o.object_id, xidusn DESC;
SELECT
lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
o.owner,
o.object_name,
o.object_type,
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
ORDER BY
o.object_id, xidusn DESC;
b、根據上面查出來的SID和SERIAL#,在資料庫中結束相關的SESSION
ALTER system KILL SESSION 'sid,serial#';
alter system kill session 'sid,serial#';
c、根據SPID從系統中結束與該SESSION對應的程序
KILL -9 spid;
kill -9 spid;
TIPS:一般我們通過前面兩步就可以消除鎖了,沒有必要持行第三步。
~謝謝打賞~手機請長按圖檔~
贊 賞