天天看點

oracle被鎖的曆史,Oracle被鎖原因及解鎖方法

祝大家新年快樂,有任何問題可與我聯系:

oracle被鎖的曆史,Oracle被鎖原因及解鎖方法

一、被鎖的現象及原因

首先說一下被鎖的現象,當你持行一條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:一般我們通過前面兩步就可以消除鎖了,沒有必要持行第三步。

~謝謝打賞~手機請長按圖檔~

oracle被鎖的曆史,Oracle被鎖原因及解鎖方法

贊 賞