Oracle 資料庫中的鎖 處理

2021-05-28 06:37:48 字數 1696 閱讀 4982

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.按使用者與系統劃分,可以分為自動鎖與顯示鎖 自動鎖 當進行一項...