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

下載本文檔

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

文檔簡介

1、第9章 事務(wù)管理與并發(fā)控制 事務(wù)的概念(1.7)事務(wù)的概念事務(wù)的性質(zhì)事務(wù)管理的基本命令事務(wù)舉例事務(wù)是構(gòu)成單一邏輯工作單元的操作集合。l買賣交易一手交錢一手交貨l訂票查詢、訂位、(交錢)、出票(往返票?)l轉(zhuǎn)帳轉(zhuǎn)出、轉(zhuǎn)入為什么需要事務(wù)的概念呢?恢復(fù)的需要并發(fā)操作的需要l買賣交易一手交錢一手交貨l訂票查詢、訂位、(交錢)、出票(往返票?)l轉(zhuǎn)帳轉(zhuǎn)出、轉(zhuǎn)入James Gray1998年獲得圖靈獎在數(shù)據(jù)庫技術(shù)、特別是事務(wù)處理方面做出了杰出貢獻。解決了諸如完整性、安全性、并發(fā)控制等一系列技術(shù)難題。事務(wù)的性質(zhì) 原子性(Atomicity) 一致性(Consistency) 隔離性(Isolation)持久

2、性(Durability) 事務(wù)的這些性質(zhì)通常稱為ACID特性 原子性 事務(wù)的原子性強調(diào)了一個事務(wù)是一個邏輯工作單元,是一個整體,是不可分割的。一個事務(wù)所包含的操作要么全部做,要么全部不做。l買賣交易一手交錢一手交貨l訂票查詢、訂位、(交錢)、出票(往返票?)l轉(zhuǎn)帳轉(zhuǎn)出、轉(zhuǎn)入 一致性 一個事務(wù)執(zhí)行一項數(shù)據(jù)庫操作,事務(wù)將使數(shù)據(jù)庫從一種一致性的狀態(tài)變換成另一種一致性狀態(tài)。 在事務(wù)執(zhí)行前,總是假設(shè)數(shù)據(jù)庫是一致的,那么當事務(wù)成功執(zhí)行后,數(shù)據(jù)庫肯定仍然是一致的。 l買賣交易一手交錢一手交貨l訂票查詢、訂位、(交錢)、出票(往返票?)l轉(zhuǎn)帳轉(zhuǎn)出、轉(zhuǎn)入(帳目平衡)隔離性 如果每個事務(wù)單獨執(zhí)行能保持原子性和一

3、致性,這些事務(wù)并發(fā)執(zhí)行也能保持原子性和一致性,則是事務(wù)的隔離性。l并發(fā)記帳?持久性 事務(wù)的持久性是指一旦事務(wù)成功完成,該事務(wù)對數(shù)據(jù)庫所施加的所有更新都是永久的。l在ATM取錢后銀行系統(tǒng)突然發(fā)生故障? ACID性質(zhì)DBMS的功能如果讓用戶程序來實現(xiàn)結(jié)果會怎樣?事務(wù)的生命周期事務(wù)的結(jié)束提交(Commit)或者撤銷(Rollback)事務(wù)在活動中的狀態(tài)l活動狀態(tài)事務(wù)初始時l部分提交狀態(tài)命令執(zhí)行完、但未提交l失敗狀態(tài)發(fā)現(xiàn)正常操作不能進行l(wèi)撤銷狀態(tài)撤銷事務(wù),恢復(fù)到事務(wù)前的狀態(tài)l提交狀態(tài)成功完成后事務(wù)的生命周期命令執(zhí)行完只要事務(wù)沒有提交事務(wù)就沒有結(jié)束,還有可能轉(zhuǎn)變到失敗狀態(tài)?;顒訝顟B(tài)失敗狀態(tài)提交狀態(tài)撤銷狀

4、態(tài)部分提交狀態(tài)SQL對事務(wù)的支持 開始事務(wù) 結(jié)束事務(wù) 事務(wù)保存點 隱含事務(wù)與自動提交 開始事務(wù) 使用BEGIN TRANSACTION命令顯式說明一個事務(wù)開始,它說明了對數(shù)據(jù)庫進行操作的一個單元的起始點。在事務(wù)完成之前出現(xiàn)任何操作錯誤和故障,都可以撤銷事務(wù),使事務(wù)回退到這個起始點。 結(jié)束事務(wù) 結(jié)束事務(wù)有兩種情況,即成功或失敗:l成功結(jié)束事務(wù)的命令是COMMIT TRANSACTION,它的作用是提交或確認事務(wù)已經(jīng)完成,所以該命令也稱作事務(wù)提交。 l失敗的事務(wù)需撤銷,撤消事務(wù)的命令是ROLLBACK TRANSACTION,即撤消在該事務(wù)中對數(shù)據(jù)庫所做的更新操作,使數(shù)據(jù)庫回退到事務(wù)的起始點。 舉

5、例:如下程序的結(jié)果?BEGIN TRANSACTIONCREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3)INSERT INTO TestTran VALUES (1, aaa)COMMIT TRANSACTIONBEGIN TRANSACTIONINSERT INTO TestTran VALUES (2, bbb)ROLLBACK TRANSACTIONBEGIN TRANSACTIONINSERT INTO TestTran VALUES (3, ccc)COMMIT TRANSACTION事務(wù)保存點 SQL標準還支持“事務(wù)保

6、存點”技術(shù),所謂事務(wù)保存點就是在事務(wù)的過程中插入若干標記,這樣當發(fā)現(xiàn)事務(wù)中有操作錯誤時,可以不撤消整個事務(wù),只撤消部分事務(wù),即將事務(wù)回退到某個事務(wù)保存點。 事務(wù)保存點SQL Server支持事務(wù)保存點技術(shù),設(shè)置保存點的命令是SAVE TRANSACTION,具體格式是: SAVE TRANSACTION savepoint_name撤消部分事務(wù)或回退到事務(wù)保存點的命令也是ROLLBACK TRANSACTION,具體格式是: ROLLBACK TRANSACTION savepoint_name假設(shè)有訂票事務(wù)每個中間結(jié)點都可以當做一個保存點。北京西安成都蘭州昆明銀川呼市北京舉例:如下程序執(zhí)行的

7、結(jié)果?BEGIN TRANSACTIONCREATE TABLE TestTran (Cola INT PRIMARY KEY, Colb CHAR(3)INSERT INTO TestTran VALUES (1, aaa)SAVE TRANSACTION transpoint1INSERT INTO TestTran VALUES (2, bbb)ROLLBACK TRANSACTION transpoint1INSERT INTO TestTran VALUES (3, ccc)COMMIT TRANSACTION注意:事務(wù)和程序是兩個概念。一般來講,一個事務(wù)和程序是兩個概念。一般來講,

8、一個程序中包含多個事務(wù)。一個事務(wù)可以是一程序中包含多個事務(wù)。一個事務(wù)可以是一條條SQLSQL語句語句 、一組、一組SQLSQL語句或整個程序。語句或整個程序。 隱含事務(wù)與自動提交事務(wù)的執(zhí)行模式顯式事務(wù)隱式事務(wù)自動提交事務(wù)顯式事務(wù)用BEGIN TRANSACTION命令開始一個事務(wù)直到用COMMIT或ROLLBACK命令結(jié)束事務(wù)隱式事務(wù)當執(zhí)行如下命令時都會自動開始一個事務(wù)lALTER,INSERT,CREATE,OPEN,DELETE,REVOKE、DROP、SELECT、FETCH、GRANT、UPDATE直到用COMMIT或ROLLBACK命令結(jié)束事務(wù),然后又準備開始一個新的事務(wù)。自動提交事

9、務(wù)每條單獨的語句都是一個事務(wù),一條語句執(zhí)行成功則提交事務(wù),執(zhí)行失敗則撤銷事務(wù)。隱含事務(wù)與自動提交事務(wù)的執(zhí)行模式 SQL標準規(guī)定事務(wù)的開始是隱含的,在發(fā)出COMMIT(提交事務(wù))或ROLLBACK(撤消事務(wù))命令之前,該事務(wù)將一直保持有效。一個事務(wù)被提交或撤消之后,又將自動啟動下一個新事務(wù)。 隱含事務(wù)的設(shè)置與取消設(shè)置隱含事務(wù)方式的命令是: SET IMPLICIT_TRANSACTIONS ON取消隱含事務(wù)方式的命令是: SET IMPLICIT_TRANSACTIONS OFF隱含事務(wù)與自動提交當 是 隱 含 事 務(wù) 方 式 時 , 不 需 要 用 B E G I N TRANSACTION命

10、令顯式的啟動或開始一個事務(wù),但需要用COMMIT或ROLLBACK命令結(jié)束事務(wù);當是非隱含事務(wù)方式時,如果沒有用BEGIN TRANSACTION命令顯式的啟動或開始一個事務(wù),則每條操作數(shù)據(jù)庫的語句都將作為獨立的事務(wù)被自動提交或撤消,這時候不需要、也不能執(zhí)行COMMIT或ROLLBACK命令。思考題UPDATE score SET 成績=成績 + 5如果score表有1000條記錄,這條語句在完成更新時只有1條記錄違背了完整性約束,結(jié)果會怎么樣?隱含事務(wù)舉例 SET IMPLICIT_TRANSACTIONS ONINSERT INTO 倉儲.倉庫 VALUES(WH20,成都,888)COM

11、MITINSERT INTO 倉儲.倉庫 VALUES(WH21,重慶,888)ROLLBACK結(jié)果?非隱含事務(wù)與自動提交舉例 SET IMPLICIT_TRANSACTIONS OFFINSERT INTO 倉儲.倉庫 VALUES(WH21,重慶,888)ROLLBACK結(jié)果?顯式事務(wù)舉例 SET IMPLICIT_TRANSACTIONS OFFBEGIN TRANSACTIONINSERT INTO 倉儲.倉庫 VALUES(WH23,貴陽,888)ROLLBACK結(jié)果?使用TRYCATCH控制事務(wù) BEGIN TRY BEGIN TRANSACTION - 假設(shè)事務(wù)的所有語句成功執(zhí)行

12、則提交事務(wù) COMMIT TRANSACTIONEND TRYBEGIN CATCH - TRY語句塊中出現(xiàn)錯誤則轉(zhuǎn)到此 - 檢測錯誤并做出處理END CATCHTRYCATCH舉例SET XACT_ABORT ONBEGIN TRY BEGIN TRANSACTION INSERT INTO 倉儲.倉庫 VALUES(WH17,成都,332) INSERT INTO 倉儲.倉庫 VALUES(WH17,貴陽,380) COMMIT TRANSACTIONEND TRYBEGIN CATCH IF (XACT_STATE() = -1 BEGIN PRINT N事務(wù)不能提交,撤銷事務(wù)! ROL

13、LBACK TRANSACTION ENDEND CATCH并發(fā)控制干擾問題可串行性封鎖死鎖“活死鎖”隔離級別封鎖與隔離級別并發(fā)事務(wù)中的不一致問題干擾問題丟失更新問題 未提交依賴問題 不一致分析問題 幻象讀問題 丟失更新問題舉例(假設(shè)) 旅客A 通過網(wǎng)絡(luò)購票,要買一張15日北京南到上海虹橋的G1次高速列車的一等座車票,旅客A得到剩余票信息; 幾乎在同時,旅客B 也通過網(wǎng)絡(luò)購票,也要買一張15日北京南到上海虹橋的G1次高速列車的一等座車票, 用戶B從另一臺計算機查到了同樣的剩余票信息; 旅客A買了一張15日G1次7車廂5號車票,旅客A提交訂單、系統(tǒng)更新剩余票信息并將它存入數(shù)據(jù)庫; 這時旅客B不知

14、道旅客A已經(jīng)購買了15日G1次7車廂5號車票,使旅客B也也提交了一張15日G1次7車廂5號車票,系統(tǒng)再次更新剩余票信息并將它存入數(shù)據(jù)庫(重復(fù)了旅客A提交訂單時已經(jīng)做過的更新)。 總的效果:15日G1次7車廂5號車票賣了兩次。其原因是:允許了旅客B在過時的信息基礎(chǔ)上去更新數(shù)據(jù)庫,而沒有迫使他去看最新的信息。 丟失更新問題 用SQL術(shù)語描述丟失更新問題未提交依賴問題 未提交依賴問題也稱為讀“臟”(Dirty Read)數(shù)據(jù)問題,查詢一個已經(jīng)被其他事務(wù)更新、但尚未提交的元組,將會引起未提交依賴問題。 “臟臟”數(shù)據(jù)數(shù)據(jù)是指其它事務(wù)未提交的尚沒有寫回數(shù)據(jù)庫中的數(shù)據(jù)。是指其它事務(wù)未提交的尚沒有寫回數(shù)據(jù)庫中

15、的數(shù)據(jù)。不一致分析問題 不一致分析問題也稱為不可重復(fù)讀問題,很多應(yīng)用可能需要校驗功能,這時往往需要連續(xù)兩次或多次讀數(shù)據(jù)進行校驗和分析,結(jié)果由于其他事務(wù)的干擾,使得前后結(jié)果不一致,從而產(chǎn)生校驗錯誤(即不一致的分析)。 幻象讀問題 幻象讀問題與不一致分析問題有關(guān),當事務(wù)A讀數(shù)據(jù)時,事務(wù)B在對同一個關(guān)系進行插入或刪除操作,這時事務(wù)A再讀同一條件的元組時,會發(fā)現(xiàn)神秘地多出了一些元組或丟失了一些元組,把這種現(xiàn)象稱作幻象讀。 可串行性 可串行性通??醋魇嵌鄠€事務(wù)并發(fā)執(zhí)行的正確性準則。如果多個事務(wù)并發(fā)執(zhí)行和這些事務(wù)按某種順序串行執(zhí)行的效果是等價的,稱作并發(fā)事務(wù)的可串行性或可串行化??纱行缘呐袛喔鲉蝹€事務(wù)如

16、能將數(shù)據(jù)庫從一個正確狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€正確狀態(tài),則認為該事務(wù)是正確的;按任何一個串行順序依次執(zhí)行多個事務(wù)也是正確的(這里的串行順序假定各個事務(wù)間彼此獨立、不交叉); 事務(wù)的交叉執(zhí)行過程是正確的,當且僅當其與串行執(zhí)行過程等價,則事務(wù)是可串行化的。 可串行性描述的是事務(wù)的隔離性。并發(fā)控制并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性。并發(fā)控制的主要技術(shù)是封鎖(Locking)。實現(xiàn)并發(fā)控制(隔離性)的基本思路實現(xiàn)隔離性的基本思路當需要查詢或更新數(shù)據(jù)時,先對數(shù)據(jù)進行封鎖,以避免來自其他事務(wù)的干擾,即隔離其他事務(wù)。針

17、對不同的干擾問題可以有不同的封鎖機制。 以丟失更新問題為例,實施封鎖的基本思想是:當一個用戶對一個表或記錄進行更新時,封鎖該表或記錄,使其他用戶不能在同一時刻更新相同的表或記錄,迫使其他用戶在更新后的基礎(chǔ)上(而不是在更新前的基礎(chǔ)上)再實施另外的更新操作。 封鎖的基本思路實施封鎖以后的時間序列封鎖與事務(wù)吞吐量事務(wù)吞吐量:單位時間內(nèi)可以完成的事務(wù)數(shù)量。封鎖將降低事務(wù)吞吐量。如何在保證事務(wù)隔離性的前提下提高事務(wù)吞吐量?如何在保證事務(wù)隔離性的前提下提高事務(wù)吞吐量必要的封鎖策略。根據(jù)不同的需要采取不同的封鎖策略。封鎖機制 共享封鎖 獨占封鎖 更新封鎖 共享封鎖 共享封鎖是為讀操作設(shè)置的一種封鎖,所以也稱

18、作讀封鎖,或簡稱S鎖,目的是想讀到一組不變的數(shù)據(jù),也就是在讀數(shù)據(jù)的過程中,不允許其他用戶對該數(shù)據(jù)進行任何修改操作。這種封鎖可以保證最大的并發(fā)性,任何數(shù)量的用戶都可以同時對同樣的數(shù)據(jù)施加這種共享鎖。已經(jīng)實施共享鎖的表拒絕來自其他事務(wù)的獨占封鎖和更新封鎖。 獨占封鎖 獨占封鎖也叫排他封鎖,它是為修改操作設(shè)置的一種封鎖,也稱為寫封鎖,或簡稱為X鎖,這是最嚴格的一類封鎖。當需要對表實施插入、刪除或修改操作時,應(yīng)該使用獨占封鎖。已經(jīng)實施獨占封鎖的表,拒絕來自其他用戶的任何封鎖,但不拒絕一般的查詢操作。 共享封鎖和獨占封鎖是基本鎖共享封鎖和共享封鎖是相容的;獨占封鎖與任何封鎖均不相容。更新封鎖 當需要對一

19、個記錄或一組記錄進行更新時(只是修改,不包括插入和刪除)使用更新封鎖,該封鎖的目的是防止其他用戶在同一時刻修改同一記錄。已經(jīng)實施更新封鎖的記錄,拒絕來自其他用戶的任何封鎖,但不拒絕一般的查詢操作。 鎖的釋放 有些封鎖在執(zhí)行完相應(yīng)操作后就自動釋放封鎖,有些封鎖則保持到事務(wù)結(jié)束(提交或撤消)時才釋放(無論如何,所有的封鎖都會在事務(wù)結(jié)束時自動釋放)。 SQL Server中與封鎖有關(guān)的命令 SQL Server的封鎖操作是在相關(guān)語句的“WITH ()”子句中完成的,該短語可以在SELECT、INSERT、UPDATE和DELETE等語句中指定表級鎖定的方式和范圍。SQL Server中與封鎖有關(guān)的命

20、令常用的封鎖關(guān)鍵詞有:lTABLOCK:對表施行共享封鎖,在讀完數(shù)據(jù)后立刻釋放封鎖,此類封鎖可以避免讀“臟”數(shù)據(jù),但不具有可重復(fù)讀的特性。 lHOLDLOCK:與TABLOCK一起使用,可將共享鎖保留到事務(wù)完成,而不是在讀完數(shù)據(jù)后立即釋放鎖,這樣可以保證數(shù)據(jù)的可重復(fù)獨特性。 lNOLOCK:不進行封鎖,此關(guān)鍵詞僅應(yīng)用于SELECT語句,這樣可能會讀取未提交事務(wù)的數(shù)據(jù),即有可能發(fā)生“臟”讀。 lTABLOCKX:對表實施獨占封鎖。 lUPDLOCK:對表中的指定元組實施更新封鎖;這時其他事務(wù)可以對同一表中的其他元組也實施更新封鎖,但是不允許對表實施共享封鎖和獨占封鎖。 舉例DECLARE d d

21、atetime, t char(6), s char(2), n char(10)BEGIN TRANSACTIONSELECT n=座位號 FROM R WITH (UPDLOCK)WHERE 日期 = d AND 車次 = t AND 座別 = s AND 狀態(tài) IS NULLIF UPDATE R SET 狀態(tài) = Y WHERE 座位號 = n AND 日期 = d AND 車次 = t AND 座別 = sCOMMIT TRANSACTIONELSEROLLBACK TRANSACTION死鎖 封鎖不當會產(chǎn)生死鎖產(chǎn)生死鎖的原因右圖示意了兩個并發(fā)事務(wù)所發(fā)生事件的序列,假設(shè)程序A為了完成

22、某個事務(wù)需要封鎖倉庫和職工兩個關(guān)系,而幾乎在同一時刻并發(fā)執(zhí)行的程序B為完成另一個事務(wù)也需要封鎖職工和倉庫關(guān)系,這兩個程序正好按照如圖所示的交錯序列執(zhí)行命令,結(jié)果兩個程序都為了等待對方釋放數(shù)據(jù)資源而產(chǎn)生死鎖。 發(fā)生死鎖兩個或多個事務(wù)等待被封鎖資源形成環(huán)路時就會發(fā)生死鎖。ABC避免死鎖避免死鎖 相同順序法 l所有的用戶程序約定都按相同的順序來封鎖表 一次封鎖法 l為了完成一個事務(wù),一次性封鎖所需要的全部表 兩階段封鎖協(xié)議 l所有事務(wù)都必須將對數(shù)據(jù)的封鎖分為封鎖和釋放兩個階段 避免死鎖的封鎖 兩階段封鎖協(xié)議 第一階段稱為擴展階段,這一階段獲得各種類型的封鎖,但是不能釋放任何封鎖。第二階段稱為收縮階段

23、,這一階段釋放各種類型的封鎖,一旦開始釋放封鎖,則不能再申請任何類型的封鎖。 注意,兩階段封鎖協(xié)議和一次封鎖法的異同之處。一次封鎖法遵守兩階段封鎖協(xié)議;但是兩階段封鎖協(xié)議并不要求一次封鎖所有需要封鎖的數(shù)據(jù)。兩階段封鎖協(xié)議仍有可能發(fā)生死鎖。 舉例:遵守兩階段鎖協(xié)議遵守兩階段鎖協(xié)議LOCK A LOCK A LOCK B LOCK B LOCK C LOCK C UNLOCK B UNLOCK B UNLOCK A UNLOCK A UNLOCK C UNLOCK C 沒遵守兩階段鎖協(xié)議沒遵守兩階段鎖協(xié)議 LOCK A LOCK A UNLOCK A UNLOCK A LOCK B LOCK B

24、LOCK C LOCK C UNLOCK C UNLOCK C UNLOCK B UNLOCK B 發(fā)現(xiàn)死鎖超時法 l即一個事務(wù)在等待的時間超過了規(guī)定的時限后就認為發(fā)生了死鎖。 l這種方法非常不可靠,如果設(shè)置的等待時限長,則不能及時發(fā)現(xiàn)死鎖;如果設(shè)置的等待時限短,則可能會將沒有發(fā)生死鎖的事務(wù)誤判為死鎖。 發(fā)現(xiàn)死鎖等待圖法 l即通過有向圖判定事務(wù)是否是可串行化的,如果是則說明沒有發(fā)生死鎖,否則說明發(fā)生了死鎖。l具體思路是:用節(jié)點來表示正在運行的事務(wù),用有向邊來表示事務(wù)之間的等待關(guān)系,如右圖所示,如果有向圖中發(fā)現(xiàn)回路,則說明發(fā)生了死鎖。 解決死鎖發(fā)現(xiàn)死鎖后解決死鎖的一般策略是:自動使“年輕”的事務(wù)

25、(即完成工作量少的事務(wù))先退回去,然后讓“年老”的事務(wù)(即完成工作量多的事務(wù))先執(zhí)行,等“年老”的事務(wù)完成并釋放封鎖后,“年輕”的事務(wù)再重新執(zhí)行。 “活鎖”沒有發(fā)生死鎖也有可能某個事務(wù)永遠處于等待狀態(tài)“活鎖”T1:事務(wù)A共享封鎖資源S,成功T2:事務(wù)B試圖獨占封鎖資源S,等待T3:事務(wù)C在A釋放封鎖S之前,共享封鎖S成功T4:事務(wù)D在C釋放封鎖S之前,共享封鎖S成功結(jié)果事務(wù)B無限期等待避免“活鎖”避免“活鎖”按隊列實施封鎖lT1:事務(wù)A共享封鎖資源SlT2:事務(wù)B試圖獨占封鎖資源S,等待lT3:事務(wù)C在A釋放封鎖S之前申請對S的共享封鎖,由于事務(wù)B已經(jīng)在等待S,所以事務(wù)C排隊等待封鎖與隔離級別

26、封鎖的目的是隔離事務(wù),保證事務(wù)之間不互相干擾;不同的封鎖機制和事務(wù)管理方式實際對應(yīng)著不同的隔離級別。隔離級別可劃分為:l未提交讀l提交讀l可重復(fù)讀l可串行化未提交讀( READ UNCOMMITTED )事務(wù)隔離的最低級別,僅可保證不讀取物理損壞的數(shù)據(jù),甚至不介意讀“臟”數(shù)據(jù)。對應(yīng)封鎖的NOLOCK,即讀之前不加任何封鎖。 提交讀(READ COMMITTED) 默認級別,可以保證不讀取“臟”數(shù)據(jù)。對應(yīng)TABLOCK封鎖,即讀之前加共享封鎖,讀完之后即自動釋放封鎖??芍貜?fù)讀(REPEATABLE READ) 可以保證讀一致性,避免不一致分析問題。 對應(yīng)TABLOCK+HOLDLOCK封鎖,即讀

27、之前加共享封鎖,并將封鎖保持到事務(wù)結(jié)束??纱谢⊿ERIALIZABLE) 事務(wù)隔離的最高級別,事務(wù)之間完全隔離;如果事務(wù)在可串行化隔離級別上運行,則可以保證任何并發(fā)重疊事務(wù)均是串行的。根據(jù)情況對應(yīng)TABLOCKX或UPDLOCK封鎖,保證增、刪、改操作不受其他事務(wù)干擾。 設(shè)置隔離級別的命令 SET TRANSACTION ISOLATION LEVEL READ COMMITTED| READ UNCOMMITTED| REPEATABLE READ| SERIALIZABLE 封鎖與隔離級別 可以通過指定隔離級別或?qū)?shù)據(jù)資源實施封鎖達到事務(wù)隔離的目的;封鎖是實現(xiàn)并發(fā)操作的傳統(tǒng)方法(在SQL標準中沒有提及封鎖),適當?shù)倪\用封鎖并保證高并發(fā)操作性能是一件非常復(fù)雜的工作,這需要用戶深入了解各種封鎖的相容性,并設(shè)計封鎖的調(diào)度策略;SQL標準中規(guī)定了事務(wù)的隔離級別,即未提交讀、提交讀、可重復(fù)讀和可串行化,隔離級別解決了并發(fā)事務(wù)可能產(chǎn)生的丟失更新問題、未提交依賴問題、不一致分析問題和幻象讀問題,其中為了避免丟失更新問題,事務(wù)必須運行在可重復(fù)讀或可串行化隔離級別。 用戶可以根據(jù)事務(wù)的需要設(shè)定隔離級別,結(jié)果由數(shù)據(jù)庫管理系統(tǒng)控制封鎖和進行并發(fā)操作調(diào)度。 封鎖與隔離級別

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論