版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五章數(shù)據(jù)庫(kù)保護(hù)第一頁(yè),共五十一頁(yè),2022年,8月28日第五章數(shù)據(jù)庫(kù)安全保護(hù)5.1數(shù)據(jù)庫(kù)安全性5.2完整性控制5.3并發(fā)控制5.4數(shù)據(jù)庫(kù)的恢復(fù)第二頁(yè),共五十一頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)安全性數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞。安全性控制的一般方法對(duì)有意的非法活動(dòng)可采用加密存、取數(shù)據(jù)的方法控制;對(duì)有意的非法操作可使用用戶(hù)身份驗(yàn)證、限制操作權(quán)來(lái)控制;對(duì)無(wú)意的損壞可采用提高系統(tǒng)的可靠性和數(shù)據(jù)備份等方法來(lái)控制。第三頁(yè),共五十一頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)安全性安全控制模型在計(jì)算機(jī)系統(tǒng)中,安全措施是一級(jí)一級(jí)層層設(shè)置的,安全控制模型如圖5.1所示。圖5-1計(jì)算機(jī)系統(tǒng)的安全控制模型文件操作控制操作權(quán)控制身份驗(yàn)證用戶(hù)數(shù)據(jù)庫(kù)應(yīng)用程序數(shù)據(jù)庫(kù)管理系統(tǒng)操作系統(tǒng)加密存儲(chǔ)與冗余數(shù)據(jù)庫(kù)第四頁(yè),共五十一頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)安全性根據(jù)圖5.1的安全模型,當(dāng)用戶(hù)進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)時(shí),系統(tǒng)首先根據(jù)輸入的用戶(hù)標(biāo)識(shí)進(jìn)行身份的鑒定,只有合法的用戶(hù)才準(zhǔn)許進(jìn)入系統(tǒng)。對(duì)已進(jìn)入系統(tǒng)的用戶(hù),DBMS還要驗(yàn)證此用戶(hù)是否具有操作權(quán),有操作權(quán)才能進(jìn)行操作。DBMS是建立在操作系統(tǒng)之上的,在操作系統(tǒng)一級(jí)設(shè)有相應(yīng)的保護(hù)措施,比如設(shè)置文件的訪問(wèn)權(quán)限。數(shù)據(jù)可以通過(guò)加密的形式存儲(chǔ)到數(shù)據(jù)庫(kù)中第五頁(yè),共五十一頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)安全性一.用戶(hù)身份驗(yàn)證用一個(gè)用戶(hù)名或用戶(hù)標(biāo)識(shí)符來(lái)標(biāo)明用戶(hù)的身份,系統(tǒng)以此來(lái)鑒別用戶(hù)的合法性。如果正確,則可進(jìn)入下一步的核實(shí),否則,不能使用計(jì)算機(jī)。
用戶(hù)標(biāo)識(shí)符是用戶(hù)公開(kāi)的標(biāo)識(shí),它不足以成為鑒別用戶(hù)身份的憑證。為了進(jìn)一步核實(shí)用戶(hù)身份,常采用用戶(hù)名與口令(Password)相結(jié)合的方法,系統(tǒng)通過(guò)核對(duì)口令判別用戶(hù)身份的真?zhèn)巍?/p>
系統(tǒng)有一張用戶(hù)口令表,為每個(gè)用戶(hù)保持一個(gè)記錄,包括用戶(hù)名和口令兩部分?jǐn)?shù)據(jù)。用戶(hù)先輸入用戶(hù)名,然后系統(tǒng)要求用戶(hù)輸入口令。為了保密,用戶(hù)在終端上輸入的口令不顯示在屏幕上。系統(tǒng)核對(duì)口令以鑒別用戶(hù)身份。第六頁(yè),共五十一頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)安全性一.用戶(hù)身份驗(yàn)證通過(guò)用戶(hù)名和口令來(lái)鑒定用戶(hù)的方法簡(jiǎn)單易行,但該方法在使用時(shí),由于用戶(hù)名和口令的產(chǎn)生和使用比較簡(jiǎn)單,也容易被竊取,因此還可采用更復(fù)雜的方法。例如,每個(gè)用戶(hù)都預(yù)先約定好一個(gè)過(guò)程或者函數(shù),鑒別用戶(hù)身份時(shí),系統(tǒng)提供一個(gè)隨機(jī)數(shù),用戶(hù)根據(jù)自己預(yù)先約定的計(jì)算過(guò)程或者函數(shù)進(jìn)行計(jì)算,系統(tǒng)根據(jù)計(jì)算結(jié)果辨別用戶(hù)身份的合法性。例如,讓用戶(hù)記住一個(gè)表達(dá)式,如T=X+2Y,系統(tǒng)告訴用戶(hù)X=1,Y=2,如果用戶(hù)回答T=5,則證實(shí)了該用戶(hù)的身份。當(dāng)然,這是一個(gè)簡(jiǎn)單的例子,在實(shí)際使用中,還可以設(shè)計(jì)復(fù)雜的表達(dá)式,以使安全性更好。系統(tǒng)每次提供不同的X,Y值,其他人可能看到的是X、Y的值,但不能推算出確切的變換公式T。第七頁(yè),共五十一頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)安全性二.用戶(hù)操作權(quán)限管理1.權(quán)限的種類(lèi)對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行維護(hù)的權(quán)限對(duì)數(shù)據(jù)庫(kù)中的對(duì)象和數(shù)據(jù)進(jìn)行操作的權(quán)限對(duì)數(shù)據(jù)庫(kù)對(duì)象的權(quán)限,包括創(chuàng)建、刪除和修改數(shù)據(jù)庫(kù)對(duì)象對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的操作權(quán),包括對(duì)表、視圖數(shù)據(jù)的增、刪、改、查權(quán)2.數(shù)據(jù)庫(kù)用戶(hù)的分類(lèi)(1)數(shù)據(jù)庫(kù)系統(tǒng)管理員:具有一切權(quán)限。(2)數(shù)據(jù)庫(kù)對(duì)象擁有者:對(duì)其所擁有的對(duì)象具有一切權(quán)限。(3)普通用戶(hù):只具有對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的增、刪、改、查權(quán)。
第八頁(yè),共五十一頁(yè),2022年,8月28日5.2完整性控制一.數(shù)據(jù)庫(kù)完整性的含義數(shù)據(jù)庫(kù)的完整性是指保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容性,防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)造成無(wú)效操作。有關(guān)完整性的含義在第一章中已作簡(jiǎn)要介紹。比如年齡屬于數(shù)值型數(shù)據(jù),只能含0,1,…9,不能含字母或 特殊符號(hào);月份只能用1~12之間的正整數(shù)表示;表示同一事實(shí)的兩個(gè)數(shù)據(jù)應(yīng)相同,否則就不相容,如一個(gè)人 不能有兩個(gè)學(xué)號(hào)。顯然,維護(hù)數(shù)據(jù)庫(kù)的完整性非常重要,數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否具備完整性關(guān)系到數(shù)據(jù)能否真實(shí)地反映現(xiàn)實(shí)世界。第九頁(yè),共五十一頁(yè),2022年,8月28日5.2完整性控制數(shù)據(jù)庫(kù)的完整性和安全性是數(shù)據(jù)庫(kù)保護(hù)的兩個(gè)不同的方面。
安全性是保護(hù)數(shù)據(jù)庫(kù),以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞,安全性措施的防范對(duì)象是非法用戶(hù)和非法操作;
完整性是防止合法用戶(hù)使用數(shù)據(jù)庫(kù)時(shí)向數(shù)據(jù)庫(kù)中加入不符合語(yǔ)義的數(shù)據(jù),完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。但從數(shù)據(jù)庫(kù)的安全保護(hù)角度來(lái)講,安全性和完整性又是密切相關(guān)的。第十頁(yè),共五十一頁(yè),2022年,8月28日5.2完整性控制二.完整性規(guī)則的組成為了實(shí)現(xiàn)完整性控制,數(shù)據(jù)庫(kù)管理員應(yīng)向DBMS提出一組完整性規(guī)則,來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù),看其是否滿(mǎn)足語(yǔ)義約束。這些語(yǔ)義約束構(gòu)成了數(shù)據(jù)庫(kù)的完整性規(guī)則,這組規(guī)則作為DBMS控制數(shù)據(jù)完整性的依據(jù)。它定義了何時(shí)檢查、檢查什么、查出錯(cuò)誤又怎樣處理等事項(xiàng)。具體地說(shuō),完整性規(guī)則主要由以下三部分構(gòu)成:1.
觸發(fā)條件:規(guī)定系統(tǒng)什么時(shí)候使用規(guī)則檢查數(shù)據(jù);2.
約束條件:規(guī)定系統(tǒng)檢查用戶(hù)發(fā)出的操作請(qǐng)求違背了什么樣的完整性約束條件;3.
違約響應(yīng):規(guī)定系統(tǒng)如果發(fā)現(xiàn)用戶(hù)的操作請(qǐng)求違背了完整性約束條件,應(yīng)該采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性,即違約時(shí)要做的事情。第十一頁(yè),共五十一頁(yè),2022年,8月28日5.2完整性控制關(guān)系模型的完整性包括實(shí)體完整性,參照完整性和用戶(hù)定義完整性。對(duì)于違反實(shí)體完整性和用戶(hù)定義完整性規(guī)則的操作一般都是采用拒絕執(zhí)行的方式進(jìn)行處理。而對(duì)于違反參照完整性的操作,并不都是簡(jiǎn)單的拒絕執(zhí)行,一般在接受這個(gè)操作的同時(shí),執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫(kù)的狀態(tài)仍然是正確的。例如:在刪除被參照關(guān)系中的元組時(shí),應(yīng)該將參照關(guān)系中所有的外碼值與被參照關(guān)系中要?jiǎng)h除元組主碼值相對(duì)應(yīng)的元組一起刪除。比如,要?jiǎng)h除S關(guān)系中SNO=‘S1’的元組,而SC關(guān)系中又有兩個(gè)SNO=‘S1’的元組。這時(shí)根據(jù)應(yīng)用環(huán)境的語(yǔ)義,因?yàn)楫?dāng)一個(gè)學(xué)生畢業(yè)或退學(xué)后,他的個(gè)人記錄從S關(guān)系中刪除,選課記錄也應(yīng)隨之從SC表中刪除,所以應(yīng)該將SC關(guān)系中兩個(gè)SNO=‘S1’的元組一起刪除。第十二頁(yè),共五十一頁(yè),2022年,8月28日5.2完整性控制數(shù)據(jù)完整性的實(shí)現(xiàn)一般是在服務(wù)器端完成的服務(wù)器端實(shí)現(xiàn)數(shù)據(jù)完整性的方法:
在定義表的時(shí)候聲明數(shù)據(jù)完整性在服務(wù)器端編寫(xiě)觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)完整性一旦進(jìn)入系統(tǒng),就開(kāi)始執(zhí)行數(shù)據(jù)完整性規(guī)則。其主要優(yōu)點(diǎn)是違約由系統(tǒng)來(lái)處理,而不是由用戶(hù)處理。數(shù)據(jù)庫(kù)系統(tǒng)的整個(gè)完整性控制都是圍繞著完整性約束條件進(jìn)行的,從這個(gè)角度來(lái)看,完整性約束條件是完整性控制機(jī)制的核心。第十三頁(yè),共五十一頁(yè),2022年,8月28日5.2完整性控制三.完整性約束條件的作用對(duì)象
完整性約束條件的作用對(duì)象可以是表、元組和列。1.列級(jí)約束:即對(duì)數(shù)據(jù)類(lèi)型、數(shù)據(jù)格式、取值范圍等進(jìn)行規(guī)定。
對(duì)數(shù)據(jù)類(lèi)型的約束,包括數(shù)據(jù)的類(lèi)型、長(zhǎng)度、單位和精度等。
例如,規(guī)定學(xué)生姓名的數(shù)據(jù)類(lèi)型應(yīng)為字符型,長(zhǎng)度為8。對(duì)數(shù)據(jù)格式的約束。例如,規(guī)定出生日期的數(shù)據(jù)格式為YY.MM.DD。
對(duì)取值范圍的約束。例如,月份的取值范圍為1~12,日期1~31
對(duì)空值的約束??罩当硎疚炊x或未知的值,它與零值空格不同。有的列值允許空值,有的則不允許。例如,學(xué)號(hào)和課程號(hào)不可以為空值,但成績(jī)可以為空值第十四頁(yè),共五十一頁(yè),2022年,8月28日5.2完整性控制三.完整性約束條件的作用對(duì)象
2.元組約束元組的約束是元組中各個(gè)字段之間的聯(lián)系的約束,如:開(kāi)始日期小于結(jié)束日期,職工的最低工資不能低于規(guī)定的最低保障金等。3.關(guān)系約束關(guān)系約束是指若干元組之間、關(guān)系之間的聯(lián)系的約束。比如學(xué)號(hào)的取值不能重復(fù)也不能取空值,學(xué)生修課表中的學(xué)號(hào)的取值受學(xué)生表中的學(xué)號(hào)取值的約束等。第十五頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制每個(gè)用戶(hù)在存取數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),可能是串行執(zhí)行,即每個(gè)時(shí)刻只有一個(gè)用戶(hù)程序運(yùn)行,也可能是多個(gè)用戶(hù)并行地存取數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)的最大特點(diǎn)之一就是數(shù)據(jù)資源是共享的,串行執(zhí)行意味著一個(gè)用戶(hù)在運(yùn)行程序時(shí),其他用戶(hù)程序必須等到這個(gè)用戶(hù)程序結(jié)束才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取,這樣如果一個(gè)用戶(hù)程序涉及大量數(shù)據(jù)的輸入/輸出交換,則數(shù)據(jù)庫(kù)系統(tǒng)的大部分時(shí)間將處于閑置狀態(tài)。因此,為了充分利用數(shù)據(jù)庫(kù)資源,很多時(shí)候數(shù)據(jù)庫(kù)用戶(hù)都是對(duì)數(shù)據(jù)庫(kù)系統(tǒng)并行存取數(shù)據(jù),這樣就會(huì)發(fā)生多個(gè)用戶(hù)并發(fā)存取同一數(shù)據(jù)塊的情況,如果對(duì)并發(fā)操作不加控制可能會(huì)產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)的完整性,并發(fā)控制就是解決這類(lèi)問(wèn)題,以保持?jǐn)?shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,即在任何一個(gè)時(shí)刻數(shù)據(jù)庫(kù)都將以相同的形式給用戶(hù)提供數(shù)據(jù)。第十六頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制一.事務(wù)(Transaction)事務(wù)是用戶(hù)定義的數(shù)據(jù)操作系列,這些操作作為一個(gè)完整的工作單元.一個(gè)事務(wù)可以是一組SQL語(yǔ)句、一條SQL語(yǔ)句或整個(gè)程序,一個(gè)應(yīng)用程序可以包括多個(gè)事務(wù)。一個(gè)事務(wù)內(nèi)的所有語(yǔ)句被作為一個(gè)整體,要么全部執(zhí)行,要么全部不執(zhí)行。例如:對(duì)于一個(gè)轉(zhuǎn)帳活動(dòng):A帳戶(hù)轉(zhuǎn)帳給B帳戶(hù)n元錢(qián),這個(gè)活動(dòng)包含兩個(gè)動(dòng)作:
第一個(gè)動(dòng)作:A帳戶(hù)-n
第二個(gè)動(dòng)作:B帳戶(hù)+n
1.事務(wù)的定義第十七頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制事務(wù)的開(kāi)始與結(jié)束可以由用戶(hù)顯式控制。如果用戶(hù)沒(méi)有顯式地定義事務(wù),則由DBMS按照缺省規(guī)定自動(dòng)劃分事務(wù)。在SQL語(yǔ)言中,定義事務(wù)的語(yǔ)句有三條:BEGINTRANSACTION:表示事務(wù)的開(kāi)始;COMMIT(提交):表示事務(wù)的正常結(jié)束,即此時(shí)事務(wù)中所有操作都會(huì)保存到物理數(shù)據(jù)庫(kù)中,成為永久操作ROLLBACK(回滾):表示事務(wù)的異常結(jié)束,在事務(wù)運(yùn)行的過(guò)程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的更新操作全部撤銷(xiāo),再回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。
例:BEGINTRANSACTIONUPDATE支付表SET帳戶(hù)總額=帳戶(hù)總額-n WHERE帳戶(hù)名=‘A’UPDATE支付表SET帳戶(hù)總額=帳戶(hù)總額+n WHERE帳戶(hù)名=‘B’
COMMIT第十八頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制2.事務(wù)的特征
事務(wù)是由有限的數(shù)據(jù)操作序列組成,但并不是任意的數(shù)據(jù)操作序列都能成為事務(wù),為了保護(hù)數(shù)據(jù)的完整性,一般要求事務(wù)具有以下四個(gè)特征:原子性(Atomic):是指一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該遵守“要么不做,要么全做”的原則,即不允許事務(wù)部分的完成。一致性(Consistency):是指事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。例如前面的轉(zhuǎn)帳如果只執(zhí)行其中一個(gè)操作,則數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),帳務(wù)會(huì)出現(xiàn)問(wèn)題。也就是說(shuō),兩個(gè)操作要么全做,要么全不做,否則就不能成為事務(wù)。
第十九頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制2.事務(wù)的特征隔離性(Isolation):指數(shù)據(jù)庫(kù)中一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的。并發(fā)控制就是為了保證事務(wù)間的隔離性。持久性(Durability):指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫(kù)因故障而受到破壞,DBMS也應(yīng)該能夠恢復(fù)。第二十頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制二.并發(fā)操作與數(shù)據(jù)的不一致性[例]并發(fā)訂票操作。假設(shè)有兩個(gè)飛機(jī)訂票點(diǎn)A和B,如果A和B兩個(gè)訂票點(diǎn)恰巧同時(shí)辦理同一架航班的飛機(jī)訂票業(yè)務(wù)。該航班目前的機(jī)票余額數(shù)R=10張,A訂票點(diǎn)(事務(wù)A)賣(mài)出6張機(jī)票,B訂票點(diǎn)(事務(wù)B))賣(mài)出5張機(jī)票,如果正常操作,即事務(wù)A執(zhí)行完畢再執(zhí)行事務(wù)B
,則飛機(jī)票時(shí)不夠的。但是如果按照如下順序操作,則會(huì)有不同的結(jié)果:A訂票點(diǎn)(事務(wù)A)讀出航班目前的機(jī)票余額數(shù)R=10張;B訂票點(diǎn)(事務(wù)B)讀出航班目前的機(jī)票余額數(shù)R=10張;A訂票點(diǎn)賣(mài)出6張機(jī)票,修改機(jī)票余額數(shù)R=10-6=4,把R=4寫(xiě) 回到數(shù)據(jù)庫(kù);B訂票點(diǎn)賣(mài)出5張機(jī)票,修改機(jī)票余額數(shù)R=10-5=5,把R=5寫(xiě) 回到數(shù)據(jù)庫(kù);結(jié)果數(shù)據(jù)庫(kù)中的票數(shù)卻只少了5張,得到這種錯(cuò)誤的結(jié)果是由兩個(gè)事務(wù)并發(fā)操作引起的.第二十一頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制數(shù)據(jù)庫(kù)的并發(fā)操作導(dǎo)致的數(shù)據(jù)庫(kù)不一致性主要有以下四種:丟失修改(LostUpdate)污讀(DirtyRead)不可重讀(UnrepeatableRead)產(chǎn)生“幽靈”數(shù)據(jù)第二十二頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制1.丟失修改(LostUpdate)當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)做修改,并發(fā)執(zhí)行時(shí),
T2把T1或T1把T2的修改結(jié)果覆蓋掉。
第二十三頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制2.污讀(DirtyRead)事務(wù)T1更新了數(shù)據(jù)R,事務(wù)T2讀取了更新后的數(shù)據(jù)R,事務(wù)T1由于某種原因被撤消,修改無(wú)效,數(shù)據(jù)R恢復(fù)原值。事務(wù)T2得到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的內(nèi)容不一致,這種情況稱(chēng)為“污讀”。第二十四頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制3.不可重讀(UnrepeatableRead)事務(wù)T1讀取了數(shù)據(jù)后,事務(wù)T2更新了T1讀取的數(shù)據(jù),當(dāng)事務(wù)T1再讀取數(shù)據(jù)以進(jìn)行相同操作時(shí),得到的兩次值不一致,這種情況稱(chēng)為“不可重讀”。第二十五頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制4.產(chǎn)生“幽靈”數(shù)據(jù)實(shí)際屬于不可重復(fù)讀的范疇。指當(dāng)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中的部分記錄,或者在其中添加了部分記錄,則當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)其中莫名其妙地少了(對(duì)刪除)或多了(對(duì)插入)一些記錄。這樣的數(shù)據(jù)對(duì)T1來(lái)說(shuō)就是“幽靈”數(shù)據(jù)或稱(chēng)“幻影”數(shù)據(jù)。
產(chǎn)生上述四類(lèi)數(shù)據(jù)不一致性的主要原因就是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要求DBMS提供并發(fā)控制功能以正確的方法調(diào)度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫(kù)的完整性。第二十六頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制三.并發(fā)控制措施并發(fā)控制的主要方式是封鎖機(jī)制,即加鎖(Locking)。加鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)T對(duì)其要操作的數(shù)據(jù)具有了一定的控制權(quán),在事務(wù)T釋放它的鎖之前,其他事務(wù)不能操作這些數(shù)據(jù)。第二十七頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制共享鎖(ShareLock,又稱(chēng)讀鎖,,簡(jiǎn)稱(chēng)為S鎖)其采用的原理是允許其他用戶(hù)對(duì)同一數(shù)據(jù)對(duì)象進(jìn)行查詢(xún),但不能對(duì)該數(shù)據(jù)對(duì)象進(jìn)行修改。事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加了S鎖,則事務(wù)T可以讀A,但不能修改A,其它事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放了A上的S鎖。這就保證了其他事務(wù)在T釋放R上的S鎖之前,只能讀取R,而不能再對(duì)R作任何修改?;镜姆怄i類(lèi)型有兩種:排它鎖和共享鎖排它鎖(ExclusiveLock,又稱(chēng)寫(xiě)鎖,簡(jiǎn)稱(chēng)為X鎖)其采用的原理是禁止并發(fā)操作。事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加了X鎖,則允許T讀取和修改A,但不允許其它事務(wù)再對(duì)A加任何類(lèi)型的鎖和進(jìn)行任何操作。第二十八頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制四.封鎖協(xié)議封鎖可以保證合理的進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。在封鎖時(shí),要考慮一定的封鎖規(guī)則,例如,何時(shí)開(kāi)始封鎖、封鎖多長(zhǎng)時(shí)間、何時(shí)釋放等,這些封鎖規(guī)則稱(chēng)為封鎖協(xié)議。對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。封鎖協(xié)議在不同程序上對(duì)正確控制并發(fā)操作提供了一定的保證。上面講述過(guò)的并發(fā)操作所帶來(lái)的丟失更新、污讀和不可重讀等數(shù)據(jù)不一致性問(wèn)題,可以通過(guò)三級(jí)封鎖協(xié)議在不同程度上給予解決。第二十九頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制1.一級(jí)封鎖協(xié)議規(guī)則是:事務(wù)T在修改數(shù)據(jù)對(duì)象之前必須對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束時(shí)才釋放鎖。一級(jí)封鎖協(xié)議可以防止丟失修改。一級(jí)封鎖協(xié)議只有當(dāng)修改數(shù)據(jù)時(shí)才進(jìn)行加鎖,如果只是讀取數(shù)據(jù)并不加鎖,所以它不能防止“污讀”和“重讀”數(shù)據(jù)。例:事務(wù)T要對(duì)A進(jìn)行修改,因此在讀A之前先對(duì)A加X(jué)鎖其它事務(wù)必須等待第三十頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制事務(wù)T2t1t2t3t4事務(wù)T1時(shí)間(1)對(duì)A加X(jué)鎖獲得(2)讀A=16(3)要對(duì)A加X(jué)鎖等待(4)修改A=A-1A=15t6t7t8t5(5)釋放對(duì)A的X鎖(6)(7)(8)(9)等待獲得A對(duì)X的鎖讀A=15修改A=A-4寫(xiě)回A=11釋放A對(duì)X的鎖一級(jí)封鎖協(xié)議舉例第三十一頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制2.二級(jí)封鎖協(xié)議規(guī)則是:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后釋放S鎖。二級(jí)封鎖協(xié)議除了可以防止丟失修改外,還可以防止讀“臟”數(shù)據(jù)。在二級(jí)封鎖協(xié)議協(xié)議中,由于事務(wù)T讀完數(shù)據(jù)即釋放S鎖,因此,不能保證可重復(fù)讀數(shù)據(jù)。第三十二頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制(9)t1t2t3t4事務(wù)T1時(shí)間事務(wù)T2(1)對(duì)C加X(jué)鎖獲得(2)讀C=50(3)求C=C×2寫(xiě)回C=100要對(duì)C加S鎖等待(4)t6t7t8t5(5)回滾(6)釋放X鎖(7)(8)等待等待獲得C的S鎖讀C=50釋放C的S鎖二級(jí)封鎖協(xié)議舉例第三十三頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制3.三級(jí)封鎖協(xié)議規(guī)則是:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后并不釋放S鎖,而直到事務(wù)T結(jié)束才釋放。三級(jí)封鎖協(xié)議除了可以防止更新丟失問(wèn)題和“污讀”數(shù)據(jù)外,還可進(jìn)一步防止不可重讀數(shù)據(jù),徹底解決了并發(fā)操作所帶來(lái)的三個(gè)不一致性問(wèn)題。第三十四頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制讀B=100修改B=B*2寫(xiě)回B=200(3)(7)(1)對(duì)A、B分別加S鎖獲得(2)讀A=50,B=100
求A+B=150(4)讀A=50,B=100求A+B=150(5)將和值寫(xiě)入(6)釋放A的鎖釋放B的鎖(8)(9)t1t2t3t4事務(wù)T1時(shí)間事務(wù)T2等待t6t7t8t5等待等待獲得B的X鎖要對(duì)B加X(jué)鎖等待t9釋放對(duì)B的X鎖三級(jí)封鎖協(xié)議舉例第三十五頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制總結(jié):X鎖(對(duì)寫(xiě)數(shù)據(jù)S鎖(對(duì)只讀數(shù)據(jù))不丟失修改(寫(xiě))不讀臟數(shù)據(jù)(讀)可重復(fù)讀(讀)一級(jí)事務(wù)全程加鎖不加√二級(jí)事務(wù)全程加鎖事務(wù)開(kāi)始加,讀完即放√√三級(jí)事務(wù)全程加鎖事務(wù)全程加鎖√√√三個(gè)封鎖協(xié)議的主要區(qū)別在于:什么操作需要申請(qǐng)封鎖,以及何時(shí)釋放鎖。第三十六頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制五.死鎖圖6-8封鎖技術(shù)可有效解決并行操作的一致性問(wèn)題,但也可產(chǎn)生新的問(wèn)題,即死鎖問(wèn)題。在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,其中的每一個(gè)在它能夠進(jìn)行之前,都等待著某個(gè)數(shù)據(jù)、而這個(gè)數(shù)據(jù)已被它們中的某個(gè)事務(wù)所封鎖,這種狀態(tài)稱(chēng)為死鎖。第三十七頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制例如,事務(wù)T1封鎖了數(shù)據(jù)R1,事務(wù)T2封鎖了數(shù)據(jù)R2,然后T1又請(qǐng)求封鎖R2,由于T2封鎖了R2,因此T1等待T2釋放R2上的鎖,然后T2又請(qǐng)求封鎖R1,由于T1已經(jīng)封鎖了R1,因此T2也只能等待T1釋放R2上的鎖,此時(shí)T1和T2都在等待對(duì)方先釋放鎖,因而形成死鎖。t1t2t3t4事務(wù)T1時(shí)間事務(wù)T2(1)對(duì)R1加鎖(2)(3)請(qǐng)求對(duì)R2加鎖等待請(qǐng)求對(duì)R1加鎖等待(4)等待等待對(duì)R2加鎖第三十八頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制圖6-8死鎖一旦發(fā)生,系統(tǒng)效率將會(huì)大大下降,因而要盡量避免死鎖的發(fā)生。(1)一次封鎖法:每個(gè)事務(wù)一次將所有要使用的數(shù)據(jù)全部依次加鎖,并要求加鎖成功,只要一個(gè)加鎖不成功,表示本次加鎖失敗,則應(yīng)該立即釋放所有已加鎖成功的數(shù)據(jù)對(duì)象,然后重新開(kāi)始從頭加鎖。預(yù)防死鎖的方法有多種,常用的方法有兩種:第三十九頁(yè),共五十一頁(yè),2022年,8月28日YYNYN開(kāi)始加鎖加鎖第1個(gè)數(shù)據(jù)加鎖成功嗎?加鎖成功嗎?對(duì)第m個(gè)表加鎖加鎖成功嗎?加鎖第2個(gè)數(shù)據(jù)釋放所有已加鎖的數(shù)據(jù)N……一次加鎖成功一次加鎖法第四十頁(yè),共五十一頁(yè),2022年,8月28日前面發(fā)生死鎖的例子,可以通過(guò)一次加鎖法加以預(yù)防。事務(wù)T1啟動(dòng)后,立即對(duì)數(shù)據(jù)R1和R2依次加鎖,加鎖成功后,執(zhí)行T1,而事務(wù)T2等待。直到T1執(zhí)行完后釋放R1和R2上的鎖,T2繼續(xù)執(zhí)行。這樣就不會(huì)發(fā)生死鎖。一次加鎖法雖然可以有效地預(yù)防死鎖的發(fā)生,但也存在一些問(wèn)題。對(duì)某一事務(wù)所要使用的全部數(shù)據(jù)一次性加鎖,擴(kuò)大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。數(shù)據(jù)庫(kù)中的數(shù)據(jù)是不斷變化的,原來(lái)不要求封鎖的數(shù)據(jù),在執(zhí)行過(guò)程中可能會(huì)變成封鎖對(duì)象,所以很難事先精確地確定每個(gè)事務(wù)所要封鎖的數(shù)據(jù)對(duì)象,這樣只能在開(kāi)始擴(kuò)大封鎖范圍,將可能要封鎖的數(shù)據(jù)全部加鎖,這就進(jìn)一步降低了并發(fā)度,影響了系統(tǒng)的運(yùn)行效率。5.3并發(fā)控制第四十一頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制圖6-8(2)順序封鎖法:是預(yù)先對(duì)所有可加鎖的數(shù)據(jù)對(duì)象規(guī)定一個(gè)加鎖順序,每個(gè)事務(wù)都需要按此順序加鎖,在釋放時(shí),按逆序進(jìn)行。例如對(duì)于前面發(fā)生的死鎖,我們可以規(guī)定封鎖順序?yàn)镽1、R2,事務(wù)T1和T2都需要按此順序加鎖。T1先封鎖R1,再封鎖R2。當(dāng)T2再請(qǐng)求封鎖R1時(shí),因?yàn)門(mén)1已經(jīng)對(duì)R1加鎖,T2只能等待。待T1釋放R1后,T2再封鎖R1,則不會(huì)發(fā)生死鎖。順序加鎖法同一次加鎖法一樣,也存在一些問(wèn)題。因?yàn)槭聞?wù)的封鎖請(qǐng)求可以隨著事務(wù)的執(zhí)行而動(dòng)態(tài)地決定,所以很難事先確定封鎖對(duì)象,從而更難確定封鎖順序。即使確定了封鎖順序,隨著數(shù)據(jù)操作的不斷變化,維護(hù)這些數(shù)據(jù)的封鎖順序要需要很大的系統(tǒng)開(kāi)銷(xiāo)。第四十二頁(yè),共五十一頁(yè),2022年,8月28日5.3并發(fā)控制上述兩種在操作系統(tǒng)中廣泛使用的預(yù)防死鎖的方法并不很適合數(shù)據(jù)庫(kù)的特點(diǎn)。一般情況下,在數(shù)據(jù)庫(kù)系統(tǒng)中,可以允許發(fā)生死鎖,在死鎖發(fā)生后可以自動(dòng)診斷并解除死鎖。數(shù)據(jù)庫(kù)系統(tǒng)中診斷死鎖的方法與操作系統(tǒng)類(lèi)似。如果已經(jīng)發(fā)現(xiàn)死鎖,DBA從依賴(lài)相同資源的事務(wù)中抽出某個(gè)事務(wù)作為犧牲品,將它撤銷(xiāo),解除它的所有封鎖,釋放此事務(wù)占用的所有數(shù)據(jù)資源,分配給其他事務(wù),使其他事務(wù)得以繼續(xù)運(yùn)行下去,這樣就有可能消除死鎖。在解除死鎖的過(guò)程中,抽取犧牲事務(wù)的標(biāo)準(zhǔn)是根據(jù)系統(tǒng)狀態(tài)及其應(yīng)用的實(shí)際情況來(lái)確定的,通常采用的方法之一是選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷(xiāo)。不重要的用戶(hù),取消其操作,釋放封鎖的數(shù)據(jù),恢復(fù)對(duì)數(shù)據(jù)庫(kù)所作的改變。第四十三頁(yè),共五十一頁(yè),2022年,8月28日5.4數(shù)據(jù)庫(kù)的恢復(fù)圖6-8
一.數(shù)據(jù)庫(kù)備份數(shù)據(jù)庫(kù)備份指定期或不定期地對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行復(fù)制,可以將數(shù)據(jù)復(fù)制到本地機(jī)器上,也可以復(fù)制到其它機(jī)器上,備份的介質(zhì)可以是磁帶也可以是磁盤(pán)。 在制定備份策略時(shí),應(yīng)考慮如下幾個(gè)方面:備份的內(nèi)容備份數(shù)據(jù)庫(kù)應(yīng)備份數(shù)據(jù)庫(kù)中的表(結(jié)構(gòu))、數(shù)據(jù)庫(kù)用戶(hù)(包括用戶(hù)和用戶(hù)操作權(quán))、用戶(hù)定義的數(shù)據(jù)庫(kù)對(duì)象和數(shù)據(jù)庫(kù)中的全部數(shù)據(jù)。而且還應(yīng)該備份數(shù)據(jù)庫(kù)日志等內(nèi)容。備份頻率不同的數(shù)據(jù)庫(kù)管理系統(tǒng)提供的備份種類(lèi)不同。通常情況下,數(shù)據(jù)庫(kù)每周備份一次,事務(wù)日志每日備份一次。對(duì)于一些主要的聯(lián)機(jī)事務(wù)處理數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)可每日備份一次,事務(wù)日志每隔數(shù)小時(shí)備份一次。
第四十四頁(yè),共五十一頁(yè),2022年,8月28日5.4數(shù)據(jù)庫(kù)的恢復(fù)圖6-8
二.數(shù)據(jù)庫(kù)恢復(fù)的含義雖然數(shù)據(jù)庫(kù)系統(tǒng)中已采取一定的措施,來(lái)防止數(shù)據(jù)庫(kù)的安全性和完整性的破壞,保證并發(fā)事務(wù)的正確執(zhí)行,但數(shù)據(jù)庫(kù)中的數(shù)據(jù)仍然無(wú)法保證絕對(duì)不遭受破壞,比如計(jì)算機(jī)系統(tǒng)中硬件的故障、軟件的的錯(cuò)誤,操作員的失誤,惡意的破壞等都有可能發(fā)生,這些故障的發(fā)生影響數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性,甚至可能破壞數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)中的數(shù)據(jù)全部或部分丟失。系統(tǒng)必須具有檢測(cè)故障并把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)中恢復(fù)到某一正確狀態(tài)的功能,這就是數(shù)據(jù)庫(kù)的恢復(fù)。第四十五頁(yè),共五十一頁(yè),2022年,8月28日5.4數(shù)據(jù)庫(kù)的恢復(fù)圖6-8三.恢復(fù)策略(1)事務(wù)故障的恢復(fù)
事務(wù)故障是指事務(wù)在運(yùn)行到正常結(jié)束前被終止,這時(shí)恢復(fù)子系統(tǒng)可以利用日志文件撤消(Undo)此事務(wù)對(duì)數(shù)據(jù)庫(kù)已進(jìn)行的修改。
日志文件是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。日志文件內(nèi) 容包括事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù))、操作類(lèi)型(插、刪或改)、 操作前后的數(shù)據(jù)值等。目的是為數(shù)據(jù)庫(kù)的恢復(fù)保留詳細(xì)的數(shù)據(jù)?;謴?fù)的過(guò)程為:反向掃描日志文件并執(zhí)行相應(yīng)操作的逆操作
事務(wù)故障的恢復(fù)是由系統(tǒng)自動(dòng)完成的,對(duì)用戶(hù)是透明的。數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中可能會(huì)出現(xiàn)各種各樣的故障,這些故障可分為以下三類(lèi):事務(wù)故障、系統(tǒng)故障和介質(zhì)故障。根據(jù)故障類(lèi)型的不同,應(yīng)該采取不同的恢復(fù)策略。第四十六頁(yè),共五十一頁(yè),2022年,8月28日5.4數(shù)據(jù)庫(kù)的恢復(fù)圖6-8三.恢復(fù)策略(2)系統(tǒng)故障的恢復(fù)系統(tǒng)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于某種原因,造成系統(tǒng)停止運(yùn)轉(zhuǎn),致使所有正在運(yùn)行的事務(wù)都以非正常方式終止,要求系統(tǒng)重新啟動(dòng)引起系統(tǒng)故障的原因可能有:硬件錯(cuò)誤如CPU故障、操作系統(tǒng)或DBMS代碼錯(cuò)誤、突然斷電等系統(tǒng)故障造成數(shù)據(jù)庫(kù)不一致?tīng)顟B(tài)的原因有兩個(gè):未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新可能已寫(xiě)入數(shù)據(jù)庫(kù)已提交事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新可能還留在緩沖區(qū)中未寫(xiě)入數(shù)據(jù)庫(kù)系統(tǒng)故障的恢復(fù)是系統(tǒng)在重啟時(shí)自動(dòng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 氣體冷卻器的課程設(shè)計(jì)
- 混凝土梁的課程設(shè)計(jì)
- 支撐座模具課程設(shè)計(jì)文檔
- 智能考勤機(jī)課程設(shè)計(jì)zigbee
- 喜怒哀樂(lè)動(dòng)漫課程設(shè)計(jì)
- 插畫(huà)師課程設(shè)計(jì)
- 松動(dòng)爆破課程設(shè)計(jì)
- 父愛(ài)深深課程設(shè)計(jì)
- 2024年外語(yǔ)學(xué)習(xí)機(jī)項(xiàng)目可行性研究報(bào)告
- 溫度傳感器verilog課程設(shè)計(jì)
- 工程質(zhì)量保證體系和保證措施
- 豐田工作方法精髓-問(wèn)題解決法(八步法)剖析(課堂PPT)
- 水廠管網(wǎng)工程施工管理工作報(bào)告doc
- 綜合美食廣場(chǎng)招商方法
- 廣州三年級(jí)上冊(cè)英語(yǔ)期末復(fù)習(xí)知識(shí)歸類(lèi)
- 排序算法集成-杉杉
- 產(chǎn)品報(bào)價(jià)審批表
- 基于s7200狹窄隧道汽車(chē)雙向行的plc控制
- 青年教師培養(yǎng)策略的研究
- 新課程設(shè)計(jì)報(bào)告
- 上海中考考綱單詞和短語(yǔ)詞組(配音標(biāo))
評(píng)論
0/150
提交評(píng)論