版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
事務管理目錄CONTENTS10.1事務的基本概念0110.2SQLServer2022中的事務控制語句0210.3事務管理示例0310.4事務的隔離級別0410.5事務與并發控制0510.1事務的基本概念一、什么是事務事務(Transaction)是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位事務和程序是兩個概念在關系數據庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序一個應用程序通常包含多個事務事務是恢復和并發控制的基本單位二、如何定義事務顯式定義方式
BEGINTRANSACTIONBEGINTRANSACTIONSQL語句1SQL語句1
SQL語句2SQL語句2
。。。。。。。。。。
COMMITROLLBACK隱式方式當用戶沒有顯式地定義事務時,DBMS按缺省規定自動劃分事務begintransactionselect*fromcourseupdatecoursesetcredit=4wherecname='數據庫'rollback事務結束COMMIT事務正常結束提交事務的所有操作(讀+更新)事務中所有對數據庫的更新永久生效ROLLBACK事務異常終止事務運行的過程中發生了故障,不能繼續執行回滾事務的所有更新操作事務滾回到開始時的狀態三、事務的特性(ACID特性)事務的ACID特性:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續性(Durability)保證事務ACID特性是事務處理的任務。破壞事務ACID特性的因素:多個事務并行運行時,不同事務的操作交叉執行事務在運行過程中被強行停止1.原子性事務是數據庫的邏輯工作單位事務中包括的諸操作要么都做,要么都不做2.一致性事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態一致性狀態: 數據庫中只包含成功事務提交的結果不一致狀態: 數據庫中包含失敗事務的結果一致性與原子性銀行轉帳:從帳號A中取出一萬元,存入帳號B。定義一個事務,該事務包括兩個操作這兩個操作要么全做,要么全不做全做或者全不做,數據庫都處于一致性狀態。如果只做一個操作,數據庫就處于不一致性狀態。
B=B+1
A=A-1BA3.隔離性對并發執行而言一個事務的執行不能被其他事務干擾一個事務內部的操作及使用的數據對其他并發事務是隔離的并發執行的各個事務之間不能互相干擾
讀A=16
A←A-3寫回A=13①讀A=16
②
③A←A-1
寫回A=15
④T2T1T1的修改被T2覆蓋了!4.持續性持續性也稱永久性(Permanence)一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其執行結果有任何影響。10.2SQLServer事務控制語句開始事務語法為`BEGINTRANSACTION[事務名/變量]`,如`BEGINTRANSACTIONTransferMoney`,用于初始化事務。開始事務提交事務語法為`COMMITTRANSACTION[事務名/變量]`,作用是使修改永久生效,如`COMMITTRANSACTIONTransferMoney`,確保操作成功保存。提交事務回滾事務語法為`ROLLBACKTRANSACTION[事務名/變量/保存點]`,作用是撤銷操作,恢復到事務開始前狀態,如`ROLLBACKTRANSACTIONTransferMoney`,用于處理錯誤?;貪L事務保存點語法為`SAVETRANSACTION保存點名`,作用是回滾到事務中的特定位置,而非整個事務,如`SAVETRANSACTIONUpdateInventory`后可單獨回滾此部分。保存點事務控制語句使用場景01提交場景提交事務適用于所有操作成功完成時,如轉賬雙方金額修改正確,通過`COMMITTRANSACTION`確保操作永久生效。02回滾場景回滾事務用于操作出錯時,如余額不足或數據沖突,通過`ROLLBACKTRANSACTION`撤銷操作,恢復到事務開始前狀態。03保存點場景保存點適用于復雜事務中部分操作需單獨回滾時,如訂單處理中僅回滾庫存修改,保留用戶信息插入,通過`SAVETRANSACTION`和`ROLLBACKTRANSACTION`實現。10.3事務管理示例21銀行轉賬事務演示多表操作事務演示10.4事務的隔離級別隔離級別定義隔離級別定義為并發環境下,事務之間的隔離程度,決定了事務對其他事務的可見性,作用是平衡數據一致性與并發性能。支持的隔離級別SQLServer2022支持的隔離級別包括讀未提交、讀已提交(默認)、可重復讀、可串行化、快照隔離、讀已提交快照,各有不同特點和適用場景。隔離級別對比隔離級別防止臟讀?防止不可重復讀?防止幻讀?并發性能適用場景讀未提交(READUNCOMMITTED)???最高低一致性要求(如統計分析)讀已提交(READCOMMITTED)???較高常規應用(默認級別)可重復讀(REPEATABLEREAD)???中等需多次讀一致(復雜業務)可串行化(SERIALIZABLE)???最低高一致性(金融交易)快照隔離(SNAPSHOT)???較高高并發(電商、在線交易)讀已提交快照???較高提升讀已提交的并發性能10.5事務與并發控制10.5.1并發控制概述10.5.2封鎖10.5.3活鎖和死鎖10.5.4并發調度的可串行性10.5.5兩段鎖協議10.5.6封鎖粒度問題的產生多用戶數據庫系統的存在允許多個用戶同時使用的數據庫系統飛機定票數據庫系統銀行數據庫系統特點:在同一時刻并發運行的事務數可達數百個問題的產生(續)不同的多事務執行方式
(1)事務串行執行每個時刻只有一個事務運行,其他事務必須等到這個事務結束以后方能運行不能充分利用系統資源,發揮數據庫共享資源的特點T1T2T3事務的串行執行方式問題的產生(續)(2)交叉并發方式(InterleavedConcurrency)在單處理機系統中,事務的并行執行是這些并行事務的并行操作輪流交叉運行單處理機系統中的并行事務并沒有真正地并行運行,但能夠減少處理機的空閑時間,提高系統的效率問題的產生(續)事務的交叉并發執行方式問題的產生(續)(3)同時并發方式(simultaneousconcurrency)多處理機系統中,每個處理機可以運行一個事務,多個處理機可以同時運行多個事務,實現多個事務真正的并行運行事務并發執行帶來的問題會產生多個事務同時存取同一數據的情況可能會存取和存儲不正確的數據,破壞事務一致性和數據庫的一致性10.5.1并發控制概述★并發控制機制的任務對并發操作進行正確調度保證事務的隔離性保證數據庫的一致性并發控制概述(續)并發操作帶來數據的不一致性實例[例1]飛機訂票系統中的一個活動序列①甲售票點(甲事務)讀出某航班的機票余額A,設A=16;T1②乙售票點(乙事務)讀出同一航班的機票余額A,也為16;T2③甲售票點賣出一張機票,修改余額A←A-1,所以A為15,把A寫回數據庫;④乙售票點也賣出一張機票,修改余額A←A-1,所以A為15,把A寫回數據庫結果明明賣出兩張機票,數據庫中機票余額只減少1T1的修改被T2覆蓋了!并發控制概述(續)這種情況稱為數據庫的不一致性,是由并發操作引起的。在并發操作情況下,對甲、乙兩個事務的操作序列的調度是隨機的。若按上面的調度序列執行,甲事務的修改就被丟失。原因:第4步中乙事務修改A并寫回后覆蓋了甲事務的修改并發控制概述(續)★并發操作帶來的數據不一致性:丟失修改(LostUpdate)不可重復讀(Non-repeatableRead)讀“臟”數據(DirtyRead)記號R(x):讀數據xW(x):寫數據x
1.丟失修改兩個事務T1和T2讀入同一數據并修改,T2的提交結果破壞了T1提交的結果,導致T1的修改被丟失。上面飛機訂票例子就屬此類。T1T2①R(A)=16②R(A)=16③A←A-1W(A)=15W④A←A-1W(A)=152.不可重復讀不可重復讀是指事務T1讀取數據后,事務T2
執行更新操作,使T1無法再現前一次讀取結果。不可重復讀包括三種情況:(1)事務T1讀取某一數據后,事務T2對其做了修改,當事務T1再次讀該數據時,得到與前一次不同的值不可重復讀(續)T1讀取B=100進行運算T2讀取同一數據B,對其進行修改后將B=200寫回數據庫。T1為了對讀取值校對重讀B,B已為200,與第一次讀取值不一致T1T2①R(A)=50R(B)=100求和=150②R(B)=100B←B*2(B)=200③R(A)=50R(B)=200和=250(驗算不對)不可重復讀(續)(2)事務T1按一定條件從數據庫中讀取了某些數據記錄后,事務T2刪除了其中部分記錄,當T1再次按相同條件讀取數據時,發現某些記錄消失了(3)事務T1按一定條件從數據庫中讀取某些數據記錄后,事務T2插入了一些記錄,當T1再次按相同條件讀取數據時,發現多了一些記錄。后兩種不可重復讀有時也稱為幻影現象(PhantomRow)3.讀“臟”數據
讀“臟”數據是指:事務T1修改某一數據,并將其寫回磁盤事務T2讀取同一數據后,T1由于某種原因被撤銷這時T1已修改過的數據恢復原值,T2讀到的數據就與數據庫中的數據不一致T2讀到的數據就為“臟”數據,即不正確的數據讀“臟”數據(續)T1T2①R(C)=100C←C*2W(C)=200②R(C)=200③ROLLBACKC恢復為100T1將C值修改為200,T2讀到C為200T1由于某種原因撤銷,其修改作廢,C恢復原值100這時T2讀到的C為200,與數據庫內容不一致,就是“臟”數據并發控制概述(續)★數據不一致性:由于并發操作破壞了事務的隔離性并發控制就是要用正確的方式調度并發操作,使一個用戶事務的執行不受其他事務的干擾,從而避免造成數據的不一致性10.5.2封鎖封鎖就是事務T在對某個數據對象(例如表、記錄等)操作之前,先向系統發出請求,對其加鎖。加鎖后事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數據對象?;痉怄i類型一個事務對某個數據對象加鎖后究竟擁有什么樣的控制由封鎖的類型決定?!锘痉怄i類型排它鎖(ExclusiveLocks,簡記為X鎖)共享鎖(ShareLocks,簡記為S鎖)排它鎖排它鎖又稱為寫鎖若事務T對數據對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖保證其他事務在T釋放A上的鎖之前不能再讀取和修改A共享鎖共享鎖又稱為讀鎖若事務T對數據對象A加上S鎖,則其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖保證其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改
★鎖的相容矩陣Y=Yes,相容的請求N=No,不相容的請求
T1T2XS-XNNYSNYY-YYY1.一級封鎖協議一級封鎖協議事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。正常結束(COMMIT)非正常結束(ROLLBACK)一級封鎖協議可防止丟失修改,并保證事務T是可恢復的。在一級封鎖協議中,如果僅僅是讀數據不對其進行修改,是不需要加鎖的:所以它不能保證可重復讀和不讀“臟”數據。使用封鎖機制解決丟失修改問題T1T2①XlockA②R(A)=16XlockA③A←A-1等待W(A)=15等待Commit等待UnlockA等待④獲得XlockAR(A)=15A←A-1⑤W(A)=14CommitUnlockA例:事務T1在讀A進行修改之前先對A加X鎖當T2再請求對A加X鎖時被拒絕T2只能等待T1釋放A上的鎖后獲得對A的X鎖這時T2讀到的A已經是T1更新過的值15T2按此新的A值進行運算,并將結果值A=14寫回到磁盤。避免了丟失T1的更新。沒有丟失修改2.二級封鎖協議二級封鎖協議一級封鎖協議加上事務T在讀取數據R之前必須先對其
加S鎖,讀完后即可釋放S鎖。二級封鎖協議可以防止丟失修改和讀“臟”數據。在二級封鎖協議中,由于讀完數據后即可釋放S鎖,所以它不能保證可重復讀。使用封鎖機制解決讀“臟”數據問題T1T2①XlockCR(C)=100C←C*2W(C)=200②SlockC等待③ROLLBACK等待(C恢復為100)等待UnlockC等待④獲得SlockCR(C)=100⑤CommitCUnlockC例事務T1在對C進行修改之前,先對C加X鎖,修改其值后寫回磁盤T2請求在C上加S鎖,因T1已在C上加了X鎖,T2只能等待T1因某種原因被撤銷,C恢復為原值100T1釋放C上的X鎖后T2獲得C上的S鎖,讀C=100。避免了T2讀“臟”數據不讀“臟”數據
3.三級封鎖協議三級封鎖協議一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。三級封鎖協議可防止丟失修改、讀臟數據和不可重復讀。使用封鎖機制解決不可重復讀問題T1T2①SlockASlockBR(A)=50R(B)=100
求和=150②XlockB等待③R(A)=50等待R(B)=100等待
求和=150等待Commit等待UnlockA等待UnlockB等待④獲得XlockBR(B)=100B←B*2⑤W(B)=200CommitUnlockB事務T1在讀A,B之前,先對A,B加S鎖其他事務只能再對A,B加S鎖,而不能加X鎖,即其他事務只能讀A,B,而不能修改當T2為修改B而申請對B的X鎖時被拒絕只能等待T1釋放B上的鎖T1為驗算再讀A,B,這時讀出的B仍是100,求和結果仍為150,即可重復讀T1結束才釋放A,B上的S鎖。T2才獲得對B的X鎖可重復讀4.封鎖協議小結三級協議的主要區別什么操作需要申請封鎖以及何時釋放鎖(即持鎖時間)不同的封鎖協議使事務達到的一致性級別不同封鎖協議級別越高,一致性程度越高
X鎖S鎖一致性保證
操作結束釋放事務結束釋放操作結束釋放事務結束釋放不丟失修改不讀“臟”數據可重復讀一級封鎖協議
√
√
二級封鎖協議
√√
√√
三級封鎖協議
√
√√√√表11.1不同級別的封鎖協議和一致性保證10.5.3活鎖和死鎖活鎖:事務T1封鎖了數據R事務T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當T1釋放了R上的封鎖之后系統首先批準了T3的請求,T2仍然等待。T4又請求封鎖R,當T3釋放了R上的封鎖之后系統又批準了T4的請求……T2有可能永遠等待,這就是活鎖的情形活鎖(續)活鎖(續)避免活鎖:采用先來先服務的策略當多個事務請求封鎖同一數據對象時按請求封鎖的先后次序對這些事務排隊該數據對象上的鎖一旦釋放,首先批準申請隊列中第一個事務獲得鎖10.5.3.2死鎖事務T1封鎖了數據R1T2封鎖了數據R2T1又請求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖接著T2又申請封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖這樣T1在等待T2,而T2又在等待T1,T1和T2兩個事務永遠不能結束,形成死鎖。死鎖(續)T1T2lockR1??LockR2??LockR2.?等待?等待LockR1等待等待等待等待?死鎖解決死鎖的方法兩類方法1.預防死鎖2.死鎖的診斷與解除——DBMS常用做法1.死鎖的預防產生死鎖的原因是兩個或多個事務都已封鎖了一些數據對象,然后又都請求對已為其他事務封鎖的數據對象加鎖,從而出現死等待。★預防死鎖的發生就是要破壞產生死鎖的條件預防死鎖的方法
★一次封鎖法順序封鎖法2.死鎖的診斷與解除死鎖的診斷超時法事務等待圖法解除死鎖選擇一個處理死鎖代價最小的事務,將其撤消釋放此事務持有的所有的鎖,使其它事務能繼續運行下去
10.5.4并發調度的可串行性DBMS對并發事務不同的調度可能會產生不同的結果什么樣的調度是正確的?
10.5.4可串行化調度可串行化(Serializable)調度多個事務的并發執行是正確的,當且僅當其結果與按某一秩序串行地執行這些事務時的結果相同★可串行性(Serializability)是并發事務正確調度的準則一個給定的并發調度,當且僅當它是可串行化的,才認為是正確調度10.5.5兩段鎖協議封鎖協議運用封鎖方法時,對數據對象加鎖時需要約定一些規則何時申請封鎖持鎖時間何時釋放封鎖等兩段封鎖協議(Two-PhaseLocking,簡稱
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 獸藥企業倉儲養護管理制度
- 廢礦物油資源化利用項目施工方案
- 高中體育與健康必修第一冊“車輪跳與體能”知識清單
- 小學道德與法治一年級下冊第一單元“好習慣早養成”知識清單:我不拖拉
- 小學語文三年級上冊《灰雀》精讀教學教案
- 小學五年級道德與法治《在沖突中成長-校園沖突解決模擬體驗》教案
- 初中九年級數學“概率的進一步認識”知識清單
- 初中地理七年級上冊核心知識清單:海陸變遷(湘教版)
- 九年級化學(滬教版上冊)核心知識清單:原子的構成與相對原子質量深度解析
- 嵌入式存儲芯片項目規劃選址論證報告
- JTG B02-2013 公路工程抗震規范
- 2024年湖北農谷實業集團有限責任公司招聘筆試沖刺題(帶答案解析)
- (正式版)JBT 9229-2024 剪叉式升降工作平臺
- 電梯維保方案完整版
- 工程造價專業教學資源庫申報書-專業教學資源庫備選項目材料
- 《骨關節炎的康復》課件
- HGT4134-2022 工業聚乙二醇PEG
- 跨境電子商務英語全套教學課件
- 人教版高中地理必修二 同步練習冊電子版
- 靈寶市開源礦業有限責任公司柏樹嶺金礦礦產資源開采與生態修復方案
- CMOS制造工藝及流程教材
評論
0/150
提交評論