




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2024/9/6
1系統(tǒng)篇----數(shù)據(jù)庫(kù)保護(hù)第9章事務(wù)管理2024/9/6
2主要內(nèi)容事務(wù)概述并發(fā)控制數(shù)據(jù)庫(kù)恢復(fù)技術(shù)2024/9/6
3事務(wù)的概念事務(wù)定義事務(wù)是由一系列操作序列構(gòu)成的程序執(zhí)行單元,這些操作要么都做,要么都不做,是一個(gè)不可分割的工作單位。例如銀行轉(zhuǎn)帳。SQL中事務(wù)的定義事務(wù)以Begintransaction開始,以Commit或Rollback結(jié)束Commit表示提交,事務(wù)正常結(jié)束Rollback表示事務(wù)非正常結(jié)束,撤消事務(wù)已做的操作,回滾到事務(wù)開始時(shí)狀態(tài)2024/9/6
4銀行轉(zhuǎn)帳:事務(wù)T從A帳戶過(guò)戶50¥到B帳戶
T: read(A); A:=A–50; write(A); read(B); B:=B+50; write(B);read(X):從數(shù)據(jù)庫(kù)傳送數(shù)據(jù)項(xiàng)X到事務(wù)的工作區(qū)中write(X):從事務(wù)的工作區(qū)中將數(shù)據(jù)項(xiàng)X寫回?cái)?shù)據(jù)庫(kù)事務(wù)示例2024/9/6
5事務(wù)示例銀行轉(zhuǎn)帳示例:假設(shè)銀行有一筆轉(zhuǎn)帳業(yè)務(wù),需要將帳戶1的$1000轉(zhuǎn)入帳戶2中。數(shù)據(jù)庫(kù)應(yīng)用程序至少需要執(zhí)行以下幾步完成此轉(zhuǎn)帳功能(帳戶關(guān)系A(chǔ)ccounts,有屬性acctNo和balance,分別表示帳戶號(hào)和該帳戶的余額。):讀帳戶1的資金余額,判斷余額(balance)是否大于等于$1000;UpdateaccountsSetbalance=balance-1000 WhereacctNo=acct1;UpdateaccountsSetbalance=babalance+1000 WhereacctNo=acct2;2024/9/6
6原子性(Atomicity)事務(wù)中包含的所有操作要么全做,要么全不做。原子性由恢復(fù)機(jī)制實(shí)現(xiàn)。一致性(Consistency)事務(wù)的隔離執(zhí)行必須保證數(shù)據(jù)庫(kù)的一致性。事務(wù)開始前,數(shù)據(jù)庫(kù)處于一致性的狀態(tài);事務(wù)結(jié)束后,數(shù)據(jù)庫(kù)必須仍處于一致性狀態(tài)。數(shù)據(jù)庫(kù)的一致性狀態(tài)由用戶來(lái)負(fù)責(zé),由并發(fā)控制機(jī)制實(shí)現(xiàn)。如銀行轉(zhuǎn)帳,轉(zhuǎn)帳前后兩個(gè)帳戶金額之和應(yīng)保持不變。事務(wù)特性(ACID)2024/9/6
7隔離性(Isolation)系統(tǒng)必須保證事務(wù)不受其它并發(fā)執(zhí)行事務(wù)的影響。對(duì)任何一對(duì)事務(wù)T1,T2,在T1看來(lái),T2要么在T1開始之前已經(jīng)結(jié)束,要么在T1完成之后再開始執(zhí)行。隔離性通過(guò)并發(fā)控制機(jī)制實(shí)現(xiàn)。持久性(Durability)一個(gè)事務(wù)一旦提交之后,它對(duì)數(shù)據(jù)庫(kù)的影響必須是永久的系統(tǒng)發(fā)生故障不能改變事務(wù)的持久性持久性通過(guò)恢復(fù)機(jī)制實(shí)現(xiàn)事務(wù)特性(ACID)(續(xù))2024/9/6
8事務(wù)的狀態(tài)活動(dòng)狀態(tài)失敗狀態(tài)部分提交狀態(tài)提交狀態(tài)中止?fàn)顟B(tài)初始狀態(tài)事務(wù)無(wú)法繼續(xù)正常執(zhí)行事務(wù)回滾,數(shù)據(jù)庫(kù)恢復(fù)到事務(wù)開始前狀態(tài)最后一條語(yǔ)句被執(zhí)行后成功完成,永久寫入數(shù)據(jù)庫(kù)2024/9/6
9事務(wù)調(diào)度事務(wù)的調(diào)度事務(wù)的執(zhí)行順序稱為一個(gè)調(diào)度,表示事務(wù)的指令在系統(tǒng)中執(zhí)行的時(shí)間順序一組事務(wù)的調(diào)度必須保證包含了所有事務(wù)的操作指令一個(gè)事務(wù)中指令的順序必須保持不變串行調(diào)度在串行調(diào)度中,屬于同一事務(wù)的指令緊挨在一起對(duì)于有n個(gè)事務(wù)的事務(wù)組,可以有n!個(gè)有效調(diào)度并行調(diào)度在并行調(diào)度中,來(lái)自不同事務(wù)的指令可以交叉執(zhí)行當(dāng)并行調(diào)度等價(jià)于某個(gè)串行調(diào)度時(shí),則稱它是正確的2024/9/6
10并行Vs串行基本比較并行事務(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ā)度2024/9/6
11事務(wù)執(zhí)行示例T1read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);T2read(A);temp:=A
0.1A:=A
temp;write(A);read(B);B:=B+temp;write(B);從A過(guò)戶50¥到B從A過(guò)戶存款的10%到B開始狀態(tài):A=1000¥B=2000¥A+B=3000¥2024/9/6
12
read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;
write(A);read(B);B:=B+temp;write(B);T1T2A=950¥B=2050¥結(jié)束狀態(tài):A=855¥B=2145¥A+B=3000¥串行調(diào)度12024/9/6
13
read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;write(A);read(B);B:=B+temp;write(B);T1T2A=900¥B=2100¥結(jié)束狀態(tài):A=850¥B=2150¥A+B=3000¥串行調(diào)度22024/9/6
14
read(A);A:=A
50;write(A);
read(B);B:=B+temp;write(B);T1T2A=950¥B=2000¥結(jié)束狀態(tài):A=855¥B=2145¥A+B=3000¥
read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;
write(A);A=855¥B=2000¥A=855¥B=2050¥并行調(diào)度32024/9/6
15并發(fā)調(diào)度事務(wù)中可能出現(xiàn)的問(wèn)題丟失更新讀臟數(shù)據(jù)不可重復(fù)讀2024/9/6
16丟失更新定義兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2提交的結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改丟失示例2024/9/6
17
read(A);A:=A
50;
B:=B+temp;write(B);T1T2A=1000¥B=2000¥結(jié)束狀態(tài):A=950¥B=2100¥A+B=3050¥
write(A);read(B);B:=B+50;write(B);
read(A);temp:=A
0.1A:=A
temp;
write(A);
read(B);
A=900¥B=2000¥A=950¥B=2000¥A=950¥B=2050¥并行調(diào)度42024/9/6
18讀臟數(shù)據(jù)定義事務(wù)T1修改某一數(shù)據(jù),并將其寫回磁盤,事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤消,這時(shí)T1已修改過(guò)的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)與數(shù)據(jù)庫(kù)中數(shù)據(jù)不一致,則T2讀到的數(shù)據(jù)就是臟數(shù)據(jù)示例2024/9/6
19read(A);A1:=A;read(B);B1:=B;A1+B1=2950;read(B);B:=B+50;write(B);T1T2A=1000¥B=2000¥read(A);A:=A
50;write(A);并行調(diào)度52024/9/6
20不能重復(fù)讀定義事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對(duì)其做了修改,當(dāng)T1再次讀取該數(shù)據(jù)時(shí),得到與前次不同的值示例2024/9/6
21
read(A);A1:=AT1T2A=1000¥B=2000¥read(A);A:=A
50;write(A);read(B);B:=B+50;write(B);read(B);B1:=BA1+B1=3050A=950¥B=2050¥并行調(diào)度62024/9/6
22并發(fā)調(diào)度的可串行性可串行化的調(diào)度:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同。正確調(diào)度:一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的。并行調(diào)度的可串行化2024/9/6
23
T1T2T1T2SlockBSlockAY=B=2X=A=2UnlockBUnlockAXlockAXlockBA=Y+1B=X+1寫回A(=3)寫回B(=3)UnlockAUnlockBSlockASlockBX=A=3Y=B=3UnlockAUnlockBXlockBXlockAB=X+1A=Y+1
寫回B(=4)寫回
A(=4)UnlockBUnlock
(a)串行調(diào)度(b)串行調(diào)度
并行事務(wù)的不同調(diào)度2024/9/6
24
T1T2T1T2SlockBSlockBY=B=2Y=B=2SlockAUnlockBX=A=2XlockAUnlockBSlockAUnlockAA=Y+1等待
XlockA寫回A(=3)等待
A=Y+1UnlockA等待寫回A(=3)X=A=3XlockBUnlockAB=X+1XlockB
寫回B(=3)B=X+1UnlockA寫回B(=4)
UnlockBUnlockB
(c)不可串行化的調(diào)度(d)可串行化的調(diào)度
并行事務(wù)的不同調(diào)度(續(xù))2024/9/6
25并行調(diào)度的可串行化(續(xù))指令的順序 考慮一個(gè)調(diào)度S中的兩條連續(xù)指令(僅限于read與write操作)Ii與Ij,分別屬于事務(wù)Ti與Tj ①Ii=read(Q),Ij=read(Q); ②Ii=read(Q),Ij=write(Q); ③Ii=write(Q),Ij=read(Q); ④Ii=write(Q),Ij=write(Q);
在①情況下,Ii與Ij的次序無(wú)關(guān)緊要。其余情況下,Ii與Ij的次序不同,其執(zhí)行結(jié)果也不同,數(shù)據(jù)庫(kù)最終狀態(tài)也不同2024/9/6
26并行調(diào)度的可串行化(續(xù))沖突指令當(dāng)兩條指令是不同事務(wù)在相同數(shù)據(jù)項(xiàng)上的操作,并且其中至少有一個(gè)是write指令時(shí),則稱這兩條指令是沖突的如在②、③、④情況下,Ii與Ij是沖突的非沖突指令交換次序不會(huì)影響調(diào)度的最終結(jié)果沖突等價(jià)如果調(diào)度S可以經(jīng)過(guò)一系列非沖突指令交換轉(zhuǎn)換成調(diào)度S‘,則稱調(diào)度S與S’是沖突等價(jià)的沖突可串行化當(dāng)一個(gè)調(diào)度S與一個(gè)串行調(diào)度沖突等價(jià)時(shí),則稱該調(diào)度是沖突可串行化的如并行調(diào)度3是沖突可串行化的2024/9/6
27示例示例read(A);write(A);read(B);write(B);T1T2read(B);
write(B);read(A);write(A);read(A);write(A);read(B);write(B);T1T2write(B);read(A);write(A);read(B);read(A);write(A);read(B);write(B);write(B);read(A);write(A);read(B);交換1交換2交換3read(A);write(A);read(B);write(B);read(B);write(B);read(A);write(A);并行調(diào)度3串行化2024/9/6
28封鎖機(jī)制所謂并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,避免造成數(shù)據(jù)的不一致性,使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾。另一方面,對(duì)數(shù)據(jù)庫(kù)的應(yīng)用有時(shí)允許某些不一致性,例如,有些統(tǒng)計(jì)工作涉及數(shù)據(jù)量很大,讀到一些臟數(shù)據(jù)對(duì)統(tǒng)計(jì)精度沒(méi)什么影響,這時(shí)可以降低對(duì)一致性的要求以減少系統(tǒng)開銷并發(fā)控制的主要方法是采用封鎖機(jī)制。2024/9/6
29封鎖事務(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ì)象。排它鎖(寫鎖,X鎖)共享鎖(讀鎖,S鎖)封鎖機(jī)制(續(xù))2024/9/6
30
T2T1XS—XNNYSNYY—YYY
Y=Yes,相容的請(qǐng)求;N=No,不相容的請(qǐng)求
封鎖類型的相容矩陣2024/9/6
31封鎖協(xié)議對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則,稱這些規(guī)則為封鎖協(xié)議。一級(jí)封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。二級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后即可釋放S鎖。三級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。封鎖機(jī)制(續(xù))2024/9/6
32活鎖和死鎖活鎖某一事務(wù)的請(qǐng)求可能永遠(yuǎn)得不到,該事務(wù)一直處于等待狀態(tài)解決方法:先來(lái)先服務(wù)策略死鎖兩個(gè)事務(wù)處于相互等待狀態(tài),永遠(yuǎn)不能結(jié)束死鎖的預(yù)防一次封鎖法——降低了并發(fā)度順序封鎖法死鎖的診斷與解除超時(shí)法,等待圖法封鎖機(jī)制(續(xù))2024/9/6
33
T1T2T1T2T1T2(1)讀A=16(1)讀A=50(1)讀C=100
讀B=100CC×2
求和C=150寫回C(2)讀A=16(2)(2)讀B=100讀C=BB×2
ROLLBACK200
寫回BC恢復(fù)為100(3)A
A-1
寫回A=15(3)讀A=50(4)A
A-1讀B=200
寫回A=15和=250(驗(yàn)算不對(duì))(a)丟失修改(b)不能重復(fù)讀(c)讀臟數(shù)據(jù)2024/9/6
34
T1T2T1T2T1T2(1)獲得(1)SLA(1)獲得XLC
XLASLB讀C=200(2)讀A=16讀A,BCC×2
請(qǐng)求求和=150請(qǐng)求寫回C=200XLA(2)XLB(2)請(qǐng)求等待等待SLC(3)A
A-1等待等待等待寫回A=15等待(3)讀A,B等待(3)ROLLBACK
等待
Commit等待求和=150
等待(C恢復(fù)為100)
等待
UnlockX等待commit等待UlockC等待(4)獲得UlockA等待(4)獲得
XLAUlockB等待SLC
讀A=15(4)XlockB讀c=100(5)A
A-1讀B=100(5)Commit
寫回A=14BB×2UnlockCCommit寫回B=200
UnlockX(a)沒(méi)有丟失修改(b)可重復(fù)讀(c)不再讀“臟”數(shù)據(jù)2024/9/6
35兩段鎖協(xié)議作用:保證可串行性指所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖。若并發(fā)執(zhí)行的所有事務(wù)均遵守兩段鎖協(xié)議,則對(duì)這些事務(wù)的任何并發(fā)調(diào)度策略都是可串行化的。兩段鎖的含義:事務(wù)分為兩個(gè)階段第一個(gè)階段獲得封鎖,也稱擴(kuò)展階段第二階段是釋放階段,也稱收縮階段定理:若所有事務(wù)均遵守兩段鎖協(xié)議,則這些事務(wù)的所有并行調(diào)度都是可串行化的。兩段鎖協(xié)議是可串行化調(diào)度的充分條件而不是必要條件。示例:
XLA…XLB…SLC…UnlockB…ULA…ULC;Y XLA…ULA…XLB…SLC…ULC…ULB;N2024/9/6
36T1T2
①SLOCKY讀Y=20②XLOCKX④UNLOCKY⑤讀X=10X=X+Y寫回X=30⑥UNLOCKX③SLOCKX等待等待等待等待等待⑦獲得SLOCKX讀X=10⑧XLOCKY⑨UNLOCKX讀Y=20Y=X+Y寫回Y=30⑩UNLOCKY遵守兩段鎖協(xié)議的并行調(diào)度2024/9/6
37課內(nèi)練習(xí)設(shè)有三個(gè)事務(wù)T1、T2、T3,它們執(zhí)行的操作分別是:T1:A+100T2:A*2T3:A/2假設(shè)這三個(gè)事務(wù)進(jìn)行并發(fā)操作,試討論它們可能實(shí)施的調(diào)度。假設(shè)A的初始值為100,各調(diào)度的最后結(jié)果是什么。2024/9/6
38設(shè)事務(wù)T1、T2的并發(fā)操作如圖(a)、(b)所示,兩個(gè)并發(fā)操作中分別存在什么問(wèn)題?T1T1T1T2①讀A=100B=50A+B=150②
③讀A=200B=50A+B=250
(驗(yàn)證錯(cuò)誤)讀A=100A=A*2寫回A=200①讀B=100
②③B=B+50
寫回B=150讀B=100B=B*2寫回B=2002024/9/6
39假設(shè)有零件100個(gè),T1事務(wù)領(lǐng)走50個(gè),T2事務(wù)領(lǐng)走20個(gè),其執(zhí)行時(shí)間如圖所示,應(yīng)該如何實(shí)現(xiàn)這兩個(gè)事務(wù)的并發(fā)控制?T1T2①讀零件數(shù)目
③取走50②讀零件數(shù)目④取走202024/9/6
40事務(wù)和事務(wù)日志一個(gè)事務(wù)包括一個(gè)或許多個(gè)操作的集合,可以是:插入、修改、刪除等命令或更復(fù)雜的操作。事務(wù)的特性:原子性:一個(gè)事務(wù)中的操作是不可分割的,要么全部執(zhí)行成功,要么全部不執(zhí)行。一致性:事務(wù)執(zhí)行的前后,數(shù)據(jù)庫(kù)中的數(shù)據(jù)都處于一致性狀態(tài)。獨(dú)立性:事務(wù)直接不能互相干擾。永久性:事務(wù)一旦執(zhí)行成功,則對(duì)數(shù)據(jù)庫(kù)的影響是永久的。2024/9/6
41事務(wù)和事務(wù)日志(續(xù))如果提交了一個(gè)事務(wù),SQLServer就會(huì)在事務(wù)日志中記錄所有有關(guān)該事務(wù)的信息。為一個(gè)事務(wù)記錄的數(shù)據(jù)總量取決于以下幾個(gè)方面:更改的數(shù)據(jù)量受影響的索引量作為事務(wù)的結(jié)果,必須分配或釋放的頁(yè)的數(shù)量2024/9/6
42事務(wù)日志條目開始條目記錄數(shù)據(jù)修改進(jìn)行數(shù)據(jù)修改提交事務(wù)將日志頁(yè)轉(zhuǎn)存于磁盤2024/9/6
43事務(wù)日志條目示例操作:更新一條記錄,日志文件將增加:一個(gè)數(shù)據(jù)刪除記錄,包括原有行中所有數(shù)據(jù)一個(gè)數(shù)據(jù)插入記錄,包括修改后行中所有數(shù)據(jù)一個(gè)受該事務(wù)影響的每個(gè)索引的索引刪除記錄一個(gè)受該事務(wù)影響的每個(gè)索引的索引插入記錄一個(gè)用于每個(gè)新數(shù)據(jù)或索引頁(yè)的頁(yè)分配記錄,和一個(gè)用于每個(gè)釋放數(shù)據(jù)或索引頁(yè)的頁(yè)釋放記錄2024/9/6
44SQL中的事務(wù)BeginTransaction
………….
………..If……….RollbackElseCommit2024/9/6
45數(shù)據(jù)庫(kù)恢復(fù)概述計(jì)算機(jī)系統(tǒng)中不可避免:硬件的故障軟件的錯(cuò)誤操作員的失誤惡意的破壞故障:造成運(yùn)行事務(wù)非正常中斷,影響數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性;重則破壞數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)中全部或部分?jǐn)?shù)據(jù)丟失數(shù)據(jù)庫(kù)管理系統(tǒng)(恢復(fù)子系統(tǒng)):把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(亦稱為一致狀態(tài)或完整狀態(tài))的功能,這就是數(shù)據(jù)庫(kù)的恢復(fù)。2024/9/6
46故障的種類事務(wù)內(nèi)部的故障預(yù)期的可通過(guò)事務(wù)程序本身發(fā)現(xiàn)示例非預(yù)期的不能由應(yīng)用程序處理的,如運(yùn)算溢出、并行事務(wù)發(fā)生死鎖而被選中撤銷該事務(wù)等系統(tǒng)故障(軟故障,SoftCrash)指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,使得統(tǒng)要重新啟動(dòng)中央處理器故障、操作系統(tǒng)故障、突然停電介質(zhì)故障(硬故障,HardCrash)外存故障,如磁盤的磁頭碰撞,瞬時(shí)的強(qiáng)磁場(chǎng)干擾計(jì)算機(jī)病毒2024/9/6
47總結(jié),對(duì)數(shù)據(jù)庫(kù)的影響可能性數(shù)據(jù)庫(kù)本身被破壞數(shù)據(jù)庫(kù)沒(méi)有破壞,但數(shù)據(jù)可能不正確,因?yàn)槭聞?wù)的運(yùn)行被中止所造成恢復(fù)的基本原理:冗余數(shù)據(jù)庫(kù)中任何一部分的數(shù)據(jù),可以根據(jù)存儲(chǔ)在系統(tǒng)別處的冗余數(shù)據(jù)來(lái)重建恢復(fù)的最常用方法:轉(zhuǎn)儲(chǔ)和登記日志文件故障的種類(續(xù))2024/9/6
48恢復(fù)的基本原理恢復(fù)的基本原理十分簡(jiǎn)單??梢杂靡粋€(gè)詞來(lái)概括:冗余。即數(shù)據(jù)庫(kù)中任何一部分被破壞的或不正確的數(shù)據(jù)可以根據(jù)存儲(chǔ)在系統(tǒng)別處的冗余數(shù)據(jù)來(lái)重建?;謴?fù)機(jī)制涉及的兩個(gè)關(guān)鍵問(wèn)題是: 第一,如何建立冗余數(shù)據(jù); 第二,如何利用這些冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫(kù)恢復(fù)。建立冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)轉(zhuǎn)儲(chǔ)和登記日志文件。通常在一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)中,這兩種方法是一起使用的。2024/9/6
49數(shù)據(jù)轉(zhuǎn)儲(chǔ)后備副本或后援副本轉(zhuǎn)儲(chǔ)周期靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)登記日志文件日志文件的格式和內(nèi)容記錄為單位和數(shù)據(jù)塊為單位日志文件的作用登記日志文件:“先寫日志文件”的原則恢復(fù)的實(shí)現(xiàn)技術(shù)2024/9/6
50轉(zhuǎn)儲(chǔ)DBA定期地將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到磁帶或另一個(gè)磁盤上保存起來(lái)的過(guò)程后備副本或后援副本:備用的數(shù)據(jù)文本靜態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)期間不允許(或不存在)對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何存取、修改活動(dòng)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取或修改即轉(zhuǎn)儲(chǔ)和用戶事務(wù)可以并發(fā)執(zhí)行海量轉(zhuǎn)儲(chǔ)每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)增量轉(zhuǎn)儲(chǔ)每次只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后更新過(guò)的數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)2024/9/6
51靜態(tài)轉(zhuǎn)儲(chǔ)簡(jiǎn)單降低數(shù)據(jù)庫(kù)的可用性動(dòng)態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)結(jié)束時(shí)后援副本上的數(shù)據(jù)并不能保證正確有效示例:在轉(zhuǎn)儲(chǔ)期間的某時(shí)刻T1系統(tǒng)把數(shù)據(jù)A=100轉(zhuǎn)儲(chǔ)到了磁帶上,而在時(shí)刻T2,某一事務(wù)對(duì)A進(jìn)行了修改使A=200。轉(zhuǎn)儲(chǔ)結(jié)束,后援副本上的A已是過(guò)時(shí)的數(shù)據(jù)了。為此,必須把轉(zhuǎn)儲(chǔ)間各事務(wù)對(duì)數(shù)據(jù)庫(kù)的修改活動(dòng)登記下來(lái),建立日志文件(logfile)。這樣,后援副本加上日志文件就能把數(shù)據(jù)庫(kù)恢復(fù)到某一時(shí)刻的正確狀態(tài)。數(shù)據(jù)轉(zhuǎn)儲(chǔ)(續(xù))2024/9/6
52日志文件用來(lái)記錄對(duì)數(shù)據(jù)庫(kù)每一次更新活動(dòng)的文件登記日志文件登記記錄主要包括:執(zhí)行操作的事務(wù)標(biāo)識(shí)、操作類型、更新前數(shù)據(jù)的舊值(對(duì)插入操作而言此項(xiàng)為空值)、更新后的新值(對(duì)刪除操作而言此項(xiàng)為空值)登記次序嚴(yán)格按并行事務(wù)操作執(zhí)行的時(shí)間次序,同時(shí)遵循“先寫日志文件”的規(guī)則。登記日志文件2024/9/6
53事務(wù)恢復(fù)利用日志文件恢復(fù)事務(wù)的過(guò)程分為二步:從頭掃描日志文件,找出哪些事務(wù)在故障發(fā)生時(shí)已經(jīng)結(jié)束(這些事務(wù)有BEGINTRANSACTION和COMMIT記錄),哪些事務(wù)尚未結(jié)束(這些事務(wù)有BEGINTRANSACTION記錄,無(wú)COMMIT記錄)。對(duì)尚未結(jié)束的事務(wù)進(jìn)行撤銷(也稱UNDO)處理,對(duì)已經(jīng)結(jié)束的事務(wù)進(jìn)行重做(REDO)處理。UNDO處理的方法:反向掃描日志文件,對(duì)每個(gè)UNDO事務(wù)的更新操作執(zhí)行反操作。REDO處理的方法:正向掃描日志文件,重新執(zhí)行登記的操作。利用轉(zhuǎn)儲(chǔ)和日志文件可以有效的恢復(fù)數(shù)據(jù)庫(kù)?;謴?fù)的實(shí)現(xiàn)技術(shù)(續(xù))2024/9/6
54正常運(yùn)行
轉(zhuǎn)儲(chǔ)
運(yùn)行事務(wù)故障發(fā)生點(diǎn)TaTbTf重裝后備副本重新運(yùn)行事務(wù)
恢復(fù)轉(zhuǎn)儲(chǔ)和恢復(fù)2024/9/6
55正常運(yùn)行
靜態(tài)轉(zhuǎn)儲(chǔ)
運(yùn)行事務(wù)故障發(fā)生點(diǎn)TaTbTf
登記日志文件重裝后備副本利用日志文件恢復(fù)事務(wù)介質(zhì)故障恢復(fù)
繼續(xù)運(yùn)行
登記日志文件利用日志文件恢復(fù)2024/9/6
56恢復(fù)策略事務(wù)故障的恢復(fù)發(fā)生后由系統(tǒng)自動(dòng)完成系統(tǒng)故障的恢復(fù)重啟系統(tǒng),由系統(tǒng)自動(dòng)完成介質(zhì)故障的恢復(fù)由DBA重裝數(shù)據(jù)庫(kù)具有檢查點(diǎn)的恢復(fù)技術(shù)數(shù)據(jù)庫(kù)鏡像恢復(fù)策略2024/9/6
57BEGINTRANSACTION
讀賬戶甲的余額BALANCE;
BALANCE=BALANCE-AMOUNT;(Amount為轉(zhuǎn)賬金額)
IF(BALANCE<0)THEN {打印‘金額不足,不能轉(zhuǎn)帳’;
ROLLBACK;(撤銷剛才的修改,恢復(fù)事務(wù))} ELSE {讀賬戶乙的余額BALANCE1;
BALANCE1=BALANCE1+AMOUNT; 寫回BALANCE1;
COMMIT;}事務(wù)內(nèi)部的故障2024/9/6
58事務(wù)內(nèi)部的故障事務(wù)內(nèi)部更多的故障是非預(yù)期的,是不能由應(yīng)用程序處理的。這類非預(yù)期的故障稱為事務(wù)故障。如:運(yùn)算溢出;并發(fā)事務(wù)發(fā)生死鎖而被選中撤消該事務(wù)、違反了某些完整性限制等。事務(wù)故障意味著:事務(wù)沒(méi)有達(dá)到預(yù)期的終點(diǎn)(COMMIT或者顯式的ROLLBACK);數(shù)據(jù)庫(kù)可能處于不正確狀態(tài)。2024/9/6
59事務(wù)撤消(UNDO)恢復(fù)程序要在不影響其它事務(wù)運(yùn)行的情況下:強(qiáng)行回滾(ROLLBACK)該事務(wù),即撤消該事務(wù)已經(jīng)作出的任何對(duì)數(shù)據(jù)庫(kù)的修改,使得該事務(wù)好象根本沒(méi)有啟動(dòng)一樣。這類恢復(fù)操作稱為事務(wù)撤消(UNDO)。2024/9/6
60事務(wù)故障的恢復(fù)事務(wù)故障的恢復(fù)是由系統(tǒng)自動(dòng)完成的,對(duì)用戶是透明的。系統(tǒng)的恢復(fù)步驟是:1.反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)的更新操作。2.對(duì)該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫(kù)。3.繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做同樣處理。4.如此處理下去,直至讀到此事務(wù)的開始標(biāo)記。
2024/9/6
61系統(tǒng)故障系統(tǒng)故障是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,使得系統(tǒng)要重新啟動(dòng)。例如特定類型的硬件錯(cuò)誤(CPU故障);操作系統(tǒng)故障;DBMS代碼錯(cuò)誤突然停電等等。為保證數(shù)據(jù)一致性,恢復(fù)子系統(tǒng)必須在系統(tǒng)重新啟動(dòng)時(shí):讓所有非正常終止的事務(wù)回滾,強(qiáng)行撤消(UNDO)所有未完成事務(wù);重做(REDO)所有已提交的事務(wù),以將數(shù)據(jù)庫(kù)真正恢復(fù)到一致狀態(tài)。2024/9/6
62系統(tǒng)故障的恢復(fù)系統(tǒng)故障的恢復(fù)是由系統(tǒng)在重新啟動(dòng)時(shí)自動(dòng)完成的,不需要用戶干
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.1《學(xué)無(wú)止境》-課件- -2024-2025學(xué)年統(tǒng)編版道德與法治九年級(jí)下冊(cè)
- 工程變更及合同價(jià)款調(diào)整黃岡職院建筑課件
- 大連醫(yī)科大學(xué)中山學(xué)院《機(jī)械設(shè)備維修與維護(hù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陽(yáng)光學(xué)院《生物醫(yī)學(xué)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 衡水學(xué)院《機(jī)器人驅(qū)動(dòng)與控制》2023-2024學(xué)年第二學(xué)期期末試卷
- 昆明衛(wèi)生職業(yè)學(xué)院《酒店管理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遵義醫(yī)科大學(xué)醫(yī)學(xué)與科技學(xué)院《建筑信息建模技術(shù)與管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 臨沂市蒙陰縣2025年三下數(shù)學(xué)期末經(jīng)典模擬試題含解析
- 藥材進(jìn)口采購(gòu)合同范本
- 湖南農(nóng)業(yè)大學(xué)東方科技學(xué)院《信息管理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- Vue.js前端開發(fā)實(shí)戰(zhàn)(第2版)全套完整教學(xué)課件
- 2023風(fēng)力發(fā)電機(jī)組延壽評(píng)估技術(shù)規(guī)范
- 鞋業(yè)-品質(zhì)培訓(xùn)
- 小學(xué)思政課《愛國(guó)主義教育》
- 瓜豆原理【模型專題】(含答案解析)
- 單價(jià)、數(shù)量、總價(jià)-教學(xué)課件【A3演示文稿設(shè)計(jì)與制作】
- 中小學(xué)生安全教育手冊(cè)全面版
- 變電站安裝工程安全風(fēng)險(xiǎn)分級(jí)管控清單
- DDI-能力解構(gòu)詞典
- 燃?xì)夤艿拦こ瘫O(jiān)理實(shí)施細(xì)則
- 安全經(jīng)驗(yàn)分享之行車安全經(jīng)驗(yàn)分享
評(píng)論
0/150
提交評(píng)論