數(shù)據(jù)庫的安全與控制課件_第1頁
數(shù)據(jù)庫的安全與控制課件_第2頁
數(shù)據(jù)庫的安全與控制課件_第3頁
數(shù)據(jù)庫的安全與控制課件_第4頁
數(shù)據(jù)庫的安全與控制課件_第5頁
已閱讀5頁,還剩103頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(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.安全性保護2.數(shù)據(jù)庫恢復(fù)3.并發(fā)控制4.完整性保護

通過的本章的學(xué)習(xí),了解數(shù)據(jù)的安全性控制的措施,理解完整性的約束條件和控制機制,理解并發(fā)控制的原則和方法,了解數(shù)據(jù)庫恢復(fù)技術(shù)。2第六章數(shù)據(jù)庫安全性學(xué)習(xí)目的與要求6.1數(shù)據(jù)庫安全性數(shù)據(jù)庫的一大特點是數(shù)據(jù)可以共享,但數(shù)據(jù)共享必然帶來數(shù)據(jù)庫的安全性問題。數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄露、更改或破壞。數(shù)據(jù)庫的安全性和計算機系統(tǒng)的安全性,包括計算機硬件、操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等的安全性,是緊密聯(lián)系、相互支持的。計算機系統(tǒng)的安全性問題可分為三大類:技術(shù)安全類、管理安全類、政策法律類。本書只討論技術(shù)安全。6.1數(shù)據(jù)庫安全性數(shù)據(jù)庫的一大特點是數(shù)據(jù)可以共享,但數(shù)據(jù)共46.1.1數(shù)據(jù)庫安全性控制在計算機系統(tǒng)中的安全措施是一級一級設(shè)置的。

圖6.1數(shù)據(jù)庫系統(tǒng)的安全模式46.1.1數(shù)據(jù)庫安全性控制在計算機系統(tǒng)中的安全措56.1.1數(shù)據(jù)庫安全性控制1.用戶標(biāo)識和鑒別用戶標(biāo)識和鑒別是系統(tǒng)提供的最外層安全保護措施。其方法是由系統(tǒng)提供一定的方式讓用戶標(biāo)識自己的名字或身份。每次用戶要求進入系統(tǒng)時,由系統(tǒng)進行核對,通過鑒定后才提供機器使用權(quán)。常用的方法有:用戶標(biāo)識:標(biāo)明用戶身份,以系統(tǒng)鑒別用戶的合法性??诹睿合到y(tǒng)核對口令以鑒別用戶身份。隨機數(shù):用戶預(yù)先約定好一個計算過程或者函數(shù),根據(jù)計算結(jié)果鑒別用戶身份。56.1.1數(shù)據(jù)庫安全性控制1.用戶標(biāo)識和鑒別66.1.1數(shù)據(jù)庫安全性控制2.存取控制數(shù)據(jù)庫系統(tǒng)的存取控制機制就是確保只授權(quán)給有資格的用戶訪問數(shù)據(jù)庫的權(quán)限,令所有未被授權(quán)的用戶無法接近數(shù)據(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)限檢查對于獲得上機權(quán)又進一步發(fā)出存取數(shù)據(jù)操作的用戶,系統(tǒng)根據(jù)事先定義好的存取權(quá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)授給其他用戶,非常靈活

。強制存取控制(簡稱MAC)在MAC方法中,每一個數(shù)據(jù)庫對象被標(biāo)以一定的密級,每一個用戶也被授于某一級別的許可證。對任一數(shù)據(jù)庫對象,只有具有合法許可證的用戶才可存取。86.1.1數(shù)據(jù)庫安全性控制常用存取控制方法96.1.2

視圖機制

視圖機制為不同用戶定義不同的視圖,把數(shù)據(jù)對象限制在一定的范圍內(nèi),把要保密的數(shù)據(jù)對無權(quán)存取的用戶隱藏起來,從而自動地對數(shù)據(jù)提供一定程度的安全保護。優(yōu)點簡單性視圖不僅可以簡化用戶對數(shù)據(jù)的理解,也可以簡化他們的操作。安全性通過視圖用戶只能查詢和修改他們所能見到的數(shù)據(jù)邏輯數(shù)據(jù)獨立性視圖可以使應(yīng)用程序和數(shù)據(jù)庫表在一定程度上獨立。

96.1.2視圖機制視圖機制為不同用戶定義不同的視106.1.2

視圖機制缺點性能:SQLServer必須把視圖的查詢轉(zhuǎn)化成對基本表的查詢,將花費一定的時間。修改限制:當(dāng)用戶修改視圖的某些行時,SQL必須把它轉(zhuǎn)化為對基本表的某些行的修改。簡單視圖,這是很方便的;比較復(fù)雜的視圖,將可能是不可修改的??偨Y(jié):在定義數(shù)據(jù)庫對象時,權(quán)衡視圖的優(yōu)點和缺點,合理地定義視圖106.1.2視圖機制缺點116.1.3數(shù)據(jù)加密可以采用數(shù)據(jù)加密的技術(shù),防止數(shù)據(jù)庫中的數(shù)據(jù)在存儲和傳輸過程中丟失。加密方法替換方法:使用密鑰(EncryptionKey)將明文中的每一個字符轉(zhuǎn)換為密文中的一個字符置換方法:將明文的字符按不同的順序重新排列。116.1.3數(shù)據(jù)加密可以采用數(shù)據(jù)加密的技術(shù),防止126.1.3數(shù)據(jù)加密加密算法對稱式加密:對加密和解密使用相同的密鑰。非對稱密鑰加密:使用一組公共/私人密鑰系統(tǒng),加密時使用一種密鑰,解密時使用另一種密鑰。數(shù)字證書:是一種非對稱密鑰加密,但一個組織可以使用證書并通過數(shù)字簽名將一組公鑰和私鑰與其擁有者相關(guān)聯(lián)。

126.1.3數(shù)據(jù)加密136.2事務(wù)機制6.2.1事務(wù)的概念與特性1.定義事務(wù)是在數(shù)據(jù)庫中用戶定義的一個或多個操作序列,它必須以原子的方式執(zhí)行,也就是說這些操作要么全做要么全不做,是一個不可分割的工作單位。2.事務(wù)和程序關(guān)系一個應(yīng)用程序可以包含多個事務(wù);一個事務(wù)可以是一條SQL語句、一組SQL語句或整個程序。136.2事務(wù)機制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)故障:計算機軟、硬件故障人為故障:操作員的失誤、惡意的破壞等。數(shù)據(jù)庫的恢復(fù)把數(shù)據(jù)庫從錯誤狀態(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ù)在運行過程中被非正常終止,即事務(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)用程序處理的。例如,運算溢出、并發(fā)事務(wù)發(fā)生死鎖、違反了某些完整性限制等,造成事務(wù)的非正常結(jié)束。意味著事務(wù)沒有達到預(yù)期的終點,使數(shù)據(jù)庫可能處于不正確的狀態(tài)。事務(wù)故障僅指非預(yù)期的故障。事務(wù)故障的恢復(fù)策略

DBMS的恢復(fù)程序要強行回滾(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)停止運轉(zhuǎn)的任何事件,使得系統(tǒng)要重新啟動。特定類型的硬件錯誤、操作系統(tǒng)故障、DBMS代碼錯誤、系統(tǒng)斷電等。均可能導(dǎo)致下列情況發(fā)生:所有正在運行的事務(wù)都非正常終止,數(shù)據(jù)庫緩沖區(qū)(內(nèi)存)中的內(nèi)容都被丟失。一些尚未完成的事務(wù)的結(jié)果可能已送入物理數(shù)據(jù)庫,從而造成數(shù)據(jù)庫可能處于不正確的狀態(tài)。這類故障影響正在運行的所有事務(wù),但不破壞數(shù)據(jù)庫。206.3.1數(shù)據(jù)庫的故障分類2.系統(tǒng)故障206.3.1

數(shù)據(jù)庫的故障分類系統(tǒng)故障的恢復(fù)策略系統(tǒng)重新啟動時,必須對非正常終止的事務(wù)進行處理,把數(shù)據(jù)庫恢復(fù)到正確狀態(tài)。具體處理兩種情況:(1)發(fā)生系統(tǒng)故障時,事務(wù)尚未提交?;謴?fù)策略:強行撤消(UNDO)。(2)發(fā)生系統(tǒng)故障時,事務(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ù)。外存故障故障的原因:磁盤損壞磁頭碰撞瞬時強磁場干擾226.3.1數(shù)據(jù)庫的故障分類3.介質(zhì)故障226.3.1

數(shù)據(jù)庫的故障分類介質(zhì)故障的恢復(fù)策略重裝后備副本;重做轉(zhuǎn)儲后的所有成功事務(wù),將這些事務(wù)已提交的結(jié)果重新記入數(shù)據(jù)庫。使數(shù)據(jù)庫恢復(fù)到發(fā)生介質(zhì)故障前某個時刻的一致狀態(tài)。236.3.1數(shù)據(jù)庫的故障分類介質(zhì)故障的恢復(fù)策略236.3.1

數(shù)據(jù)庫的故障分類4.計算機病毒一種人為的故障或破壞,是一些惡作劇者研制的一種計算機程序。危害破壞、盜竊系統(tǒng)中的數(shù)據(jù)破壞系統(tǒng)文件因此,數(shù)據(jù)庫一旦被破壞仍要使用恢復(fù)技術(shù)加以恢復(fù)。246.3.1數(shù)據(jù)庫的故障分類4.計算機病毒246.3.2

數(shù)據(jù)庫恢復(fù)策略數(shù)據(jù)庫恢復(fù)操作的基本原理:利用冗余數(shù)據(jù)。恢復(fù)機制涉及的關(guān)鍵問題如何建立冗余數(shù)據(jù)數(shù)據(jù)轉(zhuǎn)儲(backup)登記日志文件(logging)如何利用冗余數(shù)據(jù)實施數(shù)據(jù)庫恢復(fù)后備副本結(jié)合日志文件,把數(shù)據(jù)庫恢復(fù)到某一時刻的正確狀態(tài)。

256.3.2數(shù)據(jù)庫恢復(fù)策略數(shù)據(jù)庫恢復(fù)操作的基本原理:利用冗6.3.2

數(shù)據(jù)庫恢復(fù)策略1.數(shù)據(jù)轉(zhuǎn)儲定義轉(zhuǎn)儲是指DBA將整個數(shù)據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程。備用的數(shù)據(jù)稱為后備副本或后援副本。如何轉(zhuǎn)儲數(shù)據(jù)庫遭到破壞后可以將后備副本重新裝入,但只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲時的狀態(tài)恢復(fù)到故障發(fā)生時的狀態(tài),必須重新運行自轉(zhuǎn)儲以后的所有更新事務(wù)。266.3.2數(shù)據(jù)庫恢復(fù)策略1.數(shù)據(jù)轉(zhuǎn)儲266.3.2

數(shù)據(jù)庫恢復(fù)策略正常運行轉(zhuǎn)儲運行事務(wù)恢復(fù)重裝后備副本重新運行事務(wù)TaTbT3圖6.2轉(zhuǎn)儲和恢復(fù)故障發(fā)生點276.3.2數(shù)據(jù)庫恢復(fù)策略正常運行轉(zhuǎn)儲運行事務(wù)恢復(fù)重裝后備副6.3.2

數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲的分類轉(zhuǎn)儲狀態(tài)靜態(tài)轉(zhuǎn)儲動態(tài)轉(zhuǎn)儲轉(zhuǎn)儲方式海量轉(zhuǎn)儲靜態(tài)海量轉(zhuǎn)儲動態(tài)海量轉(zhuǎn)儲增量轉(zhuǎn)儲靜態(tài)增量轉(zhuǎn)儲動態(tài)增量轉(zhuǎn)儲表6.2轉(zhuǎn)儲分類286.3.2數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲的分類轉(zhuǎn)儲狀態(tài)靜態(tài)轉(zhuǎn)儲動態(tài)6.3.2

數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲的方法

靜態(tài)轉(zhuǎn)儲靜態(tài)轉(zhuǎn)儲是指在系統(tǒng)中無運行事務(wù)時進行數(shù)據(jù)的轉(zhuǎn)儲操作。優(yōu)點:實現(xiàn)簡單缺點:降低了數(shù)據(jù)庫的可用性

轉(zhuǎn)儲必須等待正在運行的事務(wù)結(jié)束;新的事務(wù)必須等轉(zhuǎn)儲結(jié)束才能運行。296.3.2數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲的方法296.3.2

數(shù)據(jù)庫恢復(fù)策略圖6.3靜態(tài)轉(zhuǎn)儲與恢復(fù)306.3.2數(shù)據(jù)庫恢復(fù)策略圖6.3靜態(tài)轉(zhuǎn)儲與恢復(fù)306.3.2

數(shù)據(jù)庫恢復(fù)策略

動態(tài)轉(zhuǎn)儲動態(tài)轉(zhuǎn)儲是指轉(zhuǎn)儲期間允許對數(shù)據(jù)庫進行存取或修改。即轉(zhuǎn)儲和用戶事務(wù)可以并發(fā)執(zhí)行。優(yōu)點:轉(zhuǎn)儲不用等待正在運行的用戶事務(wù)結(jié)束;轉(zhuǎn)儲不影響新事務(wù)的運行。缺點:不能保證后備副本中的數(shù)據(jù)正確有效。316.3.2數(shù)據(jù)庫恢復(fù)策略動態(tài)轉(zhuǎn)儲316.3.2

數(shù)據(jù)庫恢復(fù)策略圖6.4動態(tài)轉(zhuǎn)儲與恢復(fù)326.3.2數(shù)據(jù)庫恢復(fù)策略圖6.4動態(tài)轉(zhuǎn)儲與恢復(fù)326.3.2

數(shù)據(jù)庫恢復(fù)策略利用動態(tài)轉(zhuǎn)儲得到的副本進行故障恢復(fù),需要把動態(tài)轉(zhuǎn)儲期間各事務(wù)對數(shù)據(jù)庫的修改活動登記下來,建立日志文件。后備副本加上日志文件才能把數(shù)據(jù)庫恢復(fù)到某一時刻的正確狀態(tài)。336.3.2數(shù)據(jù)庫恢復(fù)策略利用動態(tài)轉(zhuǎn)儲得到的副本進行故障恢6.3.2

數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲的方式動態(tài)轉(zhuǎn)儲:每次轉(zhuǎn)儲全部數(shù)據(jù)庫。增量轉(zhuǎn)儲:只轉(zhuǎn)儲上次轉(zhuǎn)儲后更新過的數(shù)據(jù)。海量轉(zhuǎn)儲與增量轉(zhuǎn)儲比較從恢復(fù)角度看,使用海量轉(zhuǎn)儲得到的后備副本進行恢復(fù)更方便。如果數(shù)據(jù)庫很大,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲方式更實用更有效。346.3.2數(shù)據(jù)庫恢復(fù)策略轉(zhuǎn)儲的方式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)容每個事務(wù)的開始標(biāo)記(BEGINTRANSACTION)每個事務(wù)的結(jié)束標(biāo)記(COMMIT或ROLLBACK)每個事務(wù)的所有更新操作以上均作為日志文件中的一個日志記錄。366.3.2數(shù)據(jù)庫恢復(fù)策略以記錄為單位的日志文件內(nèi)容366.3.2

數(shù)據(jù)庫恢復(fù)策略以記錄為單位的日志文件,每條日志記錄的內(nèi)容事務(wù)標(biāo)識(標(biāo)明是哪個事務(wù))操作類型(插入、刪除或修改)操作對象(記錄內(nèi)部標(biāo)識)更新前數(shù)據(jù)的舊值(對插入操作而言,此項為空值)更新后數(shù)據(jù)的新值(對刪除操作而言,此項為空值)376.3.2數(shù)據(jù)庫恢復(fù)策略以記錄為單位的日志文件,每條日志記6.3.2

數(shù)據(jù)庫恢復(fù)策略日志文件的作用日志文件可用來進行事務(wù)故障和系統(tǒng)故障的恢復(fù),并協(xié)助后備副本進行介質(zhì)故障恢復(fù)。具體作用:進行事務(wù)故障恢復(fù);進行系統(tǒng)故障恢復(fù);在動態(tài)轉(zhuǎn)儲方式中,協(xié)助后備副本進行介質(zhì)故障恢復(fù);與靜態(tài)轉(zhuǎn)儲后備副本配合進行介質(zhì)故障恢復(fù)。386.3.2數(shù)據(jù)庫恢復(fù)策略日志文件的作用386.3.2

數(shù)據(jù)庫恢復(fù)策略登記日志文件必須遵守兩條基本原則登記的次序嚴(yán)格按并行事務(wù)執(zhí)行的時間次序

;必須先執(zhí)行寫日志文件操作,然后執(zhí)行寫數(shù)據(jù)庫操作。修改的記錄Ri…………數(shù)據(jù)庫緩沖區(qū)日志文件數(shù)據(jù)庫①②396.3.2數(shù)據(jù)庫恢復(fù)策略登記日志文件必須遵守兩條基本原則修6.3.2

數(shù)據(jù)庫恢復(fù)策略為什么要先寫日志文件寫數(shù)據(jù)庫和寫日志文件是兩個不同的操作;在這兩個操作之間可能發(fā)生故障,如果先寫了數(shù)據(jù)庫修改,而在日志文件中沒有登記下這個修改,則以后就無法恢復(fù)這個修改了;如果先寫日志,但沒有修改數(shù)據(jù)庫,按日志文件恢復(fù)時只不過是多執(zhí)行一次不必要的UNDO操作,但不會影響數(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ù)在運行至正常結(jié)束點之前被終止?;謴?fù)子系統(tǒng)利用日志文件撤消(UNDO)此事務(wù)已對數(shù)據(jù)庫進行的修改。事務(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)停止運行的事件,使系統(tǒng)需重新啟動。系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因未完成事務(wù)對數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)庫;已提交事務(wù)對數(shù)據(jù)庫的更新可能還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫。恢復(fù)方法UNDO故障發(fā)生時未完成的事務(wù);REDO已完成的事務(wù)。系統(tǒng)故障的恢復(fù)由系統(tǒng)在重新啟動時自動完成,不需要用戶干預(yù)。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3

故障種類與恢復(fù)方法系統(tǒng)故障的恢復(fù)步驟⑴正向掃描日志文件(即從頭掃描日志文件)撤銷(UNDO)隊列:找出故障發(fā)生時尚未完成的事務(wù)(只有BEGINTRANSACTION記錄,而無COMMIT記錄),將其事務(wù)標(biāo)記記入撤銷(UNDO)隊列。重做(REDO)隊列:找出故障發(fā)生前已經(jīng)提交的事務(wù)(既有BEGINTRANSACTION記錄,也有COMMIT記錄),將其事務(wù)標(biāo)記記入重做(REDO)隊列;AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3

故障種類與恢復(fù)方法⑵

對撤銷隊列事務(wù)進行撤銷(UNDO)處理反向掃描日志文件,對每個UNDO事務(wù)的更新操作執(zhí)行逆操作,即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫⑶對重做隊列事務(wù)進行重做(REDO)處理正向掃描日志文件,對每個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ā)生時刻最近的轉(zhuǎn)儲副本),使數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)儲時的一致性狀態(tài)。對于靜態(tài)轉(zhuǎn)儲的數(shù)據(jù)庫副本,裝入后數(shù)據(jù)庫即處于一致性狀態(tài)。對于動態(tài)轉(zhuǎn)儲的數(shù)據(jù)庫副本,還需同時裝入轉(zhuǎn)儲開始時刻的日志文件副本,利用恢復(fù)系統(tǒng)故障的方法(即REDO+UNDO),才能將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3

故障種類與恢復(fù)方法

⑵裝入有關(guān)的日志文件副本(轉(zhuǎn)儲結(jié)束時刻的日志文件副本),重做已完成的事務(wù)。首先掃描日志文件,找出故障發(fā)生時已提交的事務(wù)的標(biāo)識,將其記入重做隊列;對重做隊列中的所有事務(wù)進行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.3

故障種類與恢復(fù)方法介質(zhì)故障的恢復(fù)需要DBA介入DBA的工作重裝最近轉(zhuǎn)儲的數(shù)據(jù)庫副本和有關(guān)的各日志文件副本;執(zhí)行系統(tǒng)提供的恢復(fù)命令。

具體的恢復(fù)操作仍由DBMS完成AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)一、問題的提出1.利用日志技術(shù)進行恢復(fù)數(shù)據(jù)庫存在的問題需要搜索整個日志,將耗費大量的時間;很多需要REDO處理的事務(wù)已將更新操作的結(jié)果寫入數(shù)據(jù)庫,再重新執(zhí)行這些操作,浪費了大量時間。2.解決方案采用具有檢查點的恢復(fù)技術(shù):在日志文件中增加檢查點記錄;增加重新開始文件,并讓恢復(fù)子系統(tǒng)在登錄日志文件期間動態(tài)地維護日志。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)二、檢查點技術(shù)1.檢查點記錄的內(nèi)容建立檢查點時刻所有正在執(zhí)行的事務(wù)清單;上述事務(wù)最近一個日志記錄的地址。2.重新開始文件的內(nèi)容記錄各個檢查點記錄在日志文件中的地址。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)圖6.5重新開始文件和具有檢查點的日志文件AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)

3.動態(tài)維護日志文件的方法周期性地執(zhí)行如下操作:建立檢查點,保存數(shù)據(jù)庫狀態(tài)。具體步驟是:①將當(dāng)前日志緩沖區(qū)中的所有日志記錄寫入磁盤的日志文件上;②在日志文件中寫入一個檢查點記錄;③將當(dāng)前數(shù)據(jù)緩沖區(qū)的所有數(shù)據(jù)記錄寫入磁盤的數(shù)據(jù)庫中;

④把檢查點記錄在日志文件中的地址寫入一個重新開始文件。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)4.DBMS定時建立檢查點,保存數(shù)據(jù)庫狀態(tài)

定期是按照預(yù)定的一個時間間隔,如每隔一小時建立一個檢查點;不定期是按照某種規(guī)則,如日志文件已寫滿一半建立一個檢查點。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)三、利用檢查點的恢復(fù)策略1.使用檢查點方法可以改善恢復(fù)效率當(dāng)事務(wù)T在一個檢查點之前提交,T對數(shù)據(jù)庫所做的修改已寫入數(shù)據(jù)庫,寫入時間是在這個檢查點建立之前或在這個檢查點建立之時,在進行恢復(fù)處理時,不必對事務(wù)T執(zhí)行REDO操作。只有那些在檢查點后面的還在執(zhí)行的事務(wù)需要恢復(fù)。

AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)2.恢復(fù)策略圖6.6不同的子系統(tǒng)恢復(fù)策略AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)四、利用檢查點的恢復(fù)步驟

1.從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄;

2.由該檢查點記錄得到檢查點建立時刻所有正在執(zhí)行的事務(wù)清單ACTIVE-LIST建立兩個事務(wù)隊列UNDO-LISTREDO-LIST把ACTIVE-LIST暫時放入UNDO-LIST隊列,REDO隊列暫為空。AnIntroductiontoDatabaseSyAnIntroductiontoDatabaseSystem6.3.4具有檢查點的恢復(fù)技術(shù)3.從檢查點開始正向掃描日志文件,直到日志文件結(jié)束有新開始的事務(wù)Ti,把Ti暫時放入UNDO-LIST隊列;有提交的事務(wù)Tj,把Tj從UNDO-LIST隊列移到REDO-LIST隊列;4.對UNDO-LIST中的每個事務(wù)執(zhí)行UNDO操作,對REDO-LIST中的每個事務(wù)執(zhí)行REDO操作。AnIntroductiontoDatabaseSy6.4

數(shù)據(jù)庫的并發(fā)控制

不同的多事務(wù)執(zhí)行方式:事務(wù)串行執(zhí)行交叉并發(fā)方式同時并發(fā)方式并發(fā)控制機制是衡量一個數(shù)據(jù)庫管理系統(tǒng)性能的重要指標(biāo)之一。616.4數(shù)據(jù)庫的并發(fā)控制不同的多事務(wù)執(zhí)行方式:事務(wù)串行執(zhí)行6.4.1并發(fā)控制引起的問題[例]在學(xué)生選課數(shù)據(jù)庫上的一個操作序列

學(xué)生1在選課終端上讀出某課程的選課余額A為1人;同時學(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ù)庫;本來該門課的選課余額只剩下了一個,卻有兩名學(xué)生成功地獲取了這最后一個名額6.4.1并發(fā)控制引起的問題[例]在學(xué)生選課數(shù)據(jù)庫上的一個操

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驗算不正確例:在下列事務(wù)中,設(shè)R(x):讀數(shù)據(jù)x,W(x):寫數(shù)據(jù)x。T1T1T2T2T1T2AnIntroductiontoDatabaseSy什么是封鎖?封鎖就是事務(wù)T在對某個數(shù)據(jù)對象操作之前,先向系統(tǒng)發(fā)出請求對其加鎖,加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對象。AnIntroductiontoDatabaseSystem6.4.2封鎖技術(shù)什么是封鎖?AnIntroductiontoDatab1.鎖的類型一個事務(wù)對某個數(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ù)據(jù)對象作更新鎖鎖定,這樣數(shù)據(jù)將不能被修改,但可以讀取。確定要進行更新數(shù)據(jù)操作時,自動將U鎖換為X鎖。但當(dāng)對象上有其它鎖存在時,無法對其作更新鎖鎖定。

更新鎖常被應(yīng)用到帶有共享鎖的資源,一次只有一個事務(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驗算正確④⑤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有可能永遠等待,這就是活鎖的情形。避免活鎖的簡單方法是采用先來先服務(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兩個事務(wù)永遠不能結(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ù)選擇一個處理死鎖代價最小的事務(wù),將其撤消;釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運行下去。AnIntroductiontoDatabaseSy6.4.2封鎖技術(shù)3.封鎖的粒度加鎖的數(shù)據(jù)對象可以大到整個關(guān)系、整個數(shù)據(jù)庫,也可以小到一個元組等。

封鎖對象的大小稱為封鎖粒度,封鎖的對象可以是邏輯單元,也可以是物理單元。

封鎖粒度與系統(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ù)的完整性和安全性是兩個不同概念數(shù)據(jù)的完整性防范對象:不合語義的、不正確的數(shù)據(jù)。數(shù)據(jù)的安全性防范對象:非法用戶和非法操作。數(shù)據(jù)庫的完整性控制是通過DBMS的完整子系統(tǒng)實現(xiàn)的。完整子系統(tǒng)的主要功能:監(jiān)督事務(wù)的執(zhí)行,測試是否違反完整性規(guī)則在違反完整性規(guī)則時會才去措施進行處理,比如拒絕操作、報告情況和改正錯誤等方法。916.5數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性指的是數(shù)據(jù)的正確性和926.5.1數(shù)據(jù)庫完整性概述1.完整性規(guī)則為維護數(shù)據(jù)庫的完整性,DBMS必須:提供定義完整性約束條件的機制

完整性約束條件是數(shù)據(jù)庫中的數(shù)據(jù)必須滿足的語義約束條件。實體完整性、參照完整性、用戶定義的完整性都是SQL標(biāo)準(zhǔn)用來描述完整性的一系列概念,這些完整性一般由SQL的DDL語句來實現(xiàn),并作為數(shù)據(jù)庫模式的一部分存入數(shù)據(jù)字典。提供完整性檢查的方法

完整性檢查是DBMS中檢查數(shù)據(jù)是否滿足完整性約束條件的機制。一般在INSERT、UPDATE、DELETE語句執(zhí)行后或事務(wù)提交時檢查,檢查這些操作執(zhí)行后數(shù)據(jù)庫中的數(shù)據(jù)是否違背了完整性約束條件。926.5.1數(shù)據(jù)庫完整性概述1.完整性規(guī)則936.5

數(shù)據(jù)庫的完整性違約處理

若DBMS發(fā)現(xiàn)用戶的操作違背了完整性約束條件就會采取一定的動作,比如拒絕執(zhí)行該操作,或級連執(zhí)行其他操作,進行違約處理以保證數(shù)據(jù)的完整性。936.5數(shù)據(jù)庫的完整性違約處理6.5.1

數(shù)據(jù)庫完整性概述2.約束完整性的分類數(shù)據(jù)完整性約束是一組完整性規(guī)則的集合。數(shù)據(jù)庫完整性由各種各樣的完整性約束來保證,因此可以說數(shù)據(jù)庫完整性設(shè)計就是數(shù)據(jù)庫完整性約束的設(shè)計。完整性約束條件作用對象可以是關(guān)系、元組、列三種。946.5.1數(shù)據(jù)庫完整性概述2.約束完整性的分類946.5.1數(shù)據(jù)庫完整性概述完整性約束條件可分為靜態(tài)列級約束靜態(tài)元組約束靜態(tài)關(guān)系約束動態(tài)列級約束動態(tài)元組約束動態(tài)關(guān)系約束956.5.1數(shù)據(jù)庫完整性概述956.5.2完整性控制1.實體完整性若屬性(指一個或一組屬性)A是基本關(guān)系R的主屬性,則A不能取空值。2.參照完整性表中每條記錄外鍵的值必須是主表中存在的外碼的定義:設(shè)F為基本關(guān)系R的一個或一組屬性,但不是關(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.實體完整性976.5.2完整性控制

【例6.1】學(xué)生(學(xué)號,姓名,性別,年齡,專業(yè)號)課程(課程號,課程名,學(xué)分)學(xué)生選課(學(xué)號,課程號,成績)“學(xué)號”與“課程號”屬性是學(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中每個元組在F上的值必須:等于S中某個元組的主碼值;或者取空值,且必須是F的每個屬性值均為空。986.5.2完整性控制參照完整性規(guī)則:986.5.2完整性控制3.用戶定義完整性

用戶定義的完整性即是針對某個特定關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應(yīng)用必須滿足的語義要求。包括:字段的值域約束字段的類型約束字段的有效規(guī)則(如小數(shù)位數(shù))約束6.5.2完整性控制3.用戶定義完整性100

6.5.3數(shù)據(jù)完整性實現(xiàn)1.實體完整性的實現(xiàn)關(guān)系模型的實體完整性CREATETABLE中用PRIMARYKEY短語定義單屬性構(gòu)成的主碼有兩種定義方法定義為列級約束條件定義為表級約束條件對多個屬性構(gòu)成的主碼只有一種定義方法定義為表級約束條件1006.5.3數(shù)據(jù)完整性實現(xiàn)1.實體完整性的實現(xiàn)1016.5.3數(shù)據(jù)完整性實現(xiàn)【例6.2】將Student表中的Sno屬性定義為主碼。

(1)在列級定義主碼

CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,

SnameCHAR(20)NOTNULL,

SsexCHAR(2),

SageSMALLINT,

SdeptCHAR(20));1016.5.3數(shù)據(jù)完整性實現(xiàn)【例6.2】將Student1026.5.3

數(shù)據(jù)完整性實現(xiàn)(2)在表級定義主碼

CREATETABLEStudent(SnoCHAR(9),

SnameCHAR(20)NOTNULL,

SsexCHAR(2),

SageSMALLINT,

SdeptCHAR(20),

PRIMARYKEY(Sno));1026.5.3數(shù)據(jù)完整性實現(xiàn)(2)在表級定義主碼1036.5.3

數(shù)據(jù)完整性實現(xiàn)【例6.3】將SC表中的Sno,Cno屬性組定義為碼。

多個屬性構(gòu)成的碼,只能在表級定義主碼。

CREATETABLESC(SnoCHAR(9)NOTNULL,

CnoCHAR(4)NOTNULL,CGradeSMALLINT,

PRIMARYKEY(Sno,Cno)

);

1036.5.3數(shù)據(jù)完整性實現(xiàn)【例6.3】將SC表中的S1046.5.3

數(shù)據(jù)完整性實現(xiàn)5.1.2實體完整性檢查和違約處理每當(dāng)用戶程序插入或?qū)χ鞔a列進行更新操作時,RDBMS按照實體完整性規(guī)則自動進行檢查。包括:檢查主碼值是否唯一。如果不唯一,則拒絕插入或修改。檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改。1046.5.3數(shù)據(jù)完整性實現(xiàn)5.1.2實體完整性檢查1056.5.3

數(shù)據(jù)完整性實現(xiàn)2.參照完整性的實現(xiàn)關(guān)系模型的參照完整性定義:在CREATETABLE中用FOREIGNKEY短語定義哪些列為外碼。用REFERENCES短語指明這些外碼參照哪些表的主碼。例如:學(xué)生選課關(guān)系SC中一個元組表示一個學(xué)生選修的某門課程的成績,(Sno,Cno)是主碼。Sno、Cno分別參照引用Student表的主碼和Course表的主碼。1056.5.3數(shù)據(jù)完整性實現(xiàn)2.參照完整性的實現(xiàn)1066.5.3

數(shù)據(jù)完整性實現(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ù)完整性實現(xiàn)【例6.4】定義SC中的參1076.5.3

數(shù)據(jù)完整性實現(xiàn)參照完整性違約處理:拒絕(NOACTION)執(zhí)行不允許該操作執(zhí)行,為默認(rèn)策略。級聯(lián)(CASCADE)操作刪除或修改被參照表的一個元組造成了與參照表的不一致時,則刪除或修改被參照表中的所有造成不一致的元組。設(shè)置為空值(SET-NULL)對于參照完整性,除了應(yīng)該定義外碼,還應(yīng)定義外碼列是否允許空值。1076.5.3數(shù)據(jù)完整性實現(xiàn)參照完整性違約處理:1086.5.3

數(shù)據(jù)完整性實現(xiàn)表6.3可能破壞參照完整性的情況和相應(yīng)地違約處理被參照表(S)參照表(SC)違約處理可能破壞參照完整性

插入元組拒絕可能破壞參照完整性

修改外碼值拒絕刪除元組

可能破壞參照完整性拒絕/級聯(lián)刪除/設(shè)置為空值修改主碼值

可能破壞參照完整性拒絕/級聯(lián)修改/設(shè)置為空值1086.5.3數(shù)據(jù)完整性實現(xiàn)表6.3可能破壞參照完整1096.5.3

數(shù)據(jù)完整性實現(xiàn)3.用戶定義完整性的實現(xiàn)(1)屬性上的約束條件用戶定義的完整性就是針對某一具體應(yīng)用的數(shù)據(jù)必須滿足的語義要求,由RDBMS提供,而不必由應(yīng)用程序承擔(dān)。包括:列值非空(NOTNULL)列值唯一(UNIQUE)檢查列值是否滿足一個布爾表達式(CHECK)1096.5.3數(shù)據(jù)完整性實現(xiàn)3.用戶定義完整性的實現(xiàn)1106.5.3

數(shù)據(jù)完整性實現(xiàn)①列值非空

【例6.5】在定義SC表時,說明Sno、Cno、Grade屬性不允許取空值。

CREATETABLESC(SnoCHAR(9)NOTNULL,

CnoCHAR(4)NOTNULL,

GradeSMALLINTNOTNULL,

PRIMARYKEY(Sno,Cno),…);

如果在表級定義實體完整性,隱含了Sno,Cno不允許取空值,則在列級不允許取空值的定義就不必寫了。1106.5.3數(shù)據(jù)完整性實現(xiàn)①列值非空1116.5.3

數(shù)據(jù)完整性實現(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論