![第九章數(shù)據(jù)庫保護_第1頁](http://file4.renrendoc.com/view/735a95efcf54d7862ad61a1679a020e8/735a95efcf54d7862ad61a1679a020e81.gif)
![第九章數(shù)據(jù)庫保護_第2頁](http://file4.renrendoc.com/view/735a95efcf54d7862ad61a1679a020e8/735a95efcf54d7862ad61a1679a020e82.gif)
![第九章數(shù)據(jù)庫保護_第3頁](http://file4.renrendoc.com/view/735a95efcf54d7862ad61a1679a020e8/735a95efcf54d7862ad61a1679a020e83.gif)
![第九章數(shù)據(jù)庫保護_第4頁](http://file4.renrendoc.com/view/735a95efcf54d7862ad61a1679a020e8/735a95efcf54d7862ad61a1679a020e84.gif)
![第九章數(shù)據(jù)庫保護_第5頁](http://file4.renrendoc.com/view/735a95efcf54d7862ad61a1679a020e8/735a95efcf54d7862ad61a1679a020e85.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第九章數(shù)據(jù)庫保護
12
事務并發(fā)控制34
數(shù)據(jù)庫的恢復SQLServer數(shù)據(jù)庫備份與恢復9.1事務事務(Transaction):數(shù)據(jù)庫應用中構成單一邏輯工作單元的操作集和。用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。事務和程序是兩個概念:在關系數(shù)據(jù)庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序;一個應用程序通常包含多個事務。事務是恢復和并發(fā)控制的基本單位。9.1.1事務的定義顯式定義方式
BEGINTRANSACTIONBEGINTRANSACTIONSQL語句
SQL語句。。。。。。。。。。
COMMITROLLBACK隱式方式當用戶沒有顯式地定義事務時,DBMS按缺省規(guī)定自動劃分事務。COMMIT--提交事務正常結束;提交事務的所有操作(更新);事務中所有對數(shù)據(jù)庫的更新永久生效。ROLLBACK--回滾事務異常終止;事務運行的過程中發(fā)生了故障,不能繼續(xù)執(zhí)行;將事務中對數(shù)據(jù)庫的所有已完成的操作全部撤消(更新操作);事務回滾到開始時的狀態(tài)。9.1.2事務的ACID特性事務的特性-ACID特性
原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)9.1.2事務的ACID特性事務是數(shù)據(jù)庫的邏輯工作單位。事務中包括的諸操作要么都做,要么都不做,是不可拆分的。由DBMS的事務管理子系統(tǒng)實現(xiàn).1.原子性9.1.2事務的ACID特性2.一致性事務執(zhí)行的結果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài),即數(shù)據(jù)不會因為事務的執(zhí)行而遭到破壞。一致性狀態(tài):數(shù)據(jù)庫中只包含成功事務提交的結果。不一致狀態(tài):數(shù)據(jù)庫中包含失敗事務的結果。由DBMS的完整性子系統(tǒng)實現(xiàn)。9.1.2事務的ACID特性例:銀行轉帳:從帳號A中取出一萬元,存入帳號B。定義一個事務,該事務包括兩個操作:
B=B+1
A=A-1BA這兩個操作要么全做,要么全不做。全做或者全不做,數(shù)據(jù)庫都處于一致性狀態(tài)。若只做一個操作,數(shù)據(jù)庫就處于不一致性狀態(tài)。9.1.2事務的ACID特性3.隔離性一個事務的執(zhí)行不能被其他事務干擾。(針對并發(fā)執(zhí)行而言的)一個事務內部的操作及使用的數(shù)據(jù)對其他并發(fā)事務是隔離的;并發(fā)執(zhí)行的各個事務之間不能互相干擾。由DBMS的并發(fā)控制子系統(tǒng)實現(xiàn)。9.1.2事務的ACID特性T1的修改被T2覆蓋了!
讀A=16
A←A-3寫回A=13①讀A=16
②
③A←A-1
寫回A=15
④T2T19.1.2事務的ACID特性4.持久性事務一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是永久性的。接下來的其他操作或故障不應該對其執(zhí)行結果有任何影響;即使在寫入磁盤之前,系統(tǒng)發(fā)生故障,在下次啟動之后,也應保障數(shù)據(jù)更新的有效。保證事務ACID特性是事務處理的重要任務;破壞事務ACID特性的因素:多個事務并行運行時,不同事務的操作交叉執(zhí)行;事務在運行過程中被強行停止。注:由DBMS的恢復管理子系統(tǒng)實現(xiàn)。9.1.2事務的ACID特性
轉賬操作:T:read(A);A:=A-50;write(A);read(B);B:=B+50;write(B)。
轉賬操作:T:BEGINTRANSACTIONread(A);A:=A-50;write(A);if(A<0)ROLLBACK;else{read(B);B:=B+50;write(B);COMMIT;}9.1.3事務的狀態(tài)局部提交狀態(tài)活動狀態(tài)提交狀態(tài)失敗狀態(tài)異常中止狀態(tài)(1)活動狀態(tài):事務開始運行就進入活動狀態(tài),直到部分提交或失敗。
BEGIN-TRANSACTION:事務進入活動狀態(tài)。(2)局部提交狀態(tài):事務執(zhí)行完最后一條語句,即執(zhí)行完END-TRANSACTION命令之后進入局部提交狀態(tài)。9.1.3事務的狀態(tài)(3)失敗狀態(tài):發(fā)現(xiàn)一個事務不能正常運行下去時。DBMS消除事務中所有操作對數(shù)據(jù)庫和其他事務的影響,結束事務的運行。(4)異常中止狀態(tài):當一個失敗事務對數(shù)據(jù)庫和其他事務的影響被消除,數(shù)據(jù)庫恢復到該事務開始執(zhí)行前的狀態(tài)之后,該失敗事務退出DBS,進入異常結束狀態(tài)。(5)提交狀態(tài):當一個事務成功地完成了所有操作,并且所有操作對數(shù)據(jù)庫的影響都已永久地存入數(shù)據(jù)庫之后,該事務退出DBS,進入提交狀態(tài),正常結束。
COMMIT-TRANSACTION:事務進入提交狀態(tài)。事務的提交狀態(tài)和異常中止狀態(tài)都事務的結束狀態(tài)。9.2并發(fā)控制同時并發(fā)方式(simultaneousconcurrency)多處理機系統(tǒng)中,每個處理機可以運行一個事務,多個處理機可以同時運行多個事務,實現(xiàn)多個事務真正的并行運行。事務并發(fā)執(zhí)行帶來的問題會產(chǎn)生多個事務同時存取同一數(shù)據(jù)的情況可能會存取和存儲不正確的數(shù)據(jù),破壞事務一致性和數(shù)據(jù)庫的一致性9.2.1并發(fā)操作與數(shù)據(jù)的不一致性T1的修改被T2覆蓋了!
讀A=16
A←A-3寫回A=13①讀A=16
②
③A←A-1
寫回A=15
④事務T2事務T1數(shù)據(jù)不一致實例:飛機訂票系統(tǒng)并發(fā)控制機制的任務對并發(fā)操作進行正確調度保證事務的隔離性保證數(shù)據(jù)庫的一致性
并發(fā)操作帶來的數(shù)據(jù)不一致性丟失更新(lostupdate)不可重復讀(non-repeatableread)讀“臟”數(shù)據(jù)(dirtyread)9.2.1并發(fā)操作與數(shù)據(jù)的不一致性1.丟失更新指兩個事務T1與T2從數(shù)據(jù)庫中讀入同一數(shù)據(jù)并修改,T2的提交結果破壞了T1提交的結果,導致T1的修改被丟失。T1T2①讀A=16
②
③A←A-1
寫回A=15
④
讀A=16
A←A-3寫回A=139.2.1并發(fā)操作與數(shù)據(jù)的不一致性2.不可重復讀指T1讀取數(shù)據(jù)后,T2執(zhí)行更新操作,使T1無法再現(xiàn)前一次讀取結果。
讀B=100B←B*2寫回B=200
①讀A=50
讀B=100
求和=150②
③讀A=50
讀B=200
求和=250(驗算不對)T2T19.2.1并發(fā)操作與數(shù)據(jù)的不一致性不可重復讀包括三種情況:T1讀取某一數(shù)據(jù)后,T2對其做了修改,當T1再次讀該數(shù)據(jù)時,得到與前一次不同的值。T1按一定條件從數(shù)據(jù)庫中讀取某些數(shù)據(jù)記錄后,T2刪除了其中部分記錄,當T1再次讀取數(shù)據(jù)時,發(fā)現(xiàn)某些記錄神密地消失了。T1按一定條件從數(shù)據(jù)庫中讀取某些數(shù)據(jù)記錄后,T2插入了一些記錄,當T1再次按相同條件讀取數(shù)據(jù)時,發(fā)現(xiàn)多了一些記錄。后兩種不可重復讀有時也稱為幻影現(xiàn)象。9.2.1并發(fā)操作與數(shù)據(jù)的不一致性3.讀“臟”數(shù)據(jù)指T1修改某一數(shù)據(jù),并將其寫回磁盤,T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤消,這時T1已修改過的數(shù)據(jù)恢復原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,是不正確的數(shù)據(jù),又稱為“臟”數(shù)據(jù)。
讀C=200
①讀C=100C←C*2
寫回C②
③ROLLBACKC恢復為100T2T19.2.2封鎖并發(fā)控制的主要技術封鎖(Locking)時標(Timestamp,時間戳)商用的DBMS一般都采用封鎖方法9.2.2封鎖1.什么是封鎖?封鎖就是事務T在對某個數(shù)據(jù)對象(如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務T就對該數(shù)據(jù)對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數(shù)據(jù)對象。封鎖是實現(xiàn)并發(fā)控制的一個非常重要的技術。DBMS通常提供了多種類型的封鎖。一個事務對某個數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制是由封鎖的類型決定的。基本封鎖類型排它鎖(eXclusivelock,簡記為X鎖)共享鎖(Sharelock,簡記為S鎖)9.2.2封鎖排它鎖(又稱寫鎖,簡稱X鎖)若事務T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖。
共享鎖(又稱讀鎖,簡稱S鎖)若事務T對數(shù)據(jù)對象A加上S鎖,則其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。9.2.2封鎖Y=Yes,相容的請求N=No,不相容的請求2.封鎖類型的相容矩陣XS-XNNYSNYY-YYYT2T1在鎖的相容矩陣中:最左邊一列表示事務T1已經(jīng)獲得的數(shù)據(jù)對象上的鎖的類型,其中橫線表示沒有加鎖。最上面一行表示另一事務T2對同一數(shù)據(jù)對象發(fā)出的封鎖請求。T2的封鎖請求能否被滿足用矩陣中的Y和N表示Y表示事務T2的封鎖要求與T1已持有的鎖相容,封鎖請求可以滿足N表示T2的封鎖請求與T1已持有的鎖沖突,T2的請求被拒絕9.2.2封鎖3.封鎖的粒度X鎖和S鎖都是加在某一個數(shù)據(jù)對象上的;封鎖的對象:邏輯單元,物理單元封鎖對象可以很大也可以很小例:對整個數(shù)據(jù)庫加鎖對某個屬性值加鎖封鎖對象的大小稱為封鎖粒度(Granularity)。多粒度封鎖(multiplegranularitylocking)在一個系統(tǒng)中同時支持多種封鎖粒度供不同的事務選擇。9.2.2封鎖封鎖粒度與系統(tǒng)并發(fā)度和并發(fā)控制開銷密切相關.選擇封鎖粒度的原則封鎖的粒度越大,小,系統(tǒng)被封鎖的對象并發(fā)度系統(tǒng)開銷少,多,低,高,小,大,注:需要處理多個關系的大量元組的用戶事務:以數(shù)據(jù)庫為封鎖粒度;需要處理大量元組的用戶事務:以關系為封鎖粒度;只處理少量元組的用戶事務:以元組為封鎖粒度。4.封鎖協(xié)議?運用X鎖和S鎖對數(shù)據(jù)對象加鎖時,需要約定一些規(guī)則:封鎖協(xié)議(LockingProtocol)。
?何時申請X鎖或S鎖;?持鎖時間、何時釋放?不同的封鎖協(xié)議,在不同的程度上為并發(fā)操作的正確調度提供一定的保證。?常用的封鎖協(xié)議:三級封鎖協(xié)議。9.2.2封鎖(1)一級封鎖協(xié)議事務T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務結束才釋放。正常結束(COMMIT)非正常結束(ROLLBACK)?一級封鎖協(xié)議可防止丟失修改,并保證事務T是可恢復的。?在一級封鎖協(xié)議中,如果是讀數(shù)據(jù),不需要加鎖的,所以它不能保證可重復讀和不讀“臟”數(shù)據(jù)。9.2.2封鎖9.2.2封鎖
T1T2①
XlockA②
R(A)=16③
④A=A-1W(A)=15CommitUnlockA⑤
⑥
XlockA等待等待等待等待獲得XlockA讀A=15A=A-3W(A)=12CommitUnlockA
沒有丟失修改
事務T1在讀A進行修改之前先對A加X鎖當T2再請求對A加X鎖時被拒絕T2只能等待T1釋放A上的鎖后T2獲得對A的X鎖這時T2讀到的A已經(jīng)是T1更新過的值15T2按此新的A值進行運算,并將結果值A=14送回到磁盤。避免了丟失T1的更新。
讀A=15①
XLOCK(A)
獲得②
讀A=16
A=A-1
寫回A=15③
④RollbackUNLOCK(A)
T2T1例:讀“臟”數(shù)據(jù)9.2.2封鎖
(2)二級封鎖協(xié)議事務T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務結束才釋放。事務T在讀取數(shù)據(jù)R前必須先加S鎖,讀完后即可釋放S鎖。?可以防止丟失修改和讀“臟”數(shù)據(jù)。由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復讀。9.2.2封鎖9.2.2封鎖T1T2①XlockC
讀C=100C=C*2
寫回C=200②
③ROLLBACK(C恢復為100)UnlockC④
⑤
SlockC等待等待等待等待獲得SlockC讀C=100CommitCUnlockC不讀“臟”數(shù)據(jù)事務T1在對C進行修改之前,先對C加X鎖,修改其值后寫回磁盤T2請求在C上加S鎖,因T1已在C上加了X鎖,T2只能等待T1因某種原因被撤銷,C恢復為原值100T1釋放C上的X鎖后T2獲得C上的S鎖,讀C=100。避免了T2讀“臟”數(shù)據(jù)(3)三級封鎖協(xié)議事務T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務結束才釋放。事務T在讀取數(shù)據(jù)R前必須先加S鎖,直到事務結束才釋放。?可以防止丟失修改和讀“臟”數(shù)據(jù),還防止了不可重復讀。9.2.2封鎖9.2.2封鎖可重復讀事務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鎖T1T2①
SlockASlockB
讀A=50
讀B=100
求和=150②③讀A=50
讀B=100
求和=150CommitUnlockAUnlockB④
⑤
XlockB等待等待等待等待等待等待獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockB三級協(xié)議的主要區(qū)別:9.2.2封鎖9.2.2封鎖1)活鎖T1T2T3T4LockR…UnlockLockR等待等待等待等待等待等待等待LockR等待LockR…UnlockLockR等待等待等待LockR如何避免活鎖-先來先服務
當多個事務請求封鎖同一數(shù)據(jù)對象時:按請求封鎖的先后次序對這些事務排隊;該數(shù)據(jù)對象上的鎖一旦釋放,首先批準申請隊列中第一個事務獲得鎖。5.活鎖和死鎖9.2.2封鎖2)死鎖T1T2LockR1LockR2等待等待等待等待LockR2…LockR1等待等待等待解決方法預防死鎖死鎖的診斷與解除9.2.2封鎖3)死鎖的預防產(chǎn)生死鎖的原因是兩個或多個事務都已封鎖了一些數(shù)據(jù)對象,然后又都請求對已為其他事務封鎖的數(shù)據(jù)對象加鎖,從而出現(xiàn)死等待。預防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件。常用方法:一次封鎖法順序封鎖法9.2.2封鎖(1)一次封鎖法要求每個事務必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行。存在的問題:降低并發(fā)度擴大封鎖范圍;難以事先精確確定封鎖對象,只能將以后可能要用到的數(shù)據(jù)全部加鎖,勢必更加擴大封鎖范圍,從而進一步降低系統(tǒng)的并發(fā)度。9.2.2封鎖預先對數(shù)據(jù)對象規(guī)定一個封鎖順序,所有事務都按這個順序實行封鎖。存在的問題:維護成本高;由于事務的封鎖請求可以隨著事務的執(zhí)行而動態(tài)決定,因此很難按規(guī)定順序施加封鎖。(2)順序封鎖法9.2.2封鎖4)死鎖的診斷與解除(普遍采用)允許死鎖發(fā)生解除死鎖由DBMS的并發(fā)控制子系統(tǒng)定期檢測系統(tǒng)中是否存在死鎖;一旦檢測到死鎖,就要設法解除。常用方法:超時法事務等待圖法9.2.2封鎖(1)超時法如果一個事務的等待時間超過了規(guī)定的時限,就認為發(fā)生了死鎖。優(yōu)點:實現(xiàn)簡單缺點:有可能誤判死鎖;時限若設置得太長,死鎖發(fā)生后不能及時發(fā)現(xiàn)。9.2.2封鎖(2)等待圖法用事務等待圖動態(tài)反映所有事務的等待情況:事務等待圖是一個有向圖G=(T,U)T為結點的集合:每個結點表示正運行的事務U為邊的集合:每條邊表示事務等待的情況若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2。9.2.2封鎖并發(fā)控制子系統(tǒng)周期性地檢測事務等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。解除死鎖:選擇一個處理死鎖代價最小的事務,將其撤消,釋放此事務持有的所有的鎖,使其它事務能繼續(xù)運行下去。9.2.3并發(fā)操作的調度
由于計算機系統(tǒng)對并發(fā)操作的調度是隨機的,而且不同的調度可能會產(chǎn)生不同的結果:一.什么樣的并發(fā)操作調度是正確的?二.如何保證并發(fā)操作調度的正確性?一.什么樣的并發(fā)操作調度是正確的?將所有事務串行起來的調度策略一定是正確的調度策略。多個事務的并行執(zhí)行是正確的,當且僅當其結果與按某一次序串行地執(zhí)行這些事務時的結果相同,這種調度策略稱為可串行化的調度。9.2.3并發(fā)操作的調度可串行性是并發(fā)事務正確性的準則。一個給定的并發(fā)調度,可串行化<=>正確調度例:現(xiàn)在有兩個事務,分別包含下列操作:事務T1:讀B;A=B-1;寫回A;事務T2:讀A;B=A+1;寫回B;假設:A,B的初值均為5。則:若T1->T2,A=4B=5;
若T2->T1,A=5B=6;9.2.3并發(fā)操作的調度對這兩個事務的不同調度策略:串行執(zhí)行串行調度策略1串行調度策略2交錯執(zhí)行不可串行化的調度可串行化的調度串行執(zhí)行SlockBY=B=5UnlockBXlockAA=Y-1寫回A(=4)UnlockA
SlockAX=A=4UnlockAXlockBB=X+1寫回B(=5)UnlockB
T1T2
SlockBY=B=6UnlockBXlockAA=Y-1寫回A(=5)UnlockA
SlockAX=A=5UnlockAXlockBB=X+1寫回B(=6)UnlockB
T1T2正確調度交錯執(zhí)行SlockBY=B=5
UnlockB
XlockAA=Y-1寫回A(=4)
UnlockA
SlockAX=A=5
UnlockA
XlockBB=X+1寫回B(=6)
UnlockBT1T2錯誤調度SlockBY=B=5UnlockBXlockA
A=Y-1寫回A(=4)UnlockA
SlockA
等待等待等待X=A=4UnlockAXlockBB=X+1寫回B(=5)UnlockBT1T2正確調度9.2.3并發(fā)操作的調度提供一定的手段保證調度的可串行化。二.如何保證并發(fā)操作調度的正確性?
兩段鎖協(xié)議是保證并發(fā)調度可串行性的封鎖協(xié)議。要求:每個事務分兩個階段進行數(shù)據(jù)的加鎖和解鎖.
加鎖階段:每個事務開始運行后即進入加鎖階段,申請獲得所需要的所有鎖。(不能釋放鎖,又稱為擴展階段)
解鎖階段:當一個事務第一次釋放鎖時,該事務進入解鎖階段。(不能再申請任何鎖,又稱為收縮階段)9.2.3并發(fā)操作的調度例:事務1的封鎖序列:
SlockA...SlockB...XlockC...UnlockB...UnlockA...UnlockC;事務2的封鎖序列:
SlockA...UnlockA...SlockB...XlockC...UnlockC...UnlockB;事務1遵守兩段鎖協(xié)議,而事務2不遵守兩段協(xié)議。9.2.3并發(fā)操作的調度
若并行執(zhí)行的所有事務均遵守兩段鎖協(xié)議,則對這些事務的所有并行調度策略都是可串行化的。
所有遵守兩段鎖協(xié)議的事務,其并行執(zhí)行的結果一定是正確的。注:事務遵守兩段鎖協(xié)議是可串行化調度的充分條件,而不是必要條件。9.2.3并發(fā)操作的調度SlockB讀B=5Y=BXlockA
A=Y-1寫回A=4UnlockBUnlockA
SlockA
等待等待等待等待SlockA讀A=4Y=AXlockBB=Y+1寫回B=5UnlockBUnlockA
SlockB讀B=5Y=BUnlockBXlockA
A=Y-1寫回A=4UnlockA
SlockA等待等待等待SlockA讀A=4X=AUnlockAXlockBB=X+1寫回B=5UnlockB
(a)遵守兩段鎖協(xié)議(b)不遵守兩段鎖協(xié)議SlockB讀B=5Y=BUnlockBXlockAA=Y-1寫回A=4UnlockASlockA讀A=5X=AUnlockAXlockB等待XlockBB=X+1寫回B=6UnlockB
(c)不遵守兩段鎖協(xié)議T1T2
T1T2T1T29.2.3并發(fā)操作的調度兩段鎖協(xié)議與防止死鎖的一次封鎖法:一次封鎖法要求每個事務必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行,因此一次封鎖法遵守兩段鎖協(xié)議;但是兩段鎖協(xié)議并不要求事務必須一次將所有要使用的數(shù)據(jù)全部加鎖,因此遵守兩段鎖協(xié)議的事務可能發(fā)生死鎖。T1SlockB讀B=5
XlockA等待等待T2
SlockA讀A=5
XlockB等待
遵守兩段鎖協(xié)議的事務發(fā)生死鎖封鎖粒度封鎖對象的大小稱為封鎖粒度(Granularity)封鎖的對象:邏輯單元,物理單元例:在關系數(shù)據(jù)庫中,封鎖對象:邏輯單元:屬性值、屬性值集合、元組、關系、索引項、整個索引、整個數(shù)據(jù)庫等物理單元:頁(數(shù)據(jù)頁或索引頁)、物理記錄等選擇封鎖粒度原則封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關。封鎖的粒度越大,數(shù)據(jù)庫所能夠封鎖的數(shù)據(jù)單元就越少,并發(fā)度就越小,系統(tǒng)開銷也越?。环怄i的粒度越小,并發(fā)度較高,但系統(tǒng)開銷也就越大選擇封鎖粒度的原則(續(xù))例若封鎖粒度是數(shù)據(jù)頁,事務T1需要修改元組L1,則T1必須對包含L1的整個數(shù)據(jù)頁A加鎖。如果T1對A加鎖后事務T2要修改A中元組L2,則T2被迫等待,直到T1釋放A。如果封鎖粒度是元組,則T1和T2可以同時對L1和L2加鎖,不需要互相等待,提高了系統(tǒng)的并行度。又如,事務T需要讀取整個表,若封鎖粒度是元組,T必須對表中的每一個元組加鎖,開銷極大
AnIntroductiontoDatabaseSystem選擇封鎖粒度的原則(續(xù))多粒度封鎖(MultipleGranularityLocking)
在一個系統(tǒng)中同時支持多種封鎖粒度供不同的事務選擇選擇封鎖粒度同時考慮封鎖開銷和并發(fā)度兩個因素,適當選擇封鎖粒度需要處理多個關系的大量元組的用戶事務:以數(shù)據(jù)庫為封鎖單位需要處理大量元組的用戶事務:以關系為封鎖單元只處理少量元組的用戶事務:以元組為封鎖單位11.6.1多粒度封鎖多粒度樹以樹形結構來表示多級封鎖粒度根結點是整個數(shù)據(jù)庫,表示最大的數(shù)據(jù)粒度葉結點表示最小的數(shù)據(jù)粒度
多粒度封鎖(續(xù))例:三級粒度樹。根結點為數(shù)據(jù)庫,數(shù)據(jù)庫的子結點為關系,關系的子結點為元組。數(shù)據(jù)庫關系Rn關系R1元組元組元組元組……
……
……三級粒度樹多粒度封鎖協(xié)議允許多粒度樹中的每個結點被獨立地加鎖對一個結點加鎖意味著這個結點的所有后裔結點也被加以同樣類型的鎖在多粒度封鎖中一個數(shù)據(jù)對象可能以兩種方式封鎖:顯式封鎖和隱式封鎖顯式封鎖和隱式封鎖顯式封鎖:直接加到數(shù)據(jù)對象上的封鎖隱式封鎖:該數(shù)據(jù)對象沒有獨立加鎖,是由于其上級結點加鎖而使該數(shù)據(jù)對象加上了鎖顯式封鎖和隱式封鎖的效果是一樣的顯式封鎖和隱式封鎖(續(xù))系統(tǒng)檢查封鎖沖突時要檢查顯式封鎖還要檢查隱式封鎖例如事務T要對關系R1加X鎖系統(tǒng)必須搜索其上級結點數(shù)據(jù)庫、關系R1還要搜索R1的下級結點,即R1中的每一個元組如果其中某一個數(shù)據(jù)對象已經(jīng)加了不相容鎖,則T必須等待顯式封鎖和隱式封鎖(續(xù))對某個數(shù)據(jù)對象加鎖,系統(tǒng)要檢查
該數(shù)據(jù)對象有無顯式封鎖與之沖突
所有上級結點檢查本事務的顯式封鎖是否與該數(shù)據(jù)對象上的隱式封鎖沖突:(由上級結點已加的封鎖造成的)所有下級結點看上面的顯式封鎖是否與本事務的隱式封鎖(將加到下級結點的封鎖)沖突11.6.2意向鎖引進意向鎖(intentionlock)目的提高對某個數(shù)據(jù)對象加鎖時系統(tǒng)的檢查效率意向鎖(續(xù))如果對一個結點加意向鎖,則說明該結點的下層結點正在被加鎖對任一結點加基本鎖,必須先對它的上層結點加意向鎖例如,對任一元組加鎖時,必須先對它所在的數(shù)據(jù)庫和關系加意向鎖常用意向鎖意向共享鎖(IntentShareLock,簡稱IS鎖)意向排它鎖(IntentExclusiveLock,簡稱IX鎖)共享意向排它鎖(ShareIntentExclusiveLock,簡稱SIX鎖)意向鎖(續(xù))IS鎖如果對一個數(shù)據(jù)對象加IS鎖,表示它的后裔結點擬(意向)加S鎖。例如:事務T1要對R1中某個元組加S鎖,則要首先對關系R1和數(shù)據(jù)庫加IS鎖意向鎖(續(xù))IX鎖如果對一個數(shù)據(jù)對象加IX鎖,表示它的后裔結點擬(意向)加X鎖。例如:事務T1要對R1中某個元組加X鎖,則要首先對關系R1和數(shù)據(jù)庫加IX鎖意向鎖(續(xù))SIX鎖如果對一個數(shù)據(jù)對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX。例:對某個表加SIX鎖,則表示該事務要讀整個表(所以要對該表加S鎖),同時會更新個別元組(所以要對該表加IX鎖)。意向鎖(續(xù))意向鎖的相容矩陣意向鎖(續(xù))鎖的強度鎖的強度是指它對其他鎖的排斥程度一個事務在申請封鎖時以強鎖代替弱鎖是安全的,反之則不然意向鎖(續(xù))具有意向鎖的多粒度封鎖方法申請封鎖時應該按自上而下的次序進行釋放封鎖時則應該按自下而上的次序進行例如:事務T1要對關系R1加S鎖要首先對數(shù)據(jù)庫加IS鎖檢查數(shù)據(jù)庫和R1是否已加了不相容的鎖(X或IX)不再需要搜索和檢查R1中的元組是否加了不相容的鎖(X鎖)意向鎖(續(xù))具有意向鎖的多粒度封鎖方法提高了系統(tǒng)的并發(fā)度減少了加鎖和解鎖的開銷在實際的數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品中得到廣泛應用9.3數(shù)據(jù)庫的恢復故障是不可避免的:計算機硬件故障;系統(tǒng)軟件和應用軟件的錯誤;操作員的失誤;惡意的破壞。故障的影響:運行事務非正常中斷,影響數(shù)據(jù)正確性;破壞數(shù)據(jù)庫,導致部分或全部數(shù)據(jù)丟失。9.3.1存儲器的結構1.存儲器的類型從存儲器的訪問速度、容量和恢復能力角度考察,計算機系統(tǒng)的存儲介質可分成三類。(1)易失性存儲器:指內存和Cache。在系統(tǒng)發(fā)生故障時,存儲的信息會立即丟失。但這一類存儲器的訪問速度非常快。(2)非易失性存儲器:指磁盤和磁帶。在系統(tǒng)發(fā)生故障時,存儲的信息不會丟失。(3)穩(wěn)定存儲器:一個理論概念,存儲在穩(wěn)定存儲器上的信息是不會丟失的。2.穩(wěn)定存儲器的實現(xiàn)
(1)數(shù)據(jù)備份
將計算機系統(tǒng)中硬盤上的數(shù)據(jù)通過適當?shù)男问睫D錄到可脫機保存的介質(如磁帶、光盤)上,以便需要時再寫入到計算機系統(tǒng)中使用。數(shù)據(jù)庫的備份不是簡單地做拷貝,它有一套備份和恢復機制。目前采用地備份措施在硬件一級有磁盤鏡像、磁盤陣列(RAID)、雙機容錯等;在軟件一級有數(shù)據(jù)拷貝。(2)數(shù)據(jù)銀行(DataBank)
利用計算機網(wǎng)絡把數(shù)據(jù)傳輸?shù)竭h程的計算機存儲系統(tǒng)(即“數(shù)據(jù)銀行”)。對數(shù)據(jù)的寫操作,既要寫到本地的存儲器中,也要寫到遠程的數(shù)據(jù)庫中,以防止數(shù)據(jù)的丟失。9.3.1存儲器的結構數(shù)據(jù)在磁盤上以“塊”的定長存儲單位形式組織。塊是內、外存數(shù)據(jù)交換的基本單位。磁盤中的塊稱為“物理塊”,內存中臨時存放物理塊內容的塊稱為“緩沖塊”,所有的緩沖塊組成了“磁盤緩沖區(qū)”。數(shù)據(jù)從物理塊到緩沖塊,稱為輸入(Input)操作;數(shù)據(jù)從緩沖塊到物理塊,稱為輸出(Output)操作。Input(A):把物理塊A的內容傳到內存的緩沖塊中。Output(B):把緩沖塊B的內容傳送到磁盤中恰當?shù)奈锢韷K中。9.3.1存儲器的結構3.數(shù)據(jù)訪問read(X):把數(shù)據(jù)項X的值送到工作區(qū)中的局部變量xi。write(X):把局部變量xi的值送到緩沖塊中X數(shù)據(jù)項。9.3.1存儲器的結構
每個事務Ti有一個專用工作區(qū),存放它訪問和修改的數(shù)據(jù)項值。在事務開始時,產(chǎn)生這個工作區(qū);在事務結束(提交或中止)時,工作區(qū)被撤銷。事務Ti工作區(qū)中數(shù)據(jù)項X用xi表示。4.恢復與原子性的聯(lián)系
9.3.1存儲器的結構
讀B=1000B=B+1=1100寫B(tài)=1100
讀A=2000A=A-100=1900
寫A=1900AB
系統(tǒng)重新啟動時,可能采取下列兩種操作之一:(1)重新執(zhí)行事務,此時將導致數(shù)據(jù)庫中A的值為1800,而不是1900,B的值為1100。(2)不重新執(zhí)行事務,此時將導致數(shù)據(jù)庫中A的值為1900,B的值為1000。
這兩種操作方式都使系統(tǒng)進入不一致狀態(tài),因此都是錯誤的操作。9.3.2恢復的原則和實現(xiàn)方法恢復操作的基本原則:冗余利用存儲在系統(tǒng)其它地方的冗余數(shù)據(jù)來重建數(shù)據(jù)庫中已被破壞或不正確的那部分數(shù)據(jù)?;謴偷膶崿F(xiàn)技術:復雜一個大型數(shù)據(jù)庫產(chǎn)品,恢復子系統(tǒng)的代碼要占全部代碼的10%以上。9.3.2恢復的原則和實現(xiàn)方法數(shù)據(jù)庫恢復具體實現(xiàn)方法:1.轉儲和建立日志;數(shù)據(jù)轉儲:定期地將整個數(shù)據(jù)庫復制到磁帶或另一個磁盤。登錄日志文件:記錄事務對數(shù)據(jù)庫的更新操作2.數(shù)據(jù)庫恢復UNDO:數(shù)據(jù)庫未被破壞,但某些數(shù)據(jù)不可靠,受到懷疑,只要撤銷所有不可靠的修改,把數(shù)據(jù)庫恢復到正確的狀態(tài)。
REDO:數(shù)據(jù)庫已被破壞,數(shù)據(jù)庫已不能用了,裝入最近一次拷貝的數(shù)據(jù)庫備份到新的磁盤,然后利用日志庫執(zhí)行“重做”處理,將這兩個數(shù)據(jù)庫狀態(tài)之間的所有更新重做一遍。
9.3.3故障類型和恢復方法一.事務故障某個事務在運行過程中由于種種原因未運行至正常終點(COMMIT或顯示ROLLBACK)就夭折了。常見原因:輸入數(shù)據(jù)有誤;運算溢出;違反了某些完整性限制;某些應用程序出錯;并行事務發(fā)生死鎖等。9.3.3故障類型和恢復方法例如:銀行轉賬事務,這個事務把一筆金額從一個賬戶甲轉給另一個賬戶乙。
BEGINTRANSACTION
讀賬戶甲的余額BALANCE;
BALANCE=BALANCE-AMOUNT;(AMOUNT為轉賬金額)
寫回BALANCE;
IF(BALANCE<0)THEN{
打印'金額不足,不能轉賬';
ROLLBACK;(撤銷剛才的修改,恢復事務)}ELSE{
讀賬戶乙的余額BALANCE1;
BALANCE1=BALANCE1+AMOUNT;寫回BALANCE1;
COMMIT;
}9.3.3故障類型和恢復方法事務內部故障有的是可以通過事務程序本身發(fā)現(xiàn)的,但有些是非預期的,則不能由事務程序處理。發(fā)生事務故障時,夭折的事務可能已把對數(shù)據(jù)庫的部分修改寫回磁盤。事務故障的恢復:撤消事務(UNDO)在不影響其他事務運行情況下,強行回滾該事務,清除該事務對數(shù)據(jù)庫的所有修改,使得這個事務象根本沒有啟動過一樣。事務故障的恢復由系統(tǒng)自動完成,不需要用戶干預。9.3.3故障類型和恢復方法二.系統(tǒng)故障(軟故障)造成系統(tǒng)停止運轉的任何事件,使得系統(tǒng)要重新啟動。內存中數(shù)據(jù)庫緩沖區(qū)的信息將全部丟失,而外部存儲設備上的數(shù)據(jù)不受影響,所有運行事務非正常終止。常見原因:特定類型的硬件錯誤(CPU故障);操作系統(tǒng)故障;DBMS代碼錯誤;突然停電等。9.3.3故障類型和恢復方法
系統(tǒng)故障的恢復:清除尚未完成的事務對數(shù)據(jù)庫的所有修改:系統(tǒng)重新啟動時,讓所有非正常終止的事務回滾,強行撤消(UNDO)所有未完成事務;將緩沖區(qū)中已完成事務提交的結果寫入數(shù)據(jù)庫:系統(tǒng)重新啟動時,恢復程序需要重做(REDO)所有已提交的事務,將數(shù)據(jù)庫恢復到一致狀態(tài)。9.3.3故障類型和恢復方法恢復步驟:1. 正向掃描日志文件(從前向后)Redo隊列:在故障發(fā)生前已經(jīng)提交的事務Undo隊列:在故障發(fā)生時尚未完成的事務 2.對Undo隊列事務進行UNDO處理
反向掃描日志文件,對每個UNDO事務的更新操作執(zhí)行逆操作,將更新前的值入庫。
3.對Redo隊列事務進行REDO處理
正向掃描日志文件,對每個REDO事務重新執(zhí)行登記的操作,將更新后的值入庫。9.3.3故障類型和恢復方法三.介質故障(硬故障--破壞性最大)指外存故障,使存儲在外存中的數(shù)據(jù)部分丟失或全部丟失,并影響正在存取這部分數(shù)據(jù)的所有事務。常見原因:磁盤損壞;磁頭碰撞;瞬時強磁干擾等。(1)重新轉儲后備副本到新的磁盤,使數(shù)據(jù)庫恢復到最近一次轉儲時的一致狀態(tài)。(2)在日志中找出轉儲以后所有已提交的事務。(3)對已提交的事務進行REDO處理,將數(shù)據(jù)庫恢復到故障前某一時刻的一致狀態(tài)。利用數(shù)據(jù)庫備份恢復利用日志備份恢復備份即時點某事務即時點故障即時點9.3.3故障類型和恢復方法恢復步驟:注:介質故障的恢復需要DBA介入一、恢復技術中的重要文件:日志文件?日志文件:用來記錄事務對數(shù)據(jù)庫的操作信息的文件。?日志文件的格式:(1)以記錄為單位的日志文件。(2)以數(shù)據(jù)塊為單位的日志文件。為保證事務的原子性,在執(zhí)行一個數(shù)據(jù)庫更新操作規(guī)程時,可以首先把描述更新操作的信息寫入日志文件,而不修改數(shù)據(jù)庫本身。當事務提交時,再使用日志中更新操作信息實現(xiàn)數(shù)據(jù)庫的更新。?日志使用機制:補充:數(shù)據(jù)庫恢復實現(xiàn)技術1、常用的一些日志記錄格式T:事務名,執(zhí)行WRITE(Q)操作的事務。X:數(shù)據(jù)項名,Q的唯一名字。V1:原始值,Q在執(zhí)行WRITE(Q)之前的值。V2:新值,Q在執(zhí)行WRITE(Q)之后的值。(1)<T,start>:事務T已經(jīng)開始。(2)<T,X,V1,V2>:事務T在數(shù)據(jù)項X上執(zhí)行的寫操作。X在執(zhí)行寫操作之前的值為V1,執(zhí)行寫操作之后的值為V2。(3)<T,commit>:事務T已經(jīng)提交。注:為保證日志在系統(tǒng)和磁盤發(fā)生故障時仍可使用,必須將它存儲在永恒存儲器上。二、恢復技術1、推遲更新技術該事務對數(shù)據(jù)庫的所有更新操作記錄在日志中,把所有數(shù)據(jù)庫更新操作推遲到該事務提交時執(zhí)行。推遲更新協(xié)議:(1)每個事務在到達提交點之前不能更新數(shù)據(jù)庫。(2)在一個事務的所有更新操作對應的日志記錄寫入永恒存儲器之前,該事務不能到達提交點。注:一事務到達提交時,稱該事務進入部分提交狀態(tài)。?推遲技術執(zhí)行事務T的過程:(1)T開始執(zhí)行,記錄<T,start>;(2)T發(fā)出WRITE(X)操作,記錄<T,X,V1,V2>;(3)T達部分提交狀態(tài)時,記錄<T,commit>,并將日志中形如<T,X,V1,V2>的記錄,把數(shù)據(jù)庫中數(shù)據(jù)項X更新為新值V2。(4)數(shù)據(jù)庫真正的被事務T更新,T進入提交狀態(tài)。?由于推遲更新技術僅需新值,所以可以簡化日志結構為<T,X,V2>。實例:銀行數(shù)據(jù)庫系統(tǒng)中:事務T1:從賬號A向賬號B轉儲50元;事務T2:從賬號C支出100元。兩事務分別定義如下:T1:READ(A);T2:READ(C);A:=A-50;C:=C-100;WRITE(A);WRITE(C);READ(B);B:=B+50;WRITE(B);返回
設A,B和C的初值分別是1000元、2000元和700元。且T1與T2按串行調度<T1,T2>日志中所包含的有關T1、T2的信息如下:<T1,START><T2,START><T1,A,950><T2,C,600><T1,B,2050><T2,COMMIT><T1,commit>說明:?數(shù)據(jù)庫中A、B值僅有在<T1,COMMIT>寫入日志后才能被更改。?數(shù)據(jù)庫中C值僅有在<T2,COMMIT>寫入日志后才能被更改。?日志與數(shù)據(jù)庫變化過程實例:日志記錄數(shù)據(jù)庫<T1,START>
<T1,A,950><T1,B,2050><T1,COMMIT>A=950B=2050<T2,START><T2,C,600><T2,COMMIT>C=600?針對推遲更新技術DBMS所采用的恢復機制:(故障發(fā)生后,確定需要重做的事務T)REDO(T):FOR日志中每個形如(T,X,V)的記錄DO
把數(shù)據(jù)庫中數(shù)據(jù)項X的值改為V;ENDFOR注:REDO操作必須是冪等的,即執(zhí)行多次和執(zhí)行一次的效果相同。故障實例1:設故障恰好發(fā)生在T1的WRITE(B)操作信息被寫入日志之后。日志內容如下:
T1T2<T1,start><T1,A,950><T1,B,2050>數(shù)據(jù)庫中A、B值未改變。數(shù)據(jù)庫恢復機制:不采取任何恢復行動。結果:A=1000,B=2000,C=700。時間故障實例2:設故障恰好發(fā)生在T2的WRITE(C)操作之后。日志內容如下:
T1T2<T1,start><T1,A,950><T1,B,2050><T1,commit><T2,start><T2,C,600>數(shù)據(jù)庫中A、B值已改變,C值未改變。數(shù)據(jù)庫恢復機制:需要執(zhí)行REDO(T1)。結果:A=950,B=2050,C=700。時間故障實例3:設故障恰好發(fā)生在<T2,commit>之后。日志內容如下:
T1T2<T1,start><T1,A,950><T1,B,2050><T1,commit><T2,start><T2,C,600><T2,commit>數(shù)據(jù)庫中A、B、C值已改變。數(shù)據(jù)庫恢復機制:需要執(zhí)行REDO(T1),REDO(T2)。結果:A=950,B=2050,C=600。時間2、即時更新技術?非提交更新:處于活動狀態(tài)的事務直接在數(shù)據(jù)庫上實施的更新。?即時更新協(xié)議:(1)在所有<T,X,V1,V2>型日志記錄安全地存儲到永恒存儲器之前,事務T不能更新數(shù)據(jù)庫。(2)在所有<T,X,V1,V2>型日志記錄安全地存儲到永恒存儲器之前,不允許事務T提交。即時更新技術運行事務T的過程:(1)T開始執(zhí)行時,記錄<T,start>。(2)T發(fā)出WRITE(X)操作,在日志中記錄<T,X,V1,V2>,再直接在數(shù)據(jù)庫上執(zhí)行WRITE(X)。(3)T達部分提交狀態(tài)時,記錄<T,commit>。(4)數(shù)據(jù)庫真正的被事務T更新,T進入提交狀態(tài)。T1和T2同前實例。日志中所包含的有關T1、T2的信息如下:<T1,START><T2,START><T1,A,1000,950><T2,C,700,600><T1,B,2000,2050><T2,COMMIT><T1,commit>?日志與數(shù)據(jù)庫變化過程實例:日志記錄數(shù)據(jù)庫<T1,START>
<T1,A,1000,950>A=950<T1,B,2000,2050>B=2050
<T1,COMMIT><T2,START><T2,C,700,600>
C=600<T2,COMMIT>
?針對即時更新技術DBMS所采用的恢復機制:UNDO(T):FOR日志中每個形如(T,X,V1,V2)的記錄DO
把數(shù)據(jù)庫中數(shù)據(jù)項X的值改為V1;ENDFORREDO(T):FOR日志中每個形如(T,X,V1,V2)的記錄DO
把數(shù)據(jù)庫中數(shù)據(jù)項X的值改為V2;ENDFOR注:UNDO、REDO操作必須是冪等的,即執(zhí)行多次和執(zhí)行一次的效果相同。?數(shù)據(jù)庫恢復過程:(1)從后向前掃描日志記錄,建立兩個事務表:提交事務表:含日志中有<Ti,commit>的所有事務Ti。未提交事務表:含日志中具有<Ti,start>,但不具有<Ti,commit>的所有事務Ti。(2)對提交事務表中的每個事務執(zhí)行READO(T)。(3)對未提交事務表中的每個事務執(zhí)行UNDO(T),從日志刪除T信息。故障實例1:設故障恰好發(fā)生在T1的WRITE(B)操作信息被寫入日志之后。日志內容如下:
T1<T1,start><T1,A,1000,950><T1,B,2000,2050>數(shù)據(jù)庫中A、B值已改變。數(shù)據(jù)庫恢復機制:因為T1未真正提交,所以UNDO(T1),A、B被恢復A=1000,B=2000。時間故障實例2:設故障恰好發(fā)生在T2的WRITE(C)操作寫入日志之后。日志內容如下:
T1T2<T1,start><T1,A,1000,950><T1,B,2000,2050>
<T1,commit><T2,start><T2,C,700,600>數(shù)據(jù)庫中A、B、C值已改變。數(shù)據(jù)庫恢復機制:因為T1已提交、T2未提交,要執(zhí)行UNDO(T2)、REDO(T1)。結果:A=950,B=2050,C=700。注:UNDO(T2)須先執(zhí)行。時間故障實例3:設故障恰好發(fā)生在<T2,commit>之后。日志內容如下:
T1T2<T1,start><T1,A,1000,950><T1,B,2000,2050>
<T1,commit><T2,start><T2,C,700,600><T2,commit>數(shù)據(jù)庫中A、B、C值已改變。數(shù)據(jù)庫恢復機制:因為T1、T2都已提交,需要執(zhí)行REDO(T1),REDO(T2)。結果:A=950,B=2050,C=600。時間3、其它恢復技術及輔助技術:1>緩沖技術(輔助作用)(1)日志緩沖技術目的:成批地向永恒存儲器輸出日志記錄,減少I/O操作,提高效率。(2)數(shù)據(jù)庫緩沖技術2>檢測點技術(輔助作用)?原數(shù)據(jù)庫恢復技術存在問題:(1)搜索日志耗時長。(2)重復執(zhí)行了已成功的REDO操作。
解決辦法:增加檢測點法在日志中增加一類新記錄:<checkpoint>,數(shù)據(jù)庫恢復機制定期執(zhí)行如下操作,建立檢測點:1)將當前緩存中所有日志記錄輸出到永恒存儲器2)將所有緩沖區(qū)中被修改的數(shù)據(jù)塊寫入磁盤3)將日志記錄<checkpoint>寫入永恒存儲器?使用檢測點法對數(shù)據(jù)庫恢復技術的改進:
在<checkpoint>之前的事務都已經(jīng)提交,僅需對最近建立的檢測點之后開始執(zhí)行或處于活動狀態(tài)的事務進REDO或UNDO操作。9.4SQLServer數(shù)據(jù)庫備份與恢復--要備份的數(shù)據(jù)庫名->右擊“任務”-->單擊“備份”,如圖:
完整備份
包含數(shù)據(jù)庫中全部數(shù)據(jù)和日志文件信息,也稱為是全庫備份或者海量備份。
優(yōu)點:恢復操作簡便,只需要將最近一次的備份恢復。缺點:完全備份所占的存儲空間很大且備份的時間較長。9.4.1數(shù)據(jù)庫備份方法BACKUPDATABASEdatabase_nameTO{DISK|TAPE}='physical_backup_device_name'例1:在某一個時間點,對數(shù)據(jù)庫Sample做一個完全備份,備份到文件D:\backup\Sample_full.bak:
BACKUPDATABASESampleTODISK=’D:\backup\Sample_full.bak’
差異備份只記錄自上次數(shù)據(jù)庫備份后發(fā)生更改的數(shù)據(jù)。優(yōu)點:比完整備份小且備份速度快,主要用于使用頻繁的系統(tǒng),可以經(jīng)常地備份,將減少丟失數(shù)據(jù)的危險。缺點:需要使用完整備份和差異備份一起來進行恢復。注意:使用差異數(shù)據(jù)庫備份將數(shù)據(jù)庫還原到差異數(shù)據(jù)庫備份完成時的那一點。若要恢復到精確的故障點,必須使用事務日志備份。9.4.1數(shù)據(jù)庫備份方法BACKUPDATABASEdatabase_nameTO{DISK|TAPE}='physical_backup_device_name'WITHDIFFERENTIAL例2:若干時間過去了,Sample數(shù)據(jù)庫的內容發(fā)生一些變化,需要做一個差異備份:
BACKUPDATABASESampleTODISK=’D:\backup\Sample_1.bak’WITHDIFFERENTIAL9.4.1數(shù)據(jù)庫備份方法建議在執(zhí)行差異數(shù)據(jù)庫備份時使用如下過程:創(chuàng)建定期的完整數(shù)據(jù)庫備份。在每個完整數(shù)據(jù)庫備份之間定期創(chuàng)建差異數(shù)據(jù)庫備份。如果使用完全恢復模型或大容量日志記錄恢復模型,則創(chuàng)建事務日志備份的頻率比差異數(shù)據(jù)庫備份大。
還原差異數(shù)據(jù)庫備份的順序為:還原最新的數(shù)據(jù)庫備份。還原到最后一次的差異數(shù)據(jù)庫備份。如果使用完全恢復或大容量日志記錄恢復,則應用自上次創(chuàng)建差異數(shù)據(jù)庫備份后創(chuàng)建的所有事務日志備份。
日志文件備份當數(shù)據(jù)庫信息更改時,其更新操作將記入日志文件,將這部分操作信息進行備份??偅喝罩緜浞荼韧暾麄浞菔褂玫馁Y源少,可以使用事務日志備份將數(shù)據(jù)庫恢復到特定的即時點或恢復到故障點。9.4.1數(shù)據(jù)庫備份方法BACKUPLOG{database_name|@database_name_var}TO{DISK|TAPE}='physical_backup_device_name‘例3:再過了若干時間,下列命令將數(shù)據(jù)庫Sample的日志備份到D:\backup\Sample_log.bak:
BACKUPLOGSampleTODISK=’D:\backup\Sample_lo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年即食蛋白棒行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年地黃補腎滋陰液企業(yè)制定與實施新質生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年地質數(shù)據(jù)可視化平臺企業(yè)制定與實施新質生產(chǎn)力戰(zhàn)略研究報告
- 2025-2030年手工雕刻實木藝術品行業(yè)深度調研及發(fā)展戰(zhàn)略咨詢報告
- 2025-2030年古早味茶點屋企業(yè)制定與實施新質生產(chǎn)力戰(zhàn)略研究報告
- 高通量試驗反應堆及配套產(chǎn)品項目績效評估報告
- 2025年度文化產(chǎn)業(yè)股權轉讓代理服務合同
- 2025年度房地產(chǎn)代銷代理合同
- 2025年度新能源儲能技術研發(fā)與應用合同模板
- 2025年度混凝土泵車租賃與維修服務合同
- 公司章程范本(完整版)
- 廠房委托經(jīng)營管理合同范本
- 《保險科技》課件-第二章 大數(shù)據(jù)及其在保險領域中的應用
- 父母贈與田地協(xié)議書范本
- 中藥甘草課件
- 解讀國有企業(yè)管理人員處分條例(2024)課件(全文)
- 煙草企業(yè)安全生產(chǎn)標準化規(guī)范1-200題附有答案
- DL∕T 1870-2018 電力系統(tǒng)網(wǎng)源協(xié)調技術規(guī)范
- FZ∕T 54007-2019 錦綸6彈力絲行業(yè)標準
- 人教部編版四年級語文下冊課內外閱讀訓練2《鄉(xiāng)下人家》(有答案)
- ??停?024年智能制造校園招聘白皮書
評論
0/150
提交評論