加鎖是實現資料庫併發控制的乙個非常重要的技術。當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖。加鎖後事務就對該資料物件有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此資料物件進行更新操作。
oracle通過使用鎖(lock)機制維護資料的完整性、併發性和一致性。
oracle在兩個不同級別上提供讀取一致性:語句級讀取一致性和事務級讀取一致性。
在資料庫中有兩種基本的鎖型別:排他鎖(exclusive locks,即x鎖)和共享鎖(share locks,即s鎖)。
排他鎖,也稱之為寫鎖。這種模式的鎖防止資源的共享,用做資料的修改。假如有事務t給資料a加上該鎖,那麼其他的事務將不能對a加任何鎖,所以此時只允許t對該資料進行讀取和修改,直到事務完成將該型別的鎖釋放為止。
共享鎖,也稱之為讀鎖。該模式鎖下的資料只能被讀取,不能被修改。如果有事務t給資料a加上共享鎖後,那麼其他事務不能對其加排他鎖,只能加共享鎖。加了該鎖的資料可以被併發地讀取。
dml鎖的目的在於保證併發情況下的資料完整性,在oracle資料庫中,dml鎖主要包括tm鎖和tx鎖,其中tm鎖稱為表級鎖,tx鎖稱為事物鎖或行級鎖。
當oracle執行dml語句時,系統自動在所要操作的表上申請tm型別的鎖。當tm鎖獲得後,系統再自動申請tx型別的鎖,並將實際鎖定的資料行的鎖標誌位進行置位。這樣在事務加鎖前檢查tx鎖相容性時就不用再逐行檢查鎖標誌了,只需要檢查tm鎖模式的相容性即可,大大提高了系統的效率。tm鎖包括了ss、sx、s、x等多種模式,在資料庫中用0~6來表示。
不同的sql操作產生不同型別的tm鎖,如下表
鎖模式鎖描述解釋
sql操作
0none
1null
空select
2rs(row-s)
行級共享鎖,其他物件只能查詢這些資料行
select for update、lock for update、lock row share
3sx(row-x)
行級排他鎖,在提交前不允許做dml操作
insert、update、delete、lock row share
4s(share)
共享鎖create index、lock share
5srx(s/row-x)
共享行級排他鎖
lock share row exclusive
6x(exclusive)
排他鎖index、table、drop table、drop index、truncate table、locks exclusive
在資料行上只有x鎖(排他鎖)。在oracle資料庫中,當乙個事務首次發起乙個dml語句時就獲得乙個tx鎖,該鎖保持到事務被提交或回滾。當兩個或多個會話在表的同一條記錄上執行dml語句時,第乙個會話在該條記錄上加鎖,其他的會話處於等待狀態。當第乙個會話提交後,tx鎖被釋放,其他會話才可以加鎖。
當oracle資料庫發生tx鎖等待時,如果不及時處理常常會引起oracle資料庫掛起,或導致死鎖的發生。這些現象都會對實際應用產生極大的危害,如長時間未響應、大量事務失敗等。
在日常工作中,如果發現執行sql語句時,資料庫長時間沒有響應,很可能是產生了tx鎖等待的現象。為了解決這個問題,首先應該找出持鎖的事務,然後再進行相關的處理,如提交事務或強行中斷事務。
oracle在動態狀態表v$lock中儲存與資料庫中的鎖有關的所有資訊。檢視v$lock表的結構如下圖:
名稱型別
addr
raw(8)
kaddr
raw(8)
sidnumber
type
varchar2(2)
id1number
id2number
lmode
number
request
number
ctime
number
block
number
con_id
number
ORACLE鎖的分類。
現代的多使用者多工系統中,必然會出現多個使用者同時訪問共享的某個物件,這個物件可能是表,行,或者記憶體結構,為了解決多個使用者併發性訪問帶來的資料的安全性,完整性及一致性問題,必須要有一種機制,來使對這些共享資源的併發性訪問序列化,oracle中的鎖就可以提供這樣的功能,當事務在對某個物件進行操作前...
多執行緒鎖的分類和概述
一般樂觀鎖和悲觀鎖都是在資料庫層面的。公平和非公平鎖是根據執行緒的搶占機制來分的,如果是公平鎖,則執行緒獲取鎖的順序是按照執行緒請求鎖的時間早晚來決定的,來的晚的進阻塞佇列,可以把公平鎖理解成排隊,而非公平鎖則是大家一起搶,不管你先來後到,誰搶到了算誰的,可以理解成平時咱們擠公交和擠地鐵。reent...
mysql spring鎖 MySQL鎖概述
鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。在資料庫中,除傳統的計算資源 如cpu ram i o等 的爭用以外,資料也是一種供許多使用者共享的資源。如何保證資料併發訪問的一致性 有效性是所有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。從這個角度來說,鎖對資料...