Oracle 鎖(概述 分類)

2021-10-01 23:16:58 字數 2038 閱讀 5064

加鎖是實現資料庫併發控制的乙個非常重要的技術。當事務在對某個資料物件進行操作前,先向系統發出請求,對其加鎖。加鎖後事務就對該資料物件有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此資料物件進行更新操作。

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等 的爭用以外,資料也是一種供許多使用者共享的資源。如何保證資料併發訪問的一致性 有效性是所有資料庫必須解決的乙個問題,鎖衝突也是影響資料庫併發訪問效能的乙個重要因素。從這個角度來說,鎖對資料...