《數(shù)據(jù)庫》課件第8章-事務的并發(fā)_第1頁
《數(shù)據(jù)庫》課件第8章-事務的并發(fā)_第2頁
《數(shù)據(jù)庫》課件第8章-事務的并發(fā)_第3頁
《數(shù)據(jù)庫》課件第8章-事務的并發(fā)_第4頁
《數(shù)據(jù)庫》課件第8章-事務的并發(fā)_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1回顧事務的概念及特性事務的操作2系統(tǒng)恢復(補充)計算機系統(tǒng)故障是不可避免的。發(fā)生故障的原因多樣,如硬件故障、惡意破壞等。一旦故障發(fā)生,會對數(shù)據(jù)庫中的數(shù)據(jù)造成破壞,因此,DBMS必須采取措施,以保障即使發(fā)生故障,也必須使數(shù)據(jù)庫恢復到故障發(fā)生前的某一個狀態(tài),稱為系統(tǒng)恢復技術。3系統(tǒng)恢復1.單純以后備復本為基礎的恢復技術

周期性地把數(shù)據(jù)庫中數(shù)據(jù)轉儲到磁盤上。這就是后備復本。復本雖造成數(shù)據(jù)冗余,但是對恢復來說是必需的。當數(shù)據(jù)庫失效時,可取最近的后備復本來恢復數(shù)據(jù)庫。

缺點:最近后備復本至發(fā)生故障期間所發(fā)生的數(shù)據(jù)庫更新就會丟失,且取后備復本的周期愈長,丟失的數(shù)據(jù)更新也就愈多。4系統(tǒng)恢復2.以后備復本和運行記錄為基礎的恢復技術(1)前像

當數(shù)據(jù)庫被一個事務更新時,所涉及的物理塊被更新前的映像稱為該事務的前像。(2)后像當數(shù)據(jù)庫被一個事務更新時,所涉及的物理塊被更新后的映像稱為該事務的后像。5系統(tǒng)恢復數(shù)據(jù)庫的表結構:Student(StuID,StuName,StuAge,StuSex,StuCity,StuScore,DepID)Department(DepID,DepName,Total)判斷以下事務的前像、后像各是什么?事務T將學生A00001從1系轉入2系,有3個操作組成:①updatestudentsetDepID=2whereStuID=‘A00001’②updateDepartmentsetTotal=Total+1whereDepID=2③updateDepartmentsetTotal=Total-1whereDepID=1以后備復本和運行記錄為基礎的恢復技術6①updatestudentsetDepID=2whereStuID='A00001'②updateDepartmentsetTotal=Total-1whereDepID=1③updateDepartmentsetTotal=Total+1whereDepID=2DepID=1前像后像DepID=2Total=100Total=100Total=99Total=101操作①操作②操作③t以后備復本和運行記錄為基礎的恢復技術7DepID=1前像后像DepID=2Total=100Total=100Total=99Total=101操作①操作②操作③t保存COMMIT故障undo操作:以前像為參照,反向掃描日志,做逆操作恢復數(shù)據(jù)。執(zhí)行commit前數(shù)據(jù)已保存到數(shù)據(jù)庫,但此時還未執(zhí)行commit發(fā)生了故障;以后備復本和運行記錄為基礎的恢復技術8DepID=1前像后像DepID=2Total=100Total=100Total=99Total=101操作①操作②操作③tCOMMIT保存故障redo操作:以后像為參照,正向掃描日志,做正操作恢復數(shù)據(jù)。執(zhí)行commit后數(shù)據(jù)才會被保存到數(shù)據(jù)庫,但在commit之后保存數(shù)據(jù)庫之前發(fā)生了故障;9系統(tǒng)恢復3.基于多副本的恢復技術

如果系統(tǒng)中有多個數(shù)據(jù)庫副本,可以利用這些副本互為備份,用于恢復。常用于分布式數(shù)據(jù)庫系統(tǒng)中。

讀數(shù)據(jù)時,可以選擇其中任一個結點上的數(shù)據(jù);

寫數(shù)據(jù)時,每個結點都寫入同樣的內容。

10練習1:有某數(shù)據(jù)庫系統(tǒng)在運行過程中發(fā)生了系統(tǒng)故障,發(fā)生故障時正在運行事務t1和t2。進行故障恢復時,在日志文件中發(fā)現(xiàn)有t1事務的開始記錄而沒有結束記錄;有t2的開始記錄和結束記錄,但t2對數(shù)據(jù)庫的修改還沒有寫到數(shù)據(jù)庫中。如何恢復數(shù)據(jù)庫到一致狀態(tài)?11練習2:具有檢查點的恢復技術Tc(保存點)Tf(系統(tǒng)故障)

REDOUNDOUNDO

REDOT2T3T4T5什么都不做T112思考:寫一個事務執(zhí)行售票點售票功能。每個售票點售票完成需要2個步驟,首先查看數(shù)據(jù)庫中票的張數(shù)是否大于0,如果大于0,則售票后更新數(shù)據(jù)庫票的張數(shù)。售票信息存在表Ticket(TicketInfo,TicketLeaveNum)中。13思考:解決方案:CREATEPROCprcSellTicket@TicketInfovarchar(20),--車次信息@TicketNumint--售出張數(shù)AS…BegintranDeclare@TicketLeaveNumintSelect@TicketLeaveNum=TicketLeaveNumfromTicketWhereTicketInfo=@TicketInfo--①waitfordelay'00:00:20'UpdateTicketsetTicketLeaveNum=@TicketLeaveNum–@TicketNumWhereTicketInfo=@TicketInfo--②If(@TicketLeaveNum<@TicketNum) beginrollbacktranprint'售票失敗'endElse beginCommittranprint'售票成功'end14思考:TicketT001,16售票點A售票點B時刻1時刻2時刻3時刻4①read,16②read,16…

③16-1=15,writetoDB④16-1=15,writetoDB15思考:TicketT001,15售票點A售票點B時刻1時刻2時刻3時刻4①read,16②read,16…

③16-1=15,writetoDB④16-1=15,writetoDB168.5.1并發(fā)的概念:

多個用戶在執(zhí)行相同的事務時,會導致數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生錯誤信息,這種情況稱為事務的并發(fā)。17事務的并發(fā)

多個用戶在執(zhí)行相同的事務時,事務會產生并發(fā)情況,從而導致數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生錯誤信息,實際中我們應該考慮到并發(fā)的存在,并試圖解決這種并發(fā)情況。解決方案:1.鎖機制2.設置事務的隔離級別18并發(fā)問題的控制—鎖機制共享鎖排他鎖

共享鎖又稱為讀鎖、S鎖。又稱為寫鎖、X鎖。

T1

SXSYNXNNX鎖、S鎖的相容矩陣

T219并發(fā)問題的控制—排他鎖TicketT001,16售票點A售票點B時刻1時刻2時刻3時刻4時刻5時刻6①獲得X鎖read,16…

③獲得X鎖read,15

②16-1=15,writetoDBcommit

釋放x鎖事務TA事務TB申請X鎖等待等待等待④15-1=14,writetoDBcommit

釋放x鎖…

20并發(fā)問題的控制—共享鎖TicketT001,16售票點A售票點B時刻1時刻2時刻3時刻4時刻5時刻6①獲得S鎖read,16…(釋放S鎖)

…釋放S鎖

③16-1=15,writetoDBcommit

事務TA事務TB申請S鎖獲得S鎖②read,16④16-1=15,writetoDBcommit21修改后的事務—鎖機制CREATEPROCprcSellTicket@TicketInfovarchar(20),--車次信息@TicketNumint--售出張數(shù)ASBegintranselectTicketLeaveNumfromTicketwith(tablockx)Declare@TicketLeaveNumintSelect@TicketLeaveNum=TicketLeaveNumfromTicketWhereTicketInfo=@TicketInfo--①waitfordelay'00:00:20.005'UpdateTicketsetTicketLeaveNum=@TicketLeaveNum–@TicketNumWhereTicketInfo=@TicketInfo--②If(@TicketLeaveNum<@TicketNum) beginrollbacktranprint‘售票失敗‘endElsebeginCommittranprint‘售票成功‘end為Ticket表加排他鎖22并發(fā)問題的控制——隔離級別(1)未提交讀(readuncommitted)(2)已提交讀(readcommitted)(3)可重復讀(repeatableread)(4)可序列化(serializable)23未提交讀當前事務其他事務讀能讀,能修改修改能讀,不能修改規(guī)則:售票點A售票點B時刻1時刻2時刻3時刻4①read,16②read,16…

③16-1=15,writetoDB④16-1=15,writetoDB事務TA事務TB24已提交讀當前事務其他事務讀能讀,能修改修改不能讀,不能修改規(guī)則:售票點A售票點B時刻1時刻2時刻3時刻4①read,16②read,16…

③16-1=15,writetoDB④16-1=15,writetoDB事務TA事務TB25可重復讀當前事務其他事務讀能讀,不能修改修改不能讀,不能修改規(guī)則:售票點A售票點B時刻1時刻2時刻3時刻4①read,16②read,16…

等待等待事務TA事務TB26可序列化當前事務執(zhí)行完另一事務才能開始,可解決所有并發(fā)情況。27隔離級別及其作用隔離級別臟讀丟失更新不可重復讀幻讀未提交讀是是是是已提交讀否是是是可重復讀否否否是序列化否否否否設置隔離級別:settransactionisolationlevel{隔離級別}28修改后的事務—設置隔離級別CREATEPROCprcSellTicket@TicketInfovarchar(20),--車次信息@TicketNumint--售出張數(shù)ASBegintranDeclare@TicketLeaveNumintSelect@TicketLeaveNum=TicketLeaveNumfromTicketWhereTicketInfo=@TicketInfo--①waitfordelay'00:00:20.005'UpdateTicketsetTicketLeaveNum=@TicketLeaveNum–@TicketNumWhereTicketInfo=@TicketInfo--②If(@TicketLeaveNum<@TicketNum) beginrollbacktranprint‘售票失敗‘endElsebeginCommittranprint‘售票成功‘endsettransactionisolationlevelrepeatableread29串行調度T1①readA=1000A=A-50writeA②readB=2000B=B+50writeBT2③readA=950T=50A=A-TwriteA④readB=2050B=B+TwriteBT1①readA=1000A=A-50writeA

③readB=2000B=B+50writeBT2②readA=950T=50A=A-TwriteA

④readB=2050B=B+TwriteB并發(fā)調度30事務的并發(fā)(補充)

并非所有并行執(zhí)行的多個事務都會產生并發(fā)情況,如果多個事務同時執(zhí)行并不會產生并發(fā)錯誤,那么加上鎖或隔離級別會降低執(zhí)行效率。如何有效地判斷多個事務是否會并發(fā)呢?

事務并發(fā)產生的錯誤主要有三類:丟失更新、不可重復讀和臟讀。31丟失更新T1①readA=16

③A=A-1writeAT2②readA=16

④A=A-1writeA思考:丟失更新的根源是什么?結論:在事務提交前的同一個時間段出現(xiàn)了多個事務的寫操作,會造成并發(fā)錯誤。寫-寫沖突32不可重復讀T1①read(x)③read(x)

T2②write(x-1)T1①read(x)write(x-1)

③rollbackT2②read(x)

臟讀結論:

一個事務寫另一個尚未提交且在讀的事務;或一個事務讀另一個已更新且尚未提交的事務會造成并發(fā)錯誤。讀-寫沖突33串行調度T1①readA=1000A=A-50writeA②readB=2000B=B+50writeBT2③readA=950T=50A=A-TwriteA④readB=2050B=B+TwriteBT1①readA=1000A=A-50writeA

③readB=2000B=B+50writeBT2②readA=950T=50A=A-TwriteA

④readB=2050B=B+TwriteB并發(fā)調度34思考:什么樣的調度不會產生并發(fā)問題T1①readA=1000A=A-50writeA②readB=2000B=B+50writeBT2③readA=950T=50A=A-TwriteA④readB=2050B=B+TwriteBT1①readA=1000A=A-50writeA

③readB=2000B=B+50writeBT2②readA=950T=50A=A-TwriteA

④readB=2050B=B+TwriteB35準則(補充):DBMS把可串行化作為并發(fā)控制正確性的準則!!!判斷是否可串行化的方法是前趨圖。36練習:T1read(A)write(A)

read(B)write(B)read(B)T2read(A)write(A)

wirte(B)read(B)沖突沖突不沖突不沖突37事務并發(fā)處理的判斷-T1②readxT2③ready⑤wirtexT3①writey

④writex⑥writezT4⑦readz⑧writex前趨圖38事務并發(fā)處理的判斷調度序列:W3(y)R1(x)R2(y)W3(x)W2(x)W3(z)R4(z)W4(x)解決方案:(1)找出沖突操作對:R1(x)W3(x)、R1(x)W2(x)、R1(x)W4(x)、W3(x)W2(x)、W3(x)W4(x)、W2(x)W4(x)、W3(y)R2(y)、W3(z)R4(z)(2)根據(jù)沖突操作對畫前驅圖:(3)如果前驅圖無回路,則并發(fā)處理不影響執(zhí)行結果。T1T2T3T439事務并發(fā)處理-等價串行化調度調度序列:W3(y)R1(x)R2(y)W3(x)W2(x)W3(z)R4(z)W4(x)解決方案:R1(x)W3(y)W3(x)W3(z)R2(y)W2(x)R4(z)W4(x)T1T2T3T440作業(yè)1:T1①readA=16

③A=A-1writeAT2②readA=16

④A=A-1writeA思考:使用前趨圖判斷T1和T2事務能否并發(fā)完成?41作業(yè)2(2010上半年軟考試題):

某航空售票系統(tǒng)負責所有本地起飛航班的機票銷售,并設有多個機票銷售網點,各售票網點使用相同的售票程序。假設有兩個旅客在兩個不同的機票銷售網點同時預定同一個航班A的機票x,則:Ri(x)表示某個機票銷售網點讀剩余機票數(shù)x;Wi(x-j)表示某個機票銷售網點售出j張機票后修改剩余機票

溫馨提示

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

評論

0/150

提交評論