轉載oracle資料庫鎖

li__hl8888發表於2016-05-16

ORACLE裡鎖有以下幾種模式:
0:none
 1:null 空
2:Row-S 行共享(RS):共享表鎖,sub share 
 3:Row-X 行獨佔(RX):用於行的修改,sub exclusive 
 4:Share 共享鎖(S):阻止其他DML操作,share
 5:S/Row-X 共享行獨佔(SRX):阻止其他事務操作,share/sub exclusive 
 6:exclusive 獨佔(X):獨立訪問使用,exclusive

1.oracle提供的所型別可以根據v$lock_type 中的type來查詢,我們平時接觸的最多的是兩種

 程式碼如下 複製程式碼

select * from v$lock_type where type in ('TM','TX')
 
檢視描述,可以大概的得知兩種鎖的資訊.TM是同步訪問物件用的,TX是和事務有關的.

3.要知道的有2個概念:

(1).鎖定資料的鎖,也就是行級鎖,只有一種:排它鎖 exclusive (ROW)
 (2).鎖定表上的鎖,即鎖定後設資料的鎖 metadata(table),一共有5種:

2 RS: row share
 3 RX: row exclusive
 4 S: sha(
 5 SRX: share row exclusive
 6 X: exclusive4.根據oracle聯機文件的concepts的

我們可以從這個表找出至少2個東西,.第一是每種資料庫操作都對應的是什麼樣的鎖(參考中間那一列),第二是每種鎖之間,如果遇到之後是否會產生衝突,所謂衝突就是是否會使當前的資料庫操作夯住.其中Y*,表示如果兩個操作鎖定的是同一行,那麼就會有衝突,後操作的會等待前一個操作完成之後再完成,否則會一直夯在那兒;如果不為同一行,那麼則不會衝突,後操作的不會等待.舉一個例子來說明:假設現在A操作為:對id=1的記錄進行update,而B操作為:對id=2的記錄進行刪除,根據表格說明,在A上操作時在TM級別的鎖會是RX,TX級別只有一個是X,在B上會有一個TM級別的鎖會是RX,TX級別只有一個X,而根據表格說明,當RX遇到RX的時候,如果2個操作非同一條記錄,那麼則不會衝突,故AB兩個操作均會按照各自的先加一個TM鎖,再加一個TX鎖,再順利執行各自的操作,不會夯住。如果將B操作的記錄id換位1,那麼兩個操作記錄為同一條記錄,在TM鎖上會表現出衝突,所以B操作就會等待A操作完成提交後(也就是A的TX鎖釋放了後),B再相應的生成一個TX鎖和一個TM鎖再完成操作,否則的話會一直夯住,等待A釋放TX鎖.
from:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8568259/viewspace-2100902/,如需轉載,請註明出處,否則將追究法律責任。

相關文章