1. 診斷系統中的鎖
select
/*+ no_merge(a) no_merge(b) no_merge(c) */
'wait
'"status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "seconds", b.id1, c.sql_text "sql"
from
v$session a, v$lock b, v$sqltext c
where
a.username
isnot
null
anda.lockwait
=b.kaddr
andc.hash_value
=a.sql_hash_value
union
select
/*+ no_merge(a) no_merge(b) no_merge(c) */
'lock
'"status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "seconds", b.id1, c.sql_text "sql"
from
v$session a, v$lock b, v$sqltext c
where
b.id1
inselect
/*+ no_merge(d) no_merge(e) */
distinct
e.id1
from
v$session d, v$lock e
where
d.lockwait
=e.kaddr)
anda.username
isnot
null
anda.sid
=b.sid
andb.request=0
andc.hash_value
=a.sql_hash_value;
status有兩種狀態,lock表明該程序鎖住了某個資源,wait表示該程序正在等待某個資源。
username, machine分別為oracle使用者名稱及機器名
sid,serial#可用於隨後的解鎖操作
seconds表示該程序最後一次進行操作至當前的時間(秒)
id1, 鎖標識。某個lock狀態的id1與某個wait狀態的id1相同,可說明鎖的正是另乙個程序等待的。
sql: 鎖住資源的sql語句
2. 解除鎖
診斷出鎖的狀態後,若發現該阻塞其它使用者程序的程序是正常操作中,則可通知該使用者對其進行提交,從而達到釋放鎖資源的目的;若為非正常操作,即,其狀態為"inactive",且其seconds已為較多長時間,則可執行以下語句將該程序進行清除,系統會自動對其進行回滾,從而釋放鎖住的資源。
alter
system
kill
session
'sid, serial#';
oracle資料庫鎖表的處理
以下幾個為相關表 select from v lock select from v sqlarea select from v session select from v process select from v locked object select from all objects sele...
Oracle資料庫中的鎖機制研究
本文通過對oracle資料庫鎖機制的研究,首先介紹了oracle資料庫鎖的種類,並描述了實際應用中遇到的與鎖相關的異常情況,特別對經常遇到 的由於等待鎖而使事務被掛起的問題進行了定位及解決,並對死鎖這一比較嚴重的現象,提出了相應的解決方法和具體的分析過程。資料庫是乙個多使用者使用的共享資源。當多個使...
Oracle資料庫中的「鎖」學習小結
這周禮拜五面完愛默生三面,到現在還沒收到任何通知,算了,要是明天還沒通知,就簽到手的offer 吧。面試的時候,面試官問了乙個關於行鎖和表鎖區別的問題,當時答的不好,回來後查了些資料,總結了一篇鎖小結。oracle鎖具體分為以下幾類 1.按使用者與系統劃分,可以分為自動鎖與顯示鎖 自動鎖 當進行一項...