999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

數據庫的并發控制和封鎖協議分析

2008-01-01 00:00:00
商場現代化 2008年2期

[摘要] 數據庫可以提供給多個用戶共享數據信息資源,所以就必須對并發的事務進行控制,這種并發控制必須引入一些封鎖協議以保證數據的完整性。本文針對數據庫并發操作中可能產生的數據不一致性問題進行分析,并給出解決的方法。

[關鍵詞] 數據庫 并發控制 一致性 封鎖 封鎖協議

一、引言

目前主流的關系數據庫通常都允許多個用戶同時使用和共享,所以也都具有并發控制的機制,也就是控制數據庫,防止多用戶并發使用數據庫時造成數據錯誤和程序運行錯誤,以保證數據的完整性。

二、事務與并發控制的概念

當多用戶并發存取數據時,就會產生多個事務同時存取同一數據的情況,從而引起嚴重的數據錯誤和程序運行錯誤。

那么我們來看,什么是事務及并發控制呢?

事務就是用戶定義的一個數據庫操作序列,這些操作要么全做要么全不做,是一個不可分割的很小的工作單位。例如,在SQL語言中,定義事務的語句有三條:

BEGIN TRANSACTION;

COMMIT;

ROLLBACK;

其中的BEGIN TRANSACTION是事務開始的標記,而以COMMIT或者ROLLBACK結束,COMMIT用于提交事務的所有操作,ROLLBACK則在事務運行過程中一旦發生了某種故障而使事務無法繼續執行的時候,系統就將事務中對數據庫的所有剛剛完成的操作全部撤消,滾動回到事務開始時的狀態。

為了充分利用系統資源,使數據庫的共享資源得以有效利用,必須可以使多個事務并行的執行,而數據庫對并行執行的事務進行的控制就是并發控制。

三、事務進行并發操作可能引起的數據不一致問題

由于種種原因,都可能引起數據庫的數據遭到破壞,比如多個事務在并行運行的時候,不同的事務的操作產生了交叉執行,或者,事務在運行過程中被強行停止或者中斷。

因此,事務在進行并發操作的時候很可能引起數據的不一致,下面我們看一個具體的例子。例如飛機票的聯網銷售系統,如果有以下的操作序列:

1.甲售票處(設置為T1事務)讀出某班次的機票剩余數A,設A=20

2.乙售票處(設置為T2事務)讀出同班次的機票剩余數A,也是20

3.甲售票處(T1事務)賣出一張機票,修改剩余數減一(A←A-1),把A=19寫回數據庫中

4.乙售票處(T2事務)也賣出一張機票,修改剩余數減一(A←A-1),把A=19寫回數據庫中

從這些操作中,我們看到,乙售票處的修改數據覆蓋了甲售票處修改的數據,實際發生了兩張機票的銷售,而數據庫中卻錯誤的存入19,少了一張。參看圖1的情況。

這種情況是并發操作引起數據不一致的第一種情況,叫做丟失修改(Lost Update),第二種是不可重復讀(Non-Repeatable Read),第三種是讀“臟”數據(Dirty Read)。

下邊看第二種情況,不可重復讀是指事務T1讀數據以后,T2執行更新操作,就使T1無法再現原先讀取的數據,得到與上一次不同的結果,例如圖2。

讀“臟”數據是指T1修改某數據并將其寫回數據庫,T2讀取同一數據后,T1由于某種原因被撤消,T1執行回滾,恢復到原始的數據,T2就讀取到了過程中的一個作廢的數據,這個數據就是一種垃圾數據,稱之為“臟”數據,也是不正確的。參看圖3。

從以上例子我們看到,數據不一致性的主要原因就是并發操作沒有對事務進行一定的隔離,所以,正確的調度應該使一個用戶的事務不受到其他事務的干擾,從而避免數據的不一致性。

四、在并發控制中采用封鎖協議解決數據的不一致性

并發控制的主要方法是封鎖(Locking)。就是要用正確的方式調度并發操作,使一個用戶的事務在執行過程中不受其他事務的干擾,從而避免造成數據的不一致性。

封鎖是使事務對它要操作的數據有一定的控制能力。封鎖通常具有3個環節:第一個環節是申請加鎖,即事務在操作前要對它將使用的數據提出加鎖申請;第二個環節是獲得鎖,即當條件成熟時,系統允許事務對數據進行加鎖,從而事務獲得數據的控制權;第三個環節是釋放鎖,即完成操作后事務放棄數據的控制權。

基本的封鎖類型有以下兩種:

1.排它鎖(Exclusive Locks,簡稱X鎖)

排它鎖也稱為獨占鎖或寫鎖。一旦事務T對數據對象A加上排它鎖(X鎖),則只允許T讀取和修改A,其他任何事務既不能讀取和修改A,也不能再對A加任何類型的鎖,直到T釋放A上的鎖為止。

2.共享鎖(Share Locks,簡稱S鎖)

共享鎖又稱讀鎖。如果事務T對數據對象A加上共享鎖(S鎖),其他事務只能再對A加S鎖,不能加X鎖,直到事務T釋放A上的S鎖為止。

在對數據進行加鎖時,另外需要約定并執行一些規則和協議,其中包括何時申請鎖,保持鎖的時間以及何時釋放等,這些規則就稱為封鎖協議(Locking Protocol),其總共分為以下三級:

(1)一級封鎖協議。一級封鎖協議是事務T在修改數據之前必須先對其加X鎖,直到事務結束才釋放。

(2)二級封鎖協議。二級封鎖協議是事務T對要修改數據必須先加X鎖,直到事務結束才釋放X鎖;對要讀取的數據必須先加S鎖,讀完后即可釋放S鎖。

(3)三級封鎖協議。三級封鎖協議是事務T在讀取數據之前必須先對其加S鎖,在要修改數據之前必須先對其加X鎖,直到事務結束后才釋放所有鎖。

執行了封鎖協議之后,就可以克服數據庫操作中的數據不一致所引起的問題。

參看圖4。

從圖4的情況我們看到事務T1在執行過程中獨自占用并加X鎖,直到處理完之后再釋放鎖,T2雖然也需要使用,但是在封鎖協議的約束之下,T2所要求的X鎖就被拒絕,因此必須處于等待狀態,直到T1釋放之后,T2才獲得使用的權利,這樣就不會發生使用沖突,避免了數據的丟失。這里我們看到,此處實際上是執行了一級封鎖協議。

下面我們看圖5。

通過圖5,能夠清楚的看到,由于施行了封鎖協議,使事務T1使用了共享鎖占用A,B兩塊數據,這樣T2需要加上的X鎖就無法實現,(如果是S鎖,雖然可以加上,但也不能夠隨便修改數據,只是讀取一下數據。)當T1釋放鎖之后,T2就可以得到并使用鎖了,這樣讀取的數據B仍然還是100,不影響A+B的結果,這就是可重復讀取。因此我們看到,其實這里用的就是三級封鎖協議。

參看圖6,事務T1在對數據C修改之前,先加上了X鎖,修改后寫回數據庫,這時T2請求在C上添加S鎖,因為T1加了X鎖,T2只好等待,當T1因為某種原因撤銷了修改的數據后,C就恢復了原來的數據100,等T1釋放X鎖后T2獲得C上的S鎖,讀到的還是C=100,因此避免了讀出“臟”數據。這里使用的其實就是二級封鎖協議。

通過以上內容,數據庫由于采用一定的封鎖協議避免了數據的不一致性問題,這使得數據庫的并發控制有效而且有益,從而使得多項事務可以并行的操作數據庫的共享資源了。這就是數據庫合理的進行調度,避免了沖突,避免了數據的不一致。

參考文獻:

[1]苗雪蘭:數據庫系統原理及應用教程[M].北京:機械工業出版社,2004

[2](美)Mary Pyefinch著:希望圖書創作室譯[M].SQL數據庫開發從入門到精通[M].北京希望電子出版社,2000

[3]丁寶康董健全:數據庫使用教程[M].北京:清華大學出版社,2001

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。

主站蜘蛛池模板: 久久国产精品无码hdav| 色婷婷丁香| 女人18毛片一级毛片在线 | 美女国内精品自产拍在线播放| 夜夜拍夜夜爽| 99精品国产电影| 国产真实乱子伦视频播放| 国产午夜福利片在线观看| 在线va视频| 国产在线观看精品| 99精品热视频这里只有精品7| 看看一级毛片| 成年女人18毛片毛片免费| 亚洲精品久综合蜜| 99久久成人国产精品免费| 首页亚洲国产丝袜长腿综合| 久久午夜夜伦鲁鲁片无码免费| 日韩午夜伦| 国产第一页亚洲| 亚洲第一页在线观看| 亚洲欧美激情小说另类| 成人在线天堂| 无码又爽又刺激的高潮视频| 亚洲区视频在线观看| 中文字幕在线欧美| 国产又色又刺激高潮免费看| 亚洲熟女中文字幕男人总站| 国产欧美成人不卡视频| 欧美国产另类| 国产免费福利网站| 四虎综合网| 视频二区国产精品职场同事| 97综合久久| 久久久久久国产精品mv| 免费国产好深啊好涨好硬视频| 四虎影视库国产精品一区| 国产精品自在拍首页视频8| 国产无人区一区二区三区| 人妻丰满熟妇AV无码区| 久久综合色天堂av| 国产精品乱偷免费视频| 在线免费无码视频| 欧美成人午夜视频| 国产啪在线91| 久久香蕉国产线| 久久情精品国产品免费| 极品国产一区二区三区| 久久综合九九亚洲一区| 国产传媒一区二区三区四区五区| 国产原创自拍不卡第一页| 国产经典三级在线| 亚洲成aⅴ人片在线影院八| 丁香婷婷激情综合激情| 国产伦片中文免费观看| 污网站免费在线观看| 手机精品视频在线观看免费| 国产精品手机视频| 老司国产精品视频91| 91久久夜色精品国产网站| 欧美一级高清视频在线播放| 亚亚洲乱码一二三四区| 亚洲av无码成人专区| 91蝌蚪视频在线观看| 国产美女在线观看| 在线国产三级| 欧美激情伊人| 久久久成年黄色视频| 欧美成人aⅴ| 久久性视频| 国产91蝌蚪窝| 国内黄色精品| 欧美精品成人一区二区视频一| 久久中文无码精品| 波多野结衣在线一区二区| 国产精品综合久久久| 青青草国产在线视频| 国产精品网曝门免费视频| 国产H片无码不卡在线视频| 国产激爽大片高清在线观看| 美美女高清毛片视频免费观看| 黑色丝袜高跟国产在线91| 一本大道香蕉久中文在线播放 |