數(shù)據(jù)庫原理與應(yīng)用 教學(xué)課件 作者 林 小 玲第6章 數(shù)據(jù)庫的管理_第1頁
數(shù)據(jù)庫原理與應(yīng)用 教學(xué)課件 作者 林 小 玲第6章 數(shù)據(jù)庫的管理_第2頁
數(shù)據(jù)庫原理與應(yīng)用 教學(xué)課件 作者 林 小 玲第6章 數(shù)據(jù)庫的管理_第3頁
數(shù)據(jù)庫原理與應(yīng)用 教學(xué)課件 作者 林 小 玲第6章 數(shù)據(jù)庫的管理_第4頁
數(shù)據(jù)庫原理與應(yīng)用 教學(xué)課件 作者 林 小 玲第6章 數(shù)據(jù)庫的管理_第5頁
已閱讀5頁,還剩172頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

上海大學(xué)自動化系林小玲第6章數(shù)據(jù)庫的管理3

6.1

數(shù)據(jù)庫恢復(fù)技術(shù)6.1.1

事務(wù)的基本概念6.1.2

數(shù)據(jù)庫恢復(fù)概述6.1.3

數(shù)據(jù)庫故障類型6.1.4

數(shù)據(jù)庫故障恢復(fù)實行技術(shù)6.1數(shù)據(jù)庫恢復(fù)技術(shù)6.1.5

數(shù)據(jù)庫故障恢復(fù)策略

6.1.6

數(shù)據(jù)庫鏡像6.1.7

小結(jié)4

6.1.1事務(wù)的基本概念事務(wù)的特征事務(wù)定義5

一、事務(wù)(Transaction)定義一個數(shù)據(jù)庫操作序列一個不可分割的工作單位恢復(fù)和并發(fā)控制的基本單位

事務(wù)和程序比較在關(guān)系數(shù)據(jù)庫中,一個事務(wù)可以是一條或多條SQL語句,也可以包含一個或多個程序。一個程序通常包含多個事務(wù)

6

定義事務(wù)顯式定義方式

BEGINTRANSACTIONBEGINTRANSACTIONSQL語句1SQL語句1SQL語句2SQL語句2………………

COMMIT

ROLLBACK隱式定義方式當用戶沒有顯式地定義事務(wù)時,DBMS按缺省規(guī)定自動劃分事務(wù)7

二、事務(wù)的特性(ACID特性)事務(wù)的ACID特性:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)8

6.1.2數(shù)據(jù)庫恢復(fù)概述故障是不可避免的系統(tǒng)故障:計算機軟、硬件故障人為故障:操作員的失誤、惡意的破壞等。數(shù)據(jù)庫的恢復(fù) 把數(shù)據(jù)庫從錯誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(亦稱為一致狀態(tài)或完整狀態(tài))9

6.1.3故障的種類系統(tǒng)故障

介質(zhì)故障

計算機病毒

事務(wù)內(nèi)部的故障

10

一、事務(wù)內(nèi)部的故障事務(wù)內(nèi)部的故障有的是可以通過事務(wù)程序本身發(fā)現(xiàn)的(見下面轉(zhuǎn)賬事務(wù)的例子)

有的是非預(yù)期的11

事務(wù)內(nèi)部的故障(續(xù))例如,銀行轉(zhuǎn)賬事務(wù),這個事務(wù)把一筆金額從一個賬戶甲轉(zhuǎn)給另一個賬戶乙。

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ù))這個例子所包括的兩個更新操作要么全部完成要么全部不做。否則就會使數(shù)據(jù)庫處于不一致狀態(tài),例如只把賬戶甲的余額減少了而沒有把賬戶乙的余額增加。在這段程序中若產(chǎn)生賬戶甲余額不足的情況,應(yīng)用程序可以發(fā)現(xiàn)并讓事務(wù)滾回,撤銷已作的修改,恢復(fù)數(shù)據(jù)庫到正確狀態(tài)。13

事務(wù)內(nèi)部的故障(續(xù))事務(wù)內(nèi)部更多的故障是非預(yù)期的,是不能由應(yīng)用程序處理的。運算溢出并發(fā)事務(wù)發(fā)生死鎖而被選中撤銷該事務(wù)違反了某些完整性限制等以后,事務(wù)故障僅指這類非預(yù)期的故障

事務(wù)故障的恢復(fù):撤消事務(wù)(UNDO)14

二、系統(tǒng)故障系統(tǒng)故障稱為軟故障,是指造成系統(tǒng)停止運轉(zhuǎn)的任何事件,使得系統(tǒng)要重新啟動。整個系統(tǒng)的正常運行突然被破壞所有正在運行的事務(wù)都非正常終止不破壞數(shù)據(jù)庫內(nèi)存中數(shù)據(jù)庫緩沖區(qū)的信息全部丟失

15

系統(tǒng)故障的常見原因特定類型的硬件錯誤(如CPU故障)操作系統(tǒng)故障DBMS代碼錯誤系統(tǒng)斷電16

系統(tǒng)故障的恢復(fù)發(fā)生系統(tǒng)故障時,事務(wù)未提交恢復(fù)策略:強行撤消(UNDO)所有未完成事務(wù)

發(fā)生系統(tǒng)故障時,事務(wù)已提交,但緩沖區(qū)中的信息尚未完全寫回到磁盤上?;謴?fù)策略:重做(REDO)所有已提交的事務(wù)17

三、介質(zhì)故障介質(zhì)故障:稱為硬故障,指外存故障磁盤損壞磁頭碰撞操作系統(tǒng)的某種潛在錯誤瞬時強磁場干擾18

介質(zhì)故障的恢復(fù)裝入數(shù)據(jù)庫發(fā)生介質(zhì)故障前某個時刻的數(shù)據(jù)副本

重做自此時始的所有成功事務(wù),將這些事務(wù)已提交的結(jié)果重新記入數(shù)據(jù)庫19

四、計算機病毒計算機病毒一種人為的故障或破壞,是一些惡作劇者研制的一種計算機程序可以繁殖和傳播危害破壞、盜竊系統(tǒng)中的數(shù)據(jù)破壞系統(tǒng)文件

20

故障小結(jié)各類故障,對數(shù)據(jù)庫的影響有兩種可能性一是數(shù)據(jù)庫本身被破壞二是數(shù)據(jù)庫沒有被破壞,但數(shù)據(jù)可能不正確,這是由于事務(wù)的運行被非正常終止造成的。21

6.1.4恢復(fù)的實現(xiàn)技術(shù)6.1.4.1數(shù)據(jù)轉(zhuǎn)儲

6.1.4.2登記日志文件

22

6.1.4恢復(fù)的實現(xiàn)技術(shù)恢復(fù)操作的基本原理:冗余 利用存儲在系統(tǒng)其它地方的冗余數(shù)據(jù)來重建數(shù)據(jù)庫中已被破壞或不正確的那部分數(shù)據(jù)恢復(fù)機制涉及的關(guān)鍵問題如何建立冗余數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)儲(backup)登錄日志文件(logging)如何利用這些冗余數(shù)據(jù)實施數(shù)據(jù)庫恢復(fù)

23

6.1.4.1數(shù)據(jù)轉(zhuǎn)儲轉(zhuǎn)儲方法

什么是數(shù)據(jù)轉(zhuǎn)儲

24

一、什么是數(shù)據(jù)轉(zhuǎn)儲轉(zhuǎn)儲是指DBA將整個數(shù)據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程,備用的數(shù)據(jù)稱為后備副本或后援副本如何使用數(shù)據(jù)庫遭到破壞后可以將后備副本重新裝入重裝后備副本只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲時的狀態(tài)25

二、轉(zhuǎn)儲方法1.靜態(tài)轉(zhuǎn)儲與動態(tài)轉(zhuǎn)儲2.海量轉(zhuǎn)儲與增量轉(zhuǎn)儲3.轉(zhuǎn)儲方法小結(jié)26

靜態(tài)轉(zhuǎn)儲在系統(tǒng)中無運行事務(wù)時進行的轉(zhuǎn)儲操作轉(zhuǎn)儲開始時數(shù)據(jù)庫處于一致性狀態(tài)轉(zhuǎn)儲期間不允許對數(shù)據(jù)庫的任何存取、修改活動得到的一定是一個數(shù)據(jù)一致性的副本優(yōu)點:實現(xiàn)簡單缺點:降低了數(shù)據(jù)庫的可用性轉(zhuǎn)儲必須等待正運行的用戶事務(wù)結(jié)束新的事務(wù)必須等轉(zhuǎn)儲結(jié)束27

動態(tài)轉(zhuǎn)儲轉(zhuǎn)儲操作與用戶事務(wù)并發(fā)進行轉(zhuǎn)儲期間允許對數(shù)據(jù)庫進行存取或修改優(yōu)點不用等待正在運行的用戶事務(wù)結(jié)束不會影響新事務(wù)的運行缺點不能保證副本中的數(shù)據(jù)正確有效[例]在轉(zhuǎn)儲期間的某個時刻Tc,系統(tǒng)把數(shù)據(jù)A=100轉(zhuǎn)儲到磁帶上,而在下一時刻Td,某一事務(wù)將A改為200。轉(zhuǎn)儲結(jié)束后,后備副本上的A已是過時的數(shù)據(jù)了28

動態(tài)轉(zhuǎn)儲利用動態(tài)轉(zhuǎn)儲得到的副本進行故障恢復(fù)需要把動態(tài)轉(zhuǎn)儲期間各事務(wù)對數(shù)據(jù)庫的修改活動登記下來,建立日志文件后備副本加上日志文件才能把數(shù)據(jù)庫恢復(fù)到某一時刻的正確狀態(tài)29

2.海量轉(zhuǎn)儲與增量轉(zhuǎn)儲海量轉(zhuǎn)儲:每次轉(zhuǎn)儲全部數(shù)據(jù)庫

增量轉(zhuǎn)儲:只轉(zhuǎn)儲上次轉(zhuǎn)儲后更新過的數(shù)據(jù)

海量轉(zhuǎn)儲與增量轉(zhuǎn)儲比較從恢復(fù)角度看,使用海量轉(zhuǎn)儲得到的后備副本進行恢復(fù)更方便但如果數(shù)據(jù)庫很大,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲方式更實用更有效30

3.轉(zhuǎn)儲方法小結(jié)轉(zhuǎn)儲方法分類

轉(zhuǎn)儲狀態(tài)

動態(tài)轉(zhuǎn)儲

靜態(tài)轉(zhuǎn)儲

轉(zhuǎn)儲方式

海量轉(zhuǎn)儲

動態(tài)海量轉(zhuǎn)儲

靜態(tài)海量轉(zhuǎn)儲

增量轉(zhuǎn)儲

動態(tài)增量轉(zhuǎn)儲

靜態(tài)增量轉(zhuǎn)儲

31

6.1.4.2登記日志文件日志文件的作用

登記日志文件

日志文件的格式和內(nèi)容

32

一、日志文件的格式和內(nèi)容什么是日志文件日志文件(log)是用來記錄事務(wù)對數(shù)據(jù)庫的更新操作的文件日志文件的格式以記錄為單位的日志文件以數(shù)據(jù)塊為單位的日志文件33

日志文件的格式和內(nèi)容(續(xù))以記錄為單位的日志文件內(nèi)容各個事務(wù)的開始標記(BEGINTRANSACTION)各個事務(wù)的結(jié)束標記(COMMIT或ROLLBACK)各個事務(wù)的所有更新操作以上均作為日志文件中的一個日志記錄(logrecord)34

日志文件的格式和內(nèi)容(續(xù))以記錄為單位的日志文件,每條日志記錄的內(nèi)容事務(wù)標識(標明是哪個事務(wù))操作類型(插入、刪除或修改)操作對象(記錄內(nèi)部標識)更新前數(shù)據(jù)的舊值(對插入操作而言,此項為空值)更新后數(shù)據(jù)的新值(對刪除操作而言,此項為空值)35

日志文件的格式和內(nèi)容(續(xù))以數(shù)據(jù)塊為單位的日志文件,每條日志記錄的內(nèi)容事務(wù)標識(標明是那個事務(wù))被更新的數(shù)據(jù)塊36

二、日志文件的作用進行事務(wù)故障恢復(fù)進行系統(tǒng)故障恢復(fù)協(xié)助后備副本進行介質(zhì)故障恢復(fù)37

利用靜態(tài)轉(zhuǎn)儲副本和日志文件進行恢復(fù)

靜態(tài)轉(zhuǎn)儲

運行事務(wù)正常運行─┼───────┼─────────────

Ta

Tb

Tf

└────────────

重裝后備副本

利用日志文件恢復(fù)繼續(xù)運行恢復(fù)

─┼───────┼┈┈┈┈┈┈┈┈┼────登記日志文件↓38

利用靜態(tài)轉(zhuǎn)儲副本和日志文件進行恢復(fù)上圖中:系統(tǒng)在Ta時刻停止運行事務(wù),進行數(shù)據(jù)庫轉(zhuǎn)儲在Tb時刻轉(zhuǎn)儲完畢,得到Tb時刻的數(shù)據(jù)庫一致性副本系統(tǒng)運行到Tf時刻發(fā)生故障為恢復(fù)數(shù)據(jù)庫,首先由DBA重裝數(shù)據(jù)庫后備副本,將數(shù)據(jù)庫恢復(fù)至Tb時刻的狀態(tài)重新運行自Tb~Tf時刻的所有更新事務(wù),把數(shù)據(jù)庫恢復(fù)到故障發(fā)生前的一致狀態(tài)39

三、登記日志文件基本原則登記的次序嚴格按并行事務(wù)執(zhí)行的時間次序必須先寫日志文件,后寫數(shù)據(jù)庫寫日志文件操作:把表示這個修改的日志記錄寫到日志文件寫數(shù)據(jù)庫操作:把對數(shù)據(jù)的修改寫到數(shù)據(jù)庫中

40

登記日志文件(續(xù))為什么要先寫日志文件寫數(shù)據(jù)庫和寫日志文件是兩個不同的操作在這兩個操作之間可能發(fā)生故障如果先寫了數(shù)據(jù)庫修改,而在日志文件中沒有登記下這個修改,則以后就無法恢復(fù)這個修改了如果先寫日志,但沒有修改數(shù)據(jù)庫,按日志文件恢復(fù)時只不過是多執(zhí)行一次不必要的UNDO操作,并不會影響數(shù)據(jù)庫的正確性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具有檢查點故障恢復(fù)42

6.1.5.1事務(wù)故障的恢復(fù)事務(wù)故障:事務(wù)在運行至正常終止點前被終止恢復(fù)方法由恢復(fù)子系統(tǒng)應(yīng)利用日志文件撤消(UNDO)此事務(wù)已對數(shù)據(jù)庫進行的修改事務(wù)故障的恢復(fù)由系統(tǒng)自動完成,對用戶是透明的,不需要用戶干預(yù)43

事務(wù)故障的恢復(fù)步驟1.反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)的更新操作。2.對該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫。插入操作,“更新前的值”為空,則相當于做刪除操作刪除操作,“更新后的值”為空,則相當于做插入操作若是修改操作,則相當于用修改前值代替修改后值44

事務(wù)故障的恢復(fù)步驟3.繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做同樣處理。4.如此處理下去,直至讀到此事務(wù)的開始標記,事務(wù)故障恢復(fù)就完成了。

45

6.1.5.2系統(tǒng)故障的恢復(fù)系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因未完成事務(wù)對數(shù)據(jù)庫的更新已寫入數(shù)據(jù)庫已提交事務(wù)對數(shù)據(jù)庫的更新還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫恢復(fù)方法1.Undo故障發(fā)生時未完成的事務(wù)2.Redo已完成的事務(wù)系統(tǒng)故障的恢復(fù)由系統(tǒng)在重新啟動時自動完成,不需要用戶干預(yù)46

系統(tǒng)故障的恢復(fù)步驟1. 正向掃描日志文件(即從頭掃描日志文件)重做(REDO)隊列:在故障發(fā)生前已經(jīng)提交的事務(wù)這些事務(wù)既有BEGINTRANSACTION記錄,也有COMMIT記錄撤銷(Undo)隊列:故障發(fā)生時尚未完成的事務(wù)這些事務(wù)只有BEGINTRANSACTION記錄,無相應(yīng)的COMMIT記錄47

系統(tǒng)故障的恢復(fù)步驟

2.對撤銷(Undo)隊列事務(wù)進行撤銷(UNDO)處理反向掃描日志文件,對每個UNDO事務(wù)的更新操作執(zhí)行逆操作即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫

3.對重做(Redo)隊列事務(wù)進行重做(REDO)處理正向掃描日志文件,對每個REDO事務(wù)重新執(zhí)行登記的操作即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫48

6.1.5.3介質(zhì)故障的恢復(fù)1.重裝數(shù)據(jù)庫2.重做已完成的事務(wù)

49

介質(zhì)故障的恢復(fù)(續(xù))恢復(fù)步驟1.裝入最新的后備數(shù)據(jù)庫副本(離故障發(fā)生時刻最近的轉(zhuǎn)儲副本),使數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)儲時的一致性狀態(tài)。對于靜態(tài)轉(zhuǎn)儲的數(shù)據(jù)庫副本,裝入后數(shù)據(jù)庫處于一致性狀態(tài)對于動態(tài)轉(zhuǎn)儲的數(shù)據(jù)庫副本,還須同時裝入轉(zhuǎn)儲時刻的日志文件副本,利用與恢復(fù)系統(tǒng)故障的方法(即REDO+UNDO),才能將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。50

介質(zhì)故障的恢復(fù)(續(xù))2.裝入有關(guān)的日志文件副本(轉(zhuǎn)儲結(jié)束時刻的日志文件副本),重做已完成的事務(wù)。首先掃描日志文件,找出故障發(fā)生時已提交的事務(wù)的標識,將其記入重做隊列。然后正向掃描日志文件,對重做隊列中的所有事務(wù)進行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。51

介質(zhì)故障的恢復(fù)(續(xù))介質(zhì)故障的恢復(fù)需要DBA介入DBA的工作重裝最近轉(zhuǎn)儲的數(shù)據(jù)庫副本和有關(guān)的各日志文件副本執(zhí)行系統(tǒng)提供的恢復(fù)命令具體的恢復(fù)操作仍由DBMS完成52

6.1.5.4具有檢查點的恢復(fù)技術(shù)檢查點技術(shù)

利用檢查點的恢復(fù)策略

問題的提出

53

一、問題的提出兩個問題搜索整個日志將耗費大量的時間REDO處理:重新執(zhí)行,浪費了大量時間54

解決方案具有檢查點(checkpoint)的恢復(fù)技術(shù)在日志文件中增加檢查點記錄(checkpoint)增加重新開始文件恢復(fù)子系統(tǒng)在登錄日志文件期間動態(tài)地維護日志55

二、檢查點技術(shù)檢查點記錄的內(nèi)容1.建立檢查點時刻所有正在執(zhí)行的事務(wù)清單2.這些事務(wù)最近一個日志記錄的地址重新開始文件的內(nèi)容記錄各個檢查點記錄在日志文件中的地址

56

檢查點技術(shù)(續(xù))具有檢查點的日志文件和重新開始文件57

動態(tài)維護日志文件的方法動態(tài)維護日志文件的方法周期性地執(zhí)行如下操作:建立檢查點,保存數(shù)據(jù)庫狀態(tài)。具體步驟是:1.將當前日志緩沖區(qū)中的所有日志記錄寫入磁盤的日志文件上2.在日志文件中寫入一個檢查點記錄3.將當前數(shù)據(jù)緩沖區(qū)的所有數(shù)據(jù)記錄寫入磁盤的數(shù)據(jù)庫中4.把檢查點記錄在日志文件中的地址寫入一個重新開始文件58

建立檢查點恢復(fù)子系統(tǒng)可以定期或不定期地建立檢查點,保存數(shù)據(jù)庫狀態(tài)定期按照預(yù)定的一個時間間隔,如每隔一小時建立一個檢查點不定期按照某種規(guī)則,如日志文件已寫滿一半建立一個檢查點59

三、利用檢查點的恢復(fù)策略使用檢查點方法可以改善恢復(fù)效率當事務(wù)T在一個檢查點之前提交

T對數(shù)據(jù)庫所做的修改已寫入數(shù)據(jù)庫寫入時間是在這個檢查點建立之前或在這個檢查點建立之時在進行恢復(fù)處理時,沒有必要對事務(wù)T執(zhí)行REDO操作

60

利用檢查點的恢復(fù)策略(續(xù))Tc

(檢查點)Tf(系統(tǒng)故障)

REDO

UNDO

UNDO

REDO

T2

T3

T4

T5

不要REDO

T1

系統(tǒng)出現(xiàn)故障時,恢復(fù)子系統(tǒng)將根據(jù)事務(wù)的不同狀態(tài)采取不同的恢復(fù)策略61

利用檢查點的恢復(fù)策略(續(xù))T1:在檢查點之前提交T2:在檢查點之前開始執(zhí)行,在檢查點之后故障點之前提交T3:在檢查點之前開始執(zhí)行,在故障點時還未完成T4:在檢查點之后開始執(zhí)行,在故障點之前提交T5:在檢查點之后開始執(zhí)行,在故障點時還未完成恢復(fù)策略:T3和T5在故障發(fā)生時還未完成,所以予以撤銷T2和T4在檢查點之后才提交,它們對數(shù)據(jù)庫所做的修改在故障發(fā)生時可能還在緩沖區(qū)中,尚未寫入數(shù)據(jù)庫,所以要REDOT1在檢查點之前已提交,所以不必執(zhí)行REDO操作62

利用檢查點的恢復(fù)策略1.從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄

2.由該檢查點記錄得到檢查點建立時刻所有正在執(zhí)行的事務(wù)清單ACTIVE-LIST建立兩個事務(wù)隊列UNDO-LISTREDO-LIST把ACTIVE-LIST暫時放入UNDO-LIST隊列,REDO隊列暫為空。63

利用檢查點的恢復(fù)策略(續(xù))3.從檢查點開始正向掃描日志文件,直到日志文件結(jié)束如有新開始的事務(wù)Ti,把Ti暫時放入UNDO-LIST隊列如有提交的事務(wù)Tj,把Tj從UNDO-LIST隊列移到REDO-LIST隊列4.對UNDO-LIST中的每個事務(wù)執(zhí)行UNDO操作對REDO-LIST中的每個事務(wù)執(zhí)行REDO操作64

6.1.6數(shù)據(jù)庫鏡像介質(zhì)故障是對系統(tǒng)影響最為嚴重的一種故障,嚴重影響數(shù)據(jù)庫的可用性介質(zhì)故障恢復(fù)比較費時為預(yù)防介質(zhì)故障,DBA必須周期性地轉(zhuǎn)儲數(shù)據(jù)庫

提高數(shù)據(jù)庫可用性的解決方案數(shù)據(jù)庫鏡像(Mirror)65

數(shù)據(jù)庫鏡像(續(xù))數(shù)據(jù)庫鏡像DBMS自動把整個數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個磁盤上DBMS自動保證鏡像數(shù)據(jù)與主數(shù)據(jù)庫的一致性每當主數(shù)據(jù)庫更新時,DBMS自動把更新后的數(shù)據(jù)復(fù)制過去(如下圖所示)66

數(shù)據(jù)庫鏡像(續(xù))67

數(shù)據(jù)庫鏡像的用途出現(xiàn)介質(zhì)故障時可由鏡像磁盤繼續(xù)提供使用同時DBMS自動利用鏡像磁盤數(shù)據(jù)進行數(shù)據(jù)庫的恢復(fù)不需要關(guān)閉系統(tǒng)和重裝數(shù)據(jù)庫副本(如下圖所示)68

數(shù)據(jù)庫鏡像(續(xù))沒有出現(xiàn)故障時可用于并發(fā)操作一個用戶對數(shù)據(jù)加排他鎖修改數(shù)據(jù),其他用戶可以讀鏡像數(shù)據(jù)庫上的數(shù)據(jù),而不必等待該用戶釋放鎖69

數(shù)據(jù)庫鏡像(續(xù))頻繁地復(fù)制數(shù)據(jù)自然會降低系統(tǒng)運行效率在實際應(yīng)用中用戶往往只選擇對關(guān)鍵數(shù)據(jù)和日志文件鏡像,而不是對整個數(shù)據(jù)庫進行鏡像70

6.1.7小結(jié)如果數(shù)據(jù)庫只包含成功事務(wù)提交的結(jié)果,就說數(shù)據(jù)庫處于一致性狀態(tài)。保證數(shù)據(jù)一致性是對數(shù)據(jù)庫的最基本的要求。事務(wù)是數(shù)據(jù)庫的邏輯工作單位DBMS保證系統(tǒng)中一切事務(wù)的原子性、一致性、隔離性和持續(xù)性

71

小結(jié)(續(xù))DBMS必須對事務(wù)故障、系統(tǒng)故障和介質(zhì)故障進行恢復(fù)恢復(fù)中最經(jīng)常使用的技術(shù):數(shù)據(jù)庫轉(zhuǎn)儲和登記日志文件恢復(fù)的基本原理:利用存儲在后備副本、日志文件和數(shù)據(jù)庫鏡像中的冗余數(shù)據(jù)來重建數(shù)據(jù)庫72

小結(jié)(續(xù))常用恢復(fù)技術(shù)事務(wù)故障的恢復(fù)UNDO系統(tǒng)故障的恢復(fù)UNDO+REDO介質(zhì)故障的恢復(fù)重裝備份并恢復(fù)到一致性狀態(tài)+REDO73

小結(jié)(續(xù))提高恢復(fù)效率的技術(shù)檢查點技術(shù)可以提高系統(tǒng)故障的恢復(fù)效率可以在一定程度上提高利用動態(tài)轉(zhuǎ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ù)是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。例如銀行轉(zhuǎn)帳等應(yīng)用。事務(wù)的ACID特性:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)76

續(xù)僅僅定義“事務(wù)”足夠了嗎?能夠滿足數(shù)據(jù)庫處理的所有要求嗎?請看下面的例子:

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:飛機訂票系統(tǒng)78

錯誤1:丟失修改丟失修改是指事務(wù)1與事務(wù)2從數(shù)據(jù)庫中讀入同一數(shù)據(jù)并修改;事務(wù)2的提交結(jié)果破壞了事務(wù)1提交的結(jié)果,導(dǎo)致事務(wù)1的修改被丟失。其過程可用下圖表示:79

“丟失修改”錯誤示意圖80

例2:數(shù)據(jù)核對系統(tǒng)對于T2來說,什么操作都沒有進行,值卻變了,難道真有妖怪?事務(wù)T1事務(wù)T2①ReadA=10②ReadA=10

③A+=15

④Write(A)[A=25]

⑤ReadA=25??81

錯誤2:不可重復(fù)讀不可重復(fù)讀是指事務(wù)2讀取數(shù)據(jù)后,事務(wù)1執(zhí)行更新操作,使事務(wù)2無法再現(xiàn)前一次讀取結(jié)果??捎孟聢D表示:82

“不可重復(fù)讀”錯誤示意圖83

“不可重復(fù)讀”錯誤種類事務(wù)2讀取某一數(shù)據(jù)后:1.事務(wù)1對其做了修改,當事務(wù)2再次讀該數(shù)據(jù)時,得到與前一次不同的值。2.事務(wù)1刪除了其中部分記錄,當事務(wù)2再次讀取數(shù)據(jù)時,發(fā)現(xiàn)某些記錄神密地消失了。3.事務(wù)1插入了一些記錄,當事務(wù)2再次按相同條件讀取數(shù)據(jù)時,發(fā)現(xiàn)多了一些記錄。后兩種不可重復(fù)讀有時也稱為幻影現(xiàn)象(Phantomrow)84

幻影85

例3:利息計算對于T2來說,并不知道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錯!86

錯誤3:讀“臟”數(shù)據(jù)事務(wù)1修改某一數(shù)據(jù),并將其寫回磁盤;事務(wù)2讀取同一數(shù)據(jù)后,事務(wù)1由于某種原因被撤消,這時事務(wù)1把已修改過的數(shù)據(jù)恢復(fù)原值;事務(wù)2上次讀到的數(shù)據(jù)就與數(shù)據(jù)庫中目前的數(shù)據(jù)不一致,是不正確的數(shù)據(jù),稱之為“臟”數(shù)據(jù)。87

“讀臟數(shù)據(jù)”錯誤示意圖88

并發(fā)操作帶來的數(shù)據(jù)不一致性種類丟失修改(lostupdate)不可重復(fù)讀(non-repeatableread)讀“臟”數(shù)據(jù)(dirtyread)89

單事務(wù)與多事務(wù)因此,可以認為:如果事務(wù)是串行執(zhí)行的,即:A事務(wù)完全執(zhí)行完畢后,B事務(wù)才開始執(zhí)行,則不會出現(xiàn)錯誤;否則,可能會出現(xiàn)前面描述的錯誤,如破壞事務(wù)的隔離性和數(shù)據(jù)庫的一致性。那為何還要使用多事務(wù)呢?90

并行VS串行(1)事務(wù)串行執(zhí)行:每個時刻只有一個事務(wù)運行,其他事務(wù)必須等到這個事務(wù)結(jié)束以后方能運行事務(wù)并發(fā)執(zhí)行:來自不同事務(wù)的指令可以交叉執(zhí)行交叉并發(fā)方式(interleavedconcurrency):是單處理機系統(tǒng)中的并發(fā)方式同時并發(fā)方式(simultaneousconcurrency):是多處理機系統(tǒng)中的并發(fā)方式91

并行VS串行(2)基本比較并行事務(wù)可能會破壞數(shù)據(jù)庫的一致性串行事務(wù)效率低并行的優(yōu)點一個事務(wù)由不同的步驟組成,所涉及的系統(tǒng)資源也不同。這些步驟可以并發(fā)執(zhí)行,以提高系統(tǒng)的吞吐量

系統(tǒng)中存在著周期不等的各種事務(wù),串行會導(dǎo)致難于預(yù)測的時延。如果各個事務(wù)所涉及的是數(shù)據(jù)庫的不同部分,采用并發(fā)會減少平均響應(yīng)時間

核心問題:在保證一致性的前提下最大限度地提高并發(fā)度92

6.2.2解決之道:封鎖基本的封鎖類型

基本鎖的相容矩陣

什么是封鎖

93

一、什么是封鎖封鎖就是事務(wù)T在對某個數(shù)據(jù)對象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖;加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。封鎖是實現(xiàn)并發(fā)控制的一個非常重要的技術(shù)。

94

二、封鎖的類型DBMS通常提供了多種類型的封鎖。一個事務(wù)對某個數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制是由封鎖的類型決定的。基本封鎖類型排它鎖(eXclusivelock,簡記為X鎖)共享鎖(Sharelock,簡記為S鎖)95

排它鎖排它鎖又稱為寫鎖;若事務(wù)T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A;其它任何事務(wù)都不能再對A加任何類型的鎖,直到T釋放A上的鎖;96

共享鎖共享鎖又稱為讀鎖;若事務(wù)T對數(shù)據(jù)對象A加上S鎖,只允許事務(wù)T對該對象A進行讀而不能進行寫;其它任何事務(wù)只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。

97

三、鎖的相容矩陣Y=Yes,相容的請求

N=No,不相容的請求

T1T2

X

S

X

N

N

Y

S

N

Y

Y

Y

Y

Y

98

如何使用鎖?

使用鎖的過程中遵循的法則:封鎖協(xié)議99

6.2.3封鎖協(xié)議封鎖協(xié)議(LockingProtocol):在運用X鎖和S鎖對數(shù)據(jù)對象加鎖時,約定一些規(guī)則,包括:何時申請何種類型鎖何時釋放常用的封鎖協(xié)議:三級封鎖協(xié)議不同的封鎖協(xié)議,在不同的程度上為并發(fā)操作的正確調(diào)度提供一定的保證100

一級封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務(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(驗算不對)

T2T1104

一級封鎖協(xié)議作用小結(jié)因此,可以認為:一級封鎖協(xié)議可防止“丟失修改”錯誤;在一級封鎖協(xié)議規(guī)定中,如果是讀數(shù)據(jù),不需要加鎖,所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。105

二級封鎖協(xié)議定義為:一級封鎖協(xié)議+事務(wù)T在讀取數(shù)據(jù)R前必須先加S鎖,讀完后即可釋放S鎖;二級封鎖協(xié)議可以防止:丟失修改讀“臟”數(shù)據(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(驗算不對)

T2T1(續(xù))108

三級封鎖協(xié)議定義為:一級封鎖協(xié)議+事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放三級封鎖協(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é)三級協(xié)議的主要區(qū)別什么操作需要申請封鎖何時釋放鎖(即持鎖時間)112

6.2.4

活鎖和死鎖封鎖技術(shù)可以有效地解決并行操作的一致性問題,但也帶來一些新的問題死鎖活鎖113

如何避免活鎖

采用先來先服務(wù)的策略:當多個事務(wù)請求封鎖同一數(shù)據(jù)對象時按請求封鎖的先后次序?qū)@些事務(wù)排隊該數(shù)據(jù)對象上的鎖一旦釋放,首先批準申請隊列中第一個事務(wù)獲得鎖。

114

6.2.4.1

死鎖Xlock

R1

.

.

.

Xlock

R2

等待

等待

等待

..

.

Xlock

R2

.

.

Xlock

R1

等待

等待

.115

解決死鎖的方法兩類方法1.預(yù)防死鎖2.死鎖的診斷與解除

116

1.死鎖的預(yù)防產(chǎn)生死鎖的原因是兩個或多個事務(wù)都已封鎖了一些數(shù)據(jù)對象,然后又都請求對已為其他事務(wù)封鎖的數(shù)據(jù)對象加鎖,從而出現(xiàn)死等待。預(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件117

死鎖的預(yù)防(續(xù))預(yù)防死鎖的方法一次封鎖法順序封鎖法118

(1)一次封鎖法要求每個事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行一次封鎖法存在的問題:降低并發(fā)度擴大封鎖范圍將以后要用到的全部數(shù)據(jù)加鎖,勢必擴大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度119

一次封鎖法(續(xù))難于事先精確確定封鎖對象數(shù)據(jù)庫中數(shù)據(jù)是不斷變化的,原來不要求封鎖的數(shù)據(jù),在執(zhí)行過程中可能會變成封鎖對象,所以很難事先精確地確定每個事務(wù)所要封鎖的數(shù)據(jù)對象解決方法:將事務(wù)在執(zhí)行過程中可能要封鎖的數(shù)據(jù)對象全部加鎖,這就進一步降低了并發(fā)度。120

(2)順序封鎖法順序封鎖法是預(yù)先對數(shù)據(jù)對象規(guī)定一個封鎖順序,所有事務(wù)都按這個順序?qū)嵭蟹怄i。順序封鎖法存在的問題維護成本高數(shù)據(jù)庫系統(tǒng)中可封鎖的數(shù)據(jù)對象極其眾多,并且隨數(shù)據(jù)的插入、刪除等操作而不斷地變化,要維護這樣極多而且變化的資源的封鎖順序非常困難,成本很高121

順序封鎖法(續(xù))難于實現(xiàn)事務(wù)的封鎖請求可以隨著事務(wù)的執(zhí)行而動態(tài)地決定,很難事先確定每一個事務(wù)要封鎖哪些對象,因此也就很難按規(guī)定的順序去施加封鎖。例:規(guī)定數(shù)據(jù)對象的封鎖順序為A,B,C,D,E。事務(wù)T3起初要求封鎖數(shù)據(jù)對象B,C,E,但當它封鎖了B,C后,才發(fā)現(xiàn)還需要封鎖A,這樣就破壞了封鎖順序.

122

死鎖的預(yù)防(續(xù))結(jié)論在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略并不很適合數(shù)據(jù)庫的特點DBMS在解決死鎖的問題上更普遍采用的是診斷并解除死鎖的方法123

2.死鎖的診斷與解除允許死鎖發(fā)生解除死鎖由DBMS的并發(fā)控制子系統(tǒng)定期檢測系統(tǒng)中是否存在死鎖一旦檢測到死鎖,就要設(shè)法解除124

檢測死鎖:超時法如果一個事務(wù)的等待時間超過了規(guī)定的時限,就認為發(fā)生了死鎖優(yōu)點:實現(xiàn)簡單缺點有可能誤判死鎖時限若設(shè)置得太長,死鎖發(fā)生后不能及時發(fā)現(xiàn)125

等待圖法用事務(wù)等待圖動態(tài)反映所有事務(wù)的等待情況事務(wù)等待圖是一個有向圖G=(T,U)T為結(jié)點的集合,每個結(jié)點表示正運行的事務(wù)U為邊的集合,每條邊表示事務(wù)等待的情況若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2并發(fā)控制子系統(tǒng)周期性地(比如每隔1min)檢測事務(wù)等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。126

死鎖的診斷與解除(續(xù))解除死鎖選擇一個處理死鎖代價最小的事務(wù),將其撤消,釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運行下去。127

6.2.5并發(fā)調(diào)度的可串行性如何保證并發(fā)操作的調(diào)度是正確的

什么樣的并發(fā)操作調(diào)度是正確的

128

一、什么樣的并發(fā)操作調(diào)度是正確的計算機系統(tǒng)對并行事務(wù)中并行操作的調(diào)度是的隨機的,而不同的調(diào)度可能會產(chǎn)生不同的結(jié)果。將所有事務(wù)串行起來的調(diào)度策略一定是正確的調(diào)度策略。幾個事務(wù)的并行執(zhí)行是正確的,當且僅當其結(jié)果與按某一次序串行地執(zhí)行它們時的結(jié)果相同。這種并行調(diào)度策略稱為可串行化(Serializable)的調(diào)度。129

什么樣的并發(fā)操作調(diào)度是正確的(續(xù))可串行性是并行事務(wù)正確性的唯一準則

例:現(xiàn)在有兩個事務(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ù))對這兩個事務(wù)的不同調(diào)度策略串行執(zhí)行串行調(diào)度策略1串行調(diào)度策略2交錯執(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é)果都不同,所以是錯誤的調(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的并行控制機制必須提供一定的手段來保證調(diào)度是可串行化的。

從理論上講,在某一事務(wù)執(zhí)行時禁止其他事務(wù)執(zhí)行的調(diào)度策略一定是可串行化的調(diào)度,這也是最簡單的調(diào)度策略,但這種方法實際上是不可行的,因為它使用戶不能充分共享數(shù)據(jù)庫資源。138

如何判斷調(diào)度是可串行化調(diào)度?沖突操作:不同的事務(wù)對同一個數(shù)據(jù)的讀寫操作與寫寫操作。Ri(x)與Wj(x):事務(wù)Ti讀x,Tj寫xWi(x)與Wj(x):事務(wù)Ti寫x,Tj寫x其它的操作,如:讀讀操作都不沖突139

續(xù)不可交換的操作:不同事務(wù)的沖突操作不可交換;同一事務(wù)的兩個操作不可交換;可以交換的操作:不同事務(wù)的不沖突操作可交換;

140

續(xù)因此:如果一個調(diào)度SC在保證沖突操作的次序不變的情況下,通過交換兩個事務(wù)的不沖突操作次序得到另一個調(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)相當于串行調(diào)度事務(wù)T1與T2,是可串行化調(diào)度沖突可串行化調(diào)度是可串化調(diào)度的充分條件。

142

如何保證并發(fā)操作的調(diào)度是正確的(續(xù))保證并發(fā)操作調(diào)度正確性的方法封鎖方法:兩段鎖(Two-PhaseLocking,簡稱2PL)協(xié)議時標方法樂觀方法143

6.2.6兩段鎖協(xié)議兩段鎖協(xié)議的內(nèi)容1.在對任何數(shù)據(jù)進行讀、寫操作之前,事務(wù)首先要獲得對該數(shù)據(jù)的封鎖2.在釋放一個封鎖之后,事務(wù)不再獲得任何其他封鎖。144

兩段鎖協(xié)議(續(xù))“兩段”鎖的含義事務(wù)分為兩個階段第一階段是獲得封鎖,也稱為擴展階段;第二階段是釋放封鎖,也稱為收縮階段。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é)議,則對這些事務(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é)議與防止死鎖的一次封鎖法一次封鎖法要求每個事務(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é)議與三級封鎖協(xié)議兩類不同目的的協(xié)議兩段鎖協(xié)議保證并發(fā)調(diào)度的正確性三級封鎖協(xié)議在不同程度上保證數(shù)據(jù)一致性遵守第三級封鎖協(xié)議必然遵守兩段協(xié)議151

6.2.7封鎖粒度6.2.7.1多粒度封鎖6.2.7.2意向鎖152

什么是封鎖粒度封鎖對象的大小稱為封鎖粒度(Granularity)封鎖的對象:邏輯單元,物理單元例:在關(guān)系數(shù)據(jù)庫中,封鎖對象:邏輯單元:屬性值、屬性值集合、元組、關(guān)系、索引項、整個索引、整個數(shù)據(jù)庫等物理單元:頁(數(shù)據(jù)頁或索引頁)、物理記錄等153

選擇封鎖粒度原則封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。封鎖的粒度越大,數(shù)據(jù)庫所能夠封鎖的數(shù)據(jù)單元就越少,并發(fā)度就越小,系統(tǒng)開銷也越??;封鎖的粒度越小,并發(fā)度較高,但系統(tǒng)開銷也就越大154

選擇封鎖粒度的原則(續(xù))若封鎖粒度是數(shù)據(jù)頁,事務(wù)T1需要修改元組L1,則T1必須對包含L1的整個數(shù)據(jù)頁A加鎖。如果T1對A加鎖后事務(wù)T2要修改A中元組L2,則T2被迫等待,直到T1釋放A。如果封鎖粒度是元組,則T1和T2可以同時對L1和L2加鎖,不需要互相等待,提高系統(tǒng)的并行度。如事務(wù)T需要讀取整個表,若封鎖粒度是元組,T必須對表中的每一個元組加鎖,開銷極大155

選擇封鎖粒度的原則(續(xù))多粒度封鎖(MultipleGranularityLocking)

在一個系統(tǒng)中同時支持多種封鎖粒度供不同的事務(wù)選擇選擇封鎖粒度同時考慮封鎖開銷和并發(fā)度兩個因素,適當選擇封鎖粒度需要處理多個關(guān)系的大量元組的用戶事務(wù):以數(shù)據(jù)庫為封鎖單位需要處理大量元組的用戶事務(wù):以關(guān)系為封鎖單元只處

溫馨提示

  • 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

提交評論