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