記一次鎖表的處理(定位鎖的原因及處理)

2021-07-22 10:31:11 字數 1234 閱讀 2402

在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的鎖和事務這塊,每次一想到這塊就總有一些疑惑,特此記錄一下使用場景以便後期回顧。業務場景 學生答題每道題有多個空,每個空的正確與否以逗號分隔的方式儲存在乙個欄位中,批改人員多次呼叫批閱介面分別批改每...