3.介質(zhì)故障的恢復(fù)
發(fā)生介質(zhì)故障后,磁盤上的物理數(shù)據(jù)和日志文件被破壞,這是最嚴(yán)重的一種故障,恢復(fù)方法是重裝數(shù)據(jù)庫,然后重做已完成的事務(wù)。具體地說就是:
⑴. 裝入最新的數(shù)據(jù)庫后備副本(離故障發(fā)生時刻最近的轉(zhuǎn)儲副本),使數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)儲時的一致性狀態(tài)。
對于動態(tài)轉(zhuǎn)儲的數(shù)據(jù)庫副本,還須同時裝入轉(zhuǎn)儲開始時刻的日志文件副本,利用恢復(fù)系統(tǒng)故障的方法(即REDO+UNDO),才能將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。
�、�. 裝入相應(yīng)的日志文件副本(轉(zhuǎn)儲結(jié)束時刻的日志文件副本),重做已完成的事務(wù)。即:
首先掃描日志文件,找出故障發(fā)生時已提交的事務(wù)的標(biāo)識,將其記入重做隊列。
然后正向掃描日志文件,對重做隊列中的所有事務(wù)進行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。
這樣就可以將數(shù)據(jù)庫恢復(fù)至故障前某一時刻的一致狀態(tài)了。
介質(zhì)故障的恢復(fù)需要DBA介入。但DBA只需要重裝最近轉(zhuǎn)儲的數(shù)據(jù)庫副本和有關(guān)的各日志文件副本,然后執(zhí)行系統(tǒng)提供的恢復(fù)命令即可,具體的恢復(fù)操作仍由DBMS完成。
n 并發(fā)控制
在多用戶共享系統(tǒng)中,許多事務(wù)可能同時對同一個數(shù)據(jù)進行操作,這時候就產(chǎn)生了并發(fā)控制的問題。DMBS的并發(fā)控制子系統(tǒng)負(fù)責(zé)協(xié)調(diào)并發(fā)事務(wù)的執(zhí)行,保證數(shù)據(jù)庫的完整性不受破壞,同時避免用戶得到不正確的數(shù)據(jù)。
同時并發(fā)方式:在多處理系統(tǒng)中,每個處理機可以運行一個事務(wù),多個處理機可以同時運行多個事務(wù),實現(xiàn)多個事務(wù)真正的并行運行,這種并行方式稱為同時并發(fā)方式。
并發(fā)控制機制是衡量一個數(shù)據(jù)庫管理系統(tǒng)性能的重要標(biāo)志之一。
數(shù)據(jù)庫的并發(fā)操作通�?赡軒硪韵碌膯栴}:
u u 丟失更新問題
u u 不一致分析問題(讀過時的數(shù)據(jù))
u u 依賴于未提交更新問題(讀“臟”數(shù)據(jù))
處理并發(fā)控制的主要方法是采用封鎖技術(shù)。封鎖是實現(xiàn)并發(fā)控制的一個非常重要的技術(shù)。
封鎖:所謂封鎖就是事務(wù)T在對某個數(shù)據(jù)對象例如表、記錄等操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。
基本的封鎖類型有兩種:排它鎖(Exclusive Locks,簡記為X鎖) 和共享鎖(Share Locks,簡記為S鎖)。
排它鎖:排它鎖又稱為寫鎖。若事務(wù)T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對A加任何類型的鎖,直到T釋放A上的鎖。這就保證了其它事務(wù)在T釋放A上的鎖之前不能再讀取和修改A。
共享鎖:共享鎖又稱為讀鎖。若事務(wù)T對數(shù)據(jù)對象A加上S鎖,則事務(wù)T可以讀A,但不能修改A,其它事務(wù)只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這就保證了其它事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改。有兩種類型:
uu 排他型封鎖(X封鎖)
uu 共享型封鎖(S封鎖)
在運用X鎖和S鎖這兩種基本封鎖,對數(shù)據(jù)對象加鎖時,還需要約定一些規(guī)則,例如應(yīng)何時申請X鎖或S鎖、持鎖時間、何時釋放等。我們稱這些規(guī)則為封鎖協(xié)議(Locking Protocol)。對封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。下面介紹三級封鎖協(xié)議。對并發(fā)操作的不正確調(diào)度可能會帶來丟失修改、不可重復(fù)讀和讀“臟”數(shù)據(jù)等不一致性問題,三級封鎖協(xié)議分別在不同程度上解決了這一問題。為并發(fā)操作的正確調(diào)度提供一定的保證。不同級別的封鎖協(xié)議達到的系統(tǒng)一致性級別是不同的。
一級封鎖協(xié)議是:事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束(ROLLBACK)。
二級封鎖協(xié)議是:一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后即可釋放S鎖。二級封鎖協(xié)議除防止了丟失修改,還可進一步防止讀“臟”數(shù)據(jù)
三級封鎖協(xié)議是:一級封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放。三級封鎖協(xié)議除防止了丟失修改和不讀‘臟’數(shù)據(jù)外,還進一步防止了不可重復(fù)讀
和操作系統(tǒng)一樣,封鎖的方法可能引起活鎖和死鎖。
一.活鎖
活鎖:如果事務(wù)T1封鎖了數(shù)據(jù)R,事務(wù)T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T3的請求,T2仍然等待。然后T4又請求封鎖R,當(dāng)T3釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T4的請求,......,T2有可能永遠等待,這就是活鎖的情形
二.死鎖
死鎖:如果事務(wù)T1封鎖了數(shù)據(jù)R1,T2封鎖了數(shù)據(jù)R2,然后T1又請求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖。接著T2又申請封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖。這樣就出現(xiàn)了T1在等待T2,而T2又在等待T1的局面,T1和T2兩個事務(wù)永遠不能結(jié)束,形成死鎖。
死鎖的預(yù)防:
在數(shù)據(jù)庫中,產(chǎn)生死鎖的原因是兩個或多個事務(wù)都已封鎖了一些數(shù)據(jù)對象,然后又都請求對已被其他事務(wù)封鎖的數(shù)據(jù)對象加鎖,從而出現(xiàn)死等待。防止死鎖的發(fā)生其實就是要破壞產(chǎn)生死鎖的條件。預(yù)防死鎖通常有兩種方法:
一次封鎖法: 一次封鎖法要求每個事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則就不能繼續(xù)執(zhí)行。一次封鎖法雖然可以有效地防止死鎖的發(fā)生,但也存在問題,一次就將以后要用到的全部數(shù)據(jù)加鎖,勢必擴大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。
順序封鎖法:順序封鎖法是預(yù)先對數(shù)據(jù)對象規(guī)定一個封鎖順序,所有事務(wù)都按這個順序?qū)嵭蟹怄i。順序封鎖法可以有效地防止死鎖,但也同樣存在問題。事務(wù)的封鎖請求可以隨著事務(wù)的執(zhí)行而動態(tài)地決定,很難事先確定每一個事務(wù)要封鎖哪些對象,因此也就很難按規(guī)定的順序去施加封鎖。
可見,在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略并不很適合數(shù)據(jù)庫的特點,因此DBMS在解決死鎖的問題上普遍采用的是診斷并解除死鎖的方法。
相關(guān)推薦:推薦:2010年計算機軟件水平考試必備完美攻略北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |