在oracle中,常常會碰到鎖阻塞的問題,這時候 我們就需要 利用oralce的給的相關檢視查出並定位鎖的原因 然後根據業務或者其他的實際情況進行業務上的調整或者**或引數的修改等
-------1、首先查出阻塞的關係。 (哪個會話阻塞了哪個會話)
select a.sid holdsid,b.sid waitsid,a.type ,a.id1,a.id2,a.ctime from v$lock a,v$lock b
where a.id1=b.id1 and a.id2=b.id2 and a.block = 1 and b.block = 0 ;
-------2、查詢出資料庫中鎖表的資訊。 (根據 1 中查出的會話進行對比 看是哪個表被鎖住了。)
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
------3、查詢出造成阻塞的sql (根據 1/2 查出的會話 資訊以及 表資訊 進行對比 看是哪條sql造成的鎖)
select l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action
from v$sqlarea a, v$session s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#;
-------4、根據 1 中阻塞的會話 查出這個鎖的資訊。
select sid,type,id1,id2,lmode,request,block from v$lock where sid in(,) order by sid;
Oracle 一次 鎖表 處理小記
同事說測試庫上的一張表被鎖了。不能執行dml 操作。鎖表的準確說法應該是阻塞。之前的一遍blog裡有說明 鎖 死鎖 阻塞latch 等待 詳解 找多鎖表的session,並kill 掉之後,對該錶的dml 操作正常。這裡在模擬一次這個問題。開2個session session a sql selec...
Oracle 一次 鎖表 處理小記
同事說測試庫上的一張表被鎖了。不能執行dml 操作。鎖表的準確說法應該是阻塞。之前的一遍blog裡有說明 鎖 死鎖 阻塞latch 等待 詳解 找多鎖表的session,並kill 掉之後,對該錶的dml 操作正常。這裡在模擬一次這個問題。開2個session session a sql selec...
記一次悲觀鎖的使用,聊一聊悲觀鎖與樂觀鎖
最近一次寫了乙個介面在併發場景出現了資料覆蓋的問題,記得從一開始學資料庫的時候就沒有深入了解mysql的鎖和事務這塊,每次一想到這塊就總有一些疑惑,特此記錄一下使用場景以便後期回顧。業務場景 學生答題每道題有多個空,每個空的正確與否以逗號分隔的方式儲存在乙個欄位中,批改人員多次呼叫批閱介面分別批改每...