




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1數(shù)據(jù)庫系統(tǒng)概論AnIntroductiontoDatabaseSystem第六章數(shù)據(jù)數(shù)據(jù)庫的安全與控制庫安全性12第六章數(shù)據(jù)庫安全性學(xué)習(xí)目的與要求在數(shù)據(jù)庫的使用過程中保證數(shù)據(jù)的安全可靠、正確可用是有效使用數(shù)據(jù)庫的前提。為了防止數(shù)據(jù)庫被破壞,數(shù)據(jù)庫管理系統(tǒng)提供了相應(yīng)的功能:
1.安全性保護(hù)2.數(shù)據(jù)庫恢復(fù)3.并發(fā)控制4.完整性保護(hù)
通過的本章的學(xué)習(xí),了解數(shù)據(jù)的安全性控制的措施,理解完整性的約束條件和控制機(jī)制,理解并發(fā)控制的原則和方法,了解數(shù)據(jù)庫恢復(fù)技術(shù)。2第六章數(shù)據(jù)庫安全性學(xué)習(xí)目的與要求6.1數(shù)據(jù)庫安全性數(shù)據(jù)庫的一大特點(diǎn)是數(shù)據(jù)可以共享,但數(shù)據(jù)共享必然帶來數(shù)據(jù)庫的安全性問題。數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄露、更改或破壞。數(shù)據(jù)庫的安全性和計(jì)算機(jī)系統(tǒng)的安全性,包括計(jì)算機(jī)硬件、操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等的安全性,是緊密聯(lián)系、相互支持的。計(jì)算機(jī)系統(tǒng)的安全性問題可分為三大類:技術(shù)安全類、管理安全類、政策法律類。本書只討論技術(shù)安全。6.1數(shù)據(jù)庫安全性數(shù)據(jù)庫的一大特點(diǎn)是數(shù)據(jù)可以共享,但數(shù)據(jù)共46.1.1數(shù)據(jù)庫安全性控制在計(jì)算機(jī)系統(tǒng)中的安全措施是一級(jí)一級(jí)設(shè)置的。
圖6.1數(shù)據(jù)庫系統(tǒng)的安全模式46.1.1數(shù)據(jù)庫安全性控制在計(jì)算機(jī)系統(tǒng)中的安全措56.1.1數(shù)據(jù)庫安全性控制1.用戶標(biāo)識(shí)和鑒別用戶標(biāo)識(shí)和鑒別是系統(tǒng)提供的最外層安全保護(hù)措施。其方法是由系統(tǒng)提供一定的方式讓用戶標(biāo)識(shí)自己的名字或身份。每次用戶要求進(jìn)入系統(tǒng)時(shí),由系統(tǒng)進(jìn)行核對,通過鑒定后才提供機(jī)器使用權(quán)。常用的方法有:用戶標(biāo)識(shí):標(biāo)明用戶身份,以系統(tǒng)鑒別用戶的合法性??诹睿合到y(tǒng)核對口令以鑒別用戶身份。隨機(jī)數(shù):用戶預(yù)先約定好一個(gè)計(jì)算過程或者函數(shù),根據(jù)計(jì)算結(jié)果鑒別用戶身份。56.1.1數(shù)據(jù)庫安全性控制1.用戶標(biāo)識(shí)和鑒別66.1.1數(shù)據(jù)庫安全性控制2.存取控制數(shù)據(jù)庫系統(tǒng)的存取控制機(jī)制就是確保只授權(quán)給有資格的用戶訪問數(shù)據(jù)庫的權(quán)限,令所有未被授權(quán)的用戶無法接近數(shù)據(jù)庫。存取控制機(jī)制由定義和檢查用戶權(quán)限兩部分組成。定義用戶權(quán)限在數(shù)據(jù)庫系統(tǒng)中對存取權(quán)限的定義稱為授權(quán)。授權(quán)定義經(jīng)過編譯后存放在數(shù)據(jù)字典中。66.1.1數(shù)據(jù)庫安全性控制2.存取控制76.1.1數(shù)據(jù)庫安全性控制合法權(quán)限檢查對于獲得上機(jī)權(quán)又進(jìn)一步發(fā)出存取數(shù)據(jù)操作的用戶,系統(tǒng)根據(jù)事先定義好的存取權(quán)限進(jìn)行合法權(quán)檢查,若用戶的操作超出了定義的權(quán)限,系統(tǒng)將拒絕此操作。76.1.1數(shù)據(jù)庫安全性控制86.1.1數(shù)據(jù)庫安全性控制常用存取控制方法自主存取控制(簡稱DAC)用戶對于不同的數(shù)據(jù)庫對象有不同的存取權(quán)限,不同的用戶對同一對象也有不同的權(quán)限,而且用戶還可將其擁有的存取權(quán)限轉(zhuǎn)授給其他用戶,非常靈活
。強(qiáng)制存取控制(簡稱MAC)在MAC方法中,每一個(gè)數(shù)據(jù)庫對象被標(biāo)以一定的密級(jí),每一個(gè)用戶也被授于某一級(jí)別的許可證。對任一數(shù)據(jù)庫對象,只有具有合法許可證的用戶才可存取。86.1.1數(shù)據(jù)庫安全性控制常用存取控制方法96.1.2
視圖機(jī)制
視圖機(jī)制為不同用戶定義不同的視圖,把數(shù)據(jù)對象限制在一定的范圍內(nèi),把要保密的數(shù)據(jù)對無權(quán)存取的用戶隱藏起來,從而自動(dòng)地對數(shù)據(jù)提供一定程度的安全保護(hù)。優(yōu)點(diǎn)簡單性視圖不僅可以簡化用戶對數(shù)據(jù)的理解,也可以簡化他們的操作。安全性通過視圖用戶只能查詢和修改他們所能見到的數(shù)據(jù)邏輯數(shù)據(jù)獨(dú)立性視圖可以使應(yīng)用程序和數(shù)據(jù)庫表在一定程度上獨(dú)立。
96.1.2視圖機(jī)制視圖機(jī)制為不同用戶定義不同的視106.1.2
視圖機(jī)制缺點(diǎn)性能:SQLServer必須把視圖的查詢轉(zhuǎn)化成對基本表的查詢,將花費(fèi)一定的時(shí)間。修改限制:當(dāng)用戶修改視圖的某些行時(shí),SQL必須把它轉(zhuǎn)化為對基本表的某些行的修改。簡單視圖,這是很方便的;比較復(fù)雜的視圖,將可能是不可修改的。總結(jié):在定義數(shù)據(jù)庫對象時(shí),權(quán)衡視圖的優(yōu)點(diǎn)和缺點(diǎn),合理地定義視圖106.1.2視圖機(jī)制缺點(diǎn)116.1.3數(shù)據(jù)加密可以采用數(shù)據(jù)加密的技術(shù),防止數(shù)據(jù)庫中的數(shù)據(jù)在存儲(chǔ)和傳輸過程中丟失。加密方法替換方法:使用密鑰(EncryptionKey)將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的一個(gè)字符置換方法:將明文的字符按不同的順序重新排列。116.1.3數(shù)據(jù)加密可以采用數(shù)據(jù)加密的技術(shù),防止126.1.3數(shù)據(jù)加密加密算法對稱式加密:對加密和解密使用相同的密鑰。非對稱密鑰加密:使用一組公共/私人密鑰系統(tǒng),加密時(shí)使用一種密鑰,解密時(shí)使用另一種密鑰。數(shù)字證書:是一種非對稱密鑰加密,但一個(gè)組織可以使用證書并通過數(shù)字簽名將一組公鑰和私鑰與其擁有者相關(guān)聯(lián)。
126.1.3數(shù)據(jù)加密136.2事務(wù)機(jī)制6.2.1事務(wù)的概念與特性1.定義事務(wù)是在數(shù)據(jù)庫中用戶定義的一個(gè)或多個(gè)操作序列,它必須以原子的方式執(zhí)行,也就是說這些操作要么全做要么全不做,是一個(gè)不可分割的工作單位。2.事務(wù)和程序關(guān)系一個(gè)應(yīng)用程序可以包含多個(gè)事務(wù);一個(gè)事務(wù)可以是一條SQL語句、一組SQL語句或整個(gè)程序。136.2事務(wù)機(jī)制6.2.1事務(wù)的概念與特性6.2.1事務(wù)的概念與特性3.事務(wù)的(ACID)特性原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)保證事務(wù)的ACID特性是事務(wù)處理的重要任務(wù)。146.2.1事務(wù)的概念與特性3.事務(wù)的(ACID)特性原子性156.2.2事務(wù)的提交與回退事務(wù)是恢復(fù)和并發(fā)控制的基本單位。事務(wù)的開始與結(jié)束可以由用戶顯式控制,通常是以BEGINTRANSACTION開始,以COMMIT或ROLLBACK結(jié)束。
156.2.2事務(wù)的提交與回退166.2.2事務(wù)的提交與回退
BEGINTRANSACTIONBEGINTRANSACTIONSQL語句1SQL語句1SQL語句2SQL語句2…………COMMITROLLBACK表6.1事務(wù)的定義SQL語句COMMIT(提交)使事務(wù)成功地結(jié)束。
SQL語句ROLLBACK(回退)使事務(wù)不成功終止。
166.2.2事務(wù)的提交與回退BEGINTRANSACT6.3數(shù)據(jù)庫恢復(fù)故障是不可避免的系統(tǒng)故障:計(jì)算機(jī)軟、硬件故障人為故障:操作員的失誤、惡意的破壞等。數(shù)據(jù)庫的恢復(fù)把數(shù)據(jù)庫從錯(cuò)誤狀態(tài)恢復(fù)到某一正確狀態(tài)的過程稱為數(shù)據(jù)庫的恢復(fù)。176.3數(shù)據(jù)庫恢復(fù)故障是不可避免的數(shù)據(jù)庫的恢復(fù)176.3.1
數(shù)據(jù)庫的故障分類1.事務(wù)內(nèi)部的故障
事務(wù)故障是指事務(wù)在運(yùn)行過程中被非正常終止,即事務(wù)內(nèi)部發(fā)生故障??深A(yù)期的事務(wù)故障應(yīng)用程序可以發(fā)現(xiàn)并執(zhí)行ROLLBACK語句讓事務(wù)滾回,撤銷已作的修改,使恢復(fù)數(shù)據(jù)庫到正確狀態(tài)。186.3.1數(shù)據(jù)庫的故障分類1.事務(wù)內(nèi)部的故障186.3.1
數(shù)據(jù)庫的故障分類非預(yù)期的事務(wù)故障事務(wù)內(nèi)部更多的故障是非預(yù)期的,不能由應(yīng)用程序處理的。例如,運(yùn)算溢出、并發(fā)事務(wù)發(fā)生死鎖、違反了某些完整性限制等,造成事務(wù)的非正常結(jié)束。意味著事務(wù)沒有達(dá)到預(yù)期的終點(diǎn),使數(shù)據(jù)庫可能處于不正確的狀態(tài)。事務(wù)故障僅指非預(yù)期的故障。事務(wù)故障的恢復(fù)策略
DBMS的恢復(fù)程序要強(qiáng)行回滾(ROLLBACK)該事務(wù),將數(shù)據(jù)庫恢復(fù)到修改前的初始狀態(tài)。這類恢復(fù)操作稱為事務(wù)撤銷(UNDO)。196.3.1數(shù)據(jù)庫的故障分類非預(yù)期的事務(wù)故障196.3.1
數(shù)據(jù)庫的故障分類2.系統(tǒng)故障系統(tǒng)故障常稱為軟故障,是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,使得系統(tǒng)要重新啟動(dòng)。特定類型的硬件錯(cuò)誤、操作系統(tǒng)故障、DBMS代碼錯(cuò)誤、系統(tǒng)斷電等。均可能導(dǎo)致下列情況發(fā)生:所有正在運(yùn)行的事務(wù)都非正常終止,數(shù)據(jù)庫緩沖區(qū)(內(nèi)存)中的內(nèi)容都被丟失。一些尚未完成的事務(wù)的結(jié)果可能已送入物理數(shù)據(jù)庫,從而造成數(shù)據(jù)庫可能處于不正確的狀態(tài)。這類故障影響正在運(yùn)行的所有事務(wù),但不破壞數(shù)據(jù)庫。206.3.1數(shù)據(jù)庫的故障分類2.系統(tǒng)故障206.3.1
數(shù)據(jù)庫的故障分類系統(tǒng)故障的恢復(fù)策略系統(tǒng)重新啟動(dòng)時(shí),必須對非正常終止的事務(wù)進(jìn)行處理,把數(shù)據(jù)庫恢復(fù)到正確狀態(tài)。具體處理兩種情況:(1)發(fā)生系統(tǒng)故障時(shí),事務(wù)尚未提交?;謴?fù)策略:強(qiáng)行撤消(UNDO)。(2)發(fā)生系統(tǒng)故障時(shí),事務(wù)已經(jīng)提交,但更新結(jié)果還保留在緩沖區(qū)中尚未寫入到磁盤上。恢復(fù)策略:重做(REDO)。216.3.1數(shù)據(jù)庫的故障分類系統(tǒng)故障的恢復(fù)策略216.3.1
數(shù)據(jù)庫的故障分類3.介質(zhì)故障介質(zhì)故障常稱為硬故障。這類故障比前兩類故障發(fā)生的可能性小得多,但破壞性最大。這類故障將破壞數(shù)據(jù)庫全部或部分?jǐn)?shù)據(jù)庫,并影響正在存取這部分?jǐn)?shù)據(jù)的所有事務(wù)。外存故障故障的原因:磁盤損壞磁頭碰撞瞬時(shí)強(qiáng)磁場干擾226.3.1數(shù)據(jù)庫的故障分類3.介質(zhì)故障226.3.1
數(shù)據(jù)庫的故障分類介質(zhì)故障的恢復(fù)策略重裝后備副本;重做轉(zhuǎn)儲(chǔ)后的所有成功事務(wù),將這些事務(wù)已提交的結(jié)果重新記入數(shù)據(jù)庫。使數(shù)據(jù)庫恢復(fù)到發(fā)生介質(zhì)故障前某個(gè)時(shí)刻的一致狀態(tài)。236.3.1數(shù)據(jù)庫的故障分類介質(zhì)故障的恢復(fù)策略236.3.1
數(shù)據(jù)庫的故障分類4.計(jì)算機(jī)病毒一種人為的故障或破壞,是一些惡作劇者研制的一種計(jì)算機(jī)程序。危害破壞、盜竊系統(tǒng)中的數(shù)據(jù)破壞系統(tǒng)文件因此,數(shù)據(jù)庫一旦被破壞仍要使用恢復(fù)技術(shù)加以恢復(fù)。246.3.1數(shù)據(jù)庫的故障分類4.計(jì)算機(jī)病毒246.3.2
數(shù)據(jù)庫恢復(fù)策略數(shù)據(jù)庫恢復(fù)操作的基本原理:利用冗余數(shù)據(jù)。恢復(fù)機(jī)制涉及的關(guān)鍵問題如何建立冗余數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)(backup)登記日志文件(logging)如何利用冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫恢復(fù)后備副本結(jié)合日志文件,把數(shù)據(jù)庫恢復(fù)到某一時(shí)刻的正確狀態(tài)。
256.3.2數(shù)據(jù)庫恢復(fù)策略數(shù)據(jù)庫恢復(fù)操作的基本原理:利用冗6.3.2
數(shù)據(jù)庫恢復(fù)策略1.數(shù)據(jù)轉(zhuǎn)儲(chǔ)定義轉(zhuǎn)儲(chǔ)是指DBA將整個(gè)數(shù)據(jù)庫復(fù)制到磁帶或另一個(gè)磁盤上保存起來的過程。備用的數(shù)據(jù)稱為后備副本或后援副本。如何轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫遭到破壞后可以將后備副本重新裝入,但只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài)恢復(fù)到故障發(fā)生時(shí)的狀態(tài),必須重新運(yùn)行自轉(zhuǎn)儲(chǔ)以后的所有更新事務(wù)。266.3.2數(shù)據(jù)庫恢復(fù)策略1.數(shù)據(jù)轉(zhuǎn)儲(chǔ)266.3.2
數(shù)據(jù)庫恢復(fù)策略正常運(yùn)行轉(zhuǎn)儲(chǔ)運(yùn)行事務(wù)恢復(fù)重裝后備副本重新運(yùn)行事務(wù)TaTbT3圖6.2轉(zhuǎn)儲(chǔ)和恢復(fù)故障發(fā)生點(diǎn)276.3.2數(shù)據(jù)庫恢復(fù)策略正常運(yùn)行轉(zhuǎn)儲(chǔ)運(yùn)行事務(wù)恢復(fù)重裝后備副6.3.2
數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲(chǔ)的分類轉(zhuǎn)儲(chǔ)狀態(tài)靜態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)方式海量轉(zhuǎn)儲(chǔ)靜態(tài)海量轉(zhuǎn)儲(chǔ)動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ)增量轉(zhuǎn)儲(chǔ)靜態(tài)增量轉(zhuǎn)儲(chǔ)動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ)表6.2轉(zhuǎn)儲(chǔ)分類286.3.2數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲(chǔ)的分類轉(zhuǎn)儲(chǔ)狀態(tài)靜態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)6.3.2
數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲(chǔ)的方法
靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ)是指在系統(tǒng)中無運(yùn)行事務(wù)時(shí)進(jìn)行數(shù)據(jù)的轉(zhuǎn)儲(chǔ)操作。優(yōu)點(diǎn):實(shí)現(xiàn)簡單缺點(diǎn):降低了數(shù)據(jù)庫的可用性
轉(zhuǎn)儲(chǔ)必須等待正在運(yùn)行的事務(wù)結(jié)束;新的事務(wù)必須等轉(zhuǎn)儲(chǔ)結(jié)束才能運(yùn)行。296.3.2數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲(chǔ)的方法296.3.2
數(shù)據(jù)庫恢復(fù)策略圖6.3靜態(tài)轉(zhuǎn)儲(chǔ)與恢復(fù)306.3.2數(shù)據(jù)庫恢復(fù)策略圖6.3靜態(tài)轉(zhuǎn)儲(chǔ)與恢復(fù)306.3.2
數(shù)據(jù)庫恢復(fù)策略
動(dòng)態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)是指轉(zhuǎn)儲(chǔ)期間允許對數(shù)據(jù)庫進(jìn)行存取或修改。即轉(zhuǎn)儲(chǔ)和用戶事務(wù)可以并發(fā)執(zhí)行。優(yōu)點(diǎn):轉(zhuǎn)儲(chǔ)不用等待正在運(yùn)行的用戶事務(wù)結(jié)束;轉(zhuǎn)儲(chǔ)不影響新事務(wù)的運(yùn)行。缺點(diǎn):不能保證后備副本中的數(shù)據(jù)正確有效。316.3.2數(shù)據(jù)庫恢復(fù)策略動(dòng)態(tài)轉(zhuǎn)儲(chǔ)316.3.2
數(shù)據(jù)庫恢復(fù)策略圖6.4動(dòng)態(tài)轉(zhuǎn)儲(chǔ)與恢復(fù)326.3.2數(shù)據(jù)庫恢復(fù)策略圖6.4動(dòng)態(tài)轉(zhuǎn)儲(chǔ)與恢復(fù)326.3.2
數(shù)據(jù)庫恢復(fù)策略利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)得到的副本進(jìn)行故障恢復(fù),需要把動(dòng)態(tài)轉(zhuǎn)儲(chǔ)期間各事務(wù)對數(shù)據(jù)庫的修改活動(dòng)登記下來,建立日志文件。后備副本加上日志文件才能把數(shù)據(jù)庫恢復(fù)到某一時(shí)刻的正確狀態(tài)。336.3.2數(shù)據(jù)庫恢復(fù)策略利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)得到的副本進(jìn)行故障恢6.3.2
數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲(chǔ)的方式動(dòng)態(tài)轉(zhuǎn)儲(chǔ):每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫。增量轉(zhuǎn)儲(chǔ):只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后更新過的數(shù)據(jù)。海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ)比較從恢復(fù)角度看,使用海量轉(zhuǎn)儲(chǔ)得到的后備副本進(jìn)行恢復(fù)更方便。如果數(shù)據(jù)庫很大,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲(chǔ)方式更實(shí)用更有效。346.3.2數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲(chǔ)的方式346.3.2
數(shù)據(jù)庫恢復(fù)策略2.登記日志文件什么是日志文件
日志文件(log)是用來記錄事務(wù)對數(shù)據(jù)庫更新操作的文件。日志文件的格式以記錄為單位的日志文件以數(shù)據(jù)塊為單位的日志文件356.3.2數(shù)據(jù)庫恢復(fù)策略2.登記日志文件356.3.2
數(shù)據(jù)庫恢復(fù)策略以記錄為單位的日志文件內(nèi)容每個(gè)事務(wù)的開始標(biāo)記(BEGINTRANSACTION)每個(gè)事務(wù)的結(jié)束標(biāo)記(COMMIT或ROLLBACK)每個(gè)事務(wù)的所有更新操作以上均作為日志文件中的一個(gè)日志記錄。366.3.2數(shù)據(jù)庫恢復(fù)策略以記錄為單位的日志文件內(nèi)容366.3.2
數(shù)據(jù)庫恢復(fù)策略以記錄為單位的日志文件,每條日志記錄的內(nèi)容事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù))操作類型(插入、刪除或修改)操作對象(記錄內(nèi)部標(biāo)識(shí))更新前數(shù)據(jù)的舊值(對插入操作而言,此項(xiàng)為空值)更新后數(shù)據(jù)的新值(對刪除操作而言,此項(xiàng)為空值)376.3.2數(shù)據(jù)庫恢復(fù)策略以記錄為單位的日志文件,每條日志記6.3.2
數(shù)據(jù)庫恢復(fù)策略日志文件的作用日志文件可用來進(jìn)行事務(wù)故障和系統(tǒng)故障的恢復(fù),并協(xié)助后備副本進(jìn)行介質(zhì)故障恢復(fù)。具體作用:進(jìn)行事務(wù)故障恢復(fù);進(jìn)行系統(tǒng)故障恢復(fù);在動(dòng)態(tài)轉(zhuǎn)儲(chǔ)方式中,協(xié)助后備副本進(jìn)行介質(zhì)故障恢復(fù);與靜態(tài)轉(zhuǎn)儲(chǔ)后備副本配合進(jìn)行介質(zhì)故障恢復(fù)。386.3.2數(shù)據(jù)庫恢復(fù)策略日志文件的作用386.3.2
數(shù)據(jù)庫恢復(fù)策略登記日志文件必須遵守兩條基本原則登記的次序嚴(yán)格按并行事務(wù)執(zhí)行的時(shí)間次序
;必須先執(zhí)行寫日志文件操作,然后執(zhí)行寫數(shù)據(jù)庫操作。修改的記錄Ri…………數(shù)據(jù)庫緩沖區(qū)日志文件數(shù)據(jù)庫①②396.3.2數(shù)據(jù)庫恢復(fù)策略登記日志文件必須遵守兩條基本原則修6.3.2
數(shù)據(jù)庫恢復(fù)策略為什么要先寫日志文件寫數(shù)據(jù)庫和寫日志文件是兩個(gè)不同的操作;在這兩個(gè)操作之間可能發(fā)生故障,如果先寫了數(shù)據(jù)庫修改,而在日志文件中沒有登記下這個(gè)修改,則以后就無法恢復(fù)這個(gè)修改了;如果先寫日志,但沒有修改數(shù)據(jù)庫,按日志文件恢復(fù)時(shí)只不過是多執(zhí)行一次不必要的UNDO操作,但不會(huì)影響數(shù)據(jù)庫的正確性。406.3.2數(shù)據(jù)庫恢復(fù)策略為什么要先寫日志文件40AnIntroductiontoDatabaseSystem6.3.3故障種類與恢復(fù)方法1事務(wù)故障的恢復(fù)2系統(tǒng)故障的恢復(fù)3介質(zhì)故障的恢復(fù)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3故障種類與恢復(fù)方法
1.事務(wù)故障的恢復(fù)
事務(wù)故障是指事務(wù)在運(yùn)行至正常結(jié)束點(diǎn)之前被終止?;謴?fù)子系統(tǒng)利用日志文件撤消(UNDO)此事務(wù)已對數(shù)據(jù)庫進(jìn)行的修改。事務(wù)故障的恢復(fù)步驟①反向掃描日志文件(即從最后向前掃描日志文件)查找該事務(wù)的更新操作
AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3故障種類與恢復(fù)方法②對該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫。插入操作,“更新前的值”為空,則相當(dāng)于做刪除操作;刪除操作,“更新后的值”為空,則相當(dāng)于做插入操作;修改操作,用修改前值代替修改后值。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3故障種類與恢復(fù)方法③繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做同樣處理。④如此處理下去,直至讀到此事務(wù)的開始標(biāo)記,事務(wù)故障恢復(fù)就完成了。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3
故障種類與恢復(fù)方法2.系統(tǒng)故障的恢復(fù)
系統(tǒng)故障是指導(dǎo)致系統(tǒng)停止運(yùn)行的事件,使系統(tǒng)需重新啟動(dòng)。系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因未完成事務(wù)對數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)庫;已提交事務(wù)對數(shù)據(jù)庫的更新可能還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫。恢復(fù)方法UNDO故障發(fā)生時(shí)未完成的事務(wù);REDO已完成的事務(wù)。系統(tǒng)故障的恢復(fù)由系統(tǒng)在重新啟動(dòng)時(shí)自動(dòng)完成,不需要用戶干預(yù)。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3
故障種類與恢復(fù)方法系統(tǒng)故障的恢復(fù)步驟⑴正向掃描日志文件(即從頭掃描日志文件)撤銷(UNDO)隊(duì)列:找出故障發(fā)生時(shí)尚未完成的事務(wù)(只有BEGINTRANSACTION記錄,而無COMMIT記錄),將其事務(wù)標(biāo)記記入撤銷(UNDO)隊(duì)列。重做(REDO)隊(duì)列:找出故障發(fā)生前已經(jīng)提交的事務(wù)(既有BEGINTRANSACTION記錄,也有COMMIT記錄),將其事務(wù)標(biāo)記記入重做(REDO)隊(duì)列;AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3
故障種類與恢復(fù)方法⑵
對撤銷隊(duì)列事務(wù)進(jìn)行撤銷(UNDO)處理反向掃描日志文件,對每個(gè)UNDO事務(wù)的更新操作執(zhí)行逆操作,即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫⑶對重做隊(duì)列事務(wù)進(jìn)行重做(REDO)處理正向掃描日志文件,對每個(gè)REDO事務(wù)重新執(zhí)行日志文件登記的操作,即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3
故障種類與恢復(fù)方法1.介質(zhì)故障的恢復(fù)介質(zhì)故障是最嚴(yán)重的一種故障。發(fā)生介質(zhì)故障后,磁盤上的物理數(shù)據(jù)和日志文件被破壞?;謴?fù)的方法重裝數(shù)據(jù)庫副本;重做(REDO)已完成的事務(wù)。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3故障種類與恢復(fù)方法恢復(fù)步驟
⑴裝入最新的數(shù)據(jù)庫后備副本(離故障發(fā)生時(shí)刻最近的轉(zhuǎn)儲(chǔ)副本),使數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài)。對于靜態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本,裝入后數(shù)據(jù)庫即處于一致性狀態(tài)。對于動(dòng)態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本,還需同時(shí)裝入轉(zhuǎn)儲(chǔ)開始時(shí)刻的日志文件副本,利用恢復(fù)系統(tǒng)故障的方法(即REDO+UNDO),才能將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3
故障種類與恢復(fù)方法
⑵裝入有關(guān)的日志文件副本(轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的日志文件副本),重做已完成的事務(wù)。首先掃描日志文件,找出故障發(fā)生時(shí)已提交的事務(wù)的標(biāo)識(shí),將其記入重做隊(duì)列;對重做隊(duì)列中的所有事務(wù)進(jìn)行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3
故障種類與恢復(fù)方法介質(zhì)故障的恢復(fù)需要DBA介入DBA的工作重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本和有關(guān)的各日志文件副本;執(zhí)行系統(tǒng)提供的恢復(fù)命令。
具體的恢復(fù)操作仍由DBMS完成AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)一、問題的提出1.利用日志技術(shù)進(jìn)行恢復(fù)數(shù)據(jù)庫存在的問題需要搜索整個(gè)日志,將耗費(fèi)大量的時(shí)間;很多需要REDO處理的事務(wù)已將更新操作的結(jié)果寫入數(shù)據(jù)庫,再重新執(zhí)行這些操作,浪費(fèi)了大量時(shí)間。2.解決方案采用具有檢查點(diǎn)的恢復(fù)技術(shù):在日志文件中增加檢查點(diǎn)記錄;增加重新開始文件,并讓恢復(fù)子系統(tǒng)在登錄日志文件期間動(dòng)態(tài)地維護(hù)日志。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)二、檢查點(diǎn)技術(shù)1.檢查點(diǎn)記錄的內(nèi)容建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)清單;上述事務(wù)最近一個(gè)日志記錄的地址。2.重新開始文件的內(nèi)容記錄各個(gè)檢查點(diǎn)記錄在日志文件中的地址。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)圖6.5重新開始文件和具有檢查點(diǎn)的日志文件AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)
3.動(dòng)態(tài)維護(hù)日志文件的方法周期性地執(zhí)行如下操作:建立檢查點(diǎn),保存數(shù)據(jù)庫狀態(tài)。具體步驟是:①將當(dāng)前日志緩沖區(qū)中的所有日志記錄寫入磁盤的日志文件上;②在日志文件中寫入一個(gè)檢查點(diǎn)記錄;③將當(dāng)前數(shù)據(jù)緩沖區(qū)的所有數(shù)據(jù)記錄寫入磁盤的數(shù)據(jù)庫中;
④把檢查點(diǎn)記錄在日志文件中的地址寫入一個(gè)重新開始文件。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)4.DBMS定時(shí)建立檢查點(diǎn),保存數(shù)據(jù)庫狀態(tài)
定期是按照預(yù)定的一個(gè)時(shí)間間隔,如每隔一小時(shí)建立一個(gè)檢查點(diǎn);不定期是按照某種規(guī)則,如日志文件已寫滿一半建立一個(gè)檢查點(diǎn)。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)三、利用檢查點(diǎn)的恢復(fù)策略1.使用檢查點(diǎn)方法可以改善恢復(fù)效率當(dāng)事務(wù)T在一個(gè)檢查點(diǎn)之前提交,T對數(shù)據(jù)庫所做的修改已寫入數(shù)據(jù)庫,寫入時(shí)間是在這個(gè)檢查點(diǎn)建立之前或在這個(gè)檢查點(diǎn)建立之時(shí),在進(jìn)行恢復(fù)處理時(shí),不必對事務(wù)T執(zhí)行REDO操作。只有那些在檢查點(diǎn)后面的還在執(zhí)行的事務(wù)需要恢復(fù)。
AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)2.恢復(fù)策略圖6.6不同的子系統(tǒng)恢復(fù)策略AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)四、利用檢查點(diǎn)的恢復(fù)步驟
1.從重新開始文件中找到最后一個(gè)檢查點(diǎn)記錄在日志文件中的地址,由該地址在日志文件中找到最后一個(gè)檢查點(diǎn)記錄;
2.由該檢查點(diǎn)記錄得到檢查點(diǎn)建立時(shí)刻所有正在執(zhí)行的事務(wù)清單ACTIVE-LIST建立兩個(gè)事務(wù)隊(duì)列UNDO-LISTREDO-LIST把ACTIVE-LIST暫時(shí)放入U(xiǎn)NDO-LIST隊(duì)列,REDO隊(duì)列暫為空。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點(diǎn)的恢復(fù)技術(shù)3.從檢查點(diǎn)開始正向掃描日志文件,直到日志文件結(jié)束有新開始的事務(wù)Ti,把Ti暫時(shí)放入U(xiǎn)NDO-LIST隊(duì)列;有提交的事務(wù)Tj,把Tj從UNDO-LIST隊(duì)列移到REDO-LIST隊(duì)列;4.對UNDO-LIST中的每個(gè)事務(wù)執(zhí)行UNDO操作,對REDO-LIST中的每個(gè)事務(wù)執(zhí)行REDO操作。AnIntroductiontoDatabaseSy6.4
數(shù)據(jù)庫的并發(fā)控制
不同的多事務(wù)執(zhí)行方式:事務(wù)串行執(zhí)行交叉并發(fā)方式同時(shí)并發(fā)方式并發(fā)控制機(jī)制是衡量一個(gè)數(shù)據(jù)庫管理系統(tǒng)性能的重要指標(biāo)之一。616.4數(shù)據(jù)庫的并發(fā)控制不同的多事務(wù)執(zhí)行方式:事務(wù)串行執(zhí)行6.4.1并發(fā)控制引起的問題[例]在學(xué)生選課數(shù)據(jù)庫上的一個(gè)操作序列
學(xué)生1在選課終端上讀出某課程的選課余額A為1人;同時(shí)學(xué)生2在選課終端上讀出同一課程的選課余額A仍為1人;學(xué)生1選中該門課,將選課數(shù)據(jù)庫中該門課選課余額減1,A=A-1=0,將A寫入數(shù)據(jù)庫;學(xué)生2也選中該門課,將選課數(shù)據(jù)庫中該門課選課余額減1,A=A-1=0,將A寫入數(shù)據(jù)庫;本來該門課的選課余額只剩下了一個(gè),卻有兩名學(xué)生成功地獲取了這最后一個(gè)名額6.4.1并發(fā)控制引起的問題[例]在學(xué)生選課數(shù)據(jù)庫上的一個(gè)操
6.4.1并發(fā)控制引起的問題并發(fā)操作帶來數(shù)據(jù)不一致的三種情況:6.4.1并發(fā)控制引起的問題并發(fā)操作帶來數(shù)據(jù)不一致的三種情AnIntroductiontoDatabaseSystem6.4.1并發(fā)控制引起的問題不可重復(fù)讀讀“臟”數(shù)據(jù)圖6.7數(shù)據(jù)不一致
①R(A)=8
②
R(A)=8③A←A-1W(A)=7④
A←A-1W(A)=7丟失修改
①R(A)=1①R(A)=1R(B)=2A←A-1
R(A)+R(B)=3
W(A)=0②R(B)=2②
R(A)=0B←B*3W(B)=6③R(A)=1③ROLLBACKR(B)=6A=1
R(A)+R(B)=7驗(yàn)算不正確例:在下列事務(wù)中,設(shè)R(x):讀數(shù)據(jù)x,W(x):寫數(shù)據(jù)x。T1T1T2T2T1T2AnIntroductiontoDatabaseSy什么是封鎖?封鎖就是事務(wù)T在對某個(gè)數(shù)據(jù)對象操作之前,先向系統(tǒng)發(fā)出請求對其加鎖,加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。AnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)什么是封鎖?AnIntroductiontoDatab1.鎖的類型一個(gè)事務(wù)對某個(gè)數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制由封鎖的類型決定。基本封鎖類型:排它鎖(ExclusiveLocks,X鎖,寫鎖)共享鎖(ShareLocks,S鎖,讀鎖)更新鎖(UpdateLocks,U鎖)
AnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)1.鎖的類型AnIntroductiontoData排它鎖若事務(wù)T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對A加任何類型的鎖,直到T釋放A上的鎖。
從保證其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A。AnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)
排它鎖AnIntroductiontoDatabase共享鎖若事務(wù)T對數(shù)據(jù)對象A加上S鎖,則其它事務(wù)只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。保證其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改。AnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)
共享鎖AnIntroductiontoDatabase更新鎖準(zhǔn)備更新數(shù)據(jù)時(shí),首先對數(shù)據(jù)對象作更新鎖鎖定,這樣數(shù)據(jù)將不能被修改,但可以讀取。確定要進(jìn)行更新數(shù)據(jù)操作時(shí),自動(dòng)將U鎖換為X鎖。但當(dāng)對象上有其它鎖存在時(shí),無法對其作更新鎖鎖定。
更新鎖常被應(yīng)用到帶有共享鎖的資源,一次只有一個(gè)事務(wù)可以獲得資源的更新鎖。
AnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)更新鎖AnIntroductiontoDatabasAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)未丟失修改T1T2①XlockA②R(A)=8③④A←A-1W(A)=7CommitUnlockA⑤XlockA等待等待等待等待獲得XlockAR(A)=7A←A-1W(A)=6CommitUnlockA[例]AnIntroductiontoDatabaseSy6.4.2封鎖技術(shù)可重復(fù)讀T1T2①SlockASlockBR(A)=1R(B)=2R(A)+R(B)=3②③R(A)=1R(B)=2R(A)+R(B)=3CommitUnlockAUnlockB驗(yàn)算正確④⑤XlockB等待等待等待等待等待等待等待等待獲得XlockBR(B)=2B←B*3W(B)=6CommitUnlockBAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)可重復(fù)讀T1T2①SlockAAnAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)未讀“臟”數(shù)據(jù)T1T2①XlockAR(A)=1A←A-1W(A)=0;②③ROLLBACKA=1UnlockA④SlockA等待等待等待等待獲得SlockAR(A)=1CommitUnlockAAnIntroductiontoDatabaseSy6.4.2封鎖技術(shù)2.死鎖和活鎖活鎖事務(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有可能永遠(yuǎn)等待,這就是活鎖的情形。避免活鎖的簡單方法是采用先來先服務(wù)的策略。6.4.2封鎖技術(shù)2.死鎖和活鎖死鎖事務(wù)T1封鎖了數(shù)據(jù)A,事務(wù)T2封鎖了數(shù)據(jù)B。T1又申請封鎖數(shù)據(jù)B,因T2已封鎖了B,于是T1等待T2釋放B上的鎖。T2又申請封鎖A,因T1已封鎖了A,T2也只能等待T1釋放A上的鎖。這樣T1在等待T2,而T2又在等待T1的局面,T1和T2兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖數(shù)據(jù)庫中解決死鎖問題主要有兩類方法:預(yù)防死鎖、診斷與解除死鎖6.4.2封鎖技術(shù)死鎖6.4.2封鎖技術(shù)AnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)(a)(b)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤消;釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運(yùn)行下去。AnIntroductiontoDatabaseSy6.4.2封鎖技術(shù)3.封鎖的粒度加鎖的數(shù)據(jù)對象可以大到整個(gè)關(guān)系、整個(gè)數(shù)據(jù)庫,也可以小到一個(gè)元組等。
封鎖對象的大小稱為封鎖粒度,封鎖的對象可以是邏輯單元,也可以是物理單元。
封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。6.4.2封鎖技術(shù)3.封鎖的粒度AnIntroductiontoDatabaseSystem6.4.3并發(fā)調(diào)度的可串行化AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.3并發(fā)調(diào)度的可串行化T1T2SlockBY=R(B)=2UnlockBXlockAA=Y+1=3W(A)UnlockASlockAX=R(A)=3UnlockAXlockBB=X+1=4W(B)UnlockB串行調(diào)度(a)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.3并發(fā)調(diào)度的可串行化T1T2SlockAX=R(A)=2UnlockAXlockBB=X+1=3W(B)UnlockBSlockBY=R(B)=3UnlockBXlockAA=Y+1=4W(A)UnlockA串行調(diào)度(b)AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.3并發(fā)調(diào)度的可串行化T1T2SlockBY=R(B)=2SlockAX=R(A)=2UnlockBUnlockAXlockAA=Y+1=3W(A)XlockBB=X+1=3W(B)UnlockAUnlockB不可串行化的調(diào)度AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.3并發(fā)調(diào)度的可串行化T1T2SlockBY=R(B)=2UnlockBXlockASlockAA=Y+1=3等待W(A)等待UnlockA等待X=R(A)=3UnlockAXlockBB=X+1=4W(B)UnlockB可串行化的調(diào)度AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.3并發(fā)調(diào)度的可串行化AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.4.3并發(fā)調(diào)度的可串行化AnIntroductiontoDatabaseSy916.5數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性指的是數(shù)據(jù)的正確性和相容性。數(shù)據(jù)的完整性和安全性是兩個(gè)不同概念數(shù)據(jù)的完整性防范對象:不合語義的、不正確的數(shù)據(jù)。數(shù)據(jù)的安全性防范對象:非法用戶和非法操作。數(shù)據(jù)庫的完整性控制是通過DBMS的完整子系統(tǒng)實(shí)現(xiàn)的。完整子系統(tǒng)的主要功能:監(jiān)督事務(wù)的執(zhí)行,測試是否違反完整性規(guī)則在違反完整性規(guī)則時(shí)會(huì)才去措施進(jìn)行處理,比如拒絕操作、報(bào)告情況和改正錯(cuò)誤等方法。916.5數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性指的是數(shù)據(jù)的正確性和926.5.1數(shù)據(jù)庫完整性概述1.完整性規(guī)則為維護(hù)數(shù)據(jù)庫的完整性,DBMS必須:提供定義完整性約束條件的機(jī)制
完整性約束條件是數(shù)據(jù)庫中的數(shù)據(jù)必須滿足的語義約束條件。實(shí)體完整性、參照完整性、用戶定義的完整性都是SQL標(biāo)準(zhǔn)用來描述完整性的一系列概念,這些完整性一般由SQL的DDL語句來實(shí)現(xiàn),并作為數(shù)據(jù)庫模式的一部分存入數(shù)據(jù)字典。提供完整性檢查的方法
完整性檢查是DBMS中檢查數(shù)據(jù)是否滿足完整性約束條件的機(jī)制。一般在INSERT、UPDATE、DELETE語句執(zhí)行后或事務(wù)提交時(shí)檢查,檢查這些操作執(zhí)行后數(shù)據(jù)庫中的數(shù)據(jù)是否違背了完整性約束條件。926.5.1數(shù)據(jù)庫完整性概述1.完整性規(guī)則936.5
數(shù)據(jù)庫的完整性違約處理
若DBMS發(fā)現(xiàn)用戶的操作違背了完整性約束條件就會(huì)采取一定的動(dòng)作,比如拒絕執(zhí)行該操作,或級(jí)連執(zhí)行其他操作,進(jìn)行違約處理以保證數(shù)據(jù)的完整性。936.5數(shù)據(jù)庫的完整性違約處理6.5.1
數(shù)據(jù)庫完整性概述2.約束完整性的分類數(shù)據(jù)完整性約束是一組完整性規(guī)則的集合。數(shù)據(jù)庫完整性由各種各樣的完整性約束來保證,因此可以說數(shù)據(jù)庫完整性設(shè)計(jì)就是數(shù)據(jù)庫完整性約束的設(shè)計(jì)。完整性約束條件作用對象可以是關(guān)系、元組、列三種。946.5.1數(shù)據(jù)庫完整性概述2.約束完整性的分類946.5.1數(shù)據(jù)庫完整性概述完整性約束條件可分為靜態(tài)列級(jí)約束靜態(tài)元組約束靜態(tài)關(guān)系約束動(dòng)態(tài)列級(jí)約束動(dòng)態(tài)元組約束動(dòng)態(tài)關(guān)系約束956.5.1數(shù)據(jù)庫完整性概述956.5.2完整性控制1.實(shí)體完整性若屬性(指一個(gè)或一組屬性)A是基本關(guān)系R的主屬性,則A不能取空值。2.參照完整性表中每條記錄外鍵的值必須是主表中存在的外碼的定義:設(shè)F為基本關(guān)系R的一個(gè)或一組屬性,但不是關(guān)系R的碼。K是基本關(guān)系S的主碼。如果F與K相對應(yīng),則稱F是R的外碼基本關(guān)系R稱為參照關(guān)系基本關(guān)系S稱為被參照關(guān)系6.5.2完整性控制1.實(shí)體完整性976.5.2完整性控制
【例6.1】學(xué)生(學(xué)號(hào),姓名,性別,年齡,專業(yè)號(hào))課程(課程號(hào),課程名,學(xué)分)學(xué)生選課(學(xué)號(hào),課程號(hào),成績)“學(xué)號(hào)”與“課程號(hào)”屬性是學(xué)生選課關(guān)系的外碼;學(xué)生關(guān)系和課程關(guān)系均為被參照關(guān)系;學(xué)生選課關(guān)系為參照關(guān)系。
976.5.2完整性控制【例6.1】6.5.2完整性控制參照完整性規(guī)則:
若屬性或?qū)傩越MF是基本關(guān)系R的外碼,它與基本關(guān)系S的主碼K相對應(yīng)(其中基本關(guān)系R與S不一定是不同關(guān)系),則對于R中每個(gè)元組在F上的值必須:等于S中某個(gè)元組的主碼值;或者取空值,且必須是F的每個(gè)屬性值均為空。986.5.2完整性控制參照完整性規(guī)則:986.5.2完整性控制3.用戶定義完整性
用戶定義的完整性即是針對某個(gè)特定關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應(yīng)用必須滿足的語義要求。包括:字段的值域約束字段的類型約束字段的有效規(guī)則(如小數(shù)位數(shù))約束6.5.2完整性控制3.用戶定義完整性100
6.5.3數(shù)據(jù)完整性實(shí)現(xiàn)1.實(shí)體完整性的實(shí)現(xiàn)關(guān)系模型的實(shí)體完整性CREATETABLE中用PRIMARYKEY短語定義單屬性構(gòu)成的主碼有兩種定義方法定義為列級(jí)約束條件定義為表級(jí)約束條件對多個(gè)屬性構(gòu)成的主碼只有一種定義方法定義為表級(jí)約束條件1006.5.3數(shù)據(jù)完整性實(shí)現(xiàn)1.實(shí)體完整性的實(shí)現(xiàn)1016.5.3數(shù)據(jù)完整性實(shí)現(xiàn)【例6.2】將Student表中的Sno屬性定義為主碼。
(1)在列級(jí)定義主碼
CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,
SnameCHAR(20)NOTNULL,
SsexCHAR(2),
SageSMALLINT,
SdeptCHAR(20));1016.5.3數(shù)據(jù)完整性實(shí)現(xiàn)【例6.2】將Student1026.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)(2)在表級(jí)定義主碼
CREATETABLEStudent(SnoCHAR(9),
SnameCHAR(20)NOTNULL,
SsexCHAR(2),
SageSMALLINT,
SdeptCHAR(20),
PRIMARYKEY(Sno));1026.5.3數(shù)據(jù)完整性實(shí)現(xiàn)(2)在表級(jí)定義主碼1036.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)【例6.3】將SC表中的Sno,Cno屬性組定義為碼。
多個(gè)屬性構(gòu)成的碼,只能在表級(jí)定義主碼。
CREATETABLESC(SnoCHAR(9)NOTNULL,
CnoCHAR(4)NOTNULL,CGradeSMALLINT,
PRIMARYKEY(Sno,Cno)
);
1036.5.3數(shù)據(jù)完整性實(shí)現(xiàn)【例6.3】將SC表中的S1046.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)5.1.2實(shí)體完整性檢查和違約處理每當(dāng)用戶程序插入或?qū)χ鞔a列進(jìn)行更新操作時(shí),RDBMS按照實(shí)體完整性規(guī)則自動(dòng)進(jìn)行檢查。包括:檢查主碼值是否唯一。如果不唯一,則拒絕插入或修改。檢查主碼的各個(gè)屬性是否為空,只要有一個(gè)為空就拒絕插入或修改。1046.5.3數(shù)據(jù)完整性實(shí)現(xiàn)5.1.2實(shí)體完整性檢查1056.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)2.參照完整性的實(shí)現(xiàn)關(guān)系模型的參照完整性定義:在CREATETABLE中用FOREIGNKEY短語定義哪些列為外碼。用REFERENCES短語指明這些外碼參照哪些表的主碼。例如:學(xué)生選課關(guān)系SC中一個(gè)元組表示一個(gè)學(xué)生選修的某門課程的成績,(Sno,Cno)是主碼。Sno、Cno分別參照引用Student表的主碼和Course表的主碼。1056.5.3數(shù)據(jù)完整性實(shí)現(xiàn)2.參照完整性的實(shí)現(xiàn)1066.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)【例6.4】定義SC中的參照完整性
CREATETABLESC
(SnoCHAR(9)
NOTNULL,
CnoCHAR(4)
NOTNULL,
CGradeSMALLINT,
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESS(Sno),
FOREIGNKEY(Cno)REFERENCESC(Cno));1066.5.3數(shù)據(jù)完整性實(shí)現(xiàn)【例6.4】定義SC中的參1076.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)參照完整性違約處理:拒絕(NOACTION)執(zhí)行不允許該操作執(zhí)行,為默認(rèn)策略。級(jí)聯(lián)(CASCADE)操作刪除或修改被參照表的一個(gè)元組造成了與參照表的不一致時(shí),則刪除或修改被參照表中的所有造成不一致的元組。設(shè)置為空值(SET-NULL)對于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義外碼列是否允許空值。1076.5.3數(shù)據(jù)完整性實(shí)現(xiàn)參照完整性違約處理:1086.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)表6.3可能破壞參照完整性的情況和相應(yīng)地違約處理被參照表(S)參照表(SC)違約處理可能破壞參照完整性
插入元組拒絕可能破壞參照完整性
修改外碼值拒絕刪除元組
可能破壞參照完整性拒絕/級(jí)聯(lián)刪除/設(shè)置為空值修改主碼值
可能破壞參照完整性拒絕/級(jí)聯(lián)修改/設(shè)置為空值1086.5.3數(shù)據(jù)完整性實(shí)現(xiàn)表6.3可能破壞參照完整1096.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)3.用戶定義完整性的實(shí)現(xiàn)(1)屬性上的約束條件用戶定義的完整性就是針對某一具體應(yīng)用的數(shù)據(jù)必須滿足的語義要求,由RDBMS提供,而不必由應(yīng)用程序承擔(dān)。包括:列值非空(NOTNULL)列值唯一(UNIQUE)檢查列值是否滿足一個(gè)布爾表達(dá)式(CHECK)1096.5.3數(shù)據(jù)完整性實(shí)現(xiàn)3.用戶定義完整性的實(shí)現(xiàn)1106.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)①列值非空
【例6.5】在定義SC表時(shí),說明Sno、Cno、Grade屬性不允許取空值。
CREATETABLESC(SnoCHAR(9)NOTNULL,
CnoCHAR(4)NOTNULL,
GradeSMALLINTNOTNULL,
PRIMARYKEY(Sno,Cno),…);
如果在表級(jí)定義實(shí)體完整性,隱含了Sno,Cno不允許取空值,則在列級(jí)不允許取空值的定義就不必寫了。1106.5.3數(shù)據(jù)完整性實(shí)現(xiàn)①列值非空1116.5.3
數(shù)據(jù)完整性實(shí)現(xiàn)②列值唯一
【例6.6】建立部門表DEPT,要求部門
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南2024年12月云南省芒市2025年招考公益性崗位人員(第一批)筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 初中語文生活美文邱吉爾的選擇
- 2025年02月山東省屬事業(yè)單位公開招聘初級(jí)綜合類崗位人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 高中語文文摘校園紙飛機(jī)飛不出城市
- 連云港專版2024中考地理復(fù)習(xí)方案第三部分世界地理下第8課時(shí)日本東南亞強(qiáng)化訓(xùn)練
- 課標(biāo)版2025屆高考地理二輪復(fù)習(xí)考前主題練小題練六國家重點(diǎn)工程建設(shè)分析型
- 質(zhì)量管理體系與環(huán)境保護(hù)的雙重考慮
- 四年級(jí)數(shù)學(xué)上冊四混合運(yùn)算與應(yīng)用問題21應(yīng)用問題三拔高習(xí)題無答案浙教版
- 山西專版2024年中考數(shù)學(xué)復(fù)習(xí)第二單元方程組與不等式組課時(shí)訓(xùn)練05一次方程組及其應(yīng)用
- 跨文化交際中的語言學(xué)習(xí)策略研究
- 油氣田開發(fā)專業(yè)危害因素辨識(shí)與風(fēng)險(xiǎn)防控
- 假肢安裝合同范本
- DB37-T4824-2025 鄉(xiāng)鎮(zhèn)(街道)應(yīng)急物資配備指南
- 教育部人文社科 申請書
- 無菌手術(shù)臺(tái)鋪置的細(xì)節(jié)管理
- 《重大基礎(chǔ)設(shè)施項(xiàng)目涉及風(fēng)景名勝區(qū)選址論證報(bào)告編制技術(shù)規(guī)范》編制說明
- 議論文8(試題+審題+范文+點(diǎn)評+素材)-2025年高考語文寫作復(fù)習(xí)
- 2025-2030年(全新版)中國軟冰淇淋市場發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 2025新人教版英語七年級(jí)下單詞默寫表(小學(xué)部分)
- 2024年大慶醫(yī)學(xué)高等??茖W(xué)校高職單招語文歷年參考題庫含答案解析
- 四川省綿陽市2025屆高三上學(xué)期第二次診斷性考試語文試題(含答案)
評論
0/150
提交評論