5.可串行性
定義 當(dāng)且僅當(dāng)某組事務(wù)的一定交叉調(diào)度產(chǎn)生的結(jié)果和這些事務(wù)的某一串行調(diào)度的結(jié)果相同,則這個(gè)交叉調(diào)度是可串行化的?纱行(Serializability)是并行事務(wù)正確性的準(zhǔn)則。這個(gè)準(zhǔn)則規(guī)定,一給定的交叉調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確的。
6.兩段鎖協(xié)議
兩段鎖協(xié)議規(guī)定所有的事務(wù)應(yīng)遵守下列規(guī)則:
(1)在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖,而且:
(2)在釋放一個(gè)封鎖之后,事務(wù)不再獲得任何其它鎖。所謂“兩段”鎖的含義是:事務(wù)分為兩個(gè)階段。第一階段是獲得封鎖,也稱為擴(kuò)展階段。第二階段是釋放封鎖,也稱為收縮階段。定理 若所有事務(wù)均遵守兩段鎖協(xié)議,則這些事務(wù)的所有交叉調(diào)度都是可串行化的(證明略)。為了確保事務(wù)并行執(zhí)行的正確性,許多系統(tǒng)采用兩段鎖協(xié)議。同時(shí)系統(tǒng)設(shè)有死鎖檢測(cè)機(jī)制,發(fā)現(xiàn)死鎖后按一定的算法解除死鎖。
7.恢復(fù)
盡管系統(tǒng)中采取了各種保護(hù)措施來(lái)保證數(shù)據(jù)庫(kù)的安全性和完整性不被破壞,保證并行事務(wù)的正確執(zhí)行,但是計(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)必須具有把數(shù)擾庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(亦稱為完整狀態(tài)或一致?tīng)顟B(tài))的功能,這就是數(shù)據(jù)庫(kù)的恢復(fù)。恢復(fù)子系統(tǒng)是數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)重要組成部分,而且還相當(dāng)龐大,常常占整個(gè)系統(tǒng)代碼的10%以上(如IMS,DB2)。故障恢復(fù)是否考慮周到和行之有效,是數(shù)據(jù)庫(kù)系統(tǒng)性能的一個(gè)重要指標(biāo)。大型的數(shù)據(jù)庫(kù)應(yīng)用對(duì)故障恢復(fù)的要求更加強(qiáng)烈。有時(shí)甚至采用雙工制。
(1)故障的種類數(shù)據(jù)庫(kù)系統(tǒng)中可能發(fā)生各種各樣的故障,大致可以分以下幾類:①事務(wù)內(nèi)部的故障;②系統(tǒng)范圍內(nèi)的故障;③介質(zhì)故障;④計(jì)算機(jī)病毒。
(2)轉(zhuǎn)儲(chǔ)和恢復(fù)轉(zhuǎn)儲(chǔ)是數(shù)據(jù)庫(kù)恢復(fù)中經(jīng)常采用的基本技術(shù)。所謂轉(zhuǎn)儲(chǔ)即DBA定期地將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到磁帶或另一個(gè)磁盤上保存起來(lái)的過(guò)程。這些備用的數(shù)據(jù)文本為后備副本或后援副本。當(dāng)數(shù)據(jù)庫(kù)遭到破壞后就可以利用后備副本把數(shù)據(jù)庫(kù)恢復(fù)。這時(shí),數(shù)據(jù)庫(kù)只能恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài),從那以后的所有更新事務(wù)必須重新運(yùn)行才能恢復(fù)到現(xiàn)時(shí)的正常狀態(tài)。轉(zhuǎn)儲(chǔ)是十分耗費(fèi)時(shí)間和資源的,不能頻繁進(jìn)行。DBA應(yīng)該根據(jù)數(shù)據(jù)庫(kù)使用情況確定一個(gè)適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)周期。轉(zhuǎn)儲(chǔ)可分為靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。靜態(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í)行。靜態(tài)轉(zhuǎn)儲(chǔ)簡(jiǎn)單,但轉(zhuǎn)儲(chǔ)必須等待用戶事務(wù)結(jié)束才能進(jìn)行。同樣,新的事務(wù)必須等待轉(zhuǎn)儲(chǔ)結(jié)束才能執(zhí)行。顯然,這會(huì)降低數(shù)據(jù)庫(kù)的可用性。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)可克服靜態(tài)轉(zhuǎn)儲(chǔ)的缺點(diǎn)。但是,轉(zhuǎn)儲(chǔ)結(jié)束時(shí)后援副本上的數(shù)據(jù)并不能保證正確有效。例如,在轉(zhuǎn)儲(chǔ)期間的某時(shí)刻t 1 系統(tǒng)把數(shù)據(jù)A=100轉(zhuǎn)儲(chǔ)到了磁帶上,而在時(shí)刻t 2 ,某一事務(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),建立日志文件(log file)。這樣,后援副本加上日志文件就能把數(shù)據(jù)庫(kù)恢復(fù)到某一時(shí)刻的正確狀態(tài)。轉(zhuǎn)儲(chǔ)還可以分為海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)。增量轉(zhuǎn)儲(chǔ)則指每次只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后更新過(guò)的數(shù)據(jù)。如果數(shù)據(jù)庫(kù)很大,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲(chǔ)方式是很有效的。(3)日志文件日志文件是用來(lái)記錄對(duì)數(shù)據(jù)庫(kù)每一次更新活動(dòng)的文件。在動(dòng)態(tài)轉(zhuǎn)儲(chǔ)方式中必須建立日志文件,后援副本和日志文件綜合起來(lái)才能有效地恢復(fù)數(shù)據(jù)庫(kù)。在靜態(tài)轉(zhuǎn)儲(chǔ)方式中,也可以建立日志文件。當(dāng)數(shù)據(jù)庫(kù)毀壞后可重新裝放后援副本把數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的正確狀態(tài),然后利用日志文件,把已完成的事務(wù)進(jìn)行重做處理,對(duì)故障發(fā)生時(shí)尚未完成的事務(wù)進(jìn)行撤消處理。這樣不必重新運(yùn)行那些在轉(zhuǎn)儲(chǔ)前已完成的事務(wù)程序就可把數(shù)據(jù)庫(kù)恢復(fù)到故障前某一時(shí)刻的正確狀態(tài)。
相關(guān)推薦: 軟考數(shù)據(jù)庫(kù)系統(tǒng)師歷年真題匯總(2007年-2010年)北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |