資料庫的封鎖
阿新 • • 發佈:2018-12-21
封鎖就是事務T在對某個資料物件操作之前,先向系統發出請求,對其加鎖。加鎖後事務T就對該資料物件有了一定的控制,在事務T釋放它的鎖之前,其他事務不能更新此資料物件。
基本封鎖型別有兩種:排它鎖(exclusive locks,簡稱X鎖)又稱為寫鎖,和共享鎖(share locks,簡稱S鎖)又稱為讀鎖。
1、一級封鎖協議
一級封鎖協議是指,事務T在修改資料R之前必須先對其加X鎖,直到事務結束才釋放。事務結束包括正常結束(COMMIT)和非正常結束(ROLLBACK)。
一級封鎖協議可防止丟失修改,並保證事務T是可恢復的。
2、二級封鎖協議
二級封鎖協議是指,在一級封鎖協議基礎上增加事務T在讀取資料R之前必須先對其加S鎖,讀完後即可釋放S鎖。
二級封鎖協議除防止丟失修改,還可進一步防止讀“髒”資料。
3、三級封鎖協議
三級封鎖協議是指,在一級封鎖協議的基礎上增加事務T在讀取資料R之前必須先對其加S鎖,直到事務結束才釋放。
三級封鎖協議除了防止丟失修改和讀“髒”資料外,還進一步防止了不可重複讀。
可序列化排程
多個事務的併發執行是正確的,當且僅當其結果與按某一次序列地執行這些事務時的結果相同,稱這種排程策略為可序列化排程。
兩段鎖協議
兩段鎖協議是指所有事務必須分為兩個階段對資料項加鎖和解鎖。
- 在對任何資料進行讀、寫操作之前,首先要申請並獲得對該資料的封鎖;
- 在釋放一個封鎖之後,事務不再申請和獲得任何其他封鎖。
所謂的“兩段”鎖的含義是,事務分為兩個階段,第一階段是獲得封鎖,也稱為擴充套件階段,在這個階段,事務可以申請獲得任何資料項上的任何型別的鎖,但是不能釋放任何鎖;第二階段是釋放封鎖,也稱為收縮階段,在這個階段,事務可以釋放任何資料項上的任何型別的鎖,但是不能在申請任何鎖。
事務遵守兩段鎖協議是可序列化排程的充分條件,而不是必要條件。