數(shù)據(jù)庫系統(tǒng)概論(第五版)——數(shù)據(jù)庫原理

0 前言

數(shù)據(jù)庫是大數(shù)據(jù)領(lǐng)域非常重要的一個(gè)部分,并且隨著數(shù)據(jù)量不斷增大和數(shù)據(jù)結(jié)構(gòu)更加復(fù)雜呀邢,數(shù)據(jù)庫技術(shù)將變得日益重要。筆者本科時(shí)修過數(shù)據(jù)庫原理的課程豹绪,但當(dāng)時(shí)僅從應(yīng)用的角度去看价淌,甚至都不能算有角度,只能說學(xué)了一點(diǎn)sql語句瞒津,甚是淺顯蝉衣,說一無所知都不過分。目前筆者處在研究生階段巷蚪,研究方向?yàn)榇髷?shù)據(jù)與數(shù)據(jù)挖掘病毡,經(jīng)過學(xué)習(xí)和探索,筆者認(rèn)為數(shù)據(jù)庫是本領(lǐng)域最重要的三項(xiàng)技術(shù)之一屁柏,其他兩項(xiàng)分別為數(shù)據(jù)挖掘算法和云計(jì)算技術(shù)啦膜,有機(jī)會(huì)也會(huì)進(jìn)行探討與分享。本系列內(nèi)容將是我在重讀王珊淌喻、薩師煊編著僧家,高等教育出版社出版的《數(shù)據(jù)庫系統(tǒng)概論(第5版)》的過程中的筆記和思考,筆者將從數(shù)據(jù)庫原理裸删、數(shù)據(jù)庫設(shè)計(jì)八拱、關(guān)系數(shù)據(jù)庫原理和數(shù)據(jù)庫技術(shù)的應(yīng)用四個(gè)方面進(jìn)行梳理。

數(shù)據(jù)庫原理

1.1 數(shù)據(jù)庫概述

數(shù)據(jù)庫是數(shù)據(jù)管理的有效技術(shù),是計(jì)算機(jī)科學(xué)的重要分支肌稻。

1. 數(shù)據(jù)庫的四個(gè)基本概念:數(shù)據(jù)清蚀、數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)和數(shù)據(jù)庫系統(tǒng)灯萍。 數(shù)據(jù)是數(shù)據(jù)庫中存儲(chǔ)的幾本對(duì)象轧铁。描述事物的符號(hào)記錄稱為數(shù)據(jù)每聪。數(shù)據(jù)的含義稱為數(shù)據(jù)的語義旦棉。數(shù)據(jù)庫是存放數(shù)據(jù)的倉庫。數(shù)據(jù)庫是長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)药薯、有組織的绑洛、可共享的大量數(shù)據(jù)的集合。數(shù)據(jù)庫數(shù)據(jù)具有永久存儲(chǔ)童本、有組織和可共享三個(gè)基本特點(diǎn)真屯。數(shù)據(jù)庫管理系統(tǒng)(DBMS)是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件。DBMS的主要功能有數(shù)據(jù)定義穷娱、數(shù)據(jù)組織存儲(chǔ)管理绑蔫、數(shù)據(jù)操縱、數(shù)據(jù)庫的事務(wù)管理和運(yùn)行管理泵额、數(shù)據(jù)庫的建立和維護(hù)配深、其他(通信、數(shù)據(jù)轉(zhuǎn)換)等嫁盲。數(shù)據(jù)庫系統(tǒng)(DBS)是由數(shù)據(jù)庫篓叶、數(shù)據(jù)庫管理系統(tǒng)、應(yīng)用程序和數(shù)據(jù)庫管理員組成的存儲(chǔ)羞秤、管理缸托、處理和維護(hù)數(shù)據(jù)的系統(tǒng)。

2. 數(shù)據(jù)管理技術(shù)的三個(gè)階段: 人工管理階段——>文件系統(tǒng)階段——(避免數(shù)據(jù)冗余瘾蛋,解決多用戶俐镐、多應(yīng)用共享數(shù)據(jù)問題)——>數(shù)據(jù)庫系統(tǒng)階段。

3. 數(shù)據(jù)庫系統(tǒng)的特點(diǎn): ①數(shù)據(jù)結(jié)構(gòu)化哺哼。②數(shù)據(jù)的共享性高京革、冗余度低且易擴(kuò)充。避免數(shù)據(jù)之間的不相同性和不一致性幸斥。(不一致性是指同一數(shù)據(jù)不同副本的值不一樣)③數(shù)據(jù)獨(dú)立性高匹摇。物理獨(dú)立性是指用戶的應(yīng)用程序與數(shù)據(jù)庫中數(shù)據(jù)的物理存儲(chǔ)是相互獨(dú)立的。邏輯獨(dú)立性是指用戶的應(yīng)用程序與數(shù)據(jù)庫的邏輯結(jié)構(gòu)是相互獨(dú)立的甲葬。④數(shù)據(jù)由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一管理和控制廊勃。DBMS提供的數(shù)據(jù)控制功能包括數(shù)據(jù)的安全性保護(hù)、數(shù)據(jù)的完整性檢查、并發(fā)控制和數(shù)據(jù)庫恢復(fù)坡垫。

4. 數(shù)據(jù)模型:數(shù)據(jù)模型是一種模型梭灿,它是對(duì)現(xiàn)實(shí)世界數(shù)據(jù)特征的抽象。兩大類:第一類是概念模型冰悠,第二類是邏輯模型和物理模型堡妒。用戶的觀點(diǎn)—>計(jì)算機(jī)系統(tǒng)的觀點(diǎn)。現(xiàn)實(shí)世界—>信息世界(第一類)—>機(jī)器世界(第二類)溉卓。組成要素:數(shù)據(jù)結(jié)構(gòu)皮迟,數(shù)據(jù)操作,數(shù)據(jù)的完整性約束條件桑寨。數(shù)據(jù)結(jié)構(gòu)描述數(shù)據(jù)庫的組成對(duì)象以及對(duì)象之間的聯(lián)系伏尼,是系統(tǒng)的靜態(tài)特性。數(shù)據(jù)操作是指對(duì)數(shù)據(jù)庫中對(duì)象實(shí)例允許執(zhí)行的操作的集合尉尾,主要有查詢和更新(增刪改)兩大類爆阶,是對(duì)系統(tǒng)動(dòng)態(tài)特性的描述。數(shù)據(jù)的完整性約束條件是一組完整性規(guī)則沙咏,對(duì)數(shù)據(jù)及其聯(lián)系的制約和依存規(guī)則辨图,以保證數(shù)據(jù)的正確、有效和相容肢藐。

4.1 概念模型

(1)信息世界的概念:實(shí)體(人故河,事,物)窖壕,屬性忧勿,碼(唯一標(biāo)識(shí)實(shí)體的屬性集,學(xué)號(hào))瞻讽,實(shí)體型(實(shí)體名與屬性名集合抽象表示的同類實(shí)體鸳吸,如學(xué)生(學(xué)號(hào),姓名速勇,性別))晌砾,實(shí)體集(同一類實(shí)體的集合,如全體學(xué)生)烦磁,聯(lián)系(實(shí)體各屬性間养匈,實(shí)體與實(shí)體間,一對(duì)一都伪,一對(duì)多呕乎,多對(duì)多)。

(2)表示方法:實(shí)體-聯(lián)系方法陨晶。該方法用E-R圖猬仁,E-R方法也稱為E-R模型

4.2 邏輯模型

常見的有層次模型,網(wǎng)狀模型湿刽,關(guān)系模型的烁,面向?qū)ο髷?shù)據(jù)模型,對(duì)象關(guān)系數(shù)據(jù)模型诈闺,半結(jié)構(gòu)化數(shù)據(jù)模型渴庆。層次模型和網(wǎng)狀模型統(tǒng)稱為格式化模型,使用和實(shí)現(xiàn)時(shí)要涉及物理層的復(fù)雜結(jié)構(gòu)雅镊,因而被關(guān)系模型取代襟雷,隨著面向?qū)ο蠓椒ǖ挠绊懀S多關(guān)系數(shù)據(jù)庫廠商為了支持面向?qū)ο竽P屠齑瑢㈥P(guān)系模型擴(kuò)展為對(duì)象關(guān)系模型嗤军。由于Web上信息來源為半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)源注盈,產(chǎn)生了以XML為代表的半結(jié)構(gòu)化數(shù)據(jù)模型和非結(jié)構(gòu)化數(shù)據(jù)模型晃危。

格式化模型中實(shí)體用記錄表示,實(shí)體的屬性對(duì)應(yīng)記錄的數(shù)據(jù)項(xiàng)或字段老客,數(shù)據(jù)結(jié)構(gòu)的單位是基本層次聯(lián)系僚饭。基本層次聯(lián)系指兩個(gè)記錄及他們之間的一對(duì)多(包括一對(duì)一)的聯(lián)系胧砰。一-雙親節(jié)點(diǎn)鳍鸵,多-子女節(jié)點(diǎn)。

4.2.1 層次模型

層次數(shù)據(jù)庫采用層次模型尉间,代表有IMS(Information Management System)偿乖,IBM,1968哲嘲。

(1)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)庫中滿足兩個(gè)條件的基本層次聯(lián)系的集合為層次模型:1)有且只有一個(gè)節(jié)點(diǎn)沒有雙親節(jié)點(diǎn)贪薪,即根節(jié)點(diǎn);2)根節(jié)點(diǎn)以外的其他節(jié)點(diǎn)有且只有一個(gè)雙親節(jié)點(diǎn)眠副。

節(jié)點(diǎn)表示記錄類型画切,連線表示記錄類型之間的聯(lián)系己单。記錄類型描述實(shí)體错忱,包含若干個(gè)字段,字段描述實(shí)體的屬性身弊。同一記錄類型中各字段不能同名娃弓,每個(gè)記錄類型可以定義一個(gè)排序字段典格,稱為碼字段,唯一表示一個(gè)記錄值台丛。

(2)數(shù)據(jù)操縱與完整性約束:插入時(shí)耍缴,無雙親節(jié)點(diǎn)就不能插入它的子女節(jié)點(diǎn)。刪除時(shí),刪除雙親節(jié)點(diǎn)值相應(yīng)的子女節(jié)點(diǎn)值也將被同時(shí)刪除私恬。

(3)優(yōu)缺點(diǎn):優(yōu)點(diǎn)——簡(jiǎn)單清晰债沮,查詢效率高,性能優(yōu)于關(guān)系數(shù)據(jù)庫本鸣,不低于網(wǎng)狀數(shù)據(jù)庫疫衩,提供良好的完整性支持。缺點(diǎn)——無法表示現(xiàn)實(shí)世界中非層次性的聯(lián)系(多對(duì))荣德,對(duì)插入刪除操作的限制多闷煤,應(yīng)用程序編寫比較復(fù)雜,查詢子女節(jié)點(diǎn)必須通過雙親節(jié)點(diǎn)涮瞻,結(jié)構(gòu)嚴(yán)密層次命令趨于程序化鲤拿。

4.2.2 網(wǎng)狀模型

為了處理現(xiàn)實(shí)世界中的非層次關(guān)系,網(wǎng)狀數(shù)據(jù)庫采用網(wǎng)狀模型署咽,典型代表是DBTG系統(tǒng)近顷,數(shù)據(jù)系統(tǒng)語言研究會(huì),20世紀(jì)70年代宁否。

(1)數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)庫中滿足兩個(gè)條件的基本層次聯(lián)系集合稱為網(wǎng)狀模型:1)允許一個(gè)以上的節(jié)點(diǎn)無雙親窒升;2)一個(gè)節(jié)點(diǎn)可以有多于一個(gè)的雙親。

(2)數(shù)據(jù)操縱與完整性約束:對(duì)記錄碼的約束慕匠,碼唯一表示記錄的數(shù)據(jù)項(xiàng)集合饱须;雙親記錄和子女記錄之間是一對(duì)多的聯(lián)系;插入刪除約束台谊。

(3)優(yōu)缺點(diǎn):優(yōu)點(diǎn)——更直接的描述現(xiàn)實(shí)世界蓉媳,多對(duì)多的關(guān)聯(lián);良好的性能锅铅,存取效率較高酪呻。缺點(diǎn)——結(jié)構(gòu)復(fù)雜,不利于用戶掌握狠角;DDL号杠、DML復(fù)雜,用戶不易掌握與使用丰歌;用戶必須了解系統(tǒng)結(jié)構(gòu)的細(xì)節(jié)姨蟋,以便在訪問數(shù)據(jù)是選擇存取路徑,這加重了應(yīng)用程序的編寫負(fù)擔(dān)立帖。

4.2.3 關(guān)系模型

關(guān)系數(shù)據(jù)庫系統(tǒng)采用關(guān)系模型作為數(shù)據(jù)組織方式眼溶。IBM研究員E.F.Codd首次提出了數(shù)據(jù)庫系統(tǒng)的關(guān)系模型,1970晓勇,1981獲圖靈獎(jiǎng)堂飞。

(1)數(shù)據(jù)結(jié)構(gòu):關(guān)系模型由一組關(guān)系組成灌旧,關(guān)系的數(shù)據(jù)結(jié)構(gòu)是一張規(guī)范化的二維表。表中的一行是一個(gè)元組绰筛,表中的一列是一個(gè)屬性枢泰。表中唯一確定一個(gè)元組的的屬性是,屬性值的范圍稱為铝噩,元組中的一個(gè)屬性值稱為一個(gè)分量衡蚂。關(guān)系的每個(gè)分量必須是一個(gè)不可分的數(shù)據(jù)項(xiàng),即不允許表中有表骏庸。

(2)數(shù)據(jù)操縱與完整性約束:數(shù)據(jù)操縱包括增刪改查毛甲,需滿足關(guān)系的完整性約束條件,包括三類具被,實(shí)體完整性玻募,參照完整性和用戶定義的完整性。關(guān)系模型中的數(shù)據(jù)操作是集合操作一姿,關(guān)系模型把存取路徑對(duì)用戶隱蔽七咧,提高了數(shù)據(jù)的獨(dú)立性。

(3)優(yōu)缺點(diǎn):優(yōu)點(diǎn)——建立在嚴(yán)格的數(shù)學(xué)概念的基礎(chǔ)上啸蜜,實(shí)體和實(shí)體之間的聯(lián)系均為關(guān)系坑雅,數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單辈挂,清晰衬横,易懂,易用终蒂,存取路徑對(duì)用戶透明蜂林,數(shù)據(jù)獨(dú)立性高,安全保密性好拇泣,簡(jiǎn)化了程序員的工作噪叙。缺點(diǎn)——查詢效率不如格式化模型,需要對(duì)用戶的查詢請(qǐng)求進(jìn)行數(shù)學(xué)上的優(yōu)化霉翔,開發(fā)數(shù)據(jù)庫管理系統(tǒng)的難度較大睁蕾。

5. 數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu):從數(shù)據(jù)庫應(yīng)用開發(fā)人員角度看,數(shù)據(jù)庫系統(tǒng)通常采用三級(jí)模式結(jié)構(gòu)(數(shù)據(jù)庫系統(tǒng)內(nèi)部的系統(tǒng)結(jié)構(gòu))债朵。從數(shù)據(jù)庫最終用戶的角度看子眶,數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)分為單用戶結(jié)構(gòu),主從式結(jié)構(gòu)序芦,分布式結(jié)構(gòu)臭杰,客戶-服務(wù)器,瀏覽器-應(yīng)用服務(wù)器/數(shù)據(jù)庫服務(wù)器多層結(jié)構(gòu)等(數(shù)據(jù)庫系統(tǒng)外部的體系結(jié)構(gòu))谚中。

5.1 數(shù)據(jù)庫系統(tǒng)模式的概念

(1)型和值:型是指對(duì)某一類數(shù)據(jù)的結(jié)構(gòu)和屬性的說明渴杆,值是型的一個(gè)具體賦值寥枝。

(2)模式和實(shí)例:模式是對(duì)數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,僅僅描述型磁奖,不涉及具體的值囊拜,模式的一個(gè)具體的值稱為一個(gè)實(shí)例。模式相對(duì)穩(wěn)定比搭,實(shí)例相對(duì)變動(dòng)艾疟。模式反映數(shù)據(jù)的結(jié)構(gòu)和聯(lián)系,實(shí)例反映數(shù)據(jù)庫某一時(shí)刻的狀態(tài)敢辩。

5.2 數(shù)據(jù)庫系統(tǒng)的三級(jí)模式結(jié)構(gòu)

數(shù)據(jù)庫系統(tǒng)的三級(jí)模式結(jié)構(gòu)是指數(shù)據(jù)庫系統(tǒng)是由外模式蔽莱、模式和內(nèi)模式三級(jí)結(jié)構(gòu)。

(1)模式:也稱邏輯模式戚长,是數(shù)據(jù)庫中全體數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述盗冷,是所有用戶的公共數(shù)據(jù)視圖,是數(shù)據(jù)庫系統(tǒng)模式結(jié)構(gòu)的中間層同廉。一個(gè)數(shù)據(jù)庫只有一個(gè)模式仪糖。數(shù)據(jù)庫模式以某一種數(shù)據(jù)模型為基礎(chǔ),將所有用戶的需求結(jié)合成一個(gè)邏輯整體迫肖。數(shù)據(jù)庫管理系統(tǒng)提供模式數(shù)據(jù)定義語言(模式DDL)來嚴(yán)格定義模式锅劝。

(2)外模式:也稱子模式或用戶模式,是數(shù)據(jù)用戶看到和使用的邏輯結(jié)構(gòu)和特征的描述蟆湖,是數(shù)據(jù)庫用戶的數(shù)據(jù)視圖故爵,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示。外模式通常是模式的子集隅津,一個(gè)數(shù)據(jù)庫可以有多個(gè)外模式诬垂。對(duì)于模式中同一數(shù)據(jù),不同用戶在外模式中結(jié)構(gòu)伦仍、類型结窘、長(zhǎng)度、保密級(jí)別等都可以不同充蓝。一個(gè)外模式可以被一個(gè)用戶的多個(gè)應(yīng)用系統(tǒng)使用隧枫,但一個(gè)應(yīng)用程序只能使用一個(gè)外模式。外模式是保證數(shù)據(jù)庫安全性的一個(gè)有力措施谓苟。數(shù)據(jù)庫管理系統(tǒng)提供外模式數(shù)據(jù)定義語言(外模式DDL)來嚴(yán)格定義外模式官脓。

(3)內(nèi)模式:也稱存儲(chǔ)模式,一個(gè)數(shù)據(jù)庫只有一個(gè)內(nèi)模式娜谊,是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述确买,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的組織方式。例如纱皆,記錄的存儲(chǔ)方式是堆存儲(chǔ)湾趾,還是升降序存儲(chǔ)芭商,還是聚簇存儲(chǔ),索引按照什么方式組織搀缠,是B+樹還是hash索引铛楣,數(shù)據(jù)是否壓縮,是否加密等艺普。

5.3 數(shù)據(jù)庫的二級(jí)映像功能與數(shù)據(jù)獨(dú)立性

為了能夠在系統(tǒng)內(nèi)部實(shí)現(xiàn)這三個(gè)抽象層次的聯(lián)系和轉(zhuǎn)換簸州,數(shù)據(jù)庫管理系統(tǒng)在這三級(jí)模式之間提供兩層映像:外模式/模式映像和模式/內(nèi)模式映像

(1)外模式/模式映像:全局邏輯結(jié)構(gòu)到局部邏輯結(jié)構(gòu)的映像歧譬。同一個(gè)模式對(duì)應(yīng)任意多個(gè)外模式岸浑,對(duì)每一個(gè)外模式,數(shù)據(jù)庫系統(tǒng)都有一個(gè)外模式/模式映像瑰步,映像定義在外模式的描述中矢洲。模式改變時(shí)(增加新的關(guān)系、屬性缩焦、改變屬性和數(shù)據(jù)類型等)读虏,由數(shù)據(jù)庫管理員對(duì)各個(gè)外模式/模式的映像作相應(yīng)改變,可以使外模式保持不變袁滥。應(yīng)用程序依據(jù)數(shù)據(jù)的外模式編寫盖桥,從而應(yīng)用程序不必修改,保證了數(shù)據(jù)與程序的邏輯獨(dú)立性题翻。

(2)模式/內(nèi)模式映像:該映像是唯一的揩徊,它定義了數(shù)據(jù)全局邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu)之間的對(duì)應(yīng)關(guān)系。映像定義包含在模式描述中藐握,存儲(chǔ)結(jié)構(gòu)改變時(shí)靴拱,數(shù)據(jù)庫管理員對(duì)模式/內(nèi)模式映像作相應(yīng)改變,可以使模式保持不變猾普,從而應(yīng)用程序也不必改變,保證了數(shù)據(jù)與程序的物理獨(dú)立性本谜。

數(shù)據(jù)庫模式即全局邏輯結(jié)構(gòu)是數(shù)據(jù)庫的中心與關(guān)鍵初家,它獨(dú)立于數(shù)據(jù)庫的其他層次。內(nèi)模式依賴于模式乌助,但獨(dú)立于數(shù)據(jù)的用戶視圖(外模式)溜在,也獨(dú)立于具體的存儲(chǔ)設(shè)備。外模式面向具體的應(yīng)用程序他托,定義在邏輯模式之上掖肋,但獨(dú)立于存儲(chǔ)模式和存儲(chǔ)設(shè)備,應(yīng)具有可擴(kuò)充性赏参。

數(shù)據(jù)與程序之間的獨(dú)立性使得數(shù)據(jù)的定義和描述可以從應(yīng)用程序中分離出去志笼,數(shù)據(jù)的存取?由數(shù)據(jù)庫管理系統(tǒng)管理沿盅,簡(jiǎn)化了應(yīng)用程序的編制,減少了應(yīng)用程序的維護(hù)與修改纫溃。

6. 數(shù)據(jù)庫系統(tǒng)的組成

數(shù)據(jù)庫系統(tǒng)一般由數(shù)據(jù)庫腰涧、數(shù)據(jù)庫管理系統(tǒng)(及其應(yīng)用開發(fā)工具)、應(yīng)用程序和數(shù)據(jù)庫管理員構(gòu)成紊浩。

(1)硬件平臺(tái)及數(shù)據(jù)庫:數(shù)據(jù)量很大窖铡,數(shù)據(jù)庫管理系統(tǒng)豐富的功能使其自身規(guī)模很大,因此需要1)有足夠大的內(nèi)存坊谁;2)足夠大的磁盤或磁盤陣列等設(shè)備存放數(shù)據(jù)庫费彼;3)有較高的通道能力,以提高數(shù)據(jù)傳送率口芍。

(2)軟件:數(shù)據(jù)庫系統(tǒng)的軟件主要包括數(shù)據(jù)庫管理系統(tǒng)敌买、支持?jǐn)?shù)據(jù)庫管理系統(tǒng)運(yùn)行的操作系統(tǒng)、具有與數(shù)據(jù)庫接口的高級(jí)語言及其編譯系統(tǒng)阶界、以數(shù)據(jù)庫管理系統(tǒng)為核心的應(yīng)用開發(fā)工具虹钮、為特定應(yīng)用環(huán)境開發(fā)的數(shù)據(jù)庫應(yīng)用系統(tǒng)。

(3)人員:開發(fā)膘融、管理和使用數(shù)據(jù)庫系統(tǒng)的人員主要包括數(shù)據(jù)庫管理員芙粱、系統(tǒng)分析員和數(shù)據(jù)庫設(shè)計(jì)人員、應(yīng)用程序員和最終用戶氧映。不同的人員涉及不同的數(shù)據(jù)抽象級(jí)別春畔,具有不同的數(shù)據(jù)視圖

數(shù)據(jù)庫管理員監(jiān)督和管理數(shù)據(jù)庫的兩類共享資源岛都,包括數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)軟件律姨,決定數(shù)據(jù)庫中的信息內(nèi)容和結(jié)構(gòu),決定數(shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)和存取策略臼疫,定義數(shù)據(jù)的安全性要求和完整性約束條件择份,監(jiān)控?cái)?shù)據(jù)庫的使用和運(yùn)行,數(shù)據(jù)庫的改進(jìn)和重組烫堤、重構(gòu)荣赶。系統(tǒng)分析員負(fù)責(zé)應(yīng)用系統(tǒng)的需求分析和規(guī)范說明,確定系統(tǒng)的硬件軟件配置鸽斟,參與數(shù)據(jù)庫系統(tǒng)的概要設(shè)計(jì)拔创。數(shù)據(jù)庫設(shè)計(jì)人員負(fù)責(zé)數(shù)據(jù)庫中數(shù)據(jù)的確定及數(shù)據(jù)庫各級(jí)模式的設(shè)計(jì)。應(yīng)用程序員負(fù)責(zé)設(shè)計(jì)和編寫應(yīng)用系統(tǒng)的程序模塊富蓄,并進(jìn)行調(diào)試和安裝剩燥。用戶(指最終用戶)通過應(yīng)用系統(tǒng)的用戶接口使用數(shù)據(jù)庫,常用的接口方式有瀏覽器立倍、菜單驅(qū)動(dòng)灭红、表格操作侣滩、圖形顯示、報(bào)表書寫等比伏。最終用戶分為偶然用戶胜卤、簡(jiǎn)單用戶和復(fù)雜用戶。

1.2 數(shù)據(jù)庫安全性

數(shù)據(jù)庫的特點(diǎn)之一是由數(shù)據(jù)庫管理系統(tǒng)提供統(tǒng)一的數(shù)據(jù)保護(hù)功能來保證數(shù)據(jù)的安全可靠和正確有效赁项。數(shù)據(jù)庫的數(shù)據(jù)保護(hù)主要包括數(shù)據(jù)的安全性和完整性葛躏。本章主要介紹數(shù)據(jù)庫的安全性。

1. 數(shù)據(jù)庫安全性概述

數(shù)據(jù)的安全性是指保護(hù)數(shù)據(jù)庫以防止不合法使用所造成的數(shù)據(jù)泄露悠菜、更改或破壞舰攒。

(1)數(shù)據(jù)庫的不安全因素:非授權(quán)用戶對(duì)數(shù)據(jù)庫的惡意存取和破壞(黑客),DBMS提供的安全措施包括用戶身份鑒別悔醋、存取控制和視圖等技術(shù)摩窃;數(shù)據(jù)庫中重要或敏感的數(shù)據(jù)被泄漏,DBMS提供的主要技術(shù)有強(qiáng)制存取控制芬骄、數(shù)據(jù)加密存儲(chǔ)和加密傳輸?shù)然福瑢?duì)安全性要求較高的部門提供審計(jì)功能,分析審計(jì)日志可以對(duì)潛在啊的威脅提前采取措施加以防范账阻,對(duì)非授權(quán)用戶的入侵行為及信息破壞情況進(jìn)行跟蹤蒂秘;安全環(huán)境的脆弱性,數(shù)據(jù)庫的安全性與計(jì)算及系統(tǒng)的安全性緊密相關(guān)淘太,包括硬件姻僧、操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等的安全性蒲牧,因此發(fā)展建立了一套可信計(jì)算機(jī)系統(tǒng)的概念和標(biāo)準(zhǔn)撇贺,即安全標(biāo)準(zhǔn),用以規(guī)范和指導(dǎo)安全生產(chǎn)冰抢。

(2)安全標(biāo)準(zhǔn):計(jì)算機(jī)以及信息安全技術(shù)方面有一系列的安全標(biāo)準(zhǔn)松嘶,最有影響的當(dāng)推TCSEC(1985,美國(guó)國(guó)防部DoD)和CC(通用準(zhǔn)則晒屎,1999被ISO采用國(guó)際標(biāo)準(zhǔn)喘蟆,2001被我國(guó)采用為國(guó)家標(biāo)準(zhǔn))。

? ? ? ? TCSEC:又稱桔皮書鼓鲁,1991,美國(guó)國(guó)家計(jì)算機(jī)安全中心(NCSC)頒布TCSEC/TDI港谊,即紫皮書骇吭,將TCSEC擴(kuò)展到數(shù)據(jù)庫管理系統(tǒng)。從四個(gè)方面描述安全性級(jí)別劃分的指標(biāo)歧寺,即安全策略燥狰、責(zé)任棘脐、保證和文檔。根據(jù)計(jì)算機(jī)系統(tǒng)對(duì)各項(xiàng)指標(biāo)的支持情況龙致,TCSEC/TDI將系統(tǒng)劃分為4組7個(gè)等級(jí)蛀缝,依次是D、C(C1目代,C2)屈梁、B(B1,B2榛了,B3)在讶、A(A1),按系統(tǒng)的可信程度逐漸增高霜大。D級(jí):最低級(jí)別构哺。具備基本功能,幾乎無專門的安全性保護(hù)機(jī)制战坤。DOS是操作系統(tǒng)安全標(biāo)準(zhǔn)為D級(jí)的典型例子曙强。 C1級(jí):自主安全保護(hù)。實(shí)現(xiàn)用戶與數(shù)據(jù)的分離途茫,進(jìn)行自主存取控制(DAC)碟嘴,保護(hù)或限制用戶權(quán)限的傳播。C2級(jí):安全產(chǎn)品的最低檔慈省,提供受控的存取保護(hù)臀防。個(gè)人身份注冊(cè),實(shí)施審計(jì)和資源隔離边败。例如Win2000和Oracle7袱衷。B1級(jí):標(biāo)記安全保護(hù)。對(duì)系統(tǒng)數(shù)據(jù)加以標(biāo)記笑窜,對(duì)標(biāo)記的主體和客體進(jìn)行強(qiáng)制存取控制(MAC)和審計(jì)致燥。該級(jí)別的產(chǎn)品被認(rèn)為是真正意義上的安全產(chǎn)品。B2級(jí):結(jié)構(gòu)化保護(hù)排截。對(duì)系統(tǒng)內(nèi)的所有主體和客體實(shí)施DAC和MAC嫌蚤。B3級(jí):安全域。該級(jí)的TCB(Trusted Computing Base)必須滿足訪問監(jiān)控器的要求断傲,審計(jì)跟蹤能力更強(qiáng)脱吱,提供系統(tǒng)恢復(fù)過程。A1級(jí):驗(yàn)證設(shè)計(jì)认罩。提供B3級(jí)保護(hù)的同時(shí)給出系統(tǒng)的形式化設(shè)計(jì)說明和驗(yàn)證箱蝠。

? ? ? ? CC:信息技術(shù)安全性的結(jié)構(gòu),即把對(duì)信息產(chǎn)品的安全要求分為安全功能要求安全保證要求。安全功能要求用以規(guī)范產(chǎn)品和系統(tǒng)的安全行為宦搬,安全保證要求解決如何正確有效地實(shí)施這些功能牙瓢。有7級(jí)評(píng)估保證級(jí)

2. 數(shù)據(jù)庫安全性控制

數(shù)據(jù)庫的安全性控制主要包括用戶身份鑒別、多層存取控制间校、審計(jì)矾克、視圖和數(shù)據(jù)加密

2.1 用戶身份鑒別:是DBMS提供的最外層安全保護(hù)措施憔足,用戶標(biāo)識(shí)(用戶名和標(biāo)識(shí)號(hào))——系統(tǒng)核對(duì)——權(quán)限使用胁附。常見的用戶身份鑒別方法有靜態(tài)口令鑒別(即密碼,存儲(chǔ)和傳輸時(shí)加密)四瘫、動(dòng)態(tài)口令鑒別(短信密碼和動(dòng)態(tài)令牌)汉嗽、生物特征鑒別(生物特征唯一且穩(wěn)定,指紋找蜜、虹膜和掌紋)和智能卡鑒別(不可復(fù)制饼暑,硬件加密功能,存在安全隱患洗做,個(gè)人身份識(shí)別碼PIN和智能卡相結(jié)合)弓叛。

2.2 存取控制:確保只授權(quán)給有資格的用戶訪問數(shù)據(jù)庫的權(quán)限(用戶對(duì)某一數(shù)據(jù)對(duì)象的操作權(quán)力,令所有未授權(quán)的人員無法接近數(shù)據(jù)诚纸。存取控制機(jī)制主要包括定義用戶權(quán)限合法權(quán)限檢查撰筷。DBMS需提供適當(dāng)?shù)恼Z言來定義用戶權(quán)限,這些定義經(jīng)過編譯存儲(chǔ)在數(shù)據(jù)字典中畦徘,被稱作安全規(guī)則或授權(quán)規(guī)則毕籽。用戶發(fā)出存取數(shù)據(jù)庫的操作請(qǐng)求(包括操作類型、操作對(duì)象和操作用戶等信息)后井辆,DBMS查找數(shù)據(jù)字典关筒,根據(jù)安全規(guī)則進(jìn)行合法權(quán)限檢查,超出權(quán)限則拒絕杯缺。C2級(jí)提供自主存取控制(DAC)蒸播,B1級(jí)提供強(qiáng)制存取控制(MAC)。

(1)自主存取控制方法:同一用戶對(duì)不同對(duì)象權(quán)限不同萍肆,不同用戶對(duì)同一對(duì)象權(quán)限也不同袍榆。用戶可將其權(quán)限轉(zhuǎn)授其他用戶。大型DBMS都支持自主存取控制塘揣,SQL標(biāo)準(zhǔn)通過GRANT語句REVOKE語句來實(shí)現(xiàn)包雀。用戶權(quán)限由數(shù)據(jù)庫對(duì)象操作類型兩個(gè)要素組成。定義存取權(quán)限(授權(quán))是定義用戶可以在哪些數(shù)據(jù)庫對(duì)象上進(jìn)行哪些類型的操作亲铡。非關(guān)系系統(tǒng)中馏艾,存取控制的數(shù)據(jù)庫對(duì)象僅限于數(shù)據(jù)本身劳曹,關(guān)系數(shù)據(jù)庫系統(tǒng)中奴愉,存取控制的數(shù)據(jù)對(duì)象包括數(shù)據(jù)本身(基本表中的數(shù)據(jù)琅摩、屬性列上的數(shù)據(jù))和數(shù)據(jù)庫模式(數(shù)據(jù)庫、基本表锭硼、視圖和索引等)房资。關(guān)系數(shù)據(jù)庫系統(tǒng)中的操作類型包括對(duì)數(shù)據(jù)本身的增刪改查和對(duì)數(shù)據(jù)庫模式的創(chuàng)建和更新。

? ? ? 權(quán)限的授予與收回:SQL中GRANT語句向用戶授予權(quán)限檀头,REVOKE語句收回已經(jīng)授予用戶的權(quán)限轰异。GRANT 權(quán)限 ON 對(duì)象類型 對(duì)象名 TO 用戶 WITH GRANT OPTION意為對(duì)指定操作對(duì)象的指定操作權(quán)限授予指定的用戶暑始。發(fā)出者可以是數(shù)據(jù)庫管理員搭独、數(shù)據(jù)庫對(duì)象創(chuàng)建者和已經(jīng)擁有該權(quán)限的用戶。接受者可以是一個(gè)或多個(gè)具體的用戶廊镜,也可以是public全體用戶牙肝。如果指定了WITH GRANT OPTION子句,則獲得該權(quán)限的用戶還可以把該權(quán)限授予其他用戶嗤朴,否則不可配椭。REVOKE 權(quán)限 ON 對(duì)象類型 對(duì)象名 FROM 用戶 CASCADE(或RESTRICT);意為收回指定用戶對(duì)指定操作的指定的權(quán)限雹姊。CASCADE為級(jí)聯(lián)股缸,即對(duì)該用戶授予其他用戶的該項(xiàng)權(quán)限一并收回。用戶可以“自主”地決定將數(shù)據(jù)的存取權(quán)限授予何人吱雏、決定是否也將“授權(quán)”的權(quán)限授予別人敦姻,因此稱這樣的存取控制是自主存取控制纠拔。

? ? ? 創(chuàng)建數(shù)據(jù)庫模式的權(quán)限:創(chuàng)建用戶語句 CREATE USER 用戶名 權(quán)限诈悍;,三種權(quán)限是CONNECT權(quán)限滨达、RESOURCE權(quán)限和DBA權(quán)限得滤。CONNECT是默認(rèn)權(quán)限陨献,用戶只能登錄數(shù)據(jù)庫;RESOURCE權(quán)限允許用戶創(chuàng)建基本表和視圖懂更,不能創(chuàng)建模式和用戶眨业;擁有DBA權(quán)限的用戶是系統(tǒng)中的超級(jí)用戶,可以創(chuàng)建新的用戶沮协、模式龄捡、基本表和視圖等,擁有對(duì)所有數(shù)據(jù)庫對(duì)象的存取權(quán)限慷暂,還可授予一般用戶聘殖。

? ? ? 數(shù)據(jù)庫角色:是被命名的一組與數(shù)據(jù)庫操作相關(guān)的權(quán)限晨雳,是權(quán)限的集合。存在的意義是簡(jiǎn)化授權(quán)的過程奸腺。創(chuàng)建角色的SQL語句 CREATE ROLE 角色名餐禁;用GRANT語句給角色授權(quán)和將角色授予用戶(若授權(quán)時(shí)使用WITH ADMIN OPTION則獲得權(quán)限的角色或用戶可以把該權(quán)限授予其他角色),用REVOKE語句收回授權(quán)角色的權(quán)限突照。

(2)強(qiáng)制存取控制方法:數(shù)據(jù)庫對(duì)象被標(biāo)以一定的密級(jí)帮非,每個(gè)用戶被授予一個(gè)級(jí)別的許可證。對(duì)于任意一個(gè)對(duì)象讹蘑,只有具有合法許可證的用戶才可以存取末盔。(實(shí)質(zhì)上是對(duì)數(shù)據(jù)的存取權(quán)限數(shù)據(jù)本身都進(jìn)行安全控制)在強(qiáng)制存取控制中,數(shù)據(jù)庫管理系統(tǒng)所管理的全部實(shí)體被分為主體客體兩大類座慰。主體包括數(shù)據(jù)庫中的實(shí)際用戶和用戶進(jìn)程陨舱,客體包括文件、基本表版仔、索引游盲、視圖等。DBMS給主體和客體的每個(gè)實(shí)例指派一個(gè)敏感度標(biāo)記邦尊,分為絕密(TS)背桐、機(jī)密(S)、可信(C)蝉揍、公開(P)等級(jí)別链峭。主體的敏感度標(biāo)記稱為許可證級(jí)別,客體的敏感度標(biāo)記稱為密級(jí)又沾。強(qiáng)制存取控制機(jī)制通過對(duì)比主體的敏感度標(biāo)記和客體的敏感度標(biāo)記弊仪,最終確定主體是否能夠存取客體。

? ? ? 存取規(guī)則:1)許可證級(jí)別>=密級(jí)時(shí)杖刷,主體可讀取客體励饵;2)許可證級(jí)別<=密級(jí)時(shí),主體可寫客體滑燃。(規(guī)則2的解釋:用戶可以為寫入的數(shù)據(jù)對(duì)象賦予高于自己的許可證級(jí)別的密級(jí)役听,不可低于,一旦寫入表窘,該用戶自己不能讀取典予,否則可以把數(shù)據(jù)惡意降為低密級(jí),從而造成泄漏)

(3)DAC+MAC安全檢查:SQL語法分析&語義檢查——>DAC檢查——>MAC檢查——>繼續(xù)語義檢查

3. 視圖機(jī)制

視圖是用來對(duì)用戶的權(quán)限進(jìn)行限制的機(jī)制乐严,間接地實(shí)現(xiàn)支持存取謂詞的用戶權(quán)限定義瘤袖,實(shí)現(xiàn)對(duì)部分?jǐn)?shù)據(jù)的存取權(quán)限。例如昂验,某用戶只能檢索某個(gè)系學(xué)生的信息(對(duì)部分權(quán)限部分?jǐn)?shù)據(jù)的限制)捂敌。CREATE VIEW 視圖名 AS SELECT* FROM Student WHERE Sdept=‘CS’艾扮;GRANT SELECT ON 視圖名 TO 用戶名;ALL PRIVILEGES 表示所有權(quán)限占婉。

屬性層面的保護(hù)機(jī)制泡嘴,更靈活的數(shù)據(jù)保護(hù)。

4. 審計(jì)

審計(jì)功能是DBMS達(dá)到C2以上安全級(jí)別必不可少的一項(xiàng)指標(biāo)锐涯。審計(jì)功能把用戶對(duì)數(shù)據(jù)庫的所有操作自動(dòng)記錄下來放入審計(jì)日志中磕诊。審計(jì)員利用審計(jì)日志監(jiān)控?cái)?shù)據(jù)庫中的各種行為,重現(xiàn)導(dǎo)致數(shù)據(jù)庫現(xiàn)有狀況的一系列事件纹腌,找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等滞磺,對(duì)潛在的威脅提前采取措施加以防范升薯。;

耗費(fèi)時(shí)間和空間击困?DBMS允許數(shù)據(jù)庫管理員根據(jù)具體應(yīng)用對(duì)安全性的要求靈活地打開或關(guān)閉審計(jì)功能涎劈。

(1)審計(jì)事件:包括四類,服務(wù)器事件阅茶、系統(tǒng)權(quán)限蛛枚、語句事件和模式對(duì)象事件。服務(wù)器事件包括數(shù)據(jù)庫服務(wù)器的啟動(dòng)脸哀、停止蹦浦、配置文件的重新加載。系統(tǒng)權(quán)限對(duì)系統(tǒng)擁有的結(jié)構(gòu)或模式對(duì)象進(jìn)行操作的審計(jì)撞蜂。語句事件是對(duì)SQL語言盲镶,如DDL(Data Definition Language)、DML(Data Manipulation Language蝌诡,數(shù)據(jù)操縱語言溉贿,對(duì)數(shù)據(jù)的增刪改查)、DQL(Data Query Language)及DCL(Data Control Language)語句的審計(jì)浦旱。模式對(duì)象事件對(duì)特定模式對(duì)象上進(jìn)行的SELECT或DML操作的審計(jì)宇色,模式對(duì)象包括表、視圖颁湖、存儲(chǔ)過程宣蠕、函數(shù)等。

(2)審計(jì)功能:審計(jì)查閱方式(基本的爷狈、可選的植影、有限的等)、審計(jì)規(guī)則(DB初始化時(shí)設(shè)定)涎永、審計(jì)分析和報(bào)表功能思币、審計(jì)日志管理(防止審計(jì)員誤刪鹿响,先轉(zhuǎn)儲(chǔ)后刪除,轉(zhuǎn)儲(chǔ)的審計(jì)記錄文件提供完整性和保密性保護(hù)谷饿,只允許審計(jì)員查閱惶我,不允許任何用戶修改)、DBMS提供查詢審計(jì)設(shè)置及審計(jì)記錄信息的專門時(shí)圖博投。

(3)設(shè)置和取消審計(jì)功能的語句:AUDIT語句和NOAUDIT語句绸贡。審計(jì)分為用戶級(jí)審計(jì)系統(tǒng)級(jí)審計(jì)。用戶級(jí)審計(jì)是指由任何用戶設(shè)置的毅哗,針對(duì)用戶自己創(chuàng)建的數(shù)據(jù)庫表或視圖的審計(jì)听怕,記錄所有用戶對(duì)這些表或視圖的訪問及操作。系統(tǒng)級(jí)審計(jì)只能由數(shù)據(jù)庫管理員設(shè)置虑绵,用以檢測(cè)登錄要求尿瞭、授權(quán)和收回操作及其他數(shù)據(jù)庫級(jí)權(quán)限下的操作。AUDIT 操作 ON 表或視圖翅睛;NOAUDIT 操作 ON 表或視圖声搁;審計(jì)設(shè)置與審計(jì)日志一般都存儲(chǔ)在數(shù)據(jù)字典中,在系統(tǒng)表SYS_AUDITTRAIL中查看審計(jì)信息捕发。審計(jì)機(jī)制相當(dāng)于事后檢查疏旨,可以約束用戶可能的惡意操作。

5. 數(shù)據(jù)加密

數(shù)據(jù)加密時(shí)防止數(shù)據(jù)庫數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段扎酷,基本思想是將原始數(shù)據(jù)(明文)——>密文(不可直接識(shí)別)檐涝,不知道解密算法的人無法獲知數(shù)據(jù)內(nèi)容。數(shù)據(jù)加密主要包括存儲(chǔ)加密和傳輸加密霞玄。

(1)存儲(chǔ)加密:包括透明和非透明兩種存儲(chǔ)加密方式骤铃。透明存儲(chǔ)加密是內(nèi)核級(jí)加密保護(hù)方式,對(duì)用戶透明坷剧,是數(shù)據(jù)在寫到磁盤上時(shí)對(duì)數(shù)據(jù)的加密惰爬,應(yīng)用程序不需要修改,只需要?jiǎng)?chuàng)建表語句中說明加密的字段惫企,性能好撕瞧,安全完備性高。非透明的存儲(chǔ)加密時(shí)通過多個(gè)加密函數(shù)實(shí)現(xiàn)的狞尔。

(2)傳輸加密:為保證數(shù)據(jù)庫用戶與服務(wù)器之間的安全數(shù)據(jù)交換丛版,DBMS提供傳輸加密功能。傳輸信息由報(bào)頭和報(bào)文組成偏序,報(bào)頭是路由選擇信息页畦,報(bào)文是數(shù)據(jù)信息。常用的傳輸加密方式有鏈路加密和端到端加密研儒。鏈路加密是對(duì)數(shù)據(jù)在鏈路層進(jìn)行加密豫缨,對(duì)報(bào)頭和報(bào)文均加密独令。端到端加密對(duì)傳輸數(shù)據(jù)在發(fā)送端加密,接收端解密好芭,只加密報(bào)文燃箭,不加密報(bào)頭,中間節(jié)點(diǎn)不需要密碼設(shè)備舍败,但易被非法監(jiān)聽者發(fā)現(xiàn)并獲取敏感信息招狸。

? ? ? 基于安全套接層協(xié)議(Security Socket Layer,SSL)的數(shù)據(jù)庫管理系統(tǒng)可信傳輸方案邻薯,采用端到端的傳輸加密方式裙戏,對(duì)應(yīng)用程序透明。實(shí)現(xiàn)思路包括:1)確認(rèn)通信雙方端點(diǎn)的可靠性弛说。2)協(xié)商加密算法和密鑰挽懦。3)可信數(shù)據(jù)傳輸。

評(píng)價(jià):數(shù)據(jù)庫加密增加了查詢處理的復(fù)雜性木人,查詢效率會(huì)受到影響,加密數(shù)據(jù)的密鑰管理和數(shù)據(jù)加密對(duì)應(yīng)用程序的影響也是數(shù)據(jù)加密過程中需要考慮的問題冀偶。

6. 其他安全性保護(hù)

本部分介紹除DAC和MAC外的其他三種安全性保護(hù)機(jī)制:推理控制醒第、隱蔽信道和數(shù)據(jù)隱私保護(hù)。

(1)推理控制:用來避免用戶利用其能夠訪問的數(shù)據(jù)推知更高密級(jí)的數(shù)據(jù)进鸠,例如利用列的函數(shù)依賴關(guān)系稠曼,用戶從低安全等級(jí)的信息推導(dǎo)出無權(quán)訪問的高安全等級(jí)信息,進(jìn)而導(dǎo)致信息泄露客年。常用的方法有基于函數(shù)依賴的推理控制和基于敏感關(guān)聯(lián)的推理控制霞幅。

(2)隱蔽通道:解決利用未被強(qiáng)制存取控制的SQL執(zhí)行后的反饋結(jié)果信息進(jìn)行間接的信息傳遞。例如量瓜,表的碼值已存在時(shí)司恳,插入時(shí)會(huì)報(bào)錯(cuò),若插入值為高安全等級(jí)用戶寫入的數(shù)據(jù)绍傲,則低安全用戶插入時(shí)報(bào)錯(cuò)扔傅,則導(dǎo)致信息的泄露。

(3)數(shù)據(jù)隱私:是控制不愿被他人知道或他人不便知道的個(gè)人數(shù)據(jù)的能力烫饼。涉及數(shù)據(jù)管理中的數(shù)據(jù)收集猎塞、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理和數(shù)據(jù)發(fā)布等各個(gè)階段杠纵。

1.3 數(shù)據(jù)庫完整性

數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性荠耽。數(shù)據(jù)的正確性是指數(shù)據(jù)是符合現(xiàn)實(shí)世界語義、反映當(dāng)前實(shí)際狀況的比藻;數(shù)據(jù)的相容性是指數(shù)據(jù)庫同一對(duì)象在不同關(guān)系表中的數(shù)據(jù)是符合邏輯的铝量。數(shù)據(jù)的完整性是為了防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù)倘屹,防止數(shù)據(jù)庫中存在不正確的數(shù)據(jù)。防的是不合語義的款违、不正確的數(shù)據(jù)唐瀑。數(shù)據(jù)的安全性是保護(hù)數(shù)據(jù)庫防止惡意破壞和非法存取。防的是非法用戶和非法操作及非法存取插爹。

為了維護(hù)數(shù)據(jù)庫的完整性哄辣,DBMS須實(shí)現(xiàn)以下功能:1)提供定義完整性約束條件的機(jī)制。完整性約束條件=完整性規(guī)則=數(shù)據(jù)必須滿足的語義約束條件赠尾。SQL標(biāo)準(zhǔn)適用了一系列概念來描述完整性力穗,包括關(guān)系模型的實(shí)體完整性、參照完整性和用戶定義完整性气嫁。2)提供完整性檢查的方法当窗。檢查是否滿足完整性約束條件。一般在增刪改操作和事務(wù)提交時(shí)進(jìn)行檢查寸宵。3)進(jìn)行違約處理崖面。拒絕執(zhí)行該操作(NO ACTION)或級(jí)聯(lián)執(zhí)行其他操作(CASCADE)。

關(guān)系數(shù)據(jù)庫管理系統(tǒng)使得完整性控制成為其核心支持的功能梯影,從而為所有用戶和應(yīng)用提供一致的數(shù)據(jù)庫完整性巫员。

1. 實(shí)體完整性:用來保證數(shù)據(jù)的唯一性。

(1)定義實(shí)體完整性:CREATE TABLE中用PRIMARY KEY定義甲棍,定義碼简识。單屬性碼,定義為列級(jí)約束條件或表級(jí)約束條件感猛。多屬性碼定義為表級(jí)約束條件七扰。列級(jí)約束條件跟在屬性后面定義,例如Sno CHAR(9) PRIMARY KEY陪白;表級(jí)約束條件在所有屬性定義結(jié)束后單獨(dú)定義颈走,例如PRIMARY KEY(Sno,Cno)。

(2)實(shí)體完整性檢查和違約處理:當(dāng)插入記錄對(duì)主碼列進(jìn)行更新操作時(shí)拷泽,自動(dòng)進(jìn)行實(shí)體完整性檢查疫鹊。包括檢查主碼是否唯一,不唯一拒絕操作司致,檢查主碼的各個(gè)屬性是否為空拆吆,一個(gè)為空拒絕操作。

? ? ? ? 唯一性檢查的方法:全表掃描和對(duì)主碼建立索引脂矫。全表掃描非常耗時(shí)枣耀。對(duì)主碼建立的索引,例如B+樹,可以大大提高效率捞奕。

2. 參照完整性:用來保證數(shù)據(jù)庫各表之間的一致性牺堰。

(1)定義參照完整性:CREATE TABLE中用FOREIGN KEY定義,定義外碼颅围,用REFERENCES短語指明外碼參照哪些表的主碼伟葫。例如,F(xiàn)OREIGN KEY (Sno) REFERENCES Student(Sno)院促。

(2)參照完整性檢查和違約處理:對(duì)被參照表和參照表進(jìn)行增刪改操作時(shí)進(jìn)行檢查筏养,確保兩個(gè)表的相容性。不一致發(fā)生時(shí)常拓,處理策略有拒絕執(zhí)行渐溶、級(jí)聯(lián)操作(當(dāng)刪除或修改被參照表的一個(gè)元組導(dǎo)致與參照表的不一致時(shí),刪除或修改參照表中的所有導(dǎo)致不一致的元組)弄抬、設(shè)置為空值茎辐。關(guān)于外碼能否為空值的問題:若表a的外碼為表a的主碼時(shí),必須定義為非空掂恕,否則可以為空值拖陆。對(duì)不同的操作采用不同的違約處理,例如懊亡,F(xiàn)OREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE NO ACTION ON UPDATE CASCADE慕蔚。

3. 用戶定義的完整性:針對(duì)某一具體應(yīng)用的數(shù)據(jù)必須滿足的語義要求。

(1)屬性上的約束條件:(定義)創(chuàng)建表定義屬性時(shí)斋配,可以根據(jù)要求定義對(duì)屬性的約束條件,即屬性值限制灌闺,包括列值非空(Sno CHAR(9) NOT NULL)艰争、列值唯一(Dname CHAR(9) UNIQUE)、檢查列值是否滿足一個(gè)條件表達(dá)式(Ssex CHAR(2) CHECK (Ssex IN('男','女')))桂对。(違約處理)插入元組或修改屬性值時(shí)檢查甩卓,不滿足則拒絕執(zhí)行操作。

(2)元組上的約束條件:(定義)創(chuàng)建表時(shí)用CHECK短語定義元組上的約束條件蕉斜,即元組級(jí)的限制逾柿。可以設(shè)置不同屬性之間的取值的相互約束條件宅此。例机错,CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')意思為性別為女性的元組能通過檢查,若性別是男性時(shí)父腕,需要檢查名字不能以Ms.開頭弱匪。(違約處理)插入元組或修改屬性值時(shí)檢查,不滿足則拒絕執(zhí)行操作璧亮。

4. 其它完整性控制機(jī)制:包括完整性約束條件的命名與修改萧诫,域的完整性限制斥难,斷言和觸發(fā)器。

(1)完整性約束命名子句:(功能)通過對(duì)完整性約束條件命名帘饶,可靈活地增加哑诊、刪除一個(gè)完整性約束條件。(命名語句)CONSTRAINT <完整性約束條件名><完整性約束條件>(e.g. CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999) 即將“學(xué)號(hào)在90000~99999之間”的約束條件命名為C1)及刻,完整性約束條件包括NOT NULL镀裤,UNIQUE,PRIMARY KEY提茁,F(xiàn)OREIGN KEY淹禾,CHECK短語等。(刪除約束條件)ALTER TABLE STUDENT? ? DROP CONSTRAINT C1;(添加約束條件)ALTER TABLE STUDENT? ? ADD CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999) ; 若修改某個(gè)約束條件茴扁,則可先將其刪除后添加一個(gè)新的約束條件铃岔。

(2)域中的完整性限制:(域的定義)域是一組具有相同數(shù)據(jù)類型的值的集合,通過CREATE DOMAIN語句建立一個(gè)域峭火。(域的功能)域可以用來定義屬性毁习,通過對(duì)域的完整性約束實(shí)現(xiàn)對(duì)屬性的完整性約束,這樣的優(yōu)點(diǎn)是卖丸,數(shù)據(jù)庫中不同的屬性可以來自同一個(gè)域纺且,當(dāng)域上的完整性約束條件改變時(shí)只需修改域的定義即可,不必一一修改域上的各個(gè)屬性稍浆。(e.g. 建立一個(gè)性別域载碌,并聲明性別域的取值范圍:CREATE DOMAIN GenderDomain CHAR(2)? ? CHECK(VALUE IN('男','女')); 則在建表時(shí)對(duì)Ssex的說明可以由Ssex CHAR(2)? ? CONSTRAINT C4 CHECK(Ssex IN ('男','女'))改寫為Ssex GenderDomain

域的完整性約束條件也可通過(1)中的完整性約束命名子句進(jìn)行命名和操作衅枫。

(3)斷言:通過聲明斷言來指定更具一般性的約束和定義涉及多個(gè)表或聚集操作的比較復(fù)雜的完整性約束嫁艇。斷言創(chuàng)建后,任何對(duì)斷言中所涉及關(guān)系的操作都會(huì)觸發(fā)關(guān)系數(shù)據(jù)庫管理系統(tǒng)對(duì)斷言的檢查弦撩,任何使斷言不為真值的操作都會(huì)被拒絕執(zhí)行步咪。(創(chuàng)建語句)CREATE ASSERTION<斷言名><CHECK 子句>, e.g. 限制數(shù)據(jù)庫課程最多60名學(xué)生選修:CREATE ASSERTION ASSE_SC_DB_NUM? CHECK(60>=(SELECT count(*) FROM Course,SC WHERE SC.CNO=COURSE.CNO AND COURSE.CNAME='數(shù)據(jù)庫')).(刪除語句)DROP ASSERTION <斷言名>

(4)觸發(fā)器:是用戶定義在關(guān)系表上的一類由事件驅(qū)動(dòng)的特殊過程,一旦定義益楼,觸發(fā)器將被保存在數(shù)據(jù)庫服務(wù)器中猾漫,任何用戶對(duì)表的增刪改查操作均由服務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器,在核心層進(jìn)行集中的完整性控制感凤。觸發(fā)器類似于約束悯周,但是比約束更靈活,可以實(shí)施更為復(fù)雜的檢查和操作俊扭,具有更精細(xì)和更強(qiáng)大的數(shù)據(jù)控制能力队橙。

(定義)觸發(fā)器又叫事件-條件-動(dòng)作規(guī)則,即當(dāng)特定的系統(tǒng)事件(如表的增刪改操作,事務(wù)的結(jié)束等)發(fā)生時(shí)捐康,對(duì)規(guī)則的條件進(jìn)行檢查仇矾,若條件成立,則執(zhí)行動(dòng)作解总,否則不執(zhí)行贮匕,規(guī)則中的動(dòng)作體可以很復(fù)雜,可以設(shè)計(jì)其他表和其他數(shù)據(jù)庫對(duì)象花枫,通常是一段SQL存儲(chǔ)過程刻盐。觸發(fā)器的定義語言格式如下:CREATE TRIGGER <觸發(fā)器名> {BEFORE|AFTER} <觸發(fā)事件> ON <表名> REFERENCING NEW|OLD ROW AS<變量> FOR EACH{ROW|STATEMENT} [WHEN<觸發(fā)條件>] <觸發(fā)動(dòng)作體> (說明:只有表的擁有者才可以在表上創(chuàng)建觸發(fā)器,并且一個(gè)表上創(chuàng)建的觸發(fā)器數(shù)目有限劳翰,具體數(shù)量取決于具體的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的設(shè)計(jì)敦锌;觸發(fā)器名可以包含模式名,也可不含佳簸,同一模式下乙墙,觸發(fā)器名唯一,出發(fā)起名和表名在同一模式下生均;觸發(fā)器只能定義在基本表(也稱為觸發(fā)器的目標(biāo)表)上听想,不能定義在視圖上;觸發(fā)事件可以是INSERT马胧、DELETE或UPDATE汉买,也可以是幾個(gè)事件的組合,如INSERT OR DELETE佩脊,還可以是UPDATE OF <觸發(fā)列蛙粘,...>,即進(jìn)一步指明修改哪些列時(shí)激活觸發(fā)器威彰,AFTER/BEFORE 是觸發(fā)的時(shí)機(jī)组题,即事件之前觸發(fā)還是事件之后觸發(fā);觸發(fā)器按照所觸發(fā)動(dòng)作的間隔尺寸可以分為行級(jí)觸發(fā)器(FOR EACH ROW)和語句級(jí)觸發(fā)器(FOR EACH STATEMENT)抱冷;只有當(dāng)觸發(fā)條件為真時(shí)觸發(fā)動(dòng)作體才執(zhí)行,否則觸發(fā)動(dòng)作體不執(zhí)行梢褐,如果省略WHEN觸發(fā)條件旺遮,則觸發(fā)動(dòng)作體在觸發(fā)器激活后立即執(zhí)行;觸發(fā)動(dòng)作體可以是匿名的PL/SQL過程塊盈咳,也可以是對(duì)已創(chuàng)建存儲(chǔ)過程的調(diào)用耿眉,若觸發(fā)動(dòng)作體執(zhí)行失敗,觸發(fā)器事件終止執(zhí)行鱼响,目標(biāo)表或?qū)ο蟛话l(fā)生任何變化鸣剪。)

【例】當(dāng)對(duì)表SC的Grade屬性進(jìn)行修改時(shí),若分?jǐn)?shù)增加了10%,則將此次操作記錄到另一個(gè)表SC_U (Sno筐骇、Cno债鸡、Oldgrade、Newgrade)中铛纬,其中Oldgrade是修改前的分?jǐn)?shù)厌均,Newgrade是修改后的分?jǐn)?shù)。

? ? CREATE TRIGGER SC_T? ? /*SC_T是觸發(fā)器的名字*/

? ? AFTER UPDATE OF Grade ON SC? ? ? /*UPDATE OF Grade ON SC 是觸發(fā)事件告唆,AFTER是觸發(fā)時(shí)機(jī)棺弊,表示當(dāng)對(duì)SC的Grade屬性修改完后再觸發(fā)下面的規(guī)則*/

? ? REFERENCING

? ? ? ? ? ? OLDROW AS OldTuple, NEWROW AS NewTuple

? ? FOR EACH ROW? ? ? ? /*行級(jí)觸發(fā)器,即每次執(zhí)行一次Grade更新擒悬,下面的規(guī)則就執(zhí)行一次*/

? ? WHEN (NewTuple.Grade>=1.1*OldTuple.Grade)? ? /*觸發(fā)條件模她,只有該條件為真時(shí)才執(zhí)行下面的操作*/

? ? ? ? ? ? INSERT INTO SC_U (Sno,Cno,OldGrade,NewGrade)

? ? ? ? ? ? VALUES (OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade)

(執(zhí)行原則)一個(gè)數(shù)據(jù)表上可能定義了多個(gè)觸發(fā)器,如多個(gè)BEFORE觸發(fā)器懂牧,多個(gè)AFTER觸發(fā)器等侈净,同一個(gè)表上的多個(gè)觸發(fā)器激活時(shí)遵循如下的執(zhí)行順序:1)執(zhí)行該表上的BEFORE觸發(fā)器;2)激活觸發(fā)器的SQL語句归苍;3)執(zhí)行該表上的AFTER觸發(fā)器用狱。多個(gè)BEFORE(AFTER)觸發(fā)器,遵循“誰先創(chuàng)建誰先執(zhí)行”的原則拼弃,按照觸發(fā)器創(chuàng)建的時(shí)間先后順序執(zhí)行夏伊。

(刪除)DROP TRIGGER <觸發(fā)器名> ON <表名>; 觸發(fā)器必須是一個(gè)已創(chuàng)建的觸發(fā)器吻氧,并且只能由具有相應(yīng)權(quán)限的用戶刪除溺忧。

1.4 數(shù)據(jù)恢復(fù)技術(shù)

事務(wù)是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用程序的基本邏輯單元盯孙。事務(wù)處理技術(shù)主要包括數(shù)據(jù)庫恢復(fù)技術(shù)并發(fā)控制技術(shù)鲁森。

1. 事務(wù)的基本概念

(1)事務(wù):是用戶定義的一個(gè)數(shù)據(jù)庫操作序列,是一個(gè)不可分割的工作單位振惰。

(2)事務(wù)與程序:一般地講歌溉,一個(gè)程序包含多個(gè)事務(wù)。

(3)事務(wù)定義語句:BEGAIN TRANSACTION(開始)骑晶;COMMIT(提交痛垛,即提交事務(wù)的所有操作,將事務(wù)中所有對(duì)數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫中去)桶蛔;ROLLBACK(回滾匙头,即發(fā)生故障,事務(wù)終止仔雷,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫已完成的操作全部撤銷蹂析,回滾到事務(wù)開始時(shí)的狀態(tài))舔示;

(4)事務(wù)的ACID特性:原子性(Atomicity)、一致性(Consistency)电抚、隔離性(Isolation)和持續(xù)性(Durability)惕稻。原子性是指事務(wù)是數(shù)據(jù)庫的邏輯工作單位;一致性是指數(shù)據(jù)庫必須從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)喻频;隔離性是指一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾缩宜,事務(wù)內(nèi)部操作及使用的數(shù)據(jù)與其他并發(fā)執(zhí)行的事務(wù)互不干擾;持續(xù)性也成永久性甥温,是指一旦提交锻煌,永久修改。

(5)破壞事務(wù)ACID特性的因素:1)多個(gè)事務(wù)并行運(yùn)行時(shí)姻蚓,不同事務(wù)的操作交叉執(zhí)行宋梧;2)事務(wù)在運(yùn)行過程中被強(qiáng)行停止。數(shù)據(jù)恢復(fù)技術(shù)通過把數(shù)據(jù)庫從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(一致狀態(tài)或完整狀態(tài))從而保障事務(wù)的ACID特性不被破壞狰挡。

2. 故障的種類

(1)事務(wù)內(nèi)部的故障:分為可預(yù)期的和非預(yù)期的捂龄。可預(yù)期的故障可以通過條件語句進(jìn)行回滾加叁,非預(yù)期的不能由應(yīng)用程序處理倦沧,如運(yùn)算溢出、并發(fā)事務(wù)發(fā)生死鎖而被選中撤銷該事務(wù)等它匕。對(duì)待此類故障采用事務(wù)撤銷操作展融,即撤銷該事務(wù)已經(jīng)作出的任何對(duì)數(shù)據(jù)庫的修改,使得該事務(wù)好像根本沒有啟動(dòng)一樣。

(2)系統(tǒng)故障(軟故障):是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,使得系統(tǒng)要重啟魏保,例如硬件錯(cuò)誤、操作系統(tǒng)故障红柱、系統(tǒng)斷電等。內(nèi)存中內(nèi)容丟失,運(yùn)行事務(wù)非正常終止,為保證數(shù)據(jù)一致性指么,需要清除這些事務(wù)對(duì)數(shù)據(jù)庫的所有修改,重做所有已提交的事務(wù)榴鼎。

(3)介質(zhì)故障(硬故障):指外存故障涧尿,如磁盤損壞、磁頭碰撞檬贰,瞬時(shí)強(qiáng)磁場(chǎng)干擾等。

(4)計(jì)算機(jī)病毒:是數(shù)據(jù)庫系統(tǒng)的主要威脅缺亮。

各類故障對(duì)數(shù)據(jù)庫的影響總結(jié)為兩種:一是數(shù)據(jù)庫本身被破壞翁涤;二是數(shù)據(jù)本身被破壞可能不正確桥言。

數(shù)據(jù)庫恢復(fù)的基本原理是冗余,數(shù)據(jù)庫中任何一部分被破壞或不正確的數(shù)據(jù)可以根據(jù)存儲(chǔ)在系統(tǒng)別處的冗余數(shù)據(jù)來重建葵礼。

3. 恢復(fù)的實(shí)現(xiàn)技術(shù)

兩個(gè)關(guān)鍵問題:如何建立冗余數(shù)據(jù)如何利用冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫恢復(fù)号阿。建立冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)轉(zhuǎn)儲(chǔ)和登記日志文件。

(1)數(shù)據(jù)轉(zhuǎn)儲(chǔ):數(shù)據(jù)庫管理員定期將整個(gè)數(shù)據(jù)庫復(fù)制到磁帶鸳粉、磁盤或其他存儲(chǔ)介質(zhì)上保存起來的過程扔涧。備用數(shù)據(jù)被稱為后備副本或后援副本。當(dāng)數(shù)據(jù)庫遭到破壞后届谈,可以將后備副本重新裝入枯夜。重裝后備副本后數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài),要想恢復(fù)到故障發(fā)生時(shí)的狀態(tài)艰山,必須重新運(yùn)行自轉(zhuǎn)儲(chǔ)后的所有新事務(wù)湖雹。

轉(zhuǎn)儲(chǔ)可分為靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。靜態(tài)轉(zhuǎn)儲(chǔ)是在系統(tǒng)中無運(yùn)行事務(wù)時(shí)進(jìn)行轉(zhuǎn)儲(chǔ)操作曙搬。靜態(tài)轉(zhuǎn)儲(chǔ)得到的一定是一個(gè)數(shù)據(jù)一致性的副本摔吏。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)時(shí)指轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫進(jìn)行存取或修改,轉(zhuǎn)儲(chǔ)和用戶事務(wù)可以并發(fā)執(zhí)行纵装。轉(zhuǎn)儲(chǔ)結(jié)束時(shí)后援副本上的數(shù)據(jù)并不能保證正確有效征讲。

為了避免動(dòng)態(tài)轉(zhuǎn)儲(chǔ)過程中發(fā)生一致性錯(cuò)誤,必須把轉(zhuǎn)儲(chǔ)期間各事務(wù)對(duì)數(shù)據(jù)庫的修改活動(dòng)等記下來橡娄,建立日志文件诗箍。

數(shù)據(jù)轉(zhuǎn)儲(chǔ)有兩種方式(海量和增量),分別在兩種狀態(tài)(動(dòng)態(tài)和靜態(tài))下進(jìn)行瀑踢,因此數(shù)據(jù)轉(zhuǎn)儲(chǔ)方法可以分為4類:動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ)扳还、動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ)、靜態(tài)海量轉(zhuǎn)儲(chǔ)橱夭、靜態(tài)增量轉(zhuǎn)儲(chǔ)氨距。

(2)登記日志文件

a.定義:日志文件是用來記錄事務(wù)對(duì)數(shù)據(jù)庫的更新操作的文件。

b.格式:以記錄為單位的日志文件和以數(shù)據(jù)塊為單位的日志文件棘劣。

c.內(nèi)容:(以記錄為單位的日志文件)登記各個(gè)事務(wù)的開始標(biāo)記俏让、結(jié)束標(biāo)記、所有更新操作茬暇,記錄事務(wù)標(biāo)識(shí)首昔、操作類型、操作對(duì)象糙俗、更新前數(shù)據(jù)的舊值勒奇、更新后數(shù)據(jù)的新值。(以數(shù)據(jù)塊為單位的日志文件)記錄事務(wù)標(biāo)識(shí)和被更新的數(shù)據(jù)塊巧骚,將更新前的整個(gè)塊和更新后的整個(gè)塊都放入日志文件中赊颠。

d.作用:1)事務(wù)故障恢復(fù)和系統(tǒng)故障恢復(fù)格二;2)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)中建立日志文件,后備副本和日志文件結(jié)合起來才能有效地恢復(fù)數(shù)據(jù)庫竣蹦;3)靜態(tài)轉(zhuǎn)儲(chǔ)中建立日志文件顶猜,當(dāng)數(shù)據(jù)庫毀壞后可重新裝入后援副本把數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的正確狀態(tài),利用日志文件把已完成的事務(wù)進(jìn)行重做痘括,對(duì)故障發(fā)生時(shí)尚未完成的事務(wù)進(jìn)行撤銷處理长窄。

e.登記原則:1)登記的次序嚴(yán)格按并發(fā)事務(wù)執(zhí)行的時(shí)間次序;2)必須先寫日志文件纲菌,后寫數(shù)據(jù)庫挠日。

4. 恢復(fù)策略

目標(biāo):當(dāng)系統(tǒng)運(yùn)行過程中發(fā)生故障時(shí),利用數(shù)據(jù)庫后備副本和日志文件將數(shù)據(jù)庫恢復(fù)到故障前的某個(gè)一致性狀態(tài)驰后。

(1)事務(wù)故障的恢復(fù):恢復(fù)子系統(tǒng)利用日志文件撤銷某發(fā)生故障的事務(wù)已對(duì)數(shù)據(jù)庫進(jìn)行的修改肆资。由系統(tǒng)自動(dòng)完成,對(duì)用戶透明灶芝≈T恢復(fù)步驟是:反向掃描日志文件,查找該事務(wù)的更新操作夜涕,對(duì)該事務(wù)的更新操作執(zhí)行逆操作犯犁,繼續(xù)反向掃描日志文件,對(duì)該事務(wù)的其他操作執(zhí)行逆操作女器,直至讀到此事務(wù)的開始標(biāo)記酸役,事務(wù)故障恢復(fù)完成。

(2)系統(tǒng)故障的恢復(fù):恢復(fù)操作撤銷故障發(fā)生時(shí)未完成的事務(wù)驾胆,重做已完成的事務(wù)涣澡。由系統(tǒng)在重啟時(shí)自動(dòng)完成,不需要用戶干預(yù)丧诺∪牍穑恢復(fù)步驟是:正向掃描日志文件,找出在故障發(fā)生前已經(jīng)提交的事務(wù)驳阎,加入重做隊(duì)列抗愁,同時(shí)找出故障發(fā)生時(shí)尚未完成的事務(wù),加入撤銷隊(duì)列呵晚;對(duì)撤銷隊(duì)列中的各事務(wù)進(jìn)行撤銷處理蜘腌,即反向掃描日志文件,對(duì)更新操作執(zhí)行逆操作饵隙;對(duì)重做隊(duì)列中的各事務(wù)重做處理撮珠,即正向掃描日志文件,重新執(zhí)行每個(gè)更新操作金矛。

(3)介質(zhì)故障的恢復(fù):恢復(fù)方法是重裝數(shù)據(jù)庫芯急,然后重做已完成的事務(wù)倘潜。需要數(shù)據(jù)庫管理員介入,數(shù)據(jù)庫管理員需要重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)副本和有關(guān)的各日志文件副本志于,執(zhí)行恢復(fù)命令,具體的恢復(fù)操作由數(shù)據(jù)庫管理系統(tǒng)自動(dòng)執(zhí)行废睦∷耪溃恢復(fù)步驟是:裝入最新的后備副本,是數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài)嗜湃;裝入相應(yīng)的日志文件副本奈应,即轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的日志文件副本,重做已完成的事務(wù)购披。

5. 具有檢查點(diǎn)的恢復(fù)技術(shù)

(1)恢復(fù)子系統(tǒng)在搜索檢查日志文件時(shí)面臨的兩個(gè)問題杖挣,一是搜索整個(gè)日志將耗費(fèi)大量的時(shí)間,二是很多需要重做處理的事務(wù)實(shí)際上已經(jīng)將更新操作結(jié)果寫入數(shù)據(jù)庫刚陡,恢復(fù)子系統(tǒng)重復(fù)執(zhí)行浪費(fèi)時(shí)間惩妇。

(2)解決辦法:在日志文件中添加一類記錄——檢查點(diǎn)記錄,記錄建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)以及每個(gè)事務(wù)對(duì)應(yīng)的最新的日志記錄地址筐乳。創(chuàng)建一個(gè)“重新開始文件”存放每個(gè)日志文件中檢查點(diǎn)記錄的地址歌殃。

(3)動(dòng)態(tài)維護(hù)日志文件的方法是:周期性地執(zhí)行建立檢查點(diǎn)、保存數(shù)據(jù)庫狀態(tài)的操作蝙云。具體步驟是:寫日志緩沖區(qū)的日志記錄入磁盤的日志文件氓皱,然后寫入一個(gè)檢查點(diǎn)記錄,寫數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)記錄入磁盤的數(shù)據(jù)庫勃刨,然后寫檢查點(diǎn)記錄在日志文件中的地址入一個(gè)重新開始文件波材。

----檢查點(diǎn)可以預(yù)定時(shí)間間隔建立,也可以按照某種規(guī)則建立身隐,例如日志文件寫滿一半建立一個(gè)檢查點(diǎn)廷区。

(4)具有檢查點(diǎn)的恢復(fù)策略:將事務(wù)按照檢查點(diǎn)進(jìn)行分類,對(duì)不同類別的事務(wù)采用不同的處理方式抡医。 對(duì)于在故障發(fā)生時(shí)還未完成的事務(wù)予以撤銷躲因;對(duì)于在檢查點(diǎn)之后完成提交的事務(wù)進(jìn)行重做(可能未寫入數(shù)據(jù)庫);對(duì)于檢查點(diǎn)前完成提交的事務(wù)不必重做忌傻。

(5)系統(tǒng)使用檢查點(diǎn)方法進(jìn)行恢復(fù)的步驟是:從重新開始文件中找到最后一個(gè)檢查點(diǎn)記錄在日志文件中的地址大脉,然后在日志文件中找到該檢查點(diǎn)記錄;然后由該檢查點(diǎn)記錄得到檢查點(diǎn)建立時(shí)刻所有正在執(zhí)行的事務(wù)清單水孩,建立UNDO-LIST(撤銷清單镰矿,所有事務(wù)放入此清單)和REDO-LIST(重做清單,初始為空)俘种;從檢查點(diǎn)開始正向掃描日志文件秤标,對(duì)新開始的事務(wù)暫時(shí)放入撤銷清單绝淡,對(duì)提交的事務(wù)從撤銷清單移入重做清單;對(duì)撤銷清單的事務(wù)執(zhí)行UNDO操作苍姜,對(duì)重做清單的事務(wù)執(zhí)行REDO操作牢酵。

6. 數(shù)據(jù)庫鏡像

數(shù)據(jù)庫鏡像可以根據(jù)數(shù)據(jù)庫管理員的要求,自動(dòng)把整個(gè)數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個(gè)磁盤上衙猪,每當(dāng)數(shù)據(jù)更新時(shí)馍乙,數(shù)據(jù)庫管理系統(tǒng)自動(dòng)把更新后的數(shù)據(jù)復(fù)制過去,由數(shù)據(jù)庫管理系統(tǒng)自動(dòng)保證鏡像數(shù)據(jù)與數(shù)據(jù)庫的一致性垫释。

好處:1)出現(xiàn)數(shù)據(jù)庫介質(zhì)故障時(shí)不需關(guān)閉系統(tǒng)和重裝副本丝格,可由鏡像磁盤提供繼續(xù)使用和恢復(fù);2)無故障時(shí)也可支撐并發(fā)操作棵譬,例如當(dāng)一個(gè)用戶對(duì)數(shù)據(jù)加排他鎖進(jìn)行數(shù)據(jù)修改時(shí)显蝌,其他用戶可以通過鏡像數(shù)據(jù)庫進(jìn)行讀數(shù)據(jù)操作,無需等待該用戶釋放鎖订咸。

注:實(shí)際應(yīng)用中曼尊,為避免頻繁的數(shù)據(jù)復(fù)制造成系統(tǒng)運(yùn)行效率低的問題,用戶往往只選擇對(duì)關(guān)鍵數(shù)據(jù)和日志文件進(jìn)行鏡像算谈,而非整個(gè)數(shù)據(jù)庫涩禀。

1.5 并發(fā)控制

1. 并發(fā)執(zhí)行的作用:由于事務(wù)執(zhí)行過程中可能需要不同的資源,因此并發(fā)執(zhí)行可以充分利用系統(tǒng)資源然眼,發(fā)揮數(shù)據(jù)庫共享資源的特點(diǎn)艾船。

2. 并發(fā)方式:交叉并發(fā)和同時(shí)并發(fā)。交叉并發(fā)方式是指在單處理機(jī)系統(tǒng)中事務(wù)的并行操作輪流交叉運(yùn)行高每,同時(shí)并發(fā)方式是指在多處理機(jī)系統(tǒng)中屿岂,每個(gè)處理機(jī)運(yùn)行一個(gè)事務(wù),多個(gè)處理機(jī)可以同時(shí)運(yùn)行多個(gè)事務(wù)鲸匿,實(shí)現(xiàn)多個(gè)事務(wù)真正的并行運(yùn)行爷怀。(本書討論的并發(fā)控制是基于單處理機(jī)系統(tǒng)的,也可以推廣至多處理機(jī)的情況)

3. 并發(fā)控制:當(dāng)多個(gè)用戶并發(fā)地存取數(shù)據(jù)庫時(shí)就會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況带欢,并發(fā)控制就是控制多用戶的并發(fā)操作不會(huì)破壞事務(wù)的一致性和數(shù)據(jù)庫的一致性运授。

4. 并發(fā)操作造成數(shù)據(jù)不一致性的三種情況:丟失修改、不可重復(fù)讀乔煞、讀臟數(shù)據(jù)吁朦。

(1)丟失修改:兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2提交的結(jié)果破壞(覆蓋)了T1提交的結(jié)果渡贾,導(dǎo)致T1的修改無效(丟失)逗宜。

(2)不可重復(fù)讀:事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2對(duì)數(shù)據(jù)更新,使T1無法再讀出與前一次讀取相同的結(jié)果纺讲,包括值不同擂仍、部分?jǐn)?shù)據(jù)被刪、有部分新數(shù)據(jù)熬甚。

(3)讀臟數(shù)據(jù):事務(wù)T1對(duì)數(shù)據(jù)進(jìn)行了操作后事務(wù)T2讀數(shù)逢渔,T1由于某種原因被撤銷,數(shù)據(jù)恢復(fù)原值乡括,T2讀到的就是臟數(shù)據(jù)复局,即不正確的數(shù)據(jù)。? ?

5. 數(shù)據(jù)不一致的主要原因:并發(fā)操作破壞了事務(wù)的隔離性粟判。

6. 并發(fā)控制的主要技術(shù):封鎖、時(shí)間戳峦剔、樂觀控制法档礁、多版本并發(fā)控制等。

7. 封鎖:事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表吝沫、記錄等)操作之前呻澜,先向系統(tǒng)發(fā)出請(qǐng)求對(duì)其加鎖,在事務(wù)T釋放鎖之前惨险,其他事務(wù)不能更新此數(shù)據(jù)對(duì)象羹幸。基本的封鎖類型有兩種:排他鎖(exclusive locks, 簡(jiǎn)稱X鎖)和共享鎖(share locks, 簡(jiǎn)稱S鎖)辫愉。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖栅受,則只允許T讀取和修改A,其他事務(wù)不能對(duì)A加任何類型的鎖恭朗,從而不能對(duì)A進(jìn)行任何操作屏镊。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則事務(wù)T可以讀A但不能修改A痰腮,其他事務(wù)只能再對(duì)A加S鎖而芥,而不能加X鎖,保證其他事務(wù)可以讀A膀值,但不可以修改棍丐。

8. 封鎖協(xié)議:在運(yùn)用X鎖和S鎖進(jìn)行加鎖時(shí),約定的一些規(guī)則沧踏,例如加鎖申請(qǐng)時(shí)間歌逢、持鎖時(shí)間、釋放時(shí)間等悦冀。

(1)一級(jí)封鎖協(xié)議:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X鎖趋翻,直到事務(wù)結(jié)束才釋放。如果僅僅是讀數(shù)據(jù)而不對(duì)其進(jìn)行修改,是不需要加鎖的踏烙,因此無法保證可重復(fù)讀和不讀臟數(shù)據(jù)师骗。

(2)二級(jí)封鎖協(xié)議:在一級(jí)封鎖協(xié)議的基礎(chǔ)上增加事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完即可釋放S鎖讨惩。由于讀完數(shù)據(jù)后即可釋放S鎖辟癌,所以它不能保證可重復(fù)讀。

(3)三級(jí)封鎖協(xié)議:在一級(jí)封鎖協(xié)議的基礎(chǔ)上增加事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖荐捻,直到事務(wù)結(jié)束才釋放黍少。可以實(shí)現(xiàn)可重復(fù)讀处面。

9. 活鎖與死鎖:

活鎖是指某一事務(wù)由于與其他事務(wù)的封鎖申請(qǐng)沖突而不斷等待厂置。處理方法是采用先來先服務(wù)的策略。

死鎖是指兩個(gè)事務(wù)在互相等待對(duì)方釋放鎖魂角,從而兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束昵济,形成死鎖。處理方法有兩類:預(yù)防死鎖的發(fā)生和檢測(cè)并解除死鎖野揪。

(1)死鎖的預(yù)防:一次封鎖法访忿,即要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則不能繼續(xù)執(zhí)行斯稳。問題:擴(kuò)大了封鎖的范圍海铆,降低了系統(tǒng)的并發(fā)度;由于數(shù)據(jù)庫中的數(shù)據(jù)不斷變化挣惰,導(dǎo)致封鎖對(duì)象可能需要擴(kuò)大卧斟,因此難以精確確定每個(gè)事務(wù)要封鎖的對(duì)象。順序封鎖法憎茂,即要求所有事務(wù)按照一個(gè)固定的順序?qū)?shù)據(jù)對(duì)象進(jìn)行封鎖唆涝。問題:數(shù)據(jù)庫只能夠數(shù)據(jù)對(duì)象極多且不斷變化,要維護(hù)封鎖順序非常困難唇辨;事務(wù)的封鎖請(qǐng)求隨著事務(wù)的執(zhí)行動(dòng)態(tài)決定廊酣,很難事先確定要封鎖的對(duì)象,更無順序可言赏枚。

(2)死鎖的診斷:超時(shí)法亡驰,即如果一個(gè)事務(wù)的等待時(shí)間超過了規(guī)定的時(shí)限,則認(rèn)為發(fā)生死鎖饿幅。問題:容易誤判凡辱;不能及時(shí)發(fā)現(xiàn)死鎖的發(fā)生。等待圖法栗恩,即將事務(wù)及其之間的等待關(guān)系用有向圖表示透乾,在有向圖中出現(xiàn)回路的表明出現(xiàn)了死鎖。

(3)死鎖的接觸:選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷乳乌,釋放此事務(wù)持有的所有鎖捧韵,使其他事務(wù)得以繼續(xù)運(yùn)行下去。對(duì)撤銷的事務(wù)所執(zhí)行的數(shù)據(jù)修改操作必須加以恢復(fù)汉操。

10. 并發(fā)調(diào)度:在不出現(xiàn)數(shù)據(jù)一致性問題的情況下再来,對(duì)于并發(fā)事務(wù)的諸多操作,采用不同的執(zhí)行順序會(huì)產(chǎn)生不同的結(jié)果磷瘤,并發(fā)事務(wù)操作的執(zhí)行序列被稱為并發(fā)調(diào)度芒篷。為了評(píng)價(jià)不同并發(fā)調(diào)度的正確性,數(shù)據(jù)庫系統(tǒng)采用多事務(wù)串行執(zhí)行的結(jié)果作為標(biāo)準(zhǔn)采缚,認(rèn)為執(zhí)行結(jié)果等價(jià)于串行執(zhí)行的并發(fā)調(diào)度是正確的针炉,這樣的并發(fā)調(diào)度也被稱為可串行化調(diào)度。

(1)可串行化調(diào)度:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的扳抽,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)時(shí)的結(jié)果相同糊识。

(2)可串行性(serializability)是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則。

(3)沖突操作:不同事務(wù)對(duì)同一數(shù)據(jù)的讀寫操作和寫寫操作被稱為是沖突操作摔蓝。沖突的地方在于二者順序交換會(huì)產(chǎn)生不同的執(zhí)行結(jié)果。沖突操作之外的其他操作被稱為不沖突操作愉耙。交換兩個(gè)不沖突操作不會(huì)影響執(zhí)行結(jié)果贮尉。

(4)沖突可串行化:一個(gè)調(diào)度在保證沖突操作的次序不變的情況下,通過交換兩個(gè)事務(wù)不沖突操作的次序得到一個(gè)串行調(diào)度朴沿,則稱該調(diào)度為沖突可串行化的調(diào)度猜谚。若一個(gè)調(diào)度是沖突可串行化的,則一定是可串行化的調(diào)度赌渣。(可串行化的調(diào)度不全是沖突可串行化的調(diào)度)

(5)兩段鎖協(xié)議:為保證并發(fā)調(diào)度的可串行化魏铅,數(shù)據(jù)庫管理系統(tǒng)采用兩段鎖(TwoPhase Locking, 簡(jiǎn)稱2PL)協(xié)議。兩段鎖是指一個(gè)事務(wù)的執(zhí)行階段分為兩個(gè)階段坚芜,第一個(gè)階段只封鎖览芳,第二個(gè)階段只釋放封鎖。例如鸿竖,遵循兩段鎖協(xié)議的封鎖順序是Slock A, Slock B, Xlock C, Unlock B, Unlock A, Unlock C. 不遵循兩段鎖協(xié)議的封鎖順序是Slock A, Unlock A, Slock B, Xlock C, Unlock C, Unlock B.

——兩段鎖協(xié)議與可串行化調(diào)度:事務(wù)遵守兩段鎖協(xié)議是可串行化調(diào)度的充分條件沧竟,而不是必要條件。即遵守兩段鎖協(xié)議的事務(wù)其并發(fā)調(diào)度都是可串行化的缚忧,但可串行化的并發(fā)調(diào)度不一定所有事務(wù)都符合兩段鎖協(xié)議悟泵。

——兩段鎖協(xié)議與預(yù)防死鎖的一次封鎖法:一次封鎖法要求每個(gè)事務(wù)必須一次性對(duì)所有數(shù)據(jù)加鎖,中間不能執(zhí)行其他操作闪水,而兩段鎖協(xié)議并不要求一次將所有數(shù)據(jù)加鎖糕非。一次封鎖法遵守兩段鎖協(xié)議,但是遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖。

11. 封鎖的粒度:封鎖對(duì)象的大小朽肥〗ぃ可以是邏輯單元:屬性值、屬性值集合鞠呈、元組融师、關(guān)系、索引項(xiàng)蚁吝、整個(gè)索引旱爆、整個(gè)數(shù)據(jù)庫;也可以是物理單元:頁窘茁、物理記錄等怀伦。

(1)(評(píng)價(jià)方法)封鎖粒度的選擇應(yīng)該考慮兩個(gè)因素:封鎖開銷和并發(fā)度。封鎖開銷指加鎖和釋放的次數(shù)山林,并發(fā)度是指并發(fā)的事務(wù)數(shù)房待。

(2)多粒度封鎖:采用樹結(jié)構(gòu)(稱為多粒度樹)管理數(shù)據(jù)庫中封鎖對(duì)象的包含關(guān)系,對(duì)數(shù)據(jù)對(duì)象進(jìn)行封鎖時(shí)驼抹,自上而下的加鎖桑孩,對(duì)一個(gè)結(jié)點(diǎn)加鎖意味著這個(gè)結(jié)點(diǎn)的所有后裔結(jié)點(diǎn)也被加同樣的鎖。多粒度封鎖中一個(gè)數(shù)據(jù)對(duì)象可能以兩種方式被封鎖:1)顯示封鎖框冀,即直接加到數(shù)據(jù)對(duì)象上的鎖流椒;2)隱式封鎖,即由于其上級(jí)結(jié)點(diǎn)加鎖而使該數(shù)據(jù)對(duì)象加上了鎖明也。系統(tǒng)在檢查封鎖沖突時(shí)需要上下搜索宣虾,即搜索其從根節(jié)點(diǎn)開始的所有上級(jí)結(jié)點(diǎn)、當(dāng)前結(jié)點(diǎn)及其所有下級(jí)結(jié)點(diǎn)温数,若其中某個(gè)數(shù)據(jù)對(duì)象已經(jīng)加了不相容的鎖绣硝,則必須等待。

(3)意向鎖:為了提高多粒度封鎖的效率撑刺,提出采用意向鎖對(duì)被加鎖結(jié)點(diǎn)的上級(jí)結(jié)點(diǎn)加鎖鹉胖,即對(duì)結(jié)點(diǎn)進(jìn)行加鎖時(shí),必須先對(duì)它的上層結(jié)點(diǎn)加意向鎖够傍。三種常用的意向鎖:意向共享鎖(Intent Share Lock次员,IS鎖);意向排他鎖(Intent Exclusive Lock王带,IX鎖)淑蔚;共享意向排他鎖(Share Intent Exclusive Lock,SIX鎖)愕撰。

——IS鎖:如果一個(gè)數(shù)據(jù)對(duì)象加了IS鎖刹衫,說明它的后裔結(jié)點(diǎn)將要或已經(jīng)加了S鎖醋寝。

——IX鎖:如果一個(gè)數(shù)據(jù)對(duì)象加了IX鎖,說明它的后裔結(jié)點(diǎn)將要或已經(jīng)加了X鎖带迟。

——SIX鎖:如果一個(gè)數(shù)據(jù)對(duì)象加了SIX鎖音羞,說明它自身加了S鎖,且它的后裔結(jié)點(diǎn)將要或已經(jīng)加了X鎖仓犬,即對(duì)它加S鎖再加IX鎖嗅绰。

12. 其他并發(fā)控制方法:時(shí)間戳方法、樂觀控制法搀继、多版本并發(fā)控制等窘面。

版本是指數(shù)據(jù)庫中數(shù)據(jù)對(duì)象的一個(gè)快照,記錄了數(shù)據(jù)對(duì)象某個(gè)時(shí)刻的狀態(tài)叽躯。多版本并發(fā)控制通過產(chǎn)生多個(gè)數(shù)據(jù)庫對(duì)象版本财边,實(shí)現(xiàn)寫數(shù)據(jù)事務(wù)和多個(gè)讀數(shù)據(jù)事務(wù)的并發(fā)。

1.6 數(shù)據(jù)庫管理系統(tǒng)

1. 數(shù)據(jù)庫管理系統(tǒng)的基本功能

數(shù)據(jù)庫管理系統(tǒng)(DBMS)主要是是實(shí)現(xiàn)對(duì)共享數(shù)據(jù)有效的組織点骑、存儲(chǔ)酣难、管理和存取。

(1)數(shù)據(jù)庫定義和創(chuàng)建:用數(shù)據(jù)定義語言定義和創(chuàng)建數(shù)據(jù)庫模式黑滴、外模式憨募、內(nèi)模式等數(shù)據(jù)庫對(duì)象。例如關(guān)系數(shù)據(jù)庫中建立數(shù)據(jù)庫袁辈、表菜谣、視圖、索引等吵瞻。

(2)數(shù)據(jù)組織、存儲(chǔ)和管理:數(shù)據(jù)包括數(shù)據(jù)字典甘磨、用戶數(shù)據(jù)橡羞、存取路徑等。要確定數(shù)據(jù)的文件結(jié)構(gòu)和存取方式济舆,實(shí)現(xiàn)數(shù)據(jù)之間的聯(lián)系卿泽。基本目標(biāo)是提高存儲(chǔ)空間利用率和方便存取滋觉,提供多種存取方法(如索引查找签夭、hash查找、順序查找等)以提高存取效率椎侠。

(3)數(shù)據(jù)存鹊谧狻:提供用戶對(duì)數(shù)據(jù)的操作功能,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫數(shù)據(jù)的檢索我纪、插入慎宾、修改和刪除丐吓。提供功能強(qiáng)且易學(xué)易用的數(shù)據(jù)操縱語言、方便的操作方式和較高的數(shù)據(jù)存取效率趟据。

(4)數(shù)據(jù)庫事務(wù)管理和運(yùn)行管理:運(yùn)行控制和管理功能券犁,包括多用戶環(huán)境下的事務(wù)管理功能和安全性、完整性控制功能汹碱,數(shù)據(jù)庫恢復(fù)粘衬、并發(fā)控制和死鎖檢測(cè)、安全性檢查和存取控制等咳促。

(5)數(shù)據(jù)庫的建立和維護(hù):數(shù)據(jù)庫的初始建立稚新、數(shù)據(jù)的轉(zhuǎn)換、數(shù)據(jù)庫的轉(zhuǎn)儲(chǔ)和恢復(fù)等缀、數(shù)據(jù)庫的重組和重構(gòu)以及性能監(jiān)測(cè)分析等枷莉。

(6)其他功能:通信功能,數(shù)據(jù)轉(zhuǎn)換功能等尺迂。

2. 數(shù)據(jù)庫管理系統(tǒng)的系統(tǒng)結(jié)構(gòu)

——層次結(jié)構(gòu):應(yīng)用層笤妙、語言處理層、數(shù)據(jù)存取層噪裕、數(shù)據(jù)存儲(chǔ)層蹲盘。

3. 語言處理層

(1)任務(wù):是把用戶在各種方式下提交給關(guān)系數(shù)據(jù)庫管理系統(tǒng)的數(shù)據(jù)庫語句轉(zhuǎn)換成對(duì)關(guān)系數(shù)據(jù)庫管理系統(tǒng)內(nèi)層可執(zhí)行的基本存取模塊的調(diào)用序列。

(2)數(shù)據(jù)庫語言:數(shù)據(jù)定義語言膳音、數(shù)據(jù)操縱語言和數(shù)據(jù)控制語言召衔。

——對(duì)數(shù)據(jù)定義語言的處理:語法分析、翻譯成內(nèi)部表示祭陷、存儲(chǔ)在系統(tǒng)的數(shù)據(jù)字典中苍凛。

——對(duì)數(shù)據(jù)操縱語言的處理:詞法分析和語法分析、把外部關(guān)系名兵志、屬性名轉(zhuǎn)換為內(nèi)部名醇蝴、查詢檢查(存取權(quán)限和完整性檢查)、對(duì)查詢進(jìn)行優(yōu)化(兩類:代數(shù)優(yōu)化和存取路徑優(yōu)化)想罕。將數(shù)據(jù)庫數(shù)據(jù)操縱語句轉(zhuǎn)換成一串可執(zhí)行的存取動(dòng)作這一過程稱為一個(gè)逐步束縛過程悠栓。兩種翻譯方法:解釋方法和預(yù)編譯方法。①解釋方法是指數(shù)據(jù)操縱語句以原始字符串的形式保存按价,只有需要執(zhí)行時(shí)惭适,利用解釋程序去完成解釋予以執(zhí)行。②預(yù)編譯方法是在用戶提交數(shù)據(jù)操縱語句后對(duì)其進(jìn)行翻譯處理楼镐,保存產(chǎn)生好的可執(zhí)行代碼癞志。③重編譯方法即當(dāng)數(shù)據(jù)庫中因某些成分的改變而使一些程序的編譯結(jié)果無效時(shí),再對(duì)其執(zhí)行一次編譯框产。較好的重編譯方法是將受影響的編譯結(jié)果置“無效”標(biāo)志今阳,在其被執(zhí)行時(shí)才進(jìn)行自動(dòng)重編譯师溅。

4. 數(shù)據(jù)存取層

向上為語言處理層提供單個(gè)元組的存取接口,向下與數(shù)據(jù)存儲(chǔ)層通過系統(tǒng)緩沖區(qū)的存儲(chǔ)接口相連盾舌。數(shù)據(jù)存取層包括事務(wù)管理子系統(tǒng)墓臭、控制信息管理模塊、排序合并子系統(tǒng)妖谴、存取路徑維護(hù)子系統(tǒng)窿锉、封鎖子系統(tǒng)、日志登記子系統(tǒng)膝舅。

5. 緩沖區(qū)管理

數(shù)據(jù)存儲(chǔ)層的主要功能是存儲(chǔ)管理嗡载,包括緩沖區(qū)管理、內(nèi)外存交換仍稀、外存管理等洼滚,其中緩沖區(qū)管理十分重要,數(shù)據(jù)存儲(chǔ)層向數(shù)據(jù)存取層提供的接口就是由定長(zhǎng)頁面組成的系統(tǒng)緩沖區(qū)技潘。

系統(tǒng)緩沖區(qū)設(shè)立的原因:一是它把數(shù)據(jù)存儲(chǔ)層以上各系統(tǒng)成分和實(shí)際的外存設(shè)備隔離遥巴,外存設(shè)備的變更不會(huì)影響其他系統(tǒng)成分,使關(guān)系數(shù)據(jù)庫管理系統(tǒng)具有設(shè)備獨(dú)立性享幽;二是提高存取效率铲掐。

緩沖區(qū)管理中主要算法是淘汰算法查找算法,操作系統(tǒng)中有許多淘汰算法可以借鑒值桩,如FIFO(先進(jìn)先出算法)摆霉、LRU(最近最少使用的先淘汰算法)以及它們的各種改進(jìn)算法。查找算法用來確定所請(qǐng)求的頁是否在內(nèi)存奔坟,可采用順序掃描携栋、折半查找、hash查找算法等咳秉。

6. 數(shù)據(jù)庫的物理組織

問題:數(shù)據(jù)庫是大量數(shù)據(jù)的有結(jié)構(gòu)的綜合性集合婉支,如何將這樣一個(gè)龐大的數(shù)據(jù)集合以最優(yōu)的形式組織起來存放在外存上?

評(píng)價(jià)標(biāo)準(zhǔn):一是存儲(chǔ)效率高滴某,節(jié)省存儲(chǔ)空間磅摹;二是存取效率高滋迈,速度快霎奢,代價(jià)小。

核心問題:數(shù)據(jù)庫實(shí)現(xiàn)的基礎(chǔ)是文件饼灿,對(duì)數(shù)據(jù)庫的任何操作最終要轉(zhuǎn)化為對(duì)文件的操作幕侠,所以在數(shù)據(jù)庫的物理組織中,基本問題是如何設(shè)計(jì)文件組織或者利用操作系統(tǒng)提供的基本的文件組織方法碍彭?

數(shù)據(jù)庫中需要存儲(chǔ)的4類數(shù)據(jù):數(shù)據(jù)描述(包括數(shù)據(jù)外模式晤硕、模式悼潭、內(nèi)模式),數(shù)據(jù)本身舞箍,數(shù)據(jù)之間的聯(lián)系舰褪,存取路徑杨耙。

數(shù)據(jù)庫三種數(shù)據(jù)組織:

(1)數(shù)據(jù)字典的組織:有關(guān)數(shù)據(jù)的描述存儲(chǔ)在數(shù)據(jù)庫的數(shù)據(jù)字典中惠奸,其數(shù)據(jù)量小、使用頻繁兄墅。數(shù)據(jù)字典按不同的內(nèi)容在邏輯上組織為若干張表捎迫,在物理上可以將一個(gè)字典表對(duì)應(yīng)一個(gè)物理文件晃酒,由操作系統(tǒng)負(fù)責(zé)存儲(chǔ)管理,也可以將若干字典表對(duì)應(yīng)一個(gè)物理文件窄绒,由關(guān)系數(shù)據(jù)庫管理系統(tǒng)負(fù)責(zé)存儲(chǔ)組織和管理贝次。

(2)數(shù)據(jù)及數(shù)據(jù)聯(lián)系的組織:操作系統(tǒng)提供的常用文件結(jié)構(gòu)有順序文件、索引文件彰导、索引順序文件蛔翅、hash文件和B樹類文件等。數(shù)據(jù)庫中要求數(shù)據(jù)的組織和存儲(chǔ)必須直接或間接螺戳、顯示或隱含地體現(xiàn)數(shù)據(jù)之間的聯(lián)系搁宾。在關(guān)系數(shù)據(jù)庫中,實(shí)體及實(shí)體之間的聯(lián)系都用一種數(shù)據(jù)結(jié)構(gòu)——“表”來表示倔幼。

(3)存取路徑的組織:在關(guān)系數(shù)據(jù)庫中存取路徑和數(shù)據(jù)是分離的盖腿,對(duì)用戶是隱蔽的,存取路徑可以動(dòng)態(tài)建立损同,十分靈活翩腐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市膏燃,隨后出現(xiàn)的幾起案子茂卦,更是在濱河造成了極大的恐慌,老刑警劉巖组哩,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件等龙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡伶贰,警方通過查閱死者的電腦和手機(jī)蛛砰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黍衙,“玉大人泥畅,你說我怎么就攤上這事±欧” “怎么了位仁?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵柑贞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我聂抢,道長(zhǎng)钧嘶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任琳疏,我火速辦了婚禮康辑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘轿亮。我一直安慰自己疮薇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布我注。 她就那樣靜靜地躺著按咒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪但骨。 梳的紋絲不亂的頭發(fā)上励七,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音奔缠,去河邊找鬼掠抬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛校哎,可吹牛的內(nèi)容都是我干的两波。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼闷哆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼腰奋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抱怔,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤劣坊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后屈留,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體局冰,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年灌危,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了康二。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乍狐,死狀恐怖赠摇,靈堂內(nèi)的尸體忽然破棺而出固逗,到底是詐尸還是另有隱情浅蚪,我是刑警寧澤藕帜,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站惜傲,受9級(jí)特大地震影響洽故,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盗誊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一时甚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哈踱,春花似錦荒适、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至邪财,卻和暖如春陕壹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背树埠。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工糠馆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怎憋。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓又碌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绊袋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赠橙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345