數(shù)據(jù)庫(kù)第9章教學(xué)課件_第1頁(yè)
數(shù)據(jù)庫(kù)第9章教學(xué)課件_第2頁(yè)
數(shù)據(jù)庫(kù)第9章教學(xué)課件_第3頁(yè)
數(shù)據(jù)庫(kù)第9章教學(xué)課件_第4頁(yè)
數(shù)據(jù)庫(kù)第9章教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩127頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第9章 數(shù)據(jù)庫(kù)保護(hù)技術(shù) 9.1 數(shù)據(jù)庫(kù)的安全性9.2 數(shù)據(jù)庫(kù)完整性9.3 數(shù)據(jù)庫(kù)并發(fā)控制9.4 數(shù)據(jù)庫(kù)恢復(fù)技術(shù)9.1 數(shù)據(jù)庫(kù)安全性 數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止不合法的使用造成的數(shù)據(jù)泄密、更改或破壞。數(shù)據(jù)庫(kù)安全性控制的一般方法用 戶(hù)DBMSOSDB 用戶(hù)標(biāo)識(shí)和鑒別 存取控制 操作系統(tǒng)安全保護(hù) 密碼存儲(chǔ) 1. 用戶(hù)標(biāo)識(shí)與鑒別用戶(hù)標(biāo)識(shí) 系統(tǒng)內(nèi)部記錄著所有合法用戶(hù)的標(biāo)識(shí)。系統(tǒng)對(duì)輸入的用戶(hù)名與合法用戶(hù)名對(duì)照,鑒別此用戶(hù)是否為合法用戶(hù)??诹钕到y(tǒng)核對(duì)口令以鑒別用戶(hù)身份 用戶(hù)名和口令易被竊取每個(gè)用戶(hù)預(yù)先約定好一個(gè)計(jì)算過(guò)程或者函數(shù)2. 存取控制 存取控制是對(duì)用戶(hù)存取數(shù)據(jù)庫(kù)的權(quán)力的控制。 (1) 存取機(jī)

2、制的構(gòu)成。1) 定義用戶(hù)權(quán)限,并將用戶(hù)權(quán)限登記到數(shù)據(jù)字典中。2)合法權(quán)限檢查,當(dāng)用戶(hù)提出操作請(qǐng)求時(shí),系統(tǒng)進(jìn)行權(quán)限檢查,拒絕用戶(hù)的非法操作。 (2) 存取機(jī)制的類(lèi)別。1) 自主存取控制(DAC)。 用戶(hù)對(duì)于不同的對(duì)象有不同的存取權(quán)限;不同的用戶(hù)對(duì)同一對(duì)象的存取權(quán)限也各不相同;用戶(hù)可將自己擁有的存取權(quán)限轉(zhuǎn)授給其他用戶(hù)。2) 強(qiáng)制存取控制(MAC)。 每一個(gè)數(shù)據(jù)對(duì)象被標(biāo)以一定的密級(jí);每一個(gè)用戶(hù)也被授予某一個(gè)級(jí)別的許可證;對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶(hù)才可以存取。 3. 視圖、審計(jì)和數(shù)據(jù)加密機(jī)制 為不同的用戶(hù)定義不同的視圖,通過(guò)視圖把數(shù)據(jù)對(duì)象限制在一定范圍內(nèi),把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取的用戶(hù)

3、隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。 審計(jì)功能就是把用戶(hù)對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái)放入審計(jì)日志中,一旦發(fā)生數(shù)據(jù)被非法存取,DBA可以利用審計(jì)跟蹤的信息,重現(xiàn)導(dǎo)致數(shù)據(jù)庫(kù)現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等。 加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plain text)變換為不可直接識(shí)別的格式(密文,Cipher text),從而使得不知道解密算法的人無(wú)法獲得數(shù)據(jù)的內(nèi)容。加密方法主要有兩種:1) 替換方法。使用密鑰將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的字符。2) 置換方法。僅將明文的字符按不同的順序重新排列。MySQL數(shù)據(jù)庫(kù)安全技術(shù)主要內(nèi)容(1)權(quán)限驗(yàn)證(2)賬戶(hù)

4、創(chuàng)建(3)賬戶(hù)密碼修改(4)帳號(hào)刪除權(quán)限驗(yàn)證步驟1 首先會(huì)對(duì)mysql.user表去驗(yàn)證,驗(yàn)證的內(nèi)容user,host,password 的相關(guān)信息進(jìn)行驗(yàn)證,用戶(hù)管理模塊相當(dāng)是一個(gè)看守大門(mén)的衛(wèi)兵,如果OK的話(huà),則繼續(xù)向下驗(yàn)證,轉(zhuǎn)到訪問(wèn)控制模塊,不OK,返回拒絕。2 .解析相關(guān)query語(yǔ)句后,根據(jù)提交的內(nèi)容,驗(yàn)證是否具有授權(quán)表中的權(quán)限,開(kāi)始權(quán)限查找,匹配成功的話(huà),繼續(xù)往下執(zhí)行,匹配失敗的話(huà),請(qǐng)求拒絕。訪問(wèn)控制模塊涉及的權(quán)限,global level.database level,table level,column level涉及的表(mysql.user,mysql.db,mysql. ta

5、bles_priv,mysql. columns_priv)等級(jí)從高到低 global level-database level-table level-column level創(chuàng)建新用戶(hù)的方法Create user 創(chuàng)建新的賬戶(hù),使用create user語(yǔ)句必須具有create user權(quán)限,或擁有insert權(quán)限Create user usernameidenitfied by pwd,usernameidenitfied by pwd創(chuàng)建新用戶(hù)的方法新建一個(gè)本地test用戶(hù)密碼test,對(duì)haha庫(kù)所有表有訪問(wèn)權(quán)限.方法一Create user testlocalhost identi

6、fied by testGrant select on haha.* to testlocalhost;第二種方法Grant select on haha.* to testlocalhost identified by test;創(chuàng)建新用戶(hù)的方法修改密碼篇?jiǎng)h除用戶(hù)查看授權(quán)情況查看系統(tǒng)用戶(hù)select user,host from mysql.user;Show grants for 用戶(hù)名主機(jī)名對(duì)應(yīng)的授權(quán)表(mysql.user,mysql.db,mysql. tables_priv,mysql. columns_priv)也可從information_schema查看權(quán)限情況( USER_

7、PRIVILEGES , SCHEMA_PRIVILEGES , TABLE_PRIVILEGES ,COLUMN_PRIVILEGES )Mysql支持權(quán)限grant/revokeGrant revoke 管理訪問(wèn)權(quán)限全局層級(jí)Grant all on *.* revoke all on *.*數(shù)據(jù)庫(kù)層級(jí)Grant all on db_name.*revoke all on db_name.*表層級(jí)Grant all on db_name.tb_namerevoke all on db_name.tb_nameGrant all on * to user2 identified by user

8、 with grant option;Revoke all privileges,grant option from user1;Grant all on books.* to user3;Grant select,insert,update,delete,index,alter,create,drop On books.* to user4;Revoke alter,create,drop on books.* from user4;Revoke all on books.* from user3;Flush privileges;-權(quán)限生效9.2 數(shù)據(jù)庫(kù)完整性什么是數(shù)據(jù)庫(kù)的完整性(掌握概念

9、)定義:是指數(shù)據(jù)的正確性和相容性建立完整性的目的:防止不合語(yǔ)義的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)。例: 學(xué)生的年齡必須是整數(shù); 學(xué)生的性別只能是男或女; 學(xué)生的學(xué)號(hào)一定是唯一的; 學(xué)生所在的系必須是學(xué)校開(kāi)設(shè)的系;完整性: 能否真實(shí)地反映現(xiàn)實(shí)世界完整性控制機(jī)制DBMS的完整性包括個(gè)方面(掌握):(1)完整性約束定義功能:即提供定義完整性約束條件的機(jī)制。(2)完整性檢查功能:即檢查用戶(hù)發(fā)出的操作請(qǐng)求是否違背了完整性約束條件。(3)違約處理:如果發(fā)現(xiàn)用戶(hù)的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。1 實(shí)體完整性實(shí)體完整性定義方法 在CREATE TABLE中用PRIMARY KEY子句定

10、義。有兩種使用情況:在列級(jí)使用PRIMARY KEY子句在表級(jí)使用PRIMARY KEY子句例1:在學(xué)生選課數(shù)據(jù)庫(kù)中,要定義Student表的Sno屬性為主碼 CREATE TABLE Student (Sno int, Sname VARCHAR(20), Sage int, PRIMARY KEY (Sno); /在表級(jí)定義主碼/ 或: CREATE TABLE Student (Sno NUMBER(8) int, /在列級(jí)定義主碼/ Sname VARCHAR(20), Sage int);1 實(shí)體完整性例2:要在SC表中定義(Sno, Cno)為主碼CREATE TABLE SC (

11、Sno int, Cno int, Grade int, PRIMARY KEY (Sno, Cno); /只能在表級(jí)定義主碼/ 注意:如果完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級(jí)。1 實(shí)體完整性實(shí)體完整性檢查和違約處理 定義了關(guān)系的主碼后,每當(dāng)用戶(hù)程序向表中插入一條記錄或者用戶(hù)對(duì)主碼列進(jìn)行更新操作時(shí),系統(tǒng)將自動(dòng)進(jìn)行完整性檢查。違約情況1、使主屬性值為空值的操作2、使主碼值在表中不唯一的操作違約反應(yīng)系統(tǒng)拒絕此操作,從而保證了實(shí)體完整性。1 實(shí)體完整性2 參照完整性(重點(diǎn))參照完整性定義 FOREIGN KEY子句:定義外碼列REFERENCES子句:外碼相應(yīng)于哪個(gè)表的主碼 例3:

12、定義表SC中的參照完整性 CREATE TABLE SC (Sno char(9) not null, cno char(4) not null, grade smallint, PRIMARY KEY (Sno, Cno), FOREIGN KEY (sno) REFERENCES student(sno), FOREIGN KEY (cno) REFERENCES course(cno) );說(shuō)明:在定義參照完整性時(shí)要注意兩點(diǎn):1、使用FOREIGN KEY短語(yǔ)定義哪些列為外碼。2、用REFERENCES短語(yǔ)指名這些外碼參照哪些表的主碼。3、要同時(shí)定義外碼是否允許為空。2 參照完整性(重點(diǎn)

13、)可能破壞參照完整性的四種情況(以SC和STUDENT為例)1、在參照關(guān)系中插入元組 比如:向SC關(guān)系插入(200215128,1,90)元組,而Student關(guān)系中尚沒(méi)有Sno= 200215128的學(xué)生。參照完整性檢查和違約處理違約處理:a、受限插入:系統(tǒng)將拒絕向SC關(guān)系插入該元組 b、遞歸插入:系統(tǒng)將首先向Student關(guān)系插入Sno= 200215128的元組,然后向SC關(guān)系插入( 200215128 ,1,90)元組。2、在參照關(guān)系中修改外碼值 比如:修改SC中的一個(gè)元組,修改后該元組Sno屬性的值在student中找不到一個(gè)元組,其Sno屬性的值與之相等。違約反應(yīng) :不允許修改3、

14、修改被參照關(guān)系中某些元組的主碼值 參照關(guān)系中有些元組的外碼值正好等于被參照關(guān)系要修改的主碼值。 例:將Student關(guān)系中Sno=200215121的元組中Sno值改為200215127。而SC關(guān)系中有 3個(gè)元組的Sno=200215121違約處理級(jí)聯(lián)修改 修改被參照關(guān)系中主碼值同時(shí),用相同的方法修改參照關(guān)系中相應(yīng)的外碼值。受限修改 拒絕此修改操作。只當(dāng)參照關(guān)系中沒(méi)有任何元組的外碼值等于被參照關(guān)系中某個(gè)元組的主碼值時(shí),這個(gè)元組的主碼值才能被修改。置空值修改 修改被參照關(guān)系中主碼值,同時(shí)將參照關(guān)系中相應(yīng)的外碼值置為空值。CONSTRAINT symbol FOREIGN KEY id (inde

15、x_col_name, .) REFERENCES tbl_name (index_col_name, .) ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT ON UPDATE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT 該語(yǔ)法可以在CREATE TABLE和ALTER TABLE時(shí)使用,如果不指定CONSTRAINT symbol,MYSQL會(huì)自動(dòng)生成一個(gè)名字。ON DELETE、ON UPDATE表示事件觸發(fā)限制,可設(shè)參數(shù):RESTRICT

16、(限制外表中的外鍵改動(dòng),默認(rèn)值)CASCADE(跟隨外鍵改動(dòng))SET NULL(設(shè)空值)SET DEFAULT(設(shè)默認(rèn)值)NO ACTION(無(wú)動(dòng)作,默認(rèn)的) 例:將Student關(guān)系中Sno=200215121的元組中Sno值改為200215127。而SC關(guān)系中有 3個(gè)元組的Sno=200215121DBMS的處理策略:級(jí)聯(lián)修改:將SC關(guān)系中3個(gè)Sno=200215121元組中的Sno值也改為200215127。 如果參照關(guān)系同時(shí)又是另一個(gè)關(guān)系的被參照關(guān)系,則這種修改操作會(huì)繼續(xù)級(jí)聯(lián)下去.受限修改:只有SC中沒(méi)有任何元組的Sno=200215121時(shí),才能修改Student表中Sno=2002

17、15121的元組的Sno值改為200215127。置空值修改:將Student表中Sno=200215121的元組的Sno值改為200215127。而將SC表中所有Sno=200215121的元組的Sno值置為空值(NULL)。在學(xué)生選課數(shù)據(jù)庫(kù)中只有第一種方法是符合現(xiàn)實(shí)世界。例:教師部門(mén)數(shù)據(jù)庫(kù)有教師信息表、部門(mén)信息表。其中教師信息表的主碼是教師號(hào);部門(mén)信息表的主碼是部門(mén)號(hào);教師表參照部門(mén)表,外碼是部門(mén)號(hào); 外碼是否能夠取空值:依賴(lài)于應(yīng)用環(huán)境的語(yǔ)義 如果要修改部門(mén)表中的某一個(gè)部門(mén)號(hào),那么可以將教師表中對(duì)應(yīng)該部門(mén)號(hào)的元組的部門(mén)號(hào)置為空值,表示尚未給該教師分配部門(mén),這與實(shí)際應(yīng)用環(huán)境是相符的。4.在被

18、參照關(guān)系中刪除元組時(shí)比如:刪除部門(mén)表的某個(gè)元組(20) 而教師表有若干元組的外碼值與被刪除的被參照關(guān)系的主碼值相同違約反應(yīng):可有三種策略級(jí)聯(lián)刪除(CASCADES)受限刪除(RESTRICTED)置空值刪除(NULLIFIES)這三種處理方法,哪一種是正確的,要依應(yīng)用環(huán)境的語(yǔ)義來(lái)定.級(jí)聯(lián)刪除 將參照關(guān)系中外碼值與被參照關(guān)系中要?jiǎng)h除元組主碼值相對(duì)應(yīng)的元組一起刪除受限刪除 當(dāng)參照關(guān)系中沒(méi)有任何元組的外碼值與要?jiǎng)h除的被參照關(guān)系的元組的主碼值相對(duì)應(yīng)時(shí),系統(tǒng)才執(zhí)行刪除操作,否則拒絕此刪除操作置空值刪除 刪除被參照關(guān)系的元組,并將參照關(guān)系中與被參照關(guān)系中被刪除元組主碼值相等的外碼值置為空值。例:要?jiǎng)h除部門(mén)

19、關(guān)系中部門(mén)號(hào)=20的元組, 而教師關(guān)系中有3個(gè)元組的部門(mén)號(hào)都等于20。級(jí)聯(lián)刪除:將教師關(guān)系中所有3個(gè)部門(mén)號(hào)=20的元組一起刪除。如果參照關(guān)系同時(shí)又是另一個(gè)關(guān)系的被參照關(guān)系,則這種刪除操作會(huì)繼續(xù)級(jí)聯(lián)下去 受限刪除:系統(tǒng)將拒絕執(zhí)行此刪除操作。置空值刪除:將教師關(guān)系中所有部門(mén)=20的元組的部門(mén)號(hào)值置為空值。 在教師數(shù)據(jù)庫(kù)中,顯然第二種方法和第三種方法都是對(duì)的。第一種方法不符合應(yīng)用環(huán)境語(yǔ)義。3 用戶(hù)定義的整性屬性上的約束條件的定義方法用CREATE TABLE語(yǔ)句在建表時(shí)定義用戶(hù)完整性約束屬性上的約束條件列值非空; 例5列值唯一; 例6例5:在定義SC表時(shí),說(shuō)明SNO,CNO,GRADE屬性不允許取空

20、值。CREATE TABLE SC(SNO CHAR(9) NOT NULL,CNO CHAR(4) NOT NULL,GRADE SMALLINT NOT NULL,PRIMARY KEY (SNO,CNO);1、列不允許取空值的定義方法例6:建立部門(mén)表,要求部門(mén)名稱(chēng)DNAME列值唯一,部門(mén)編號(hào)DEPTNO列為主碼。CREATE TABLE dept(DEPTNO NUMERIC(2),DNAME CHAR(9) UNIQUE,LOCATION CHAR(10),PRIMARY KEY (DEPTNO);2、列值唯一的定義方法屬性上的約束條件檢查和違約處理: 當(dāng)往表中插入元組或修改屬性時(shí),R

21、DBMS就會(huì)檢查屬性上的約束條件是否滿(mǎn)足,如果不滿(mǎn)足則操作被拒絕執(zhí)行。總結(jié):完整性約束條件的關(guān)鍵字PRIMARY KEY-(實(shí)體完整性)FOREIGN KEY-(參照完整性)REFERENCE-(參照完整性)NOT NULL-(用戶(hù)定義的完整性)UNIQUE-(用戶(hù)定義的完整性)9.3 并發(fā)控制數(shù)據(jù)庫(kù)是可供多用戶(hù)共享的信息資源,允許多個(gè)用戶(hù)同時(shí)使用數(shù)據(jù)庫(kù)的系統(tǒng)稱(chēng)為多用戶(hù)數(shù)據(jù)庫(kù)系統(tǒng)。多用戶(hù)數(shù)據(jù)庫(kù)系統(tǒng)的存在飛機(jī)定票數(shù)據(jù)庫(kù)系統(tǒng)銀行數(shù)據(jù)庫(kù)系統(tǒng) 特點(diǎn):在同一時(shí)刻并發(fā)運(yùn)行的事務(wù)數(shù)可達(dá)數(shù)百個(gè) 數(shù)據(jù)庫(kù)的并發(fā)控制就是控制數(shù)據(jù)庫(kù),防止多用戶(hù)并發(fā)使用數(shù)據(jù)庫(kù)時(shí)造成數(shù)據(jù)錯(cuò)誤和程序運(yùn)行錯(cuò)誤,保證數(shù)據(jù)的完整性。使用一個(gè)簡(jiǎn)單

22、的例子來(lái)幫助理解事務(wù):向公司添加一名新的雇員,這里的過(guò)程由三個(gè)基本步驟組成:在雇員數(shù)據(jù)庫(kù)中為雇員創(chuàng)建一條記錄;為雇員分配部門(mén);建立雇員的工資記錄。如果這三步中的任何一步失敗,如為新成員分配的雇員ID已經(jīng)被其他人使用或者輸入到工資系統(tǒng)中的值太大,系統(tǒng)就必須撤銷(xiāo)在失敗之前所有的變化,刪除所有不完整記錄的蹤跡,避免以后的不一致和計(jì)算失誤。前面的三項(xiàng)任務(wù)構(gòu)成了一個(gè)事務(wù)。任何一個(gè)任務(wù)的失敗都會(huì)導(dǎo)致整個(gè)事務(wù)被撤銷(xiāo),而使系統(tǒng)返回到以前的狀態(tài)。 (1)原子性。原子性意味著每個(gè)事務(wù)都必須被認(rèn)為是一個(gè)不可分割的單元。假設(shè)一個(gè)事務(wù)由兩個(gè)或者多個(gè)任務(wù)組成,其中的語(yǔ)句必須同時(shí)成功,才能認(rèn)為事務(wù)是成功的。如果事務(wù)失敗,系

23、統(tǒng)將會(huì)返回到事務(wù)以前的狀態(tài)。在添加雇員這個(gè)例子中,原子性指如果沒(méi)有創(chuàng)建雇員相應(yīng)的工資表和部門(mén)記錄,就不可能向雇員數(shù)據(jù)庫(kù)添加雇員。原子的執(zhí)行是一個(gè)或者全部發(fā)生或者什么也沒(méi)有發(fā)生的命題。在一個(gè)原子操作中,如果事務(wù)中的任何一個(gè)語(yǔ)句失敗,前面執(zhí)行的語(yǔ)句都將返回,以保證數(shù)據(jù)的整體性沒(méi)有受到影響。這在一些關(guān)鍵系統(tǒng)中尤其重要,現(xiàn)實(shí)世界的應(yīng)用程序(如金融系統(tǒng))執(zhí)行數(shù)據(jù)輸入或更新,必須保證不出現(xiàn)數(shù)據(jù)丟失或數(shù)據(jù)錯(cuò)誤,以保證數(shù)據(jù)安全性。(2)一致性。不管事務(wù)是完全成功完成還是中途失敗,當(dāng)事務(wù)使系統(tǒng)中的所有數(shù)據(jù)處于一致的狀態(tài)時(shí)存在一致性。參照前面的例子,一致性是指,如果從系統(tǒng)中刪除了一個(gè)雇員,則所有和該雇員相關(guān)的數(shù)據(jù)

24、,包括工資數(shù)據(jù)和組的成員資格也要被刪除。 (3)隔離性。隔離性是指,每個(gè)事務(wù)在它自己的空間發(fā)生,和其他發(fā)生在系統(tǒng)中的事務(wù)隔離,而且事務(wù)的結(jié)果只有在它完全被執(zhí)行時(shí)才能看到。即使在這樣的一個(gè)系統(tǒng)中同時(shí)發(fā)生了多個(gè)事務(wù),隔離性原則也保證某個(gè)特定事務(wù)在完全完成之前,其結(jié)果是看不見(jiàn)的。當(dāng)系統(tǒng)支持多個(gè)同時(shí)存在的用戶(hù)和連接時(shí)(如SQL Server),這就尤其重要。如果系統(tǒng)不遵循這個(gè)基本規(guī)則,就可能導(dǎo)致大量數(shù)據(jù)的破壞,如每個(gè)事務(wù)各自空間的完整性很快地被其他沖突事務(wù)所侵犯。(4)持久性。持久性意味著,一旦事務(wù)執(zhí)行成功,在系統(tǒng)中產(chǎn)生的所有變化將是永久的。即使系統(tǒng)崩潰,一個(gè)提交的事務(wù)仍然存在。當(dāng)一個(gè)事務(wù)完成,數(shù)據(jù)庫(kù)

25、的日志已經(jīng)被更新時(shí),持久性就開(kāi)始發(fā)生作用了。大多數(shù)RDBMS產(chǎn)品通過(guò)保存所有行為的日志來(lái)保證數(shù)據(jù)的持久性,這些行為是指在數(shù)據(jù)庫(kù)中以任何方法更改數(shù)據(jù)。數(shù)據(jù)庫(kù)日志記錄了所有對(duì)于表的更新、查詢(xún)、報(bào)表等。事務(wù)是用戶(hù)定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,這些操作要么全做,要么全不做,是一個(gè)不可分割的工作單位。事務(wù)通常是以BEGIN TRANSACTION開(kāi)始,以COMMIT或ROLLBACK結(jié)束。事務(wù)的概念事務(wù)的ACID特性:原子性(Atomicity):一個(gè)事務(wù)中的操作也么都做要么都不做一致性(Consistency):使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)隔離性(Isolation):一個(gè)事務(wù)的執(zhí)行不被其

26、他事務(wù)干擾持續(xù)性(Durability ):一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)的改變是永久性的,接下來(lái)的其他操作或故障不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。事務(wù)的概念事務(wù)T向A賬戶(hù)轉(zhuǎn)賬50元到B賬戶(hù)Read(A)A=A-50Write(A)Read(B)B=B+50Write(B)一致性:要求A、B賬戶(hù)的金額總和在事務(wù)執(zhí)行后保持不變?cè)有裕菏聞?wù)執(zhí)行過(guò)程中任意時(shí)候出現(xiàn)一個(gè)失敗,使得事務(wù)T不能正常執(zhí)行,出現(xiàn)不一致性的狀態(tài),DBMS必須確保這種不一致?tīng)顟B(tài)不能出現(xiàn)在數(shù)據(jù)庫(kù)系統(tǒng)中。持續(xù)性:由數(shù)據(jù)庫(kù)系統(tǒng)的恢復(fù)管理機(jī)制負(fù)責(zé)1)事務(wù)T結(jié)束前,A、B值修改已經(jīng)寫(xiě)入磁盤(pán)2)系統(tǒng)失敗,數(shù)據(jù)庫(kù)系統(tǒng)重啟后,T對(duì)數(shù)據(jù)庫(kù)的修改信息能確保

27、數(shù)據(jù)庫(kù)系統(tǒng)重新構(gòu)造對(duì)數(shù)據(jù)庫(kù)的修改隔離性:由數(shù)據(jù)庫(kù)系統(tǒng)的并發(fā)控制機(jī)制負(fù)責(zé)不同的多事務(wù)執(zhí)行方式 (1)事務(wù)串行執(zhí)行每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其他事務(wù)必須等到這個(gè)事務(wù)結(jié)束以后方能運(yùn)行不能充分利用系統(tǒng)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn)T1T2T3事務(wù)的串行執(zhí)行方式不同的多事務(wù)執(zhí)行方式(2)交叉并發(fā)方式(Interleaved Concurrency)在單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行是這些并行事務(wù)的并行操作輪流交叉運(yùn)行單處理機(jī)系統(tǒng)中的并行事務(wù)并沒(méi)有真正地并行運(yùn)行,但能夠減少處理機(jī)的空閑時(shí)間,提高系統(tǒng)的效率交叉并發(fā)方式不同的多事務(wù)執(zhí)行方式 (3)同時(shí)并發(fā)方式多處理機(jī)系統(tǒng)中,每個(gè)處理機(jī)可以運(yùn)行一個(gè)事務(wù),多個(gè)處理

28、機(jī)可以同時(shí)運(yùn)行多個(gè)事務(wù),實(shí)現(xiàn)多個(gè)事務(wù)真正的并行運(yùn)行事務(wù)并發(fā)執(zhí)行帶來(lái)的問(wèn)題(1)會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況 (2)可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞事務(wù)一致性和數(shù)據(jù)庫(kù)的一致性 所以數(shù)據(jù)庫(kù)管理系統(tǒng)必須提供并發(fā)控制機(jī)制。 并發(fā)控制機(jī)制是衡量一個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)性能的重要標(biāo)志之一。一、 并發(fā)控制概述并發(fā)控制機(jī)制的任務(wù)(1)對(duì)并發(fā)操作進(jìn)行正確調(diào)度(2)保證事務(wù)的隔離性(3)保證數(shù)據(jù)庫(kù)的一致性事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致問(wèn)題 T1T2T1T2T1T21) 讀A=201) 讀A=50 讀B=100求和=1501) 讀C=100CC*2寫(xiě)回C2) 讀A=203) AA-1寫(xiě)回A=192)讀B=10

29、0BB*2寫(xiě)回B=2002)讀C=2004)AA-1寫(xiě)回A=19(A少減一次)3) 讀A=50 讀B=200 和=250(驗(yàn)算不對(duì))3) ROLLBACKC恢復(fù)為100(錯(cuò)誤的C值已讀出)(a)丟失數(shù)據(jù) (b)不可重復(fù)讀 (c)讀“臟”數(shù)據(jù) 并發(fā)操作帶來(lái)的不一致例1飛機(jī)訂票系統(tǒng)中的一個(gè)活動(dòng)序列 甲售票點(diǎn)(甲事務(wù))讀出某航班的機(jī)票余額A,設(shè)A=16 乙售票點(diǎn)(乙事務(wù))讀出同一航班的機(jī)票余額A,也為16 甲售票點(diǎn)賣(mài)出一張機(jī)票,修改余額AA-1,所以A為15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù); 乙售票點(diǎn)也賣(mài)出一張機(jī)票,修改余額AA-1,所以A為15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù) 結(jié)果明明賣(mài)出兩張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少1 并發(fā)

30、控制概述(續(xù))這種情況稱(chēng)為數(shù)據(jù)庫(kù)的不一致性,是由并發(fā)操作引起的。在并發(fā)操作情況下,對(duì)甲、乙兩個(gè)事務(wù)的操作序列的調(diào)度是隨機(jī)的。若按上面的調(diào)度序列執(zhí)行,甲事務(wù)的修改就被丟失。原因:第4步中乙事務(wù)修改A并寫(xiě)回后覆蓋了甲事務(wù)的修改“不一致”情況并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性(1)丟失修改(Lost Update)(2)不可重復(fù)讀(Non-repeatable Read)(3)讀“臟”數(shù)據(jù)(Dirty Read)記號(hào)R(x):讀數(shù)據(jù)xW(x):寫(xiě)數(shù)據(jù)x (1) 丟失修改什么是“丟失修改” 兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2的提交結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改被丟失。上面飛機(jī)訂票例子就屬此類(lèi)

31、 丟失修改(續(xù))丟失修改(2) 不可重復(fù)讀什么是“不可重復(fù)讀” 不可重復(fù)讀是指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行更新操作,使T1無(wú)法再現(xiàn)前一次讀取結(jié)果。不可重復(fù)讀(續(xù))不可重復(fù)讀包括三種情況: 1)事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對(duì)其做了修 改,當(dāng)事務(wù)T1再次讀該數(shù)據(jù)時(shí),得到與前一次不同的值。 不可重復(fù)讀(續(xù))T1讀取B=100進(jìn)行運(yùn)算T2讀取同一數(shù)據(jù)B,對(duì)其進(jìn)行修改后將B=200寫(xiě)回?cái)?shù)據(jù)庫(kù)。T1為了對(duì)讀取值校對(duì)重讀B,B已為200,與第一次讀取值不一致 不可重復(fù)讀(續(xù))2)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中部分記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄

32、消失了 3)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后,事務(wù)T2插入了一些記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)多了一些記錄。 說(shuō)明:后兩種不可重復(fù)讀有時(shí)也稱(chēng)為幻影現(xiàn)象。(3) 讀“臟”數(shù)據(jù) 什么是讀“臟”數(shù)據(jù)?事務(wù)T1修改某一數(shù)據(jù),并將其寫(xiě)回磁盤(pán)事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤銷(xiāo)這時(shí)T1已修改過(guò)的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù) 讀“臟”數(shù)據(jù)(續(xù))T1將C值修改為200,T2讀到C為200T1由于某種原因撤銷(xiāo),其修改作廢,C恢復(fù)原值100這時(shí)T2讀到的C為200,與數(shù)據(jù)庫(kù)內(nèi)容不一致,就是“臟”數(shù)據(jù) 丟失更新(

33、lost update)指,當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),由于每個(gè)事務(wù)都不知道其他事務(wù)的存在,因此最后的更新將重寫(xiě)由其他事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。臟讀(dirty read)指,一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù),而其他事務(wù)正在更新該數(shù)據(jù),但尚未提交,此時(shí)就會(huì)發(fā)生臟讀問(wèn)題,即第一個(gè)事務(wù)所讀取的數(shù)據(jù)是“臟”(不正確)數(shù)據(jù),它可能會(huì)引起錯(cuò)誤。當(dāng)一個(gè)事務(wù)多次訪問(wèn)同一行而且每次讀取不同的數(shù)據(jù)時(shí),會(huì)發(fā)生不可重復(fù)讀(unrepeatable read)問(wèn)題。不可重復(fù)讀與臟讀有相似之處,因?yàn)樵撌聞?wù)也是正在讀取其他事務(wù)正在更改的數(shù)據(jù)。當(dāng)一個(gè)事務(wù)訪問(wèn)數(shù)據(jù)時(shí),另外的事務(wù)也訪問(wèn)該數(shù)據(jù)并對(duì)其進(jìn)

34、行修改,因此就發(fā)生了由于第二個(gè)事務(wù)對(duì)數(shù)據(jù)的修改而導(dǎo)致第一個(gè)事務(wù)兩次讀到的數(shù)據(jù)不一樣的情況,這就是不可重復(fù)讀。當(dāng)一個(gè)事務(wù)對(duì)某行執(zhí)行插入或刪除操作,而該行屬于某個(gè)事務(wù)正在讀取的行的范圍時(shí),會(huì)發(fā)生幻讀(phantom read)問(wèn)題。事務(wù)第一次讀的行范圍顯示出其中一行已不復(fù)存在于第二次讀或后續(xù)讀中,因?yàn)樵撔幸驯黄渌聞?wù)刪除。同樣,由于其他事務(wù)的插入操作,事務(wù)的第二次讀或后續(xù)讀顯示有一行已不存在于原始讀中。并發(fā)控制產(chǎn)生的問(wèn)題數(shù)據(jù)不一致性:由于并發(fā)操作破壞了事務(wù)的隔離性并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個(gè)用戶(hù)事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性 并發(fā)控制的主要技術(shù)有封鎖(L

35、ocking)時(shí)間戳(Timestamp)樂(lè)觀控制法商用的DBMS一般都采用封鎖方法 二、 封鎖1.什么是封鎖2.基本封鎖類(lèi)型3.鎖協(xié)議1.什么是封鎖封鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)T就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象。2.基本封鎖類(lèi)型一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么樣的控制由封鎖的類(lèi)型決定?;痉怄i類(lèi)型(1)排它鎖(Exclusive Locks,簡(jiǎn)記為X鎖)(2)共享鎖(Share Locks,簡(jiǎn)記為S鎖)(1)排它鎖排它鎖又稱(chēng)為寫(xiě)鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允

36、許T讀取和修改A,其它任何事務(wù)都不能再對(duì)A加任何類(lèi)型的鎖,直到T釋放A上的鎖。保證其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A。 (2)共享鎖共享鎖又稱(chēng)為讀鎖若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則其它事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放A上的S鎖保證其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對(duì)A做任何修改 三、封鎖協(xié)議在運(yùn)用X鎖和S鎖這兩種基本封鎖,對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則,例如應(yīng)何時(shí)申請(qǐng)X鎖或S鎖、持鎖時(shí)間、何時(shí)釋放等。我們稱(chēng)這些規(guī)則為封鎖協(xié)議(Locking Protocol)。對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。 1級(jí)封鎖協(xié)議1級(jí)封鎖協(xié)議是:事務(wù)T

37、在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束(ROLLBACK)。 1級(jí)封鎖協(xié)議可防止丟失修改,并保證事務(wù)T是可恢復(fù)的。在1級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì)其進(jìn)行修改,是不需要加鎖的,所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。 示例1“丟失修改”使用封鎖機(jī)制解決丟失修改問(wèn)題事務(wù)T1在讀A進(jìn)行修改之前先對(duì)A加X(jué)鎖當(dāng)T2再請(qǐng)求對(duì)A加X(jué)鎖時(shí)被拒絕T2只能等待T1釋放A上的鎖后T2獲得對(duì)A的X鎖這時(shí)T2讀到的A已經(jīng)是T1更新過(guò)的值15T2按此新的A值進(jìn)行運(yùn)算,并將結(jié)果值A(chǔ)=14送回到磁盤(pán)。避免了丟失T1的更新。沒(méi)有丟失修改示例2“不可重復(fù)讀”示

38、例3讀“臟”數(shù)據(jù)讀“臟”數(shù)據(jù)2級(jí)封鎖協(xié)議2級(jí)封鎖協(xié)議是:1級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后即可釋放S鎖。 2級(jí)封鎖協(xié)議除防止了丟失修改,還可進(jìn)一步防止讀“臟”數(shù)據(jù)。示例4“丟失修改”防止丟失修改示例5讀“臟”數(shù)據(jù)使用封鎖機(jī)制解決讀“臟”數(shù)據(jù)問(wèn)題例事務(wù)T1在對(duì)C進(jìn)行修改之前,先對(duì)C加X(jué)鎖,修改其值后寫(xiě)回磁盤(pán)T2請(qǐng)求在C上加S鎖,因T1已在C上加了X鎖,T2只能等待T1因某種原因被撤銷(xiāo),C恢復(fù)為原值100T1釋放C上的X鎖后T2獲得C上的S鎖,讀C=100。避免了T2讀“臟”數(shù)據(jù)不讀“臟”數(shù)據(jù) 示例6“不可重復(fù)讀”3級(jí)封鎖協(xié)議3級(jí)封鎖協(xié)議是:1級(jí)封鎖協(xié)議加上事務(wù)T在讀取

39、數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。 3級(jí)封鎖協(xié)議除防止了丟失修改和不讀臟數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀。示例7“不可重復(fù)讀”事務(wù)T1在讀A,B之前,先對(duì)A,B加S鎖其他事務(wù)只能再對(duì)A,B加S鎖,而不能加X(jué)鎖,即其他事務(wù)只能讀A,B,而不能修改當(dāng)T2為修改B而申請(qǐng)對(duì)B的X鎖時(shí)被拒絕只能等待T1釋放B上的鎖T1為驗(yàn)算再讀A,B,這時(shí)讀出的B仍是100,求和結(jié)果仍為150,即可重復(fù)讀T1結(jié)束才釋放A,B上的S鎖。T2才獲得對(duì)B的X鎖 可重復(fù)讀T1T2T1T2T1T21) Xlock A獲得1) Slock A Slock B 讀A=50讀B=100AB=1501) Xlock C 讀

40、C=100CC*2寫(xiě)回C=2002) 讀A=20Xlock A等待3) AA-1 寫(xiě)回A=19 Commit Unlock A等待等待等待2)Xlock B等待等待2)Slock C等待等待3)讀A=50 讀B=100 AB=150 Commit Unlock A Unlock B等待3) ROLLBACK(C恢復(fù)為100) Unlock C等待等待4)獲得Xlock A讀A=19AA-1寫(xiě)回A=18CommitUnlock4) 獲得Xlock讀B=100BB*2寫(xiě)回B=200CommitUnlock B4) 獲得Slock C讀C=100Commit CUnlock C(a) 沒(méi)有丟失修改

41、(b) 可重復(fù)讀 (c) 不讀“臟”數(shù)據(jù) 封鎖出現(xiàn)的問(wèn)題及解決方法1. 活鎖和死鎖(1) 活鎖。 在多個(gè)事務(wù)請(qǐng)求對(duì)同一數(shù)據(jù)封鎖時(shí),總是使某一用戶(hù)等待的情況稱(chēng)為活鎖。解決活鎖的方法是采用先來(lái)先服務(wù)的方法,即對(duì)要求封鎖數(shù)據(jù)的事務(wù)排隊(duì),使前面的事務(wù)先獲得數(shù)據(jù)的封鎖權(quán)。(2) 死鎖。多事務(wù)交錯(cuò)等待的僵持局面稱(chēng)為死鎖。解決死鎖有兩類(lèi)方法:一是采用一定措施來(lái)預(yù)防死鎖的發(fā)生;二是采用一定手段定期診斷系統(tǒng)中有無(wú)死鎖,若有則解除之。 防死鎖通常有兩種方法:1) 一次封鎖法:要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則該事務(wù)不能繼續(xù)執(zhí)行。2) 順序封鎖法:預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封鎖順序,所有事務(wù)都按這個(gè)順

42、序?qū)嵭蟹怄i。 小結(jié)并發(fā)操作產(chǎn)生的數(shù)據(jù)不一致問(wèn)題丟失修改不可重復(fù)讀讀“臟”數(shù)據(jù)封鎖共享鎖(S鎖)排它鎖(X鎖)封鎖協(xié)議一級(jí)封鎖協(xié)議丟失修改二級(jí)封鎖協(xié)議丟失修改、讀“臟”數(shù)據(jù)三級(jí)封鎖協(xié)議丟失修改、讀“臟”數(shù)據(jù)、不可重復(fù)讀 9.4 數(shù)據(jù)庫(kù)恢復(fù)概述故障是不可避免的系統(tǒng)故障:計(jì)算機(jī)軟、硬件故障人為故障:操作員的失誤、惡意的破壞等。數(shù)據(jù)庫(kù)的恢復(fù)把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài)(亦稱(chēng)為一致?tīng)顟B(tài)或完整狀態(tài))MySQL 事務(wù)Set autocommit=0;只有用戶(hù)輸入commit后,事務(wù)提交;否則關(guān)閉會(huì)話(huà)時(shí),自動(dòng)撤銷(xiāo);Select autocommit;start transactionCommitRollback事務(wù)周期:start tranction指令開(kāi)始,commit結(jié)束故障的種類(lèi)事務(wù)內(nèi)部的故障系統(tǒng)故障介質(zhì)故障計(jì)算機(jī)病毒事務(wù)內(nèi)部的故障(續(xù))例如,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論