




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
上海大學(xué)自動(dòng)化系林小玲第6章數(shù)據(jù)庫(kù)的管理3
6.1
數(shù)據(jù)庫(kù)恢復(fù)技術(shù)6.1.1
事務(wù)的基本概念6.1.2
數(shù)據(jù)庫(kù)恢復(fù)概述6.1.3
數(shù)據(jù)庫(kù)故障類型6.1.4
數(shù)據(jù)庫(kù)故障恢復(fù)實(shí)行技術(shù)6.1數(shù)據(jù)庫(kù)恢復(fù)技術(shù)6.1.5
數(shù)據(jù)庫(kù)故障恢復(fù)策略
6.1.6
數(shù)據(jù)庫(kù)鏡像6.1.7
小結(jié)4
6.1.1事務(wù)的基本概念事務(wù)的特征事務(wù)定義5
一、事務(wù)(Transaction)定義一個(gè)數(shù)據(jù)庫(kù)操作序列一個(gè)不可分割的工作單位恢復(fù)和并發(fā)控制的基本單位
事務(wù)和程序比較在關(guān)系數(shù)據(jù)庫(kù)中,一個(gè)事務(wù)可以是一條或多條SQL語(yǔ)句,也可以包含一個(gè)或多個(gè)程序。一個(gè)程序通常包含多個(gè)事務(wù)
6
定義事務(wù)顯式定義方式
BEGINTRANSACTIONBEGINTRANSACTIONSQL語(yǔ)句1SQL語(yǔ)句1SQL語(yǔ)句2SQL語(yǔ)句2………………
COMMIT
ROLLBACK隱式定義方式當(dāng)用戶沒(méi)有顯式地定義事務(wù)時(shí),DBMS按缺省規(guī)定自動(dòng)劃分事務(wù)7
二、事務(wù)的特性(ACID特性)事務(wù)的ACID特性:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)8
6.1.2數(shù)據(jù)庫(kù)恢復(fù)概述故障是不可避免的系統(tǒng)故障:計(jì)算機(jī)軟、硬件故障人為故障:操作員的失誤、惡意的破壞等。數(shù)據(jù)庫(kù)的恢復(fù) 把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(亦稱為一致?tīng)顟B(tài)或完整狀態(tài))9
6.1.3故障的種類系統(tǒng)故障
介質(zhì)故障
計(jì)算機(jī)病毒
事務(wù)內(nèi)部的故障
10
一、事務(wù)內(nèi)部的故障事務(wù)內(nèi)部的故障有的是可以通過(guò)事務(wù)程序本身發(fā)現(xiàn)的(見(jiàn)下面轉(zhuǎn)賬事務(wù)的例子)
有的是非預(yù)期的11
事務(wù)內(nèi)部的故障(續(xù))例如,銀行轉(zhuǎn)賬事務(wù),這個(gè)事務(wù)把一筆金額從一個(gè)賬戶甲轉(zhuǎn)給另一個(gè)賬戶乙。
BEGINTRANSACTION
讀賬戶甲的余額BALANCE;
BALANCE=BALANCE-AMOUNT;(AMOUNT為轉(zhuǎn)賬金額)
寫回BALANCE;
IF(BALANCE<0)THEN{
打印'金額不足,不能轉(zhuǎn)賬';
ROLLBACK;(撤銷剛才的修改,恢復(fù)事務(wù))}ELSE{
讀賬戶乙的余額BALANCE1;
BALANCE1=BALANCE1+AMOUNT;寫回BALANCE1;
COMMIT;
}12
事務(wù)內(nèi)部的故障(續(xù))這個(gè)例子所包括的兩個(gè)更新操作要么全部完成要么全部不做。否則就會(huì)使數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),例如只把賬戶甲的余額減少了而沒(méi)有把賬戶乙的余額增加。在這段程序中若產(chǎn)生賬戶甲余額不足的情況,應(yīng)用程序可以發(fā)現(xiàn)并讓事務(wù)滾回,撤銷已作的修改,恢復(fù)數(shù)據(jù)庫(kù)到正確狀態(tài)。13
事務(wù)內(nèi)部的故障(續(xù))事務(wù)內(nèi)部更多的故障是非預(yù)期的,是不能由應(yīng)用程序處理的。運(yùn)算溢出并發(fā)事務(wù)發(fā)生死鎖而被選中撤銷該事務(wù)違反了某些完整性限制等以后,事務(wù)故障僅指這類非預(yù)期的故障
事務(wù)故障的恢復(fù):撤消事務(wù)(UNDO)14
二、系統(tǒng)故障系統(tǒng)故障稱為軟故障,是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,使得系統(tǒng)要重新啟動(dòng)。整個(gè)系統(tǒng)的正常運(yùn)行突然被破壞所有正在運(yùn)行的事務(wù)都非正常終止不破壞數(shù)據(jù)庫(kù)內(nèi)存中數(shù)據(jù)庫(kù)緩沖區(qū)的信息全部丟失
15
系統(tǒng)故障的常見(jiàn)原因特定類型的硬件錯(cuò)誤(如CPU故障)操作系統(tǒng)故障DBMS代碼錯(cuò)誤系統(tǒng)斷電16
系統(tǒng)故障的恢復(fù)發(fā)生系統(tǒng)故障時(shí),事務(wù)未提交恢復(fù)策略:強(qiáng)行撤消(UNDO)所有未完成事務(wù)
發(fā)生系統(tǒng)故障時(shí),事務(wù)已提交,但緩沖區(qū)中的信息尚未完全寫回到磁盤上?;謴?fù)策略:重做(REDO)所有已提交的事務(wù)17
三、介質(zhì)故障介質(zhì)故障:稱為硬故障,指外存故障磁盤損壞磁頭碰撞操作系統(tǒng)的某種潛在錯(cuò)誤瞬時(shí)強(qiáng)磁場(chǎng)干擾18
介質(zhì)故障的恢復(fù)裝入數(shù)據(jù)庫(kù)發(fā)生介質(zhì)故障前某個(gè)時(shí)刻的數(shù)據(jù)副本
重做自此時(shí)始的所有成功事務(wù),將這些事務(wù)已提交的結(jié)果重新記入數(shù)據(jù)庫(kù)19
四、計(jì)算機(jī)病毒計(jì)算機(jī)病毒一種人為的故障或破壞,是一些惡作劇者研制的一種計(jì)算機(jī)程序可以繁殖和傳播危害破壞、盜竊系統(tǒng)中的數(shù)據(jù)破壞系統(tǒng)文件
20
故障小結(jié)各類故障,對(duì)數(shù)據(jù)庫(kù)的影響有兩種可能性一是數(shù)據(jù)庫(kù)本身被破壞二是數(shù)據(jù)庫(kù)沒(méi)有被破壞,但數(shù)據(jù)可能不正確,這是由于事務(wù)的運(yùn)行被非正常終止造成的。21
6.1.4恢復(fù)的實(shí)現(xiàn)技術(shù)6.1.4.1數(shù)據(jù)轉(zhuǎn)儲(chǔ)
6.1.4.2登記日志文件
22
6.1.4恢復(fù)的實(shí)現(xiàn)技術(shù)恢復(fù)操作的基本原理:冗余 利用存儲(chǔ)在系統(tǒng)其它地方的冗余數(shù)據(jù)來(lái)重建數(shù)據(jù)庫(kù)中已被破壞或不正確的那部分?jǐn)?shù)據(jù)恢復(fù)機(jī)制涉及的關(guān)鍵問(wèn)題如何建立冗余數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)(backup)登錄日志文件(logging)如何利用這些冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫(kù)恢復(fù)
23
6.1.4.1數(shù)據(jù)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)方法
什么是數(shù)據(jù)轉(zhuǎn)儲(chǔ)
24
一、什么是數(shù)據(jù)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)是指DBA將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到磁帶或另一個(gè)磁盤上保存起來(lái)的過(guò)程,備用的數(shù)據(jù)稱為后備副本或后援副本如何使用數(shù)據(jù)庫(kù)遭到破壞后可以將后備副本重新裝入重裝后備副本只能將數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài)25
二、轉(zhuǎn)儲(chǔ)方法1.靜態(tài)轉(zhuǎn)儲(chǔ)與動(dòng)態(tài)轉(zhuǎn)儲(chǔ)2.海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ)3.轉(zhuǎn)儲(chǔ)方法小結(jié)26
靜態(tài)轉(zhuǎn)儲(chǔ)在系統(tǒng)中無(wú)運(yùn)行事務(wù)時(shí)進(jìn)行的轉(zhuǎn)儲(chǔ)操作轉(zhuǎn)儲(chǔ)開(kāi)始時(shí)數(shù)據(jù)庫(kù)處于一致性狀態(tài)轉(zhuǎn)儲(chǔ)期間不允許對(duì)數(shù)據(jù)庫(kù)的任何存取、修改活動(dòng)得到的一定是一個(gè)數(shù)據(jù)一致性的副本優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單缺點(diǎn):降低了數(shù)據(jù)庫(kù)的可用性轉(zhuǎn)儲(chǔ)必須等待正運(yùn)行的用戶事務(wù)結(jié)束新的事務(wù)必須等轉(zhuǎn)儲(chǔ)結(jié)束27
動(dòng)態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)操作與用戶事務(wù)并發(fā)進(jìn)行轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取或修改優(yōu)點(diǎn)不用等待正在運(yùn)行的用戶事務(wù)結(jié)束不會(huì)影響新事務(wù)的運(yùn)行缺點(diǎn)不能保證副本中的數(shù)據(jù)正確有效[例]在轉(zhuǎn)儲(chǔ)期間的某個(gè)時(shí)刻Tc,系統(tǒng)把數(shù)據(jù)A=100轉(zhuǎn)儲(chǔ)到磁帶上,而在下一時(shí)刻Td,某一事務(wù)將A改為200。轉(zhuǎn)儲(chǔ)結(jié)束后,后備副本上的A已是過(guò)時(shí)的數(shù)據(jù)了28
動(dòng)態(tài)轉(zhuǎn)儲(chǔ)利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)得到的副本進(jìn)行故障恢復(fù)需要把動(dòng)態(tài)轉(zhuǎn)儲(chǔ)期間各事務(wù)對(duì)數(shù)據(jù)庫(kù)的修改活動(dòng)登記下來(lái),建立日志文件后備副本加上日志文件才能把數(shù)據(jù)庫(kù)恢復(fù)到某一時(shí)刻的正確狀態(tài)29
2.海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ)海量轉(zhuǎn)儲(chǔ):每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)
增量轉(zhuǎn)儲(chǔ):只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后更新過(guò)的數(shù)據(jù)
海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ)比較從恢復(fù)角度看,使用海量轉(zhuǎn)儲(chǔ)得到的后備副本進(jìn)行恢復(fù)更方便但如果數(shù)據(jù)庫(kù)很大,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲(chǔ)方式更實(shí)用更有效30
3.轉(zhuǎn)儲(chǔ)方法小結(jié)轉(zhuǎn)儲(chǔ)方法分類
轉(zhuǎn)儲(chǔ)狀態(tài)
動(dòng)態(tài)轉(zhuǎn)儲(chǔ)
靜態(tài)轉(zhuǎn)儲(chǔ)
轉(zhuǎn)儲(chǔ)方式
海量轉(zhuǎn)儲(chǔ)
動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ)
靜態(tài)海量轉(zhuǎn)儲(chǔ)
增量轉(zhuǎn)儲(chǔ)
動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ)
靜態(tài)增量轉(zhuǎn)儲(chǔ)
31
6.1.4.2登記日志文件日志文件的作用
登記日志文件
日志文件的格式和內(nèi)容
32
一、日志文件的格式和內(nèi)容什么是日志文件日志文件(log)是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件日志文件的格式以記錄為單位的日志文件以數(shù)據(jù)塊為單位的日志文件33
日志文件的格式和內(nèi)容(續(xù))以記錄為單位的日志文件內(nèi)容各個(gè)事務(wù)的開(kāi)始標(biāo)記(BEGINTRANSACTION)各個(gè)事務(wù)的結(jié)束標(biāo)記(COMMIT或ROLLBACK)各個(gè)事務(wù)的所有更新操作以上均作為日志文件中的一個(gè)日志記錄(logrecord)34
日志文件的格式和內(nèi)容(續(xù))以記錄為單位的日志文件,每條日志記錄的內(nèi)容事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù))操作類型(插入、刪除或修改)操作對(duì)象(記錄內(nèi)部標(biāo)識(shí))更新前數(shù)據(jù)的舊值(對(duì)插入操作而言,此項(xiàng)為空值)更新后數(shù)據(jù)的新值(對(duì)刪除操作而言,此項(xiàng)為空值)35
日志文件的格式和內(nèi)容(續(xù))以數(shù)據(jù)塊為單位的日志文件,每條日志記錄的內(nèi)容事務(wù)標(biāo)識(shí)(標(biāo)明是那個(gè)事務(wù))被更新的數(shù)據(jù)塊36
二、日志文件的作用進(jìn)行事務(wù)故障恢復(fù)進(jìn)行系統(tǒng)故障恢復(fù)協(xié)助后備副本進(jìn)行介質(zhì)故障恢復(fù)37
利用靜態(tài)轉(zhuǎn)儲(chǔ)副本和日志文件進(jìn)行恢復(fù)
靜態(tài)轉(zhuǎn)儲(chǔ)
運(yùn)行事務(wù)正常運(yùn)行─┼───────┼─────────────
Ta
Tb
Tf
└────────────
重裝后備副本
利用日志文件恢復(fù)繼續(xù)運(yùn)行恢復(fù)
─┼───────┼┈┈┈┈┈┈┈┈┼────登記日志文件↓38
利用靜態(tài)轉(zhuǎn)儲(chǔ)副本和日志文件進(jìn)行恢復(fù)上圖中:系統(tǒng)在Ta時(shí)刻停止運(yùn)行事務(wù),進(jìn)行數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)在Tb時(shí)刻轉(zhuǎn)儲(chǔ)完畢,得到Tb時(shí)刻的數(shù)據(jù)庫(kù)一致性副本系統(tǒng)運(yùn)行到Tf時(shí)刻發(fā)生故障為恢復(fù)數(shù)據(jù)庫(kù),首先由DBA重裝數(shù)據(jù)庫(kù)后備副本,將數(shù)據(jù)庫(kù)恢復(fù)至Tb時(shí)刻的狀態(tài)重新運(yùn)行自Tb~Tf時(shí)刻的所有更新事務(wù),把數(shù)據(jù)庫(kù)恢復(fù)到故障發(fā)生前的一致?tīng)顟B(tài)39
三、登記日志文件基本原則登記的次序嚴(yán)格按并行事務(wù)執(zhí)行的時(shí)間次序必須先寫日志文件,后寫數(shù)據(jù)庫(kù)寫日志文件操作:把表示這個(gè)修改的日志記錄寫到日志文件寫數(shù)據(jù)庫(kù)操作:把對(duì)數(shù)據(jù)的修改寫到數(shù)據(jù)庫(kù)中
40
登記日志文件(續(xù))為什么要先寫日志文件寫數(shù)據(jù)庫(kù)和寫日志文件是兩個(gè)不同的操作在這兩個(gè)操作之間可能發(fā)生故障如果先寫了數(shù)據(jù)庫(kù)修改,而在日志文件中沒(méi)有登記下這個(gè)修改,則以后就無(wú)法恢復(fù)這個(gè)修改了如果先寫日志,但沒(méi)有修改數(shù)據(jù)庫(kù),按日志文件恢復(fù)時(shí)只不過(guò)是多執(zhí)行一次不必要的UNDO操作,并不會(huì)影響數(shù)據(jù)庫(kù)的正確性41
6.1.5恢復(fù)策略6.1.5.1事務(wù)故障的恢復(fù)6.1.5.2系統(tǒng)故障的恢復(fù)
6.1.5.3介質(zhì)故障的恢復(fù)
*6.1.5.4具有檢查點(diǎn)故障恢復(fù)42
6.1.5.1事務(wù)故障的恢復(fù)事務(wù)故障:事務(wù)在運(yùn)行至正常終止點(diǎn)前被終止恢復(fù)方法由恢復(fù)子系統(tǒng)應(yīng)利用日志文件撤消(UNDO)此事務(wù)已對(duì)數(shù)據(jù)庫(kù)進(jìn)行的修改事務(wù)故障的恢復(fù)由系統(tǒng)自動(dòng)完成,對(duì)用戶是透明的,不需要用戶干預(yù)43
事務(wù)故障的恢復(fù)步驟1.反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)的更新操作。2.對(duì)該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫(kù)。插入操作,“更新前的值”為空,則相當(dāng)于做刪除操作刪除操作,“更新后的值”為空,則相當(dāng)于做插入操作若是修改操作,則相當(dāng)于用修改前值代替修改后值44
事務(wù)故障的恢復(fù)步驟3.繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做同樣處理。4.如此處理下去,直至讀到此事務(wù)的開(kāi)始標(biāo)記,事務(wù)故障恢復(fù)就完成了。
45
6.1.5.2系統(tǒng)故障的恢復(fù)系統(tǒng)故障造成數(shù)據(jù)庫(kù)不一致?tīng)顟B(tài)的原因未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新已寫入數(shù)據(jù)庫(kù)已提交事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新還留在緩沖區(qū)沒(méi)來(lái)得及寫入數(shù)據(jù)庫(kù)恢復(fù)方法1.Undo故障發(fā)生時(shí)未完成的事務(wù)2.Redo已完成的事務(wù)系統(tǒng)故障的恢復(fù)由系統(tǒng)在重新啟動(dòng)時(shí)自動(dòng)完成,不需要用戶干預(yù)46
系統(tǒng)故障的恢復(fù)步驟1. 正向掃描日志文件(即從頭掃描日志文件)重做(REDO)隊(duì)列:在故障發(fā)生前已經(jīng)提交的事務(wù)這些事務(wù)既有BEGINTRANSACTION記錄,也有COMMIT記錄撤銷(Undo)隊(duì)列:故障發(fā)生時(shí)尚未完成的事務(wù)這些事務(wù)只有BEGINTRANSACTION記錄,無(wú)相應(yīng)的COMMIT記錄47
系統(tǒng)故障的恢復(fù)步驟
2.對(duì)撤銷(Undo)隊(duì)列事務(wù)進(jìn)行撤銷(UNDO)處理反向掃描日志文件,對(duì)每個(gè)UNDO事務(wù)的更新操作執(zhí)行逆操作即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫(kù)
3.對(duì)重做(Redo)隊(duì)列事務(wù)進(jìn)行重做(REDO)處理正向掃描日志文件,對(duì)每個(gè)REDO事務(wù)重新執(zhí)行登記的操作即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫(kù)48
6.1.5.3介質(zhì)故障的恢復(fù)1.重裝數(shù)據(jù)庫(kù)2.重做已完成的事務(wù)
49
介質(zhì)故障的恢復(fù)(續(xù))恢復(fù)步驟1.裝入最新的后備數(shù)據(jù)庫(kù)副本(離故障發(fā)生時(shí)刻最近的轉(zhuǎn)儲(chǔ)副本),使數(shù)據(jù)庫(kù)恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài)。對(duì)于靜態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本,裝入后數(shù)據(jù)庫(kù)處于一致性狀態(tài)對(duì)于動(dòng)態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本,還須同時(shí)裝入轉(zhuǎn)儲(chǔ)時(shí)刻的日志文件副本,利用與恢復(fù)系統(tǒng)故障的方法(即REDO+UNDO),才能將數(shù)據(jù)庫(kù)恢復(fù)到一致性狀態(tài)。50
介質(zhì)故障的恢復(fù)(續(xù))2.裝入有關(guān)的日志文件副本(轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的日志文件副本),重做已完成的事務(wù)。首先掃描日志文件,找出故障發(fā)生時(shí)已提交的事務(wù)的標(biāo)識(shí),將其記入重做隊(duì)列。然后正向掃描日志文件,對(duì)重做隊(duì)列中的所有事務(wù)進(jìn)行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫(kù)。51
介質(zhì)故障的恢復(fù)(續(xù))介質(zhì)故障的恢復(fù)需要DBA介入DBA的工作重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本和有關(guān)的各日志文件副本執(zhí)行系統(tǒng)提供的恢復(fù)命令具體的恢復(fù)操作仍由DBMS完成52
6.1.5.4具有檢查點(diǎn)的恢復(fù)技術(shù)檢查點(diǎn)技術(shù)
利用檢查點(diǎn)的恢復(fù)策略
問(wèn)題的提出
53
一、問(wèn)題的提出兩個(gè)問(wèn)題搜索整個(gè)日志將耗費(fèi)大量的時(shí)間REDO處理:重新執(zhí)行,浪費(fèi)了大量時(shí)間54
解決方案具有檢查點(diǎn)(checkpoint)的恢復(fù)技術(shù)在日志文件中增加檢查點(diǎn)記錄(checkpoint)增加重新開(kāi)始文件恢復(fù)子系統(tǒng)在登錄日志文件期間動(dòng)態(tài)地維護(hù)日志55
二、檢查點(diǎn)技術(shù)檢查點(diǎn)記錄的內(nèi)容1.建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)清單2.這些事務(wù)最近一個(gè)日志記錄的地址重新開(kāi)始文件的內(nèi)容記錄各個(gè)檢查點(diǎn)記錄在日志文件中的地址
56
檢查點(diǎn)技術(shù)(續(xù))具有檢查點(diǎn)的日志文件和重新開(kāi)始文件57
動(dòng)態(tài)維護(hù)日志文件的方法動(dòng)態(tài)維護(hù)日志文件的方法周期性地執(zhí)行如下操作:建立檢查點(diǎn),保存數(shù)據(jù)庫(kù)狀態(tài)。具體步驟是:1.將當(dāng)前日志緩沖區(qū)中的所有日志記錄寫入磁盤的日志文件上2.在日志文件中寫入一個(gè)檢查點(diǎn)記錄3.將當(dāng)前數(shù)據(jù)緩沖區(qū)的所有數(shù)據(jù)記錄寫入磁盤的數(shù)據(jù)庫(kù)中4.把檢查點(diǎn)記錄在日志文件中的地址寫入一個(gè)重新開(kāi)始文件58
建立檢查點(diǎn)恢復(fù)子系統(tǒng)可以定期或不定期地建立檢查點(diǎn),保存數(shù)據(jù)庫(kù)狀態(tài)定期按照預(yù)定的一個(gè)時(shí)間間隔,如每隔一小時(shí)建立一個(gè)檢查點(diǎn)不定期按照某種規(guī)則,如日志文件已寫滿一半建立一個(gè)檢查點(diǎn)59
三、利用檢查點(diǎn)的恢復(fù)策略使用檢查點(diǎn)方法可以改善恢復(fù)效率當(dāng)事務(wù)T在一個(gè)檢查點(diǎn)之前提交
T對(duì)數(shù)據(jù)庫(kù)所做的修改已寫入數(shù)據(jù)庫(kù)寫入時(shí)間是在這個(gè)檢查點(diǎn)建立之前或在這個(gè)檢查點(diǎn)建立之時(shí)在進(jìn)行恢復(fù)處理時(shí),沒(méi)有必要對(duì)事務(wù)T執(zhí)行REDO操作
60
利用檢查點(diǎn)的恢復(fù)策略(續(xù))Tc
(檢查點(diǎn))Tf(系統(tǒng)故障)
REDO
UNDO
UNDO
REDO
T2
T3
T4
T5
不要REDO
T1
系統(tǒng)出現(xiàn)故障時(shí),恢復(fù)子系統(tǒng)將根據(jù)事務(wù)的不同狀態(tài)采取不同的恢復(fù)策略61
利用檢查點(diǎn)的恢復(fù)策略(續(xù))T1:在檢查點(diǎn)之前提交T2:在檢查點(diǎn)之前開(kāi)始執(zhí)行,在檢查點(diǎn)之后故障點(diǎn)之前提交T3:在檢查點(diǎn)之前開(kāi)始執(zhí)行,在故障點(diǎn)時(shí)還未完成T4:在檢查點(diǎn)之后開(kāi)始執(zhí)行,在故障點(diǎn)之前提交T5:在檢查點(diǎn)之后開(kāi)始執(zhí)行,在故障點(diǎn)時(shí)還未完成恢復(fù)策略:T3和T5在故障發(fā)生時(shí)還未完成,所以予以撤銷T2和T4在檢查點(diǎn)之后才提交,它們對(duì)數(shù)據(jù)庫(kù)所做的修改在故障發(fā)生時(shí)可能還在緩沖區(qū)中,尚未寫入數(shù)據(jù)庫(kù),所以要REDOT1在檢查點(diǎn)之前已提交,所以不必執(zhí)行REDO操作62
利用檢查點(diǎn)的恢復(fù)策略1.從重新開(kāi)始文件中找到最后一個(gè)檢查點(diǎn)記錄在日志文件中的地址,由該地址在日志文件中找到最后一個(gè)檢查點(diǎn)記錄
2.由該檢查點(diǎn)記錄得到檢查點(diǎn)建立時(shí)刻所有正在執(zhí)行的事務(wù)清單ACTIVE-LIST建立兩個(gè)事務(wù)隊(duì)列UNDO-LISTREDO-LIST把ACTIVE-LIST暫時(shí)放入U(xiǎn)NDO-LIST隊(duì)列,REDO隊(duì)列暫為空。63
利用檢查點(diǎn)的恢復(fù)策略(續(xù))3.從檢查點(diǎn)開(kāi)始正向掃描日志文件,直到日志文件結(jié)束如有新開(kāi)始的事務(wù)Ti,把Ti暫時(shí)放入U(xiǎn)NDO-LIST隊(duì)列如有提交的事務(wù)Tj,把Tj從UNDO-LIST隊(duì)列移到REDO-LIST隊(duì)列4.對(duì)UNDO-LIST中的每個(gè)事務(wù)執(zhí)行UNDO操作對(duì)REDO-LIST中的每個(gè)事務(wù)執(zhí)行REDO操作64
6.1.6數(shù)據(jù)庫(kù)鏡像介質(zhì)故障是對(duì)系統(tǒng)影響最為嚴(yán)重的一種故障,嚴(yán)重影響數(shù)據(jù)庫(kù)的可用性介質(zhì)故障恢復(fù)比較費(fèi)時(shí)為預(yù)防介質(zhì)故障,DBA必須周期性地轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)
提高數(shù)據(jù)庫(kù)可用性的解決方案數(shù)據(jù)庫(kù)鏡像(Mirror)65
數(shù)據(jù)庫(kù)鏡像(續(xù))數(shù)據(jù)庫(kù)鏡像DBMS自動(dòng)把整個(gè)數(shù)據(jù)庫(kù)或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個(gè)磁盤上DBMS自動(dòng)保證鏡像數(shù)據(jù)與主數(shù)據(jù)庫(kù)的一致性每當(dāng)主數(shù)據(jù)庫(kù)更新時(shí),DBMS自動(dòng)把更新后的數(shù)據(jù)復(fù)制過(guò)去(如下圖所示)66
數(shù)據(jù)庫(kù)鏡像(續(xù))67
數(shù)據(jù)庫(kù)鏡像的用途出現(xiàn)介質(zhì)故障時(shí)可由鏡像磁盤繼續(xù)提供使用同時(shí)DBMS自動(dòng)利用鏡像磁盤數(shù)據(jù)進(jìn)行數(shù)據(jù)庫(kù)的恢復(fù)不需要關(guān)閉系統(tǒng)和重裝數(shù)據(jù)庫(kù)副本(如下圖所示)68
數(shù)據(jù)庫(kù)鏡像(續(xù))沒(méi)有出現(xiàn)故障時(shí)可用于并發(fā)操作一個(gè)用戶對(duì)數(shù)據(jù)加排他鎖修改數(shù)據(jù),其他用戶可以讀鏡像數(shù)據(jù)庫(kù)上的數(shù)據(jù),而不必等待該用戶釋放鎖69
數(shù)據(jù)庫(kù)鏡像(續(xù))頻繁地復(fù)制數(shù)據(jù)自然會(huì)降低系統(tǒng)運(yùn)行效率在實(shí)際應(yīng)用中用戶往往只選擇對(duì)關(guān)鍵數(shù)據(jù)和日志文件鏡像,而不是對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行鏡像70
6.1.7小結(jié)如果數(shù)據(jù)庫(kù)只包含成功事務(wù)提交的結(jié)果,就說(shuō)數(shù)據(jù)庫(kù)處于一致性狀態(tài)。保證數(shù)據(jù)一致性是對(duì)數(shù)據(jù)庫(kù)的最基本的要求。事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位DBMS保證系統(tǒng)中一切事務(wù)的原子性、一致性、隔離性和持續(xù)性
71
小結(jié)(續(xù))DBMS必須對(duì)事務(wù)故障、系統(tǒng)故障和介質(zhì)故障進(jìn)行恢復(fù)恢復(fù)中最經(jīng)常使用的技術(shù):數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)和登記日志文件恢復(fù)的基本原理:利用存儲(chǔ)在后備副本、日志文件和數(shù)據(jù)庫(kù)鏡像中的冗余數(shù)據(jù)來(lái)重建數(shù)據(jù)庫(kù)72
小結(jié)(續(xù))常用恢復(fù)技術(shù)事務(wù)故障的恢復(fù)UNDO系統(tǒng)故障的恢復(fù)UNDO+REDO介質(zhì)故障的恢復(fù)重裝備份并恢復(fù)到一致性狀態(tài)+REDO73
小結(jié)(續(xù))提高恢復(fù)效率的技術(shù)檢查點(diǎn)技術(shù)可以提高系統(tǒng)故障的恢復(fù)效率可以在一定程度上提高利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)備份進(jìn)行介質(zhì)故障恢復(fù)的效率鏡像技術(shù)鏡像技術(shù)可以改善介質(zhì)故障的恢復(fù)效率74
6.2并發(fā)控制
6.2.1并發(fā)控制概述6.2.2封鎖6.2.3封鎖協(xié)議
6.2.4活鎖與死鎖6.2.5并發(fā)調(diào)度的可串行性
6.2.6兩段鎖協(xié)議
6.2.7封鎖粒度
6.2.8小結(jié)
75
回顧:事務(wù)(Transaction)事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,這些操作要么全做,要么全不做,是一個(gè)不可分割的工作單位。例如銀行轉(zhuǎn)帳等應(yīng)用。事務(wù)的ACID特性:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)76
續(xù)僅僅定義“事務(wù)”足夠了嗎?能夠滿足數(shù)據(jù)庫(kù)處理的所有要求嗎?請(qǐng)看下面的例子:
77
正確的應(yīng)該是共賣出5張票,A應(yīng)該是11,可上式中是14;
因此:T1的修改被T2覆蓋了!
讀A=16
A←A-2寫回A=14①讀A=16
②
③A←A-3
寫回A=13
④
事務(wù)T2事務(wù)T1例1:飛機(jī)訂票系統(tǒng)78
錯(cuò)誤1:丟失修改丟失修改是指事務(wù)1與事務(wù)2從數(shù)據(jù)庫(kù)中讀入同一數(shù)據(jù)并修改;事務(wù)2的提交結(jié)果破壞了事務(wù)1提交的結(jié)果,導(dǎo)致事務(wù)1的修改被丟失。其過(guò)程可用下圖表示:79
“丟失修改”錯(cuò)誤示意圖80
例2:數(shù)據(jù)核對(duì)系統(tǒng)對(duì)于T2來(lái)說(shuō),什么操作都沒(méi)有進(jìn)行,值卻變了,難道真有妖怪?事務(wù)T1事務(wù)T2①ReadA=10②ReadA=10
③A+=15
④Write(A)[A=25]
⑤ReadA=25??81
錯(cuò)誤2:不可重復(fù)讀不可重復(fù)讀是指事務(wù)2讀取數(shù)據(jù)后,事務(wù)1執(zhí)行更新操作,使事務(wù)2無(wú)法再現(xiàn)前一次讀取結(jié)果??捎孟聢D表示:82
“不可重復(fù)讀”錯(cuò)誤示意圖83
“不可重復(fù)讀”錯(cuò)誤種類事務(wù)2讀取某一數(shù)據(jù)后:1.事務(wù)1對(duì)其做了修改,當(dāng)事務(wù)2再次讀該數(shù)據(jù)時(shí),得到與前一次不同的值。2.事務(wù)1刪除了其中部分記錄,當(dāng)事務(wù)2再次讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄神密地消失了。3.事務(wù)1插入了一些記錄,當(dāng)事務(wù)2再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)多了一些記錄。后兩種不可重復(fù)讀有時(shí)也稱為幻影現(xiàn)象(Phantomrow)84
幻影85
例3:利息計(jì)算對(duì)于T2來(lái)說(shuō),并不知道T1已經(jīng)回滾。事務(wù)T1事務(wù)T2①ReadA=900②A+=150
③Write(A)[A=1050]ReadA=1050④tax=A*10%⑤Write(tax)⑥Rollback⑦ReadA=900tax錯(cuò)!86
錯(cuò)誤3:讀“臟”數(shù)據(jù)事務(wù)1修改某一數(shù)據(jù),并將其寫回磁盤;事務(wù)2讀取同一數(shù)據(jù)后,事務(wù)1由于某種原因被撤消,這時(shí)事務(wù)1把已修改過(guò)的數(shù)據(jù)恢復(fù)原值;事務(wù)2上次讀到的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中目前的數(shù)據(jù)不一致,是不正確的數(shù)據(jù),稱之為“臟”數(shù)據(jù)。87
“讀臟數(shù)據(jù)”錯(cuò)誤示意圖88
并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性種類丟失修改(lostupdate)不可重復(fù)讀(non-repeatableread)讀“臟”數(shù)據(jù)(dirtyread)89
單事務(wù)與多事務(wù)因此,可以認(rèn)為:如果事務(wù)是串行執(zhí)行的,即:A事務(wù)完全執(zhí)行完畢后,B事務(wù)才開(kāi)始執(zhí)行,則不會(huì)出現(xiàn)錯(cuò)誤;否則,可能會(huì)出現(xiàn)前面描述的錯(cuò)誤,如破壞事務(wù)的隔離性和數(shù)據(jù)庫(kù)的一致性。那為何還要使用多事務(wù)呢?90
并行VS串行(1)事務(wù)串行執(zhí)行:每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其他事務(wù)必須等到這個(gè)事務(wù)結(jié)束以后方能運(yùn)行事務(wù)并發(fā)執(zhí)行:來(lái)自不同事務(wù)的指令可以交叉執(zhí)行交叉并發(fā)方式(interleavedconcurrency):是單處理機(jī)系統(tǒng)中的并發(fā)方式同時(shí)并發(fā)方式(simultaneousconcurrency):是多處理機(jī)系統(tǒng)中的并發(fā)方式91
并行VS串行(2)基本比較并行事務(wù)可能會(huì)破壞數(shù)據(jù)庫(kù)的一致性串行事務(wù)效率低并行的優(yōu)點(diǎn)一個(gè)事務(wù)由不同的步驟組成,所涉及的系統(tǒng)資源也不同。這些步驟可以并發(fā)執(zhí)行,以提高系統(tǒng)的吞吐量
系統(tǒng)中存在著周期不等的各種事務(wù),串行會(huì)導(dǎo)致難于預(yù)測(cè)的時(shí)延。如果各個(gè)事務(wù)所涉及的是數(shù)據(jù)庫(kù)的不同部分,采用并發(fā)會(huì)減少平均響應(yīng)時(shí)間
核心問(wèn)題:在保證一致性的前提下最大限度地提高并發(fā)度92
6.2.2解決之道:封鎖基本的封鎖類型
基本鎖的相容矩陣
什么是封鎖
93
一、什么是封鎖封鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖;加鎖后事務(wù)T就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象。封鎖是實(shí)現(xiàn)并發(fā)控制的一個(gè)非常重要的技術(shù)。
94
二、封鎖的類型DBMS通常提供了多種類型的封鎖。一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么樣的控制是由封鎖的類型決定的?;痉怄i類型排它鎖(eXclusivelock,簡(jiǎn)記為X鎖)共享鎖(Sharelock,簡(jiǎn)記為S鎖)95
排它鎖排它鎖又稱為寫鎖;若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A;其它任何事務(wù)都不能再對(duì)A加任何類型的鎖,直到T釋放A上的鎖;96
共享鎖共享鎖又稱為讀鎖;若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,只允許事務(wù)T對(duì)該對(duì)象A進(jìn)行讀而不能進(jìn)行寫;其它任何事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放A上的S鎖。
97
三、鎖的相容矩陣Y=Yes,相容的請(qǐng)求
N=No,不相容的請(qǐng)求
T1T2
X
S
無(wú)
X
N
N
Y
S
N
Y
Y
無(wú)
Y
Y
Y
98
如何使用鎖?
使用鎖的過(guò)程中遵循的法則:封鎖協(xié)議99
6.2.3封鎖協(xié)議封鎖協(xié)議(LockingProtocol):在運(yùn)用X鎖和S鎖對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),約定一些規(guī)則,包括:何時(shí)申請(qǐng)何種類型鎖何時(shí)釋放常用的封鎖協(xié)議:三級(jí)封鎖協(xié)議不同的封鎖協(xié)議,在不同的程度上為并發(fā)操作的正確調(diào)度提供一定的保證100
一級(jí)封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放正常結(jié)束(COMMIT)非正常結(jié)束(ROLLBACK)
Notice:ReaddonotbeConsidered!101
解決:丟失修改T1T2①
XlockA
獲得②
讀A=16
③A←A-1
寫回A=15CommitUnlockA④
⑤
XlockA等待等待等待等待獲得XlockA讀A=15A←A-1寫回A=14CommitUnlockA
102
不能解決:讀”臟“數(shù)據(jù)
讀AA=15
上次讀的A為“臟”數(shù)據(jù)
①
XlockA
獲得②
讀A=16
A←A-1
寫回A=15③
④Rollback(A恢復(fù)為16)UnlockA
T2T1103
不能解決:不可重復(fù)讀
XlockB
獲得
讀B=100B←B*2
寫回B=200CommitUnlockB
①讀A=50
讀B=100
求和=150②
③讀A=50
讀B=200
求和=250(驗(yàn)算不對(duì))
T2T1104
一級(jí)封鎖協(xié)議作用小結(jié)因此,可以認(rèn)為:一級(jí)封鎖協(xié)議可防止“丟失修改”錯(cuò)誤;在一級(jí)封鎖協(xié)議規(guī)定中,如果是讀數(shù)據(jù),不需要加鎖,所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。105
二級(jí)封鎖協(xié)議定義為:一級(jí)封鎖協(xié)議+事務(wù)T在讀取數(shù)據(jù)R前必須先加S鎖,讀完后即可釋放S鎖;二級(jí)封鎖協(xié)議可以防止:丟失修改讀“臟”數(shù)據(jù)在二級(jí)封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。106
可以解決:讀”臟“數(shù)據(jù)
SlockCWaitWaitWaitWait
獲得SlockC
讀C=100CommitCUnlockC①
XlockC
讀C=100
C←C*2
寫回C=200②
③Rollback(C恢復(fù)為100)UnlockA④
⑤T2T1107
不能解決:不可重復(fù)讀①
SclockA
獲得讀A=50UnlockA②SclockB
獲得讀B=100UnlockB③求和=150
XlockB等待等待獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockBT2T1
④SclockA
獲得讀A=50UnlockA
SclockB
獲得讀B=200UnlockB
求和=250(驗(yàn)算不對(duì))
T2T1(續(xù))108
三級(jí)封鎖協(xié)議定義為:一級(jí)封鎖協(xié)議+事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放三級(jí)封鎖協(xié)議可防止:丟失修改讀臟數(shù)據(jù)不可重復(fù)讀109
可以解決:不可重復(fù)讀T1T2①
SlockA
讀A=50
SlockB
讀B=100
求和=150②
③讀A=50
讀B=100
求和=150CommitUnlockAUnlockB
XlockB等待等待等待等待等待等待等待等待
④獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockB
T2T1(續(xù))110
可以解決:讀”臟“數(shù)據(jù)T1T2①XlockC
讀C=100C←C*2
寫回C=200②
③ROLLBACK(C恢復(fù)為100)UnlockC④
⑤
SlockC等待等待等待等待獲得SlockC讀C=100CommitCUnlockC111
封鎖協(xié)議小結(jié)三級(jí)協(xié)議的主要區(qū)別什么操作需要申請(qǐng)封鎖何時(shí)釋放鎖(即持鎖時(shí)間)112
6.2.4
活鎖和死鎖封鎖技術(shù)可以有效地解決并行操作的一致性問(wèn)題,但也帶來(lái)一些新的問(wèn)題死鎖活鎖113
如何避免活鎖
采用先來(lái)先服務(wù)的策略:當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí)按請(qǐng)求封鎖的先后次序?qū)@些事務(wù)排隊(duì)該數(shù)據(jù)對(duì)象上的鎖一旦釋放,首先批準(zhǔn)申請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖。
114
6.2.4.1
死鎖Xlock
R1
.
.
.
Xlock
R2
等待
等待
等待
..
.
Xlock
R2
.
.
Xlock
R1
等待
等待
.115
解決死鎖的方法兩類方法1.預(yù)防死鎖2.死鎖的診斷與解除
116
1.死鎖的預(yù)防產(chǎn)生死鎖的原因是兩個(gè)或多個(gè)事務(wù)都已封鎖了一些數(shù)據(jù)對(duì)象,然后又都請(qǐng)求對(duì)已為其他事務(wù)封鎖的數(shù)據(jù)對(duì)象加鎖,從而出現(xiàn)死等待。預(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件117
死鎖的預(yù)防(續(xù))預(yù)防死鎖的方法一次封鎖法順序封鎖法118
(1)一次封鎖法要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行一次封鎖法存在的問(wèn)題:降低并發(fā)度擴(kuò)大封鎖范圍將以后要用到的全部數(shù)據(jù)加鎖,勢(shì)必?cái)U(kuò)大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度119
一次封鎖法(續(xù))難于事先精確確定封鎖對(duì)象數(shù)據(jù)庫(kù)中數(shù)據(jù)是不斷變化的,原來(lái)不要求封鎖的數(shù)據(jù),在執(zhí)行過(guò)程中可能會(huì)變成封鎖對(duì)象,所以很難事先精確地確定每個(gè)事務(wù)所要封鎖的數(shù)據(jù)對(duì)象解決方法:將事務(wù)在執(zhí)行過(guò)程中可能要封鎖的數(shù)據(jù)對(duì)象全部加鎖,這就進(jìn)一步降低了并發(fā)度。120
(2)順序封鎖法順序封鎖法是預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封鎖順序,所有事務(wù)都按這個(gè)順序?qū)嵭蟹怄i。順序封鎖法存在的問(wèn)題維護(hù)成本高數(shù)據(jù)庫(kù)系統(tǒng)中可封鎖的數(shù)據(jù)對(duì)象極其眾多,并且隨數(shù)據(jù)的插入、刪除等操作而不斷地變化,要維護(hù)這樣極多而且變化的資源的封鎖順序非常困難,成本很高121
順序封鎖法(續(xù))難于實(shí)現(xiàn)事務(wù)的封鎖請(qǐng)求可以隨著事務(wù)的執(zhí)行而動(dòng)態(tài)地決定,很難事先確定每一個(gè)事務(wù)要封鎖哪些對(duì)象,因此也就很難按規(guī)定的順序去施加封鎖。例:規(guī)定數(shù)據(jù)對(duì)象的封鎖順序?yàn)锳,B,C,D,E。事務(wù)T3起初要求封鎖數(shù)據(jù)對(duì)象B,C,E,但當(dāng)它封鎖了B,C后,才發(fā)現(xiàn)還需要封鎖A,這樣就破壞了封鎖順序.
122
死鎖的預(yù)防(續(xù))結(jié)論在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略并不很適合數(shù)據(jù)庫(kù)的特點(diǎn)DBMS在解決死鎖的問(wèn)題上更普遍采用的是診斷并解除死鎖的方法123
2.死鎖的診斷與解除允許死鎖發(fā)生解除死鎖由DBMS的并發(fā)控制子系統(tǒng)定期檢測(cè)系統(tǒng)中是否存在死鎖一旦檢測(cè)到死鎖,就要設(shè)法解除124
檢測(cè)死鎖:超時(shí)法如果一個(gè)事務(wù)的等待時(shí)間超過(guò)了規(guī)定的時(shí)限,就認(rèn)為發(fā)生了死鎖優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單缺點(diǎn)有可能誤判死鎖時(shí)限若設(shè)置得太長(zhǎng),死鎖發(fā)生后不能及時(shí)發(fā)現(xiàn)125
等待圖法用事務(wù)等待圖動(dòng)態(tài)反映所有事務(wù)的等待情況事務(wù)等待圖是一個(gè)有向圖G=(T,U)T為結(jié)點(diǎn)的集合,每個(gè)結(jié)點(diǎn)表示正運(yùn)行的事務(wù)U為邊的集合,每條邊表示事務(wù)等待的情況若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2并發(fā)控制子系統(tǒng)周期性地(比如每隔1min)檢測(cè)事務(wù)等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。126
死鎖的診斷與解除(續(xù))解除死鎖選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤消,釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運(yùn)行下去。127
6.2.5并發(fā)調(diào)度的可串行性如何保證并發(fā)操作的調(diào)度是正確的
什么樣的并發(fā)操作調(diào)度是正確的
128
一、什么樣的并發(fā)操作調(diào)度是正確的計(jì)算機(jī)系統(tǒng)對(duì)并行事務(wù)中并行操作的調(diào)度是的隨機(jī)的,而不同的調(diào)度可能會(huì)產(chǎn)生不同的結(jié)果。將所有事務(wù)串行起來(lái)的調(diào)度策略一定是正確的調(diào)度策略。幾個(gè)事務(wù)的并行執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同。這種并行調(diào)度策略稱為可串行化(Serializable)的調(diào)度。129
什么樣的并發(fā)操作調(diào)度是正確的(續(xù))可串行性是并行事務(wù)正確性的唯一準(zhǔn)則
例:現(xiàn)在有兩個(gè)事務(wù),分別包含下列操作:事務(wù)1:讀B;A=B+1;寫回A;事務(wù)2:讀A;B=A+1;寫回B;假設(shè)A的初值為2,B的初值為2。130
什么樣的并發(fā)操作調(diào)度是正確的(續(xù))對(duì)這兩個(gè)事務(wù)的不同調(diào)度策略串行執(zhí)行串行調(diào)度策略1串行調(diào)度策略2交錯(cuò)執(zhí)行不可串行化的調(diào)度可串行化的調(diào)度131
(a)串行調(diào)度策略,正確的調(diào)度SlockBY=B=2UnlockBXlockAA=Y+1寫回A(=3)UnlockA
SlockAX=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockBT1T2132
(b)串行調(diào)度策略,正確的調(diào)度
SlockB
Y=B=3
UnlockB
XlockA
A=Y+1
寫回A(=4)
UnlockA
SlockA
X=A=2
UnlockA
XlockB
B=X+1
寫回B(=3)
UnlockB
T1T2133
(c)不可串行化的調(diào)度SlockB
Y=B=2
UnlockB
XlockA
A=Y+1
寫回A(=3)
UnlockA
SlockAX=A=2
UnlockA
XlockBB=X+1寫回B(=3)
UnlockBT1T2134
(c)不可串行化的調(diào)度(續(xù))由于其執(zhí)行結(jié)果與(a)、(b)的結(jié)果都不同,所以是錯(cuò)誤的調(diào)度。135
(d)可串行化的調(diào)度
SlockB
Y=B=2
UnlockB
XlockA
A=Y+1
寫回A(=3)
UnlockA
SlockA
等待等待等待X=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockBT1T2136
(d)可串行化的調(diào)度(續(xù))由于其執(zhí)行結(jié)果與串行調(diào)度(a)的執(zhí)行結(jié)果相同,所以是正確的調(diào)度。137
二、如何保證并發(fā)操作的調(diào)度是正確的為了保證并行操作的正確性,DBMS的并行控制機(jī)制必須提供一定的手段來(lái)保證調(diào)度是可串行化的。
從理論上講,在某一事務(wù)執(zhí)行時(shí)禁止其他事務(wù)執(zhí)行的調(diào)度策略一定是可串行化的調(diào)度,這也是最簡(jiǎn)單的調(diào)度策略,但這種方法實(shí)際上是不可行的,因?yàn)樗褂脩舨荒艹浞止蚕頂?shù)據(jù)庫(kù)資源。138
如何判斷調(diào)度是可串行化調(diào)度?沖突操作:不同的事務(wù)對(duì)同一個(gè)數(shù)據(jù)的讀寫操作與寫寫操作。Ri(x)與Wj(x):事務(wù)Ti讀x,Tj寫xWi(x)與Wj(x):事務(wù)Ti寫x,Tj寫x其它的操作,如:讀讀操作都不沖突139
續(xù)不可交換的操作:不同事務(wù)的沖突操作不可交換;同一事務(wù)的兩個(gè)操作不可交換;可以交換的操作:不同事務(wù)的不沖突操作可交換;
140
續(xù)因此:如果一個(gè)調(diào)度SC在保證沖突操作的次序不變的情況下,通過(guò)交換兩個(gè)事務(wù)的不沖突操作次序得到另一個(gè)調(diào)度SCC如果SCC是串行的,稱調(diào)度SC為沖突可串行化調(diào)度。141
續(xù)例:SC1=R1(A)W1(A)R2(A)W2(A)R1(B)W1(B)R2(B)W2(B)SC2=
R1(A)W1(A)R2(A)R1(B)W1(B)W2(A)
R2(B)W2(B)SC3=
R1(A)W1(A)R1(B)W1(B)R2(A)W2(A)
R2(B)W2(B)相當(dāng)于串行調(diào)度事務(wù)T1與T2,是可串行化調(diào)度沖突可串行化調(diào)度是可串化調(diào)度的充分條件。
142
如何保證并發(fā)操作的調(diào)度是正確的(續(xù))保證并發(fā)操作調(diào)度正確性的方法封鎖方法:兩段鎖(Two-PhaseLocking,簡(jiǎn)稱2PL)協(xié)議時(shí)標(biāo)方法樂(lè)觀方法143
6.2.6兩段鎖協(xié)議兩段鎖協(xié)議的內(nèi)容1.在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖2.在釋放一個(gè)封鎖之后,事務(wù)不再獲得任何其他封鎖。144
兩段鎖協(xié)議(續(xù))“兩段”鎖的含義事務(wù)分為兩個(gè)階段第一階段是獲得封鎖,也稱為擴(kuò)展階段;第二階段是釋放封鎖,也稱為收縮階段。145
兩段鎖協(xié)議(續(xù))例:事務(wù)1的封鎖序列:SlockA...SlockB...XlockC...UnlockB...UnlockA...UnlockC;
事務(wù)2的封鎖序列:SlockA...UnlockA...SlockB...XlockC...UnlockC...UnlockB;
事務(wù)1遵守兩段鎖協(xié)議,而事務(wù)2不遵守兩段協(xié)議。146
兩段鎖協(xié)議(續(xù))并行執(zhí)行的所有事務(wù)均遵守兩段鎖協(xié)議,則對(duì)這些事務(wù)的所有并行調(diào)度策略都是可串行化的。
所有遵守兩段鎖協(xié)議的事務(wù),其并行執(zhí)行的結(jié)果一定是正確的事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件,而不是必要條件可串行化的調(diào)度中,不一定所有事務(wù)都必須符合兩段鎖協(xié)議。147
兩段鎖協(xié)議(續(xù))T1
SlockB讀B=2Y=BXlockA
A=Y+1寫回A=3UnlockBUnlockA
T2
SlockA
等待
等待
等待
等待
等待
SlockA
讀A=3
Y=AXlockB
B=Y+1
寫回B=4
UnlockB
UnlockA
T1
SlockB
讀B=2
Y=B
UnlockB
XlockA
A=Y+1
寫回A=3
UnlockA
T2
SlockA
等待
等待
等待
等待
SlockA
讀A=3
X=A
UnlockA
XlockB
B=X+1
寫回B=4
UnlockB
(a)遵守兩段鎖協(xié)議
(b)不遵守兩段鎖協(xié)議T1
SlockB
讀B=2
Y=B
UnlockB
XlockA
A=Y+1
寫回A=3
UnlockA
T2
SlockA
讀A=2
X=A
UnlockAXlockB等待XlockB
B=X+1
寫回B=3
UnlockB
(c)不遵守兩段鎖協(xié)議148
兩段鎖協(xié)議(續(xù))兩段鎖協(xié)議與防止死鎖的一次封鎖法一次封鎖法要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議但是兩段鎖協(xié)議并不要求事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖149
兩段鎖協(xié)議(續(xù))圖11.7遵守兩段鎖協(xié)議的事務(wù)發(fā)生死鎖T1
SlockB
讀B=2
XlockA
等待
等待
T2
SlockA
讀A=2
XlockA
等待
150
兩段鎖協(xié)議(續(xù))兩段鎖協(xié)議與三級(jí)封鎖協(xié)議兩類不同目的的協(xié)議兩段鎖協(xié)議保證并發(fā)調(diào)度的正確性三級(jí)封鎖協(xié)議在不同程度上保證數(shù)據(jù)一致性遵守第三級(jí)封鎖協(xié)議必然遵守兩段協(xié)議151
6.2.7封鎖粒度6.2.7.1多粒度封鎖6.2.7.2意向鎖152
什么是封鎖粒度封鎖對(duì)象的大小稱為封鎖粒度(Granularity)封鎖的對(duì)象:邏輯單元,物理單元例:在關(guān)系數(shù)據(jù)庫(kù)中,封鎖對(duì)象:邏輯單元:屬性值、屬性值集合、元組、關(guān)系、索引項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù)等物理單元:頁(yè)(數(shù)據(jù)頁(yè)或索引頁(yè))、物理記錄等153
選擇封鎖粒度原則封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開(kāi)銷密切相關(guān)。封鎖的粒度越大,數(shù)據(jù)庫(kù)所能夠封鎖的數(shù)據(jù)單元就越少,并發(fā)度就越小,系統(tǒng)開(kāi)銷也越?。环怄i的粒度越小,并發(fā)度較高,但系統(tǒng)開(kāi)銷也就越大154
選擇封鎖粒度的原則(續(xù))若封鎖粒度是數(shù)據(jù)頁(yè),事務(wù)T1需要修改元組L1,則T1必須對(duì)包含L1的整個(gè)數(shù)據(jù)頁(yè)A加鎖。如果T1對(duì)A加鎖后事務(wù)T2要修改A中元組L2,則T2被迫等待,直到T1釋放A。如果封鎖粒度是元組,則T1和T2可以同時(shí)對(duì)L1和L2加鎖,不需要互相等待,提高系統(tǒng)的并行度。如事務(wù)T需要讀取整個(gè)表,若封鎖粒度是元組,T必須對(duì)表中的每一個(gè)元組加鎖,開(kāi)銷極大155
選擇封鎖粒度的原則(續(xù))多粒度封鎖(MultipleGranularityLocking)
在一個(gè)系統(tǒng)中同時(shí)支持多種封鎖粒度供不同的事務(wù)選擇選擇封鎖粒度同時(shí)考慮封鎖開(kāi)銷和并發(fā)度兩個(gè)因素,適當(dāng)選擇封鎖粒度需要處理多個(gè)關(guān)系的大量元組的用戶事務(wù):以數(shù)據(jù)庫(kù)為封鎖單位需要處理大量元組的用戶事務(wù):以關(guān)系為封鎖單元只處
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 母嬰產(chǎn)后活動(dòng)方案
- 汽修新店活動(dòng)策劃方案
- 歌唱舞蹈活動(dòng)方案
- 氣象日作文大賽活動(dòng)方案
- 民警春節(jié)活動(dòng)方案
- 【高一下】江蘇省徐州市2024-2025學(xué)年高一下學(xué)期期末抽測(cè)語(yǔ)文試卷含答案
- 正月十五團(tuán)委活動(dòng)方案
- 水族店促銷活動(dòng)方案
- 母親節(jié)輔導(dǎo)作業(yè)活動(dòng)方案
- 民俗節(jié)文藝演出活動(dòng)方案
- 2025至2030中國(guó)大型連鎖超市行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 高水平研究型大學(xué)建設(shè)中教育、科技與人才的協(xié)同發(fā)展研究
- 山西省2025年普通高中學(xué)業(yè)水平合格性考試適應(yīng)性測(cè)試化學(xué)試卷(含答案)
- 房屋市政工程生產(chǎn)安全重大事故隱患臺(tái)賬
- 2025年中考一模卷(貴州)英語(yǔ)試題含答案解析
- T/ISEAA 006-2024大模型系統(tǒng)安全測(cè)評(píng)要求
- 2025年調(diào)解員職業(yè)技能考試試卷及答案
- 礦山股東協(xié)議書(shū)
- 數(shù)字媒體藝術(shù)與設(shè)計(jì)原理2025年考試試卷及答案
- 小學(xué)一年級(jí)語(yǔ)文下冊(cè)語(yǔ)文看拼音寫詞語(yǔ)全冊(cè)
- 暑假社會(huì)實(shí)踐安全教育
評(píng)論
0/150
提交評(píng)論