第12章事務(wù)與并發(fā)控制_第1頁
第12章事務(wù)與并發(fā)控制_第2頁
第12章事務(wù)與并發(fā)控制_第3頁
第12章事務(wù)與并發(fā)控制_第4頁
第12章事務(wù)與并發(fā)控制_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第12章事務(wù)與并發(fā)控制教學(xué)內(nèi)容詳細(xì)闡述事務(wù)的基本概念和分類重點(diǎn)介紹事務(wù)的處理語句簡單介紹并發(fā)操作帶來的問題詳細(xì)闡述鎖的基本概念、鎖的分類和相關(guān)信息簡單介紹死鎖的產(chǎn)生和解決辦法以及手工加鎖的方法第12章事務(wù)與并發(fā)控制教學(xué)目的與要求理解事務(wù)的基本概念了解事務(wù)的分類掌握事務(wù)的處理語句了解并發(fā)操作帶來的問題理解鎖的基本概念掌握鎖的分類和相關(guān)信息了解死鎖產(chǎn)生的情況和解決辦法以及手工加鎖的方法第12章事務(wù)與并發(fā)控制重點(diǎn)事務(wù)的概念和處理語句;鎖的概念、分類及相關(guān)信息;難點(diǎn)并發(fā)操作帶來的問題死鎖產(chǎn)生的情況和解決辦法以及手工加鎖的方法第12章事務(wù)與并發(fā)控制關(guān)系型數(shù)據(jù)庫有四個(gè)顯著的特征安全性完整性并發(fā)性監(jiān)測性引入并發(fā)控制機(jī)制及事務(wù)和鎖第12章事務(wù)與并發(fā)控制——事務(wù)概述事務(wù)概述事務(wù)由一系列的數(shù)據(jù)操作組成,是數(shù)據(jù)庫應(yīng)用程序的基本邏輯單元,用來保證數(shù)據(jù)的一致性。事務(wù)和存儲過程類似,由一系列T-SQL語句組成,是SQL

Server

2005系統(tǒng)的執(zhí)行單元。在數(shù)據(jù)庫處理數(shù)據(jù)的時(shí)候,有一些操作是不可分割的整體。——例如,當(dāng)用銀行卡消費(fèi)的時(shí)候首先要在賬戶扣除資金,然后再添加資金到公司的戶頭上。第12章事務(wù)與并發(fā)控制在SQLServer2005中,事務(wù)要求處理時(shí)必須滿足四個(gè)原則,即原子性:事務(wù)必須是原子工作單元,對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。一致性:一致性要求事務(wù)執(zhí)行完成后,將數(shù)據(jù)庫從一個(gè)一致狀態(tài)轉(zhuǎn)變到另一個(gè)一致狀態(tài)。隔離性:也稱為獨(dú)立性,是指并行事務(wù)的修改必須與其他并行事務(wù)的修改相互獨(dú)立。持久性:在事務(wù)完成提交之后,就對系統(tǒng)產(chǎn)生持久的影響,即事務(wù)的操作將寫入數(shù)據(jù)庫中,無論發(fā)生何種機(jī)器和系統(tǒng)故障都不應(yīng)該對其有任何影響。第12章事務(wù)與并發(fā)控制——事務(wù)的類型根據(jù)系統(tǒng)的設(shè)置分類1.系統(tǒng)事務(wù)系統(tǒng)提供的事務(wù)是指在執(zhí)行某些語句時(shí),一條語句就是一個(gè)事務(wù)。系統(tǒng)提供的事務(wù)語句如下:ALTER

TABLE

、CREATE、DELETE、DROP、FETCH、GRANT、INSERT、OPEN、REVOKE、SELECT、UPDATE、TRUNCATE

TABLE,這些語句本身就構(gòu)成了一個(gè)事務(wù)。第12章事務(wù)與并發(fā)控制——事務(wù)的類型1.系統(tǒng)事務(wù)[例12-1]使用CREATE

TABLE創(chuàng)建一個(gè)表。

CREATE

TABLE

student(

Id

CHAR(10),Name

CHAR(6),Sex

CHAR(2))這條語句本身就構(gòu)成了一個(gè)事務(wù)。第12章事務(wù)與并發(fā)控制——事務(wù)的類型2.用戶定義事務(wù)在開發(fā)應(yīng)用程序時(shí),可以使用BEGINTRANSACTION語句來定義明確的用戶定義的事務(wù)。事務(wù)的明確結(jié)束可以使用兩個(gè)語句中的一個(gè):COMMIT語句和ROLLBACK語句。另一種用戶定義事務(wù)為分布式事務(wù)。第12章事務(wù)與并發(fā)控制——事務(wù)的類型根據(jù)運(yùn)行模式分類根據(jù)運(yùn)行模式的不同,SQLServer2005將事務(wù)分為4種類型:顯示事務(wù)、隱式事務(wù)、自動提交事務(wù)和批處理級事務(wù)。1.自動提交事務(wù)自動提交事務(wù)是指每條單獨(dú)的T-SQL語句都是一個(gè)事務(wù)。如果沒有通過任何T-SQL語句設(shè)置事務(wù),一條T-SQL語句就是一個(gè)事務(wù),語句執(zhí)行完事務(wù)就結(jié)束。以前我們使用的每一條T-SQL語句都可以叫做一個(gè)自動提交事務(wù)。第12章事務(wù)與并發(fā)控制——事務(wù)的類型顯式事務(wù)顯式事務(wù)指每個(gè)事務(wù)均以BEGIN

TRANSACTION語句、

COMMIT

TRANSACTION或ROLLBACK

TRANSACTION語句明確地定義了什么時(shí)候啟動事務(wù)、什么時(shí)候結(jié)束事務(wù)的事務(wù)。隱式事務(wù)隱式事務(wù)指在前一個(gè)事務(wù)完成時(shí)新事務(wù)隱式啟動,但每個(gè)事務(wù)仍以COMMIT

TRANSACTION或ROLLBACKTRANSACTION語句顯式結(jié)束。批處理級事務(wù)批處理級事務(wù)是SQL

Server

2005的新增功能,該事務(wù)只能應(yīng)用于多個(gè)活動結(jié)果集(MARS),在MARS會話中啟動的

T-SQL顯式或隱式事務(wù)變?yōu)榕幚砑壥聞?wù)。第12章事務(wù)與并發(fā)控制——事務(wù)處理語句事務(wù)處理語句所有的T-SQL語句本身都是內(nèi)在的事務(wù)。另外,

SQL

Server中有專門的事務(wù)處理語句,這些語句將

SQL語句集合分組后形成單個(gè)的邏輯工作單元。事務(wù)處理的T-SQL語句包括:(1)定義一個(gè)事務(wù)的開始:BEGIN

TRANSACTTCN;(2)提交一個(gè)事務(wù):COMMIT

TRANSACTION;(3)回滾事務(wù):ROLLBACK

TRANSACTION;(4)在事務(wù)內(nèi)設(shè)置保存點(diǎn):SAVE

TRANSACTION。第12章事務(wù)與并發(fā)控制——事務(wù)處理語句12.3事務(wù)處理語句BEGIN

TRANSACTION語句BEGINTRANSACTION語句定義一個(gè)顯式本地事務(wù)的起始點(diǎn),即事務(wù)的開始。其語法格式為:BEGIN

{

TRAN

|

TRANSACTION

}[

transaction_name

|

@tran_name_variable

][WITH

MARK

[‘description’]]COMMIT

TRANSACTION語句COMMITTRANSACTION語句為提交一個(gè)事務(wù),標(biāo)志一個(gè)成功的隱式事務(wù)或顯式事務(wù)的結(jié)束。其語法格式為:

COMMIT[{TRAN

|

TRANSACTION}[

transaction_name

|

@tran_name_variable

]

]第12章事務(wù)與并發(fā)控制——事務(wù)處理語句ROLLBACK

TRANSACTION語句ROLLBACKTRANSACTION語句將顯式事務(wù)或隱式事務(wù)回滾到事務(wù)的起點(diǎn)或事務(wù)內(nèi)的某個(gè)保存點(diǎn),它也標(biāo)志一個(gè)事務(wù)的結(jié)束。其語法格式為:ROLLBACK

[

{

TRAN

|

TRANSACTION

}[

transaction_name

|

@tran_name_variable|

savepoint_name

|

@savepoint_variable

]

]SAVE

TRANSACTION語句SAVETRANSACTION語句用于在事務(wù)內(nèi)設(shè)置保存點(diǎn)。其語法格式為:SAVE

{

TRAN

|

TRANSACTION

}{

savepoint_name

|

@savepoint_variable}在事務(wù)內(nèi)的某個(gè)位置建立一個(gè)保存點(diǎn),使用戶可以將事務(wù)回滾到該保存點(diǎn)的狀態(tài),而不回滾整個(gè)事務(wù)。第12章事務(wù)與并發(fā)控制——事務(wù)處理語句事務(wù)處理語句使用事務(wù)時(shí)應(yīng)注意以下幾點(diǎn):不是所有的T-SQL語句都能放在事務(wù)里,通常

insert、update、delete、select等可以放在事務(wù)里,創(chuàng)建、刪除、恢復(fù)數(shù)據(jù)庫等不能放在事務(wù)里。事務(wù)要盡量的小,而且一個(gè)事務(wù)占用的資源越少越好。如果事務(wù)在事務(wù)中間發(fā)生了錯(cuò)誤,并不是所有情況都會回滾,只有達(dá)到一定的錯(cuò)誤級別才會回滾,可以在事務(wù)中使用@@err變量查看是否發(fā)生了錯(cuò)誤。第12章事務(wù)與并發(fā)控制——事務(wù)處理語句[例12-2]定義一個(gè)事務(wù),將所有選修了3號課程的學(xué)生的分?jǐn)?shù)加5分,并提交該事務(wù)。DECLARE

@t_name

CHAR(10)SET

@t_name='add_score'BEGIN

TRANSACTION

@t_nameUSE

教學(xué)庫UPDATE

選課SET

成績=成績+5WHERE

課程號='C001'COMMIT

TRANSACTION

@t_name第12章事務(wù)與并發(fā)控制——事務(wù)處理語句[例12-3]定義一個(gè)事務(wù),向教學(xué)庫的學(xué)生表中插入一行數(shù)據(jù),然后再刪除該行。執(zhí)行后,新插入的數(shù)據(jù)行并沒有被刪除。BEGIN

TRANSACTIONUSE

教學(xué)庫INSERT

INTO

學(xué)生(學(xué)生號,姓名,性別,專業(yè))VALUES('0501001','朱一虹','女','計(jì)算機(jī)')SAVE

TRAN

savepointDELETE

FROM

學(xué)生WHERE

姓名='朱一虹'ROLLBACK

TRAN

savepointCOMMIT第12章事務(wù)與并發(fā)控制——事務(wù)處理語句[例12-4]定義一個(gè)事務(wù),向倉庫庫存數(shù)據(jù)庫的商品表中插入一行數(shù)據(jù),如果插入成功,則向庫存情況表中插入一行或多行此商品的庫存情況信息,并顯示“添加成功”;如果插入失敗則不向庫存情況表中插入數(shù)據(jù),并顯示“添加失敗”。BEGIN

TRANSACTIONUSE

倉庫庫存INSERT

INTO

商品(商品編號,商品名稱,單價(jià),生產(chǎn)商)VALUES('bx-159','冰箱',2500,'安徽美菱')IF

@@error=0BEGININSERT

INTO

庫存情況(倉庫編號,商品編號,數(shù)量)VALUES('002','bx-159',20)PRINT'添加成功!'COMMITENDELSEBEGINPRINT'添加失?。?ROLLBACKEND第12章事務(wù)與并發(fā)控制——并發(fā)控制事務(wù)的并發(fā)控制1.并發(fā)帶來的問題當(dāng)多個(gè)用戶同時(shí)讀取或修改相同的數(shù)據(jù)庫資源的時(shí)候,通過并發(fā)控制機(jī)制可以控制用戶的讀取和修改。鎖就是實(shí)現(xiàn)并發(fā)控制的主要方法,如果沒有鎖定且多個(gè)用戶同時(shí)訪問一個(gè)數(shù)據(jù)庫,則當(dāng)他們的事務(wù)同時(shí)使用相同的數(shù)據(jù)時(shí)就可能會發(fā)生問題,這些問題包括以下幾種情況:第12章事務(wù)與并發(fā)控制——并發(fā)控制(1)丟失修改:指在一個(gè)事務(wù)讀取一個(gè)數(shù)據(jù)時(shí),另外一個(gè)事務(wù)也訪問該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中修改了這個(gè)數(shù)據(jù)后,第二個(gè)事務(wù)也修改了這個(gè)數(shù)據(jù)。這樣第一個(gè)事務(wù)內(nèi)的修改結(jié)果就被丟失,因此稱為丟失修改。例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20,事務(wù)T2也讀取A=20,事務(wù)T1修改A=A-1,修改,事務(wù)T2也修改A=A-1;最終結(jié)果A=19,

事務(wù)T1的修改被丟失。第12章事務(wù)與并發(fā)控制——并發(fā)控制(2)臟讀:指當(dāng)一個(gè)事務(wù)正在訪問數(shù)據(jù),并且對數(shù)據(jù)進(jìn)行了修改,而這種修改還沒有提交到數(shù)據(jù)庫中,這時(shí),另外一個(gè)事務(wù)也訪問這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。因?yàn)檫@個(gè)數(shù)據(jù)是還沒有提交的數(shù)據(jù),那么另外一個(gè)事務(wù)讀到的這個(gè)數(shù)據(jù)是“臟數(shù)據(jù)”,依據(jù)“臟數(shù)據(jù)”所做的操作可能是不正確的。例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20,并修改A=A-1,寫回?cái)?shù)據(jù)庫,事務(wù)T2讀取A=19,事務(wù)T1回滾了前面的操作,事務(wù)T2也修改A=A-1;最終結(jié)果

A=18,事務(wù)T2讀取的就是“臟數(shù)據(jù)”。第12章事務(wù)與并發(fā)控制——并發(fā)控制(3)不可重復(fù)讀:指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。在這個(gè)事務(wù)還沒有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,那么第一個(gè)事務(wù)兩次讀到的數(shù)據(jù)可能是不一樣的。這樣就發(fā)生了在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復(fù)讀。例如:事務(wù)T1讀取某表中數(shù)據(jù)A=20,B=10,求和為30,事務(wù)T2讀取A=20,修改A=A*2,寫回?cái)?shù)據(jù)庫,事務(wù)T1再次讀取求和為50。第12章事務(wù)與并發(fā)控制——并發(fā)控制(4)幻讀:與不可重復(fù)讀相似,是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象。例如,第一個(gè)事務(wù)對一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會發(fā)生操作第一個(gè)事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好像發(fā)生了幻覺一樣。當(dāng)對某條記錄執(zhí)行插入或刪除操作而該記錄屬于某個(gè)事務(wù)正在讀取的行的范圍時(shí),會發(fā)生幻讀問題。第12章事務(wù)與并發(fā)控制——并發(fā)控制2.鎖的基本概念鎖是防止其他事務(wù)訪問指定的資源、實(shí)現(xiàn)并發(fā)控制的一種手段,是多個(gè)用戶能夠同時(shí)操縱同一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)而不發(fā)生數(shù)據(jù)不一致現(xiàn)象的重要保障。為了提高系統(tǒng)的性能、加快事務(wù)的處理速度、縮短事務(wù)的等待時(shí)間,應(yīng)該使鎖定的資源最小化。為了控制鎖定的資源,應(yīng)該首先了解系統(tǒng)的空間管理。在SQR

SERVER

2005中,最小空間管理單位是頁,一個(gè)頁有8KB。所有的數(shù)據(jù)、日志、索引都存放在頁上。另外,使用頁有一個(gè)限制,這就是表中的一行數(shù)據(jù)必須在同一個(gè)頁上,不能跨頁。頁上面的空間管理單位是簇,一個(gè)簇是8個(gè)連續(xù)的頁。表和索引的最小占用單位是簇。數(shù)據(jù)庫是有一個(gè)或多個(gè)表或者索引組成,即有多個(gè)簇組成。第12章事務(wù)與并發(fā)控制——并發(fā)控制數(shù)據(jù)庫中的鎖是指一種軟件機(jī)制,用來指示某個(gè)用戶(也即進(jìn)程會話,下同)已經(jīng)占用了某種資源,從而防止其他用戶做出影響本用戶的數(shù)據(jù)修改或?qū)е聰?shù)據(jù)庫數(shù)據(jù)的非完整性和非一致性。這兒所謂資源,主要指用戶可以操作的數(shù)據(jù)行、索引以及數(shù)據(jù)表等。根據(jù)資源的不同,鎖有多粒度(multigranular)的概念,也就是指可以鎖定的資源的層次。SQLServer中能夠鎖定的資源粒度包括:數(shù)據(jù)庫、表、區(qū)域、頁面、鍵值(指帶有索引的行數(shù)據(jù))、行標(biāo)識符(RID,即表中的單行數(shù)據(jù))。第12章事務(wù)與并發(fā)控制——并發(fā)控制3.鎖的類型數(shù)據(jù)庫引擎使用不同類型的鎖鎖定資源,這些鎖確定了并發(fā)事務(wù)訪問資源的方式。SQL

Server

2005中常見的鎖有以下幾種:

(1)共享鎖(Shared

Lock)共享(S)鎖允許并發(fā)事務(wù)讀?。⊿ELECT)一個(gè)資源。資源上存在共享(S)鎖時(shí),任何其它事務(wù)都不能修改數(shù)據(jù)。一旦已經(jīng)讀取數(shù)據(jù),便立即釋放資源上的共享(S)鎖,除非將事務(wù)隔離級別設(shè)置為可重復(fù)讀或更高級別,或者在事務(wù)生存周期內(nèi)用鎖定提示保留共享(S)鎖。第12章事務(wù)與并發(fā)控制——并發(fā)控制12.4.3鎖的類型(2)排它鎖(Exclusive

Lock)排它(X)鎖可以防止并發(fā)事務(wù)對資源進(jìn)行訪問,其它事務(wù)不能讀取或修改排它(X)鎖鎖定的數(shù)據(jù)。即排它(X)鎖鎖定的資源只允許進(jìn)行鎖定操作的程序使用,其它任何對它的操作均不會被接受。執(zhí)行數(shù)據(jù)更新命令即INSERT、UPDATE或DELETE命令時(shí)SQL

Server會自動使用排它(X)鎖,但當(dāng)對象上有其它鎖存在時(shí)無法對其加排它(X)鎖。排它(X)鎖一直到事務(wù)結(jié)束才能被釋放。第12章事務(wù)與并發(fā)控制——并發(fā)控制12.4.3鎖的類型(3)更新鎖(Update

Lock)更新(U)鎖可以防止通常形式的死鎖。一般更新模式由一個(gè)事務(wù)組成,此事務(wù)讀取記錄,獲取資源(頁或行)的共享鎖,然后修改行,此操作要求鎖轉(zhuǎn)換為排它鎖。如果兩個(gè)事務(wù)獲得了資源上的共享鎖,然后試圖同時(shí)更新數(shù)據(jù),則一個(gè)事務(wù)嘗試將鎖轉(zhuǎn)換為排它鎖。共享鎖到排它鎖的轉(zhuǎn)換必須等待一段時(shí)間,因?yàn)橐粋€(gè)事務(wù)的排它鎖與其它事務(wù)的共享鎖不兼容,此時(shí)發(fā)生鎖等待,而第二個(gè)事務(wù)也試圖獲取排它鎖以進(jìn)行更新;由于兩個(gè)事務(wù)都要轉(zhuǎn)換為排它鎖,并且每個(gè)事務(wù)都等待另一個(gè)事務(wù)釋放共享模式鎖,因此發(fā)生死鎖。更新鎖就是為了防止這種死鎖而設(shè)立的。當(dāng)SQL

Server準(zhǔn)備更新數(shù)據(jù)時(shí),它首先對數(shù)據(jù)、對象作更新鎖,鎖定這樣數(shù)據(jù)將不能被修改,但可以讀取,等到SQLServer確定要進(jìn)行更新數(shù)據(jù)操作時(shí),它會自動將更新鎖換為排它鎖,但當(dāng)對象上有其它鎖存在時(shí)無法對其作更新鎖鎖定。第12章事務(wù)與并發(fā)控制——并發(fā)控制(4)意向鎖(Intent

Lock)如果對一個(gè)資源加意向鎖,則說明該資源的下層資源正在被加鎖(S鎖或X鎖);對任一資源加鎖時(shí),必須先對它的上層資源加意向鎖。系統(tǒng)使用意向鎖來最小化鎖之間的沖突。意向鎖建立一個(gè)鎖機(jī)制的分層結(jié)構(gòu),這種結(jié)構(gòu)依據(jù)鎖定的資源范圍從低到高依次是行級鎖層、頁級鎖層和表級鎖層。意向鎖表示系統(tǒng)希望在層次低的資源上獲得共享鎖或者排它鎖。第12章事務(wù)與并發(fā)控制——并發(fā)控制(4)意向鎖(Intent

Lock)例如,放置在表級上的意向鎖表示一個(gè)事務(wù)可以在表中的頁或者行上放置共享鎖。在表級上設(shè)置共享鎖防止以后另外一個(gè)修改該表中頁的事務(wù)在包含了該頁的表上放置排它鎖。意向鎖可以提高性能,這是因?yàn)橄到y(tǒng)只需要在表級上檢查意向鎖,確定一個(gè)事務(wù)能否在哪個(gè)表上安全地獲取一個(gè)鎖,而不需要檢查表上的每一個(gè)行鎖或者頁鎖,確定一個(gè)事務(wù)是否可以鎖定整個(gè)表。常用的意向鎖有三種類型:意向共享鎖,簡記為IS鎖;意向排它鎖,簡記為IX鎖;共享意向排它鎖,簡記為SIX鎖。第12章事務(wù)與并發(fā)控制——并發(fā)控制(4)意向鎖(Intent

Lock)①意向共享鎖(IS鎖):意向共享鎖表示讀低層次資源的事務(wù)的意向,把共享鎖放在這些單個(gè)的資源上。也就是說,如果對一個(gè)數(shù)據(jù)對象加IS鎖,表示它的后裔資源擬(意向)加S鎖。例如,要對某個(gè)元組加S鎖,則要首先對關(guān)系和數(shù)據(jù)庫加IS鎖。②意向排它鎖(IX鎖):意向排它鎖表示修改低層次的事務(wù)的意向,把排它鎖放在這些單個(gè)資源上。也就是說,如果對一個(gè)數(shù)據(jù)對象加IX鎖,表示它的后裔資源擬(意向)加X鎖。例如,要對某個(gè)元組加X鎖,則要首先對關(guān)系和數(shù)據(jù)庫加IX鎖。第12章事務(wù)與并發(fā)控制——并發(fā)控制(4)意向鎖(Intent

Lock)③共享意向排它鎖(SIX鎖):共享意向排它鎖是共享鎖和意向排它鎖的組合。使用共享意向排它鎖表示允許并行讀取頂層資源的事務(wù)的意向,并且修改一些低層次的資源,把意向排它鎖放在這些單個(gè)資源上。也就是說,如果對一個(gè)數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX。例如對某個(gè)表加SIX鎖,則表示該事務(wù)要讀整個(gè)表(所以要對該表加S鎖),同時(shí)會更新個(gè)別元組(所以要對該表加IX鎖)。第12章事務(wù)與并發(fā)控制——并發(fā)控制(5)模式鎖(Schema

Lock)模式鎖保證當(dāng)表或者索引被另外一個(gè)會話參考時(shí),不能被刪除或者修改其結(jié)構(gòu)模式。SQLServer系統(tǒng)提供了兩種類型的模式鎖:模式穩(wěn)定鎖和模式修改鎖。模式穩(wěn)定鎖確保鎖定的資源不能被刪除,模式修改鎖確保其他會話不能參考正在修改的資源。執(zhí)行表的數(shù)據(jù)定義語言(DDL)操作(例如添加列或除去表)時(shí)使用模式修改(Sch-M)鎖。當(dāng)編譯查詢時(shí),使用模式穩(wěn)定性(Sch-S)

鎖。模式穩(wěn)定性(Sch-S)

鎖不阻塞任何事務(wù)鎖,包括排它鎖。因此在編譯查詢時(shí),其它事務(wù)(包括在表上有排它鎖的事務(wù))都能繼續(xù)運(yùn)行。但不能在表上執(zhí)行DDL操作。第12章事務(wù)與并發(fā)控制——并發(fā)控制(6)大容量更新鎖(Bulk

Update

Lock)當(dāng)將數(shù)據(jù)大容量復(fù)制到表,且指定了TABLOCK提示或者使用sp_tableoption

設(shè)置了

table_lock_on_bulk表選項(xiàng)時(shí),將使用大容量更新鎖。大容量更新鎖允許進(jìn)程將數(shù)據(jù)并發(fā)地大容量復(fù)制到同一表,同時(shí)防止其它不進(jìn)行大容量復(fù)制數(shù)據(jù)的進(jìn)程訪問該表。第12章事務(wù)與并發(fā)控制——并發(fā)控制4.鎖的信息1.鎖的兼容性在一個(gè)事務(wù)已經(jīng)對某個(gè)對象鎖定的情況下,另一個(gè)事務(wù)請求對同一個(gè)對象的鎖定,此時(shí)就會出現(xiàn)鎖定兼容性問題。當(dāng)兩種鎖定方式兼容時(shí),可以同意對該對象的第二個(gè)鎖定請求。如果請求的鎖定方式與已掛起的鎖定方式不兼容,那么就不能同意第二個(gè)鎖定請求。相反,請求要等到第一個(gè)事務(wù)釋放其鎖定,并且釋放所有其他現(xiàn)有的不兼容鎖定為止。第12章事務(wù)與并發(fā)控制——并發(fā)控制4.鎖的信息1.鎖的兼容性資源鎖模式有一個(gè)兼容性矩陣,顯示了與在同一資源上可獲取的其它鎖相兼容的鎖。見表。鎖A鎖BISSIXSIXUXIS是是是是是否S是是否否是否IX是否是否否否SIX是否否否否否U是是否否否否X否否否否否否第12章事務(wù)與并發(fā)控制——并發(fā)控制2.查看鎖的信息在SQL

Server2005中,一般可以使用SQL

Server

Management

Studio中對象資源管理器瀏覽系統(tǒng)中的鎖,也可以使用系統(tǒng)存儲過程。進(jìn)入“SQLServerManagementStudio”的“對象資源管理器”面板,選中并展開服務(wù)器。展開“管理”選項(xiàng),然后展開“活動監(jiān)視器”并右擊。在彈出的快捷菜單中選擇“查看進(jìn)程”命令進(jìn)入

“進(jìn)程狀態(tài)”窗口。選擇“按進(jìn)程分類的鎖”或“按對象分類的鎖”或“進(jìn)程信”選項(xiàng)卡,可以看到鎖的具體信息。第12章事務(wù)與并發(fā)控制——并發(fā)控制12.4.5死鎖的產(chǎn)生及解決辦法封鎖機(jī)制的引入能解決并發(fā)用戶的數(shù)據(jù)不一致性問題,但也會引起事務(wù)間的死鎖問題。在事務(wù)和鎖的使用過程中,死鎖是一個(gè)不可避免的現(xiàn)象。在數(shù)據(jù)庫系統(tǒng)中,死鎖是指多個(gè)用戶分別鎖定了一個(gè)資源,并又試圖請求鎖定對方已經(jīng)鎖定的資源,這就產(chǎn)生了一個(gè)鎖定請求環(huán),導(dǎo)致多個(gè)用戶都處于等待對方釋放所鎖定資源的狀態(tài)。通常,根據(jù)使用不同的鎖類型鎖定資源,然而當(dāng)某組資源的兩個(gè)或多個(gè)事務(wù)之間有循環(huán)相關(guān)性時(shí),就會發(fā)生死鎖現(xiàn)象。第12章事務(wù)與并發(fā)控制——并發(fā)控制12.4.5死鎖的產(chǎn)生及解決辦法在數(shù)據(jù)庫中解決死鎖常用的方法有:要求每個(gè)事務(wù)一次就將要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行。預(yù)先規(guī)定一個(gè)順序,所有事務(wù)都按這個(gè)順序?qū)嵭屑渔i,這樣就不會發(fā)生死鎖。允許死鎖發(fā)生,系統(tǒng)來用某些方式診斷當(dāng)前系統(tǒng)中是否有死鎖發(fā)生。在SQL

Server中,系統(tǒng)能夠自動定期搜索和處理死鎖問題。系統(tǒng)在每次搜索中標(biāo)識所有等待鎖定請求的事務(wù),如果在下一次搜索中該被標(biāo)識的事務(wù)仍處于等待狀態(tài),

SQL

Server就開始遞歸死鎖搜索。當(dāng)搜索檢測到鎖定請求環(huán)時(shí),系統(tǒng)將根據(jù)事務(wù)的死鎖優(yōu)先級別來結(jié)束一個(gè)優(yōu)先級最低的事務(wù),此后,系統(tǒng)回滾該事務(wù),并向該進(jìn)程發(fā)出1205號錯(cuò)誤信息。這樣,其他事務(wù)就有可能繼續(xù)運(yùn)行了。第12章事務(wù)與并發(fā)控制——并發(fā)控制12.4.6手工加鎖SQLServer系統(tǒng)中建議讓系統(tǒng)自動管理鎖,該系統(tǒng)會分析用戶的SQL語句要求,自動為該請求加上合適的鎖,而且在鎖的數(shù)目太多時(shí),系統(tǒng)會自動進(jìn)行鎖升級。如前所述,升級的門限由系統(tǒng)自動配置,并不需要用戶配置。在實(shí)際應(yīng)用中,有時(shí)為了應(yīng)用程序正確運(yùn)行和保持?jǐn)?shù)據(jù)的一致性,必須人為地給數(shù)據(jù)庫的某個(gè)表加鎖。比如,在某應(yīng)用程序的一個(gè)事務(wù)操作中,需要根據(jù)一編號

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論