第八章 數(shù)據(jù)庫安全保護(hù)_第1頁
第八章 數(shù)據(jù)庫安全保護(hù)_第2頁
第八章 數(shù)據(jù)庫安全保護(hù)_第3頁
第八章 數(shù)據(jù)庫安全保護(hù)_第4頁
第八章 數(shù)據(jù)庫安全保護(hù)_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第7章數(shù)據(jù)庫的安全保護(hù)本章要點(diǎn)

DBMS對(duì)數(shù)據(jù)庫的安全保護(hù)功能是通過四方面來實(shí)現(xiàn)的,即安全性控制、完整性控制、并發(fā)性控制和數(shù)據(jù)庫恢復(fù)。本章就將從這四方面來介紹數(shù)據(jù)庫的安全保護(hù)功能,重點(diǎn)要求讀者掌握它們的含義及實(shí)現(xiàn)這些安全保護(hù)功能的方法,可結(jié)合SQLServer加深四部分內(nèi)容的理解與操作技能。本章邏輯結(jié)構(gòu)7.1數(shù)據(jù)庫的安全性

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

7.1.2.

安全性控制的一般方法

7.1.3.

安全性控制的其它方法

7.1.4.

SQLServer安全性概述

7.2完整性控制

7.2.1.數(shù)據(jù)庫完整性概述

7.2.2.完整性規(guī)則的組成

7.2.3.完整性約束條件的分類

7.2.4.SQLServer完整性概述7.3并發(fā)控制與封鎖本章邏輯結(jié)構(gòu)

7.3.1.數(shù)據(jù)庫并發(fā)性概述

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

7.3.3.并發(fā)操作與數(shù)據(jù)的不一致性

7.3.4.封鎖及其產(chǎn)生問題的解決

7.3.5.SQLServer的并發(fā)控制機(jī)制7.4數(shù)據(jù)庫的恢復(fù)

7.4.1.數(shù)據(jù)庫恢復(fù)概述

7.4.2.數(shù)據(jù)庫恢復(fù)的基本原理及其實(shí)現(xiàn)技術(shù)

7.4.3.數(shù)據(jù)庫的故障及其恢復(fù)策略

7.4.4.SQLServer的備份和還原機(jī)制

作業(yè)前言:數(shù)據(jù)庫安全的概念數(shù)據(jù)庫簡介信息與數(shù)據(jù)數(shù)據(jù)庫系統(tǒng)一般由4個(gè)部分組成:(1)數(shù)據(jù)庫,即存儲(chǔ)在磁帶、磁盤、光盤或其他外存介質(zhì)上、按一定結(jié)構(gòu)組織在一起的相關(guān)數(shù)據(jù)的集合。(2)數(shù)據(jù)庫管理系統(tǒng)(DBMS)。它是一組能完成描述、管理、維護(hù)數(shù)據(jù)庫的程序系統(tǒng)。它按照一種公用的和可控制的方法完成插入新數(shù)據(jù)、修改和檢索原有數(shù)據(jù)的操作。(3)數(shù)據(jù)庫管理員(DBA)。(4)用戶和應(yīng)用程序。4數(shù)據(jù)庫的構(gòu)成記錄;屬性二維表數(shù)據(jù)模型層次網(wǎng)狀關(guān)系數(shù)據(jù)庫操縱56問題的提出數(shù)據(jù)庫的一大特點(diǎn)是數(shù)據(jù)可以共享數(shù)據(jù)共享必然帶來數(shù)據(jù)庫的安全性問題數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)共享不能是無條件的共享例:軍事秘密、國家機(jī)密、新產(chǎn)品實(shí)驗(yàn)數(shù)據(jù)、市場需求分析、市場營銷策略、銷售計(jì)劃、客戶檔案、醫(yī)療檔案、銀行儲(chǔ)蓄數(shù)據(jù)數(shù)據(jù)庫安全性數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫,以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞。安全性問題有許多方面,其中包括:(1)法律、社會(huì)和倫理方面,例如請(qǐng)求查詢信息的人是不有合法的權(quán)力。(2)物理控制方面,例如計(jì)算機(jī)機(jī)房或終端是否應(yīng)該加鎖或用其他方法加以保護(hù)。(3)政策方面,確定存取原則,允許哪些用戶存取哪些數(shù)據(jù)。(4)運(yùn)行方面,使用口令時(shí),如何使口令保持秘密。(5)硬件控制方面,CPU是否提供任何安全性方面的功能,諸如存儲(chǔ)保護(hù)鍵或特權(quán)工作方式。(6)操作系統(tǒng)安全性方面,在主存儲(chǔ)器和數(shù)據(jù)文件用過以后,操作系統(tǒng)是否把它們的內(nèi)容清除掉。(7)數(shù)據(jù)庫系統(tǒng)本身安全性方面。這里討論的是數(shù)據(jù)庫本身的安全性問題,即探討數(shù)據(jù)庫自身安全保護(hù)的策略與技術(shù)。

例如,甲用戶可以訪問表T1,但無權(quán)訪問表T2,如果乙用戶把表T2的所有記錄添加到表T1中之后,則由于乙用戶的操作,使甲用戶獲得了對(duì)表T2中記錄的訪問。 此外,用戶可以多次利用允許的訪問結(jié)果,經(jīng)過邏輯推理得到他無權(quán)訪問的數(shù)據(jù)。7.1數(shù)據(jù)庫安全性7.1.1.數(shù)據(jù)庫安全性概述7.1.2.

安全性控制的一般方法7.1.3.

安全性控制的其它方法7.1.4.

SQLServer安全性概述返回本章首頁7.1.1數(shù)據(jù)庫安全性概述

數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫,以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞。安全性問題有許多方面,其中包括:(1)法律、社會(huì)和倫理方面,例如請(qǐng)求查詢信息的人是不有合法的權(quán)力;(2)物理控制方面,例如計(jì)算機(jī)機(jī)房或終端是否應(yīng)該加鎖或用其他方法加以保護(hù);(3)政策方面,確定存取原則,允許哪些用戶存取哪些數(shù)據(jù);(4)運(yùn)行與技術(shù)方面,使用口令時(shí),如何使口令保持秘密;BACK5.1.1數(shù)據(jù)庫安全性概述(5)硬件控制方面,CPU是否提供任何安全性方面的功能,諸如存儲(chǔ)保護(hù)鍵或特權(quán)工作方式;(6)操作系統(tǒng)安全性方面,在主存儲(chǔ)器和數(shù)據(jù)文件用過以后,操作系統(tǒng)是否把它們的內(nèi)容清除掉;(7)數(shù)據(jù)庫系統(tǒng)本身安全性方面。BACK7.1.2安全性控制的一般方法

安全性控制是指要盡可能地杜絕所有可能的數(shù)據(jù)庫非法訪問。用戶非法使用數(shù)據(jù)庫可以有很多種情況。例如,編寫合法的程序繞過DBMS授權(quán)機(jī)制,通過操作系統(tǒng)直接存取、修改或備份有關(guān)數(shù)據(jù)。用戶訪問非法數(shù)據(jù),無論它們是有意的還是無意的,都應(yīng)該加以嚴(yán)格控制,因此,系統(tǒng)還要考慮數(shù)據(jù)信息的流動(dòng)問題并加以控制,否則有潛在的危險(xiǎn)性。因?yàn)閿?shù)據(jù)的流動(dòng)可能使無權(quán)訪問的用戶獲得訪問權(quán)利。為防止這一點(diǎn),訪問的許可權(quán)還要結(jié)合過去訪問的情況而定??梢姲踩缘膶?shí)施是要花費(fèi)一定代價(jià),并需縝密考慮的。安全保護(hù)策略就是要以最小的代價(jià)來最大程度防止對(duì)數(shù)據(jù)的非法訪問,通常需要層層設(shè)置安全措施。實(shí)際上,數(shù)據(jù)庫系統(tǒng)的安全性問題,類似于整個(gè)計(jì)算機(jī)系統(tǒng)一級(jí)級(jí)層層設(shè)置安全的情況,其安全控制模型一般如圖5.1所示。7.1.2安全性控制的一般方法BACK7.1.2安全性控制的一般方法

根據(jù)圖的安全模型,當(dāng)用戶進(jìn)入計(jì)算機(jī)系統(tǒng)時(shí),系統(tǒng)首先根據(jù)輸入的用戶標(biāo)識(shí)進(jìn)行身份的鑒定,只有合法的用戶才準(zhǔn)許進(jìn)入系統(tǒng)。對(duì)已進(jìn)入系統(tǒng)的用戶,DBMS還要進(jìn)行存取控制,只允許用戶進(jìn)行合法的操作BACKDBMS是建立在操作系統(tǒng)之上的,安全的操作系統(tǒng)是數(shù)據(jù)庫安全的前提。操作系統(tǒng)應(yīng)能保證數(shù)據(jù)庫中的數(shù)據(jù)必須由DBMS訪問,而不允許用戶越過DBMS,直接通過操作系統(tǒng)或其它方式訪問。數(shù)據(jù)最后可以通過密碼的形式存儲(chǔ)到數(shù)據(jù)庫中。能做到非法者即使得到了加密數(shù)據(jù),也無法識(shí)別它的安全效果。下面,本書就同數(shù)據(jù)庫有關(guān)的用戶標(biāo)識(shí)和鑒定、存取控制、定義視圖、數(shù)據(jù)加密和審計(jì)等幾類安全性措施作一討論。7.1.2安全性控制的一般方法BACK1、用戶標(biāo)識(shí)和鑒別用戶標(biāo)識(shí)和鑒定是系統(tǒng)提供的最外層的安全保護(hù)措施,其方法是由系統(tǒng)提供一定的方式讓用戶標(biāo)識(shí)自己的名字或身份,系統(tǒng)內(nèi)部記錄著所有合法用戶的標(biāo)識(shí),每次用戶要求進(jìn)入系統(tǒng)時(shí),由系統(tǒng)進(jìn)行核實(shí),通過鑒定后才提供機(jī)器的使用權(quán)。用戶標(biāo)識(shí)和鑒定的方法有:(1)單用戶名鑒別法:用一個(gè)用戶名或用戶標(biāo)識(shí)符來標(biāo)明用戶的身份,系統(tǒng)以此來鑒別用戶的合法性.7.1.2安全性控制的一般方法BACK7.1.2安全性控制的一般方法(2)用戶名與口令聯(lián)合鑒別法:用戶標(biāo)識(shí)符是用戶公開的標(biāo)識(shí),它不足以成為鑒別用戶身份的憑證。(3)透明公式鑒別法:每個(gè)用戶都預(yù)先約定好一個(gè)過程或者函數(shù),鑒別用戶身份時(shí),系統(tǒng)提供一個(gè)隨機(jī)數(shù),用戶根據(jù)自己預(yù)先約定的計(jì)算過程或者函數(shù)進(jìn)行計(jì)算,系統(tǒng)根據(jù)計(jì)算結(jié)果辨別用戶身份的合法性。BACK7.1.2安全性控制的一般方法2、用戶存取權(quán)限控制用戶存取權(quán)限指的是不同的用戶對(duì)于不同的數(shù)據(jù)對(duì)象允許執(zhí)行的操作權(quán)限。存取權(quán)限由兩個(gè)要素組成,數(shù)據(jù)對(duì)象和操作類型。定義一個(gè)用戶的存取權(quán)限就是要定義這個(gè)用戶可以在哪些數(shù)據(jù)對(duì)象上進(jìn)行哪些類型的操作。在數(shù)據(jù)庫系統(tǒng)中,定義用戶存取權(quán)限稱為授權(quán)。授權(quán)有兩種:(1)系統(tǒng)權(quán)限:由DBA授予某些數(shù)據(jù)庫用戶,只有得到系統(tǒng)權(quán)限,才能成為數(shù)據(jù)庫用戶。BACK7.1.2安全性控制的一般方法(2)對(duì)象權(quán)限:可以由DBA授予,也可以由數(shù)據(jù)對(duì)象的創(chuàng)建者授予,使數(shù)據(jù)庫用戶具有對(duì)某些數(shù)據(jù)對(duì)象進(jìn)行某些操作的權(quán)限.這些授權(quán)定義經(jīng)過編譯后以一張授權(quán)表的形式存放在數(shù)據(jù)字典中。授權(quán)表主要有三個(gè)屬性,用戶標(biāo)識(shí)、數(shù)據(jù)對(duì)象和操作類型。BACK7.1.2安全性控制的一般方法3、視圖機(jī)制為不同的用戶定義不同的視圖,可以限制各個(gè)用戶的訪問范圍。通過視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無權(quán)存取這些數(shù)據(jù)的用戶隱藏起來,從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。4、數(shù)據(jù)加密數(shù)據(jù)加密是防止數(shù)據(jù)庫中數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段.加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)加密成為不可直接識(shí)別的格式,數(shù)據(jù)以密碼的形式存儲(chǔ)和傳輸.BACK7.1.2安全性控制的一般方法加密方法有兩種:(1)替換方法:該方法使用密鑰將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的一個(gè)字符.(2)轉(zhuǎn)換方法:該方法將明文中的字符按不同的順序重新排列.用密碼存儲(chǔ)數(shù)據(jù),在存入時(shí)需加密,在查詢時(shí)需解密,這個(gè)過程會(huì)占用較多的系統(tǒng)資源,降低了數(shù)據(jù)庫的性能。5、審計(jì)實(shí)際上任何系統(tǒng)的安全性措施都不是絕對(duì)可靠的,竊密者總有辦法打破這些控制。審計(jì)功能是一種監(jiān)視措施,跟蹤記錄有關(guān)數(shù)據(jù)的訪問活動(dòng)。BACK7.1.3安全性控制的其它方法

1、強(qiáng)制存取控制(MAC)有些數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)要求很高的保密性,通常具有靜態(tài)的嚴(yán)格的分層結(jié)構(gòu),強(qiáng)制存取控制能實(shí)現(xiàn)這種高保密性要求.這種方法的基本思想在于每個(gè)數(shù)據(jù)對(duì)象(文件、記錄記錄或宇段等)賦予一定的密級(jí),級(jí)別從高到低有:絕密級(jí)、機(jī)密級(jí)、秘密級(jí)和公用級(jí).每個(gè)用戶也具有相應(yīng)的級(jí)別,稱為許可證級(jí)別.在系統(tǒng)運(yùn)行時(shí),采用如下兩條簡單規(guī)則:(1)用戶U只能查看比它級(jí)別低或同級(jí)的數(shù)據(jù)。(2)用戶U只能修改和它同級(jí)的數(shù)據(jù).強(qiáng)制存取控制是一種獨(dú)立于值的控制方法.它的優(yōu)點(diǎn)是系統(tǒng)能執(zhí)行“信息流控制”。BACK5.1.3安全性控制的其它方法

1、強(qiáng)制存取控制(MAC)

在第②條,用戶U顯然不能修改比它級(jí)別高的數(shù)據(jù),也不能修改比它級(jí)別低的數(shù)據(jù),這樣主要是為了防止具有較高級(jí)別的用戶將該級(jí)別的數(shù)據(jù)復(fù)制到較低級(jí)別的文件中。強(qiáng)制存取控制是一種獨(dú)立于值的控制方法。它的優(yōu)點(diǎn)是系統(tǒng)能執(zhí)行“信息流控制”。在前面介紹的授權(quán)方法中,允許凡有權(quán)查看保密數(shù)據(jù)的用戶就可以把這種數(shù)據(jù)拷貝到非保密的文件中,造成無權(quán)用戶也可接觸保密數(shù)據(jù)。而強(qiáng)制存取控制可以避免這種非法的信息流動(dòng)。注意:這種方法在通用數(shù)據(jù)庫系統(tǒng)中應(yīng)用不廣泛,只是在某些專用系統(tǒng)中才有用。BACK7.1.3安全性控制的其它方法

2、統(tǒng)計(jì)數(shù)據(jù)庫的安全性查詢僅僅是某些記錄的統(tǒng)計(jì)值,例如求記錄數(shù)、和、平均值等。在統(tǒng)計(jì)數(shù)據(jù)庫中,雖然不允許用戶查詢單個(gè)記錄的信息,但是用戶可以通過處理足夠多的匯總信息來分析出單個(gè)記錄的信息.在統(tǒng)計(jì)數(shù)據(jù)庫中,對(duì)查詢應(yīng)作下列限制:①一個(gè)查詢查到的記錄個(gè)數(shù)至少是n;②兩個(gè)查詢查到的記錄的“交”數(shù)目至多是m.

BACK7.1.3安全性控制的其它方法

2、統(tǒng)計(jì)數(shù)據(jù)庫的安全性

系統(tǒng)可以調(diào)整n和m的值,使得用戶很難在統(tǒng)計(jì)數(shù)據(jù)庫中獲取其他個(gè)別記錄的信息,但要做到完全杜絕是不可能的。我們應(yīng)限制用戶計(jì)算和、個(gè)數(shù)、平均值的能力。如果一個(gè)破壞者只知道他自己的數(shù)據(jù),那么已經(jīng)證明,他至少要花1+(n-2)/m次查詢才有可能獲取其他個(gè)別記錄的信息。因而,系統(tǒng)應(yīng)限制用戶查詢的次數(shù)在1+(n-2)/m次以內(nèi)。但是這個(gè)方法還不能防止兩個(gè)破壞者聯(lián)手查詢導(dǎo)致數(shù)據(jù)的泄露。

BACK7.1.3安全性控制的其它方法

2、統(tǒng)計(jì)數(shù)據(jù)庫的安全性

保證數(shù)據(jù)庫安全性的另一個(gè)方法是“數(shù)據(jù)污染”,也就是在回答查詢時(shí),提供一些偏離正確值的數(shù)據(jù),以免數(shù)據(jù)泄露。當(dāng)然,這個(gè)偏離要在不破壞統(tǒng)計(jì)數(shù)據(jù)的前提下進(jìn)行。此時(shí),系統(tǒng)應(yīng)該在準(zhǔn)確性和安全性之間作出權(quán)衡。當(dāng)安全性遭到威脅時(shí),只能降低準(zhǔn)確性的標(biāo)準(zhǔn)。BACK7.1.4SQLServer安全性概述SQLServer安全系統(tǒng)的構(gòu)架建立在用戶和用戶組的基礎(chǔ)上.SQLServer提供了3種安全管理模式,即標(biāo)準(zhǔn)模式、集成模式和混合模式,數(shù)據(jù)庫設(shè)計(jì)者和數(shù)據(jù)庫管理員可以根據(jù)實(shí)際情況進(jìn)行選擇。1、兩個(gè)安全性階段:身份驗(yàn)證和授權(quán)。2、用戶權(quán)限:登錄創(chuàng)建在Windows中,而非SQLServer中。BACK7.1.4SQL

Server安全性概述當(dāng)用戶連接到SQLServer實(shí)例后,他們可以執(zhí)行的活動(dòng)由授予以下帳戶的權(quán)限確定:(1)用戶的安全帳戶;(2)用戶的安全帳戶所屬Windows組或角色層次結(jié);(3)用戶若要進(jìn)行任何涉及更改數(shù)據(jù)庫定義或訪問數(shù)據(jù)的活動(dòng),則必須有相應(yīng)的權(quán)限。BACK7.1.4

SQLServer安全性概述

3、視圖安全機(jī)制SQLServer通過限制可由用戶使用的數(shù)據(jù),可以將視圖作為安全機(jī)制。用戶可以訪問某些數(shù)據(jù),進(jìn)行查詢和修改,但是表或數(shù)據(jù)庫的其余部分是不可見的,也不能進(jìn)行訪問。4、加密方法SQLServer支持加密或可以加密的內(nèi)容為:①SQLServer中存儲(chǔ)的登錄和應(yīng)用程序角色密碼;②作為網(wǎng)絡(luò)數(shù)據(jù)包而在客戶端和服務(wù)器端之間發(fā)送的數(shù)據(jù);③SQLServer中如下對(duì)象的定義內(nèi)容:存儲(chǔ)過程、用戶定義函數(shù)、視圖、觸發(fā)器、默認(rèn)值、規(guī)則等。BACK7.1.4SQLServer安全性概述5、審核活動(dòng)SQLServer提供審核功能,用以跟蹤和記錄每個(gè)SQLServer實(shí)例上已發(fā)生的活動(dòng)(如成功和失敗的記錄)。SQLServer還提供管理審核記錄的接口,即SQL事件探查器。只有sysadmin固定安全角色的成員才能啟用或修改審核,而且審核的每次修改都是可審核的事件。BACK7.2數(shù)據(jù)庫完整性

5.2.1數(shù)據(jù)庫完整性概述5.2.2完整性規(guī)則的組成5.2.3完整性約束條件的分類5.2.4SQLServer完整性概述7.2.1數(shù)據(jù)庫完整性概述

數(shù)據(jù)庫的完整性是指保護(hù)數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和相容性,防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫造成無效操作。顯然,維護(hù)數(shù)據(jù)庫的完整性非常重要,數(shù)據(jù)庫中的數(shù)據(jù)是否具備完整性關(guān)系到數(shù)據(jù)能否真實(shí)地反映現(xiàn)實(shí)世界。數(shù)據(jù)庫的完整性和安全性是數(shù)據(jù)庫保護(hù)的兩個(gè)不同的方面。安全性是保護(hù)數(shù)據(jù)庫,以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞,安全性措施的防范對(duì)象是非法用戶和非法操作;完整性是防止合法用戶使用數(shù)據(jù)庫時(shí)向數(shù)據(jù)庫中加入不符合語義的數(shù)據(jù),完整性措施的防范對(duì)象是不合語義的數(shù)據(jù)。BACK7.2.2完整性規(guī)則的組成

完整性規(guī)則主要由以下三部分構(gòu)成:(1)觸發(fā)條件:規(guī)定系統(tǒng)什么時(shí)候使用規(guī)則檢查數(shù)據(jù);(2)約束條件:規(guī)定系統(tǒng)檢查用戶發(fā)出的操作請(qǐng)求違背了什么樣的完整性約束條件;(3)違約響應(yīng):規(guī)定系統(tǒng)如果發(fā)現(xiàn)用戶的操作請(qǐng)求違背了完整性約束條件,應(yīng)該采取一定的動(dòng)作來保證數(shù)據(jù)的完整性,即違約時(shí)要做的事情。完整性規(guī)則從執(zhí)行時(shí)間上可分為立即執(zhí)行約束(ImmediateConstraints)和延遲執(zhí)行約束(DeferredConstraints)。立即執(zhí)行約束是指在執(zhí)行用戶事務(wù)過程中,某一條語句執(zhí)行完成后,系統(tǒng)立即對(duì)此數(shù)據(jù)進(jìn)行完整性約束條件檢查;延遲執(zhí)行約束是指在整個(gè)事務(wù)執(zhí)行結(jié)束后,再對(duì)約束條件進(jìn)行完整性檢查,結(jié)果正確后才能提交。BACK7.2.2完整性規(guī)則的組成一條完整性規(guī)則可以用一個(gè)五元組(D,O,A,C,P)來形式化地表示。其中:D(data):代表約束作用的數(shù)據(jù)對(duì)象;O(operation):代表觸發(fā)完整性檢查的數(shù)據(jù)庫操作,即當(dāng)用戶發(fā)出什么操作請(qǐng)求時(shí)需要檢查該完整性規(guī)則;A(assertion):代表數(shù)據(jù)對(duì)象必須滿足的語義約束,這是規(guī)則的主體;C(condition):代表選擇A作用的數(shù)據(jù)對(duì)象值的謂詞;P(procedure):代表違反完整性規(guī)則時(shí)觸發(fā)執(zhí)行的操作過程。BACK7.2.2完整性規(guī)則的組成例如,對(duì)于“學(xué)號(hào)不能為空”的這條完整性約束,D:代表約束作用的數(shù)據(jù)對(duì)象為SNO屬性;O(operation):當(dāng)用戶插入或修改數(shù)據(jù)時(shí)需要檢查該完整性規(guī)則;A(assertion):SNO不能為空;C(condition):A可作用于所有記錄的SNO屬性;P(procedure):拒絕執(zhí)行用戶請(qǐng)求。BACK7.2.3完整性約束條件的分類在數(shù)據(jù)庫領(lǐng)域中,有四種最常用的數(shù)據(jù)模型,它們是:被稱為非關(guān)系模型的層次模型、網(wǎng)狀模型、關(guān)系模型和面向?qū)ο竽P汀1菊潞喴榻B層次模型、網(wǎng)狀模型、關(guān)系模型。層次模型是數(shù)據(jù)庫系統(tǒng)中最早出現(xiàn)的數(shù)據(jù)模型,它用樹形結(jié)構(gòu)表示各類實(shí)體以及實(shí)體間的聯(lián)系。層次模型數(shù)據(jù)庫系統(tǒng)的典型代表是IBM公司的IMS(InformationManagementSystems)數(shù)據(jù)庫管理系統(tǒng),這是一個(gè)曾經(jīng)廣泛使用的數(shù)據(jù)庫管理系統(tǒng)。現(xiàn)實(shí)世界中有一些的實(shí)體之間的聯(lián)系本來就呈現(xiàn)出一種很自然的層次關(guān)系,如家庭關(guān)系,行政關(guān)系。BACK7.2.3完整性約束條件的分類

1、值的約束和結(jié)構(gòu)的約束從約束條件使用的對(duì)象來分,可把約束分為值的約束和結(jié)構(gòu)的約束。值的約束:即對(duì)數(shù)據(jù)類型、數(shù)據(jù)格式、取值范圍等進(jìn)行規(guī)定。(1)對(duì)數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長度、單位和精度等。例如,規(guī)定學(xué)生性別的數(shù)據(jù)類型應(yīng)為字符型,長度為2。(2)對(duì)數(shù)據(jù)格式的約束。例如,規(guī)定出生日期的數(shù)據(jù)格式為YYYY.MM.DD。(3)對(duì)取值范圍的約束。例如,月份的取值范圍為1~12,日期1~31。BACK7.2.3完整性約束條件的分類(4)對(duì)空值的約束??罩当硎疚炊x或未知的值,它與零值和空格不同。有的列值允許空值,有的則不允許。例如,學(xué)號(hào)和課程號(hào)不可以為空值,但成績可以為空值。結(jié)構(gòu)約束:即對(duì)數(shù)據(jù)之間聯(lián)系的約束。數(shù)據(jù)庫中同一關(guān)系的不同屬性之間,應(yīng)滿足一定的約束條件,同時(shí),不同關(guān)系的屬性之間也有聯(lián)系,也應(yīng)滿足一定的約束條件。BACK7.2.3完整性約束條件的分類常見的結(jié)構(gòu)約束有如下四種:(1)函數(shù)依賴約束:說明了同一關(guān)系中不同屬性之間應(yīng)滿足的約束條件。如:2NF,3NF,BCNF這些不同的范式應(yīng)滿足不同的約束條件。大部分函數(shù)依賴約束都是隱含在關(guān)系模式結(jié)構(gòu)中的,特別是對(duì)于規(guī)范化程度較高的關(guān)系模式,都是由模式來保持函數(shù)依賴的。(2)實(shí)體完整性約束:說明了關(guān)系主鍵(或主碼)的屬性列必須唯一,其值不能為全空或部分為空。(3)參照完整性約束:說明了不同關(guān)系的屬性之間的約束條件,即外部鍵(外碼)的值應(yīng)能夠在被參照關(guān)系的主鍵值中找到或取空值。BACK7.2.3完整性約束條件的分類(4)用戶自定義完整性:從實(shí)際應(yīng)用系統(tǒng)出發(fā),按需定義屬性之間要滿足的約束條件。(5)統(tǒng)計(jì)約束,規(guī)定某個(gè)屬性值與關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間必須滿足某種約束條件。例如,規(guī)定系主任的獎(jiǎng)金不得高于該系的平均獎(jiǎng)金的50%,不得低于該系的平均獎(jiǎng)金的15%。這里該系平均獎(jiǎng)金的值就是一個(gè)統(tǒng)計(jì)計(jì)算值。其中,實(shí)體完整性約束和參照完整性約束是關(guān)系模型的兩個(gè)極其重要的約束,被稱為關(guān)系的兩個(gè)不變性。而統(tǒng)計(jì)約束實(shí)現(xiàn)起來開銷很大。BACK7.2.3完整性約束條件的分類2、靜態(tài)約束和動(dòng)態(tài)約束完整性約束從約束對(duì)象的狀態(tài)可分為靜態(tài)約束和動(dòng)態(tài)約束。靜態(tài)約束靜態(tài)約束是指在數(shù)據(jù)庫每一個(gè)確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿足的約束條件,它是反映數(shù)據(jù)庫狀態(tài)合理性的約束,這是最重要的一類完整性約束。上面介紹的值的約束和結(jié)構(gòu)的約束均屬于靜態(tài)約束。動(dòng)態(tài)約束動(dòng)態(tài)約束是指數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí)(數(shù)據(jù)庫數(shù)據(jù)變動(dòng)前后),新、舊值之間所應(yīng)滿足的約束條件,它是反映數(shù)據(jù)庫狀態(tài)變遷的約束。例如,學(xué)生年齡在更改時(shí)只能增長,職工工資在調(diào)整時(shí)不得低于其原來的工資。BACK7.2.4SQLServer完整性概述

SQLServer中數(shù)據(jù)完整性可分為四種類型:實(shí)體完整性、域完整性、引用完整性、用戶定義完整性。另外,觸發(fā)器、存儲(chǔ)過程等也能以一定方式控制數(shù)據(jù)完整性。1、實(shí)體完整性實(shí)體完整性將行定義為特定表的唯一實(shí)體。SQLServer支持如下實(shí)體完整性相關(guān)的約束:(1)PRIMARYKEY約束:在一個(gè)表中不能有兩行包含相同的主鍵值,不能在主鍵內(nèi)的任何列中輸入NULL值。(2)UNIQUE約束:UNIQUE約束在列集內(nèi)強(qiáng)制執(zhí)行值的唯一性,對(duì)于UNIQUE約束中的列,表中不允許有兩行包含相同的非空值。BACK7.2.4SQLServer完整性概述(3)IDENTITY屬性:IDENTITY屬性能自動(dòng)產(chǎn)生唯一標(biāo)識(shí)值,指定為IDENTITY的列一般作為主鍵。2、域完整性:是指給定列的輸入正確性與有效性。SQLServer中強(qiáng)制域有效性的方法有:限制類型,如通過數(shù)據(jù)類型、用戶自定義數(shù)據(jù)類型等實(shí)現(xiàn);格式限制,如通過CHECK約束和規(guī)則等實(shí)現(xiàn);列值的范圍限定,如通過PRIMARYKEY約束、UNIQUE約束、FOREIGNKEY約束、CHECK約束、DEFAULT定義、NOTNULL定義等實(shí)現(xiàn)。BACK7.2.4SQLServer完整性概述3、引用完整性(即參照完整性)SQLServer引用完整性主要由FOREIGNKEY約束體現(xiàn),它標(biāo)識(shí)表之間的關(guān)系,一個(gè)表的外鍵指向另一個(gè)表的候選鍵或唯一鍵。強(qiáng)制引用完整性時(shí),SQLServer禁止用戶進(jìn)行下列操作:(1)當(dāng)主表中沒有關(guān)聯(lián)的記錄時(shí),將記錄添加到相關(guān)表中。(2)更改主表中的值并導(dǎo)致相關(guān)表中的記錄孤立。BACK7.2.4SQLServer完整性概述(3)從主表中刪除記錄,但仍存在與該記錄匹配的相關(guān)記錄。在DELETE或UPDATE所產(chǎn)生的所有級(jí)聯(lián)引用操作的諸表中,每個(gè)表只能出現(xiàn)一次。多個(gè)級(jí)聯(lián)操作中只要有一個(gè)表因完整性原因操作失敗,整個(gè)操縱將失敗而回滾。4、用戶定義完整性SQLServer用戶定義完整性主要由Check約束所定義的列級(jí)或表級(jí)約束體現(xiàn),用戶定義完整性還能由規(guī)則、觸發(fā)器、客戶端或服務(wù)器端應(yīng)用程序靈活定義。BACK7.2.4SQLServer完整性概述5、觸發(fā)器SQLServer2000觸發(fā)器是一類特殊的存儲(chǔ)過程,被定義為在對(duì)表或視圖發(fā)出UPDATE、INSERT或DELETE語句時(shí)自動(dòng)執(zhí)行。觸發(fā)器可以擴(kuò)展SQLServer約束、默認(rèn)值和規(guī)則的完整性檢查邏輯,一個(gè)表可以有多個(gè)觸發(fā)器。6、其它機(jī)制SQLServer2000支持存儲(chǔ)過程中制定約束規(guī)則,SQLServer2000的并發(fā)控制機(jī)制能保障多用戶存取數(shù)據(jù)時(shí)的完整性。BACK7.3數(shù)據(jù)庫并發(fā)性

5.3.1數(shù)據(jù)庫并發(fā)性概述5.3.2事務(wù)的基本概念5.3.3并發(fā)操作與數(shù)據(jù)的不一致性5.3.4封鎖及其產(chǎn)生問題的解決5.3.5SQLServer的并發(fā)控制機(jī)制返回本章首頁7.3.1數(shù)據(jù)庫并發(fā)性概述

每個(gè)用戶在存取數(shù)據(jù)庫中的數(shù)據(jù)時(shí),可能是串行執(zhí)行,即每個(gè)時(shí)刻只有一個(gè)用戶程序運(yùn)行,也可能是多個(gè)用戶并行地存取數(shù)據(jù)庫。數(shù)據(jù)庫的最大特點(diǎn)之一就是數(shù)據(jù)資源是共享的,串行執(zhí)行意味著一個(gè)用戶在運(yùn)行程序時(shí),其他用戶程序必須等到這個(gè)用戶程序結(jié)束才能對(duì)數(shù)據(jù)庫進(jìn)行存取,這樣數(shù)據(jù)庫系統(tǒng)的利用率會(huì)極低。數(shù)據(jù)庫并發(fā)執(zhí)行是主流。數(shù)據(jù)庫的并發(fā)控制機(jī)制能解決這類問題,以保持?jǐn)?shù)據(jù)庫中數(shù)據(jù)的在多用戶并發(fā)操作時(shí)的一致性、正確性。BACK7.3.2事務(wù)的基本概念

1、事務(wù)(Transaction)的定義

事務(wù)是數(shù)據(jù)庫系統(tǒng)中執(zhí)行的一個(gè)工作單位,它是由用戶定義的一組操作序列組成。一個(gè)事務(wù)可以是一組SQL語句、一條SQL語句或整個(gè)程序,一個(gè)應(yīng)用程序可以包括多個(gè)事務(wù)。事務(wù)的開始與結(jié)束可以由用戶顯式控制。如果用戶沒有顯式地定義事務(wù),則由DBMS按照缺省規(guī)定自動(dòng)劃分事務(wù)。BACK7.3.2事務(wù)的基本概念在SQL語言中,定義事務(wù)的語句有三條:(1)BEGINTRANSACTION表示事務(wù)的開始;(控制事務(wù))(2)COMMIT表示事務(wù)的提交,即將事務(wù)中所有對(duì)數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫中去,此時(shí)事務(wù)正常結(jié)束;(3)ROLLBACK表示事務(wù)的回滾,即在事務(wù)運(yùn)行的過程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫的所有已完成的更新操作全部撤銷,再回滾到事務(wù)開始時(shí)的狀態(tài)。BACK7.3.2事務(wù)的基本概念2、事務(wù)的特征事務(wù)是由有限的數(shù)據(jù)庫操作序列組成,但并不是任意的數(shù)據(jù)庫操作序列都能成為事務(wù),為了保護(hù)數(shù)據(jù)的完整性,一般要求事務(wù)具有以下四個(gè)特征:(1)原子性(Atomic):一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該遵守“要么不做,要么全做”(nothingorall)的原則,即不允許事務(wù)部分的完成。即使因?yàn)楣收隙故聞?wù)未能完成,它執(zhí)行的部分操作要被取消。(2)一致性(Consistency):事務(wù)對(duì)數(shù)據(jù)庫的操作使數(shù)據(jù)庫從一個(gè)一致狀態(tài)轉(zhuǎn)變到另一個(gè)一致狀態(tài)。所謂數(shù)據(jù)庫的一致狀態(tài)是指事務(wù)操作后數(shù)據(jù)庫中的數(shù)據(jù)要滿足各種完整性約束要求。BACK7.3.2事務(wù)的基本概念例如,銀行企業(yè)中,“從帳號(hào)A轉(zhuǎn)移資金額M到帳號(hào)B”是一個(gè)典型的事務(wù),這個(gè)事務(wù)包括兩個(gè)操作,從帳號(hào)A中減去資金額M和在帳號(hào)B中增加資金額M,如果只執(zhí)行其中一個(gè)操作,則數(shù)據(jù)庫處于不一致狀態(tài),帳務(wù)會(huì)出現(xiàn)問題。也就是說,兩個(gè)操作要么全做,要么全不做,否則就不能成為事務(wù)??梢娛聞?wù)的一致性與原子性是密切相關(guān)的。3、隔離性(Isolation):如果多個(gè)事務(wù)并發(fā)地執(zhí)行,應(yīng)像各個(gè)事務(wù)獨(dú)立執(zhí)行一樣,一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的。并發(fā)控制就是為了保證事務(wù)間的隔離性。BACK7.3.2事務(wù)的基本概念4、持久性(Durability):指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫因故障而受到破壞,DBMS也應(yīng)該能夠恢復(fù)。事務(wù)上述四個(gè)性質(zhì)的英文術(shù)語的第一個(gè)字母分別為A、C、I、D。因此,這四個(gè)性質(zhì)也稱為事務(wù)的ACID準(zhǔn)則。BACK7.3.2事務(wù)的基本概念BEGINTRANSACTIONREADAA←A-MIFA<0/*A款不足*/THENBEGINDISPLAY“A款不足”ROLLBACKENDELSE/*撥款*/BEGINB←B+MDISPLAY“撥款完成”COMMITEND下面是一個(gè)事務(wù)的例子,從帳號(hào)A轉(zhuǎn)移資金額R到帳號(hào)B:BACK7.3.2事務(wù)的基本概念這是對(duì)一個(gè)簡單事務(wù)的完整的描述。該事務(wù)有兩個(gè)出口:當(dāng)A帳號(hào)的款項(xiàng)不足時(shí),事務(wù)以ROLLBACK(撤銷)命令結(jié)束,即撤銷該事務(wù)的影響;另一個(gè)出口是以COMMIT(提交)命令結(jié)束,完成從帳號(hào)A到帳號(hào)B的撥款。在COMMIT之前,即在數(shù)據(jù)庫修改過程中,數(shù)據(jù)可能是不一致的,事務(wù)本身也可能被撤銷。只有在COMMIT之后,事務(wù)對(duì)數(shù)據(jù)庫所產(chǎn)生的變化才對(duì)其他事務(wù)開放,這就可以避免其他事務(wù)訪問不一致或不存在的數(shù)據(jù)。BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性

當(dāng)同一數(shù)據(jù)庫系統(tǒng)中有多個(gè)事務(wù)并發(fā)運(yùn)行時(shí),如果不加以適當(dāng)控制,可能產(chǎn)生數(shù)據(jù)的不一致性。[例1]并發(fā)取款操作。假設(shè)存款余額R=1000元,甲事務(wù)T1取走存款200元,乙事務(wù)T2取走存款300元,如果正常操作,即甲事務(wù)T1執(zhí)行完畢再執(zhí)行乙事務(wù)T2,存款余額更新后應(yīng)該是500元。但是如果按照如下順序操作,則會(huì)有不同的結(jié)果:甲事務(wù)T1讀取存款余額R=1000元;乙事務(wù)T2讀取存款余額R=1000元;BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性

甲事務(wù)T1取走存款200元,修改存款余額R=R-200=800,把R=800寫回到數(shù)據(jù)庫;乙事務(wù)T2取走存款300元,修改存款余額R=R-300=700,把R=700寫回到數(shù)據(jù)庫。結(jié)果兩個(gè)事務(wù)共取走存款500元,而數(shù)據(jù)庫中的存款卻只少了300元。得到這種錯(cuò)誤的結(jié)果是由甲、乙兩個(gè)事務(wù)并發(fā)操作引起的。BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性數(shù)據(jù)庫的并發(fā)操作導(dǎo)致的數(shù)據(jù)庫不一致性主要有以下三種:1、丟失更新(LostUpdate)當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)做修改,并發(fā)執(zhí)行時(shí),T2把T1或T1把T2的修改結(jié)果覆蓋掉,造成了數(shù)據(jù)的丟失更新問題,導(dǎo)致數(shù)據(jù)的不一致。仍以[例1]中的操作為例進(jìn)行分析。在表5.5中,數(shù)據(jù)庫中R的初值是1000,事務(wù)T1包含三個(gè)操作:讀入R初值(FINDR);計(jì)算(R=R-200);更新R(UPDATER)。BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性'表5.5丟失更新問題時(shí)間事務(wù)T1R的值事務(wù)T2t0

1000

t1FINDR

t2

FINDRt3R=R-200

t4

R=R-300t5UPDATER

t6

800UPDATERt7

700

事務(wù)T2也包含三個(gè)操作:FINDR;計(jì)算(R=R-300);UPDATER。如果事務(wù)T1和T2順序執(zhí)行,則更新后,R的值是500。但如果T1和T2按照表5.5所示的并發(fā)執(zhí)行,R的值是700,得到錯(cuò)誤的結(jié)果,原因在于在t7時(shí)刻丟失了T1對(duì)數(shù)據(jù)庫的更新操作。因此,這個(gè)并發(fā)操作不正確。BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性2、污讀(DirtyRead)事務(wù)T1更新了數(shù)據(jù)R,事務(wù)T2讀取了更新后的數(shù)據(jù)R,事務(wù)T1由于某種原因被撤消,修改無效,數(shù)據(jù)R恢復(fù)原值。事務(wù)T2得到的數(shù)據(jù)與數(shù)據(jù)庫的內(nèi)容不一致,這種情況稱為“污讀”(又名臟讀)。BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性在表5.6中,事務(wù)T1把R的值改為900,但此時(shí)尚未做COMMIT操作,事務(wù)T2將修改過的值800讀出來,之后事務(wù)T1執(zhí)行ROLLBACK操作,R的值恢復(fù)為1000,而事務(wù)T2將仍在使用已被撤消了的R值800。時(shí)間事務(wù)T1R的值事務(wù)T2t0

1000

t1FINDR

t2R=R-200

t3UPDATER

t4

800FINDRt5ROLLBACK

t6

1000

表5.6污讀問題

BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性原因在于在t4時(shí)刻事務(wù)T2讀取了T1未提交的更新操作結(jié)果,這種值是不穩(wěn)定的,在事務(wù)T1結(jié)束前隨時(shí)可能執(zhí)行ROLLBACK操作。對(duì)于這些未提交的隨后又被撤消的更新數(shù)據(jù)稱為“臟數(shù)據(jù)”。比如,這里事務(wù)T2在t2時(shí)刻讀取的就是“臟數(shù)據(jù)”。3、不可重讀(UnrepeatableRead)事務(wù)T1讀取了數(shù)據(jù)R,事務(wù)T2讀取并更新了數(shù)據(jù)R,當(dāng)事務(wù)T1再讀取數(shù)據(jù)R以進(jìn)行核對(duì)時(shí),得到的兩次讀取值不一致,這種情況稱為“不可重讀”。BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性在表5.7中,在t0時(shí)刻事務(wù)T1讀取R的值為1000,但事務(wù)T2在t4時(shí)刻將R的值更新為為700。所以T1在t5時(shí)刻所讀取R的值700已經(jīng)與開始讀取的值1000不一致了。時(shí)間事務(wù)T1R的值事務(wù)T2t0

1000

t1FINDR1000

t2

FINDRt3

R=R-300t4

700UPDATERt5FINDR700

表5.7不可重讀

BACK7.3.3并發(fā)操作與數(shù)據(jù)的不一致性產(chǎn)生上述三類數(shù)據(jù)不一致性的主要原因就是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要求DBMS提供并發(fā)控制功能以正確的方式高度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫的完整性。BACK7.3.4封鎖及其產(chǎn)生問題的解決

實(shí)現(xiàn)并發(fā)控制的方法主要有兩種:封鎖(Lock)技術(shù)和時(shí)標(biāo)(Timestamping)技術(shù)(時(shí)標(biāo)意指一種將時(shí)間分配到事件的制度)。這里只介紹封鎖技術(shù)。1、封鎖類型(LockType)

所謂封鎖就是當(dāng)一個(gè)事務(wù)在對(duì)某個(gè)數(shù)據(jù)對(duì)象(可以是數(shù)據(jù)項(xiàng)、記錄、數(shù)據(jù)集、以至整個(gè)數(shù)據(jù)庫)進(jìn)行操作之前,必須獲得相應(yīng)的鎖,以保證數(shù)據(jù)操作的正確性和一致性。封鎖是目前DBMS普遍采用的并發(fā)控制方法,基本的封鎖類型有兩種:排它鎖和共享鎖。BACK7.3.4封鎖及其產(chǎn)生問題的解決(1)排它鎖(ExclusiveLock)排它鎖又稱寫鎖,簡稱為X鎖,其采用的原理是禁止并發(fā)操作。當(dāng)事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象R實(shí)現(xiàn)X封鎖后,其他事務(wù)要等T解除X封鎖以后,才能對(duì)R進(jìn)行封鎖。這就保證了其他事務(wù)在T釋放R上的鎖之前,不能再對(duì)R進(jìn)行操作。(2)共享鎖(ShareLock)共享鎖又稱讀鎖,,簡稱為S鎖,其采用的原理是允許其他用戶對(duì)同一數(shù)據(jù)對(duì)象進(jìn)行查詢,但不能對(duì)該數(shù)據(jù)對(duì)象進(jìn)行修改。當(dāng)事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象R實(shí)現(xiàn)S封鎖后,其他事務(wù)只能對(duì)R加S鎖,而不能加X鎖,直到T釋放R上的S鎖。這就保證了其他事務(wù)在T釋放R上的S鎖之前,只能讀取R,而不能再對(duì)R作任何修改。BACK7.3.4封鎖及其產(chǎn)生問題的解決2、封鎖協(xié)議(LockProtocol)封鎖可以保證合理的進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。實(shí)際上,鎖是一個(gè)控制塊,其中包括被加鎖記錄的標(biāo)識(shí)符及持有鎖的事務(wù)的標(biāo)識(shí)符等。在封鎖時(shí),要考慮一定的封鎖規(guī)則,例如,何時(shí)開始封鎖、封鎖多長時(shí)間、何時(shí)釋放等,這些封鎖規(guī)則稱為封鎖協(xié)議。對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。封鎖協(xié)議在不同程序上對(duì)正確控制并發(fā)操作提供了一定的保證。BACK7.3.4封鎖及其產(chǎn)生問題的解決

上面講述過的并發(fā)操作所帶來的丟失更新、污讀和不可重讀等數(shù)據(jù)不一致性問題,可以通過三級(jí)封鎖協(xié)議在不同程度上給予解決,下面介紹三級(jí)封鎖協(xié)議。1、一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議的內(nèi)容是:事務(wù)T在修改數(shù)據(jù)對(duì)象之前必須對(duì)其加X鎖,直到事務(wù)結(jié)束。具體地說,就是任何企圖更新記錄R的事務(wù)必須先執(zhí)行“XLOCKR”操作,以獲得對(duì)該記錄進(jìn)行更新的能力并對(duì)它取得X封鎖。如果未獲準(zhǔn)“X封鎖”,那么這個(gè)事務(wù)進(jìn)入等待狀態(tài),一直到獲準(zhǔn)“X封鎖”,該事務(wù)才繼續(xù)做下去。該事務(wù)規(guī)定事務(wù)在更新記錄R時(shí)必須獲得排它性封鎖,使得兩個(gè)同時(shí)要求更新R的并行事務(wù)之一必須在一個(gè)事務(wù)更新操作執(zhí)行完成之后才能獲得X封鎖,這樣就避免了兩個(gè)事務(wù)讀到同一個(gè)R值而先后更新時(shí)所發(fā)生的丟失更新問題。BACK7.3.4封鎖及其產(chǎn)生問題的解決利用一級(jí)封鎖協(xié)議可以解決表5.5中的數(shù)據(jù)丟失更新問題,如表5.8所示。事務(wù)T1先對(duì)R進(jìn)行X封鎖(XLOCK),事務(wù)T2執(zhí)行“XLOCKR”操作,未獲準(zhǔn)“X封鎖”,則進(jìn)入等待狀態(tài),直到事務(wù)T1更新R值以后,解除X封鎖操作(UNLOCKX)。此后事務(wù)T2再執(zhí)行“XLOCKR”操作,獲準(zhǔn)“X封鎖”,并對(duì)R值進(jìn)行更新(此時(shí)R已是事務(wù)T1更新過的值,R=900)。這樣就能得出正確的結(jié)果。一級(jí)封鎖協(xié)議只有當(dāng)修改數(shù)據(jù)時(shí)才進(jìn)行加鎖,如果只是讀取數(shù)據(jù)并不加鎖,所以它不能防止“污讀”和“重讀”數(shù)據(jù)。BACK7.3.4封鎖及其產(chǎn)生問題的解決表5.8無丟失更新問題時(shí)間事務(wù)T1R的值事務(wù)T2t0XLOCKR1000

t1FINDR

t2

XLOCKRt3R=R-200

WAITt4UPDATER

WAITt5UNLOCKX800WAITt6

XLOCKRt7

R=R-300t8

UPDATERt9

500UNLOCKXBACK7.3.4封鎖及其產(chǎn)生問題的解決2、二級(jí)封鎖協(xié)議二級(jí)封鎖協(xié)議的內(nèi)容是:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后釋放S鎖。所以二級(jí)封鎖協(xié)議不但可以解決更新時(shí)所發(fā)生的數(shù)據(jù)丟失問題,還可以進(jìn)一步防止“污讀”。BACK7.3.4封鎖及其產(chǎn)生問題的解決利用二級(jí)封鎖協(xié)議可以解決表5.6中的數(shù)據(jù)“污讀”問題,如表5.9所示。表5.9

無污讀問題BACK時(shí)間事務(wù)T1R的值事務(wù)T2t0XLOCKR1000t1FINDRt2R=R-200t3UPDATERt4800SLOCKRt5ROLLBACKWAITt6UNLOCKR1000SLOCKRt71000FINDRt8UNLOCKS7.3.4封鎖及其產(chǎn)生問題的解決事務(wù)T1先對(duì)R進(jìn)行X封鎖(XLOCK),把R的值改為800,但尚未提交。這時(shí)事務(wù)T2請(qǐng)求對(duì)數(shù)據(jù)R加S鎖,因?yàn)門1已對(duì)R加了X鎖,T2只能等待,直到事務(wù)T1釋放X鎖。之后事務(wù)T1因某種原因撤銷,數(shù)據(jù)R恢復(fù)原值1000,并釋放R上的X鎖。事務(wù)T2可對(duì)數(shù)據(jù)R加S鎖,讀取R=1000,得到了正確的結(jié)果,從而避免了事務(wù)T2讀取“臟數(shù)據(jù)”。BACK7.3.4封鎖及其產(chǎn)生問題的解決3、三級(jí)封鎖協(xié)議三級(jí)封鎖協(xié)議的內(nèi)容是:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后并不釋放S鎖,而直到事務(wù)T結(jié)束才釋放。所以三級(jí)封鎖協(xié)議除了可以防止更新丟失問題和“污讀”數(shù)據(jù)外,還可進(jìn)一步防止不可重讀數(shù)據(jù),徹底解決了并發(fā)操作所帶來的三個(gè)不一致性問題。利用三級(jí)封鎖協(xié)議可以解決表5.7中的不可重讀問題。BACK7.3.4封鎖及其產(chǎn)生問題的解決3、封鎖粒度(LockGranularity)封鎖對(duì)象的大小稱為封鎖粒度。根據(jù)對(duì)數(shù)據(jù)的不同處理,封鎖的對(duì)象可以是這樣一些邏輯單元:字段、數(shù)據(jù)庫等,也可以是這樣一些物理單元:頁(數(shù)據(jù)頁或索引頁)、塊等。封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。封鎖粒度越小,系統(tǒng)中能夠被封鎖的對(duì)象就越多,并發(fā)度越高,但封鎖機(jī)構(gòu)復(fù)雜,系統(tǒng)開銷也就越大。封鎖粒度越大,系統(tǒng)中能夠被封鎖的對(duì)象就越少,并發(fā)度越小,封鎖機(jī)構(gòu)簡單,相應(yīng)系統(tǒng)開銷也就越小。因此,在實(shí)際應(yīng)用中,選擇封鎖粒度時(shí)應(yīng)同時(shí)考慮封鎖機(jī)制和并發(fā)度兩個(gè)因素,對(duì)系統(tǒng)開銷與并發(fā)度進(jìn)行權(quán)衡,以求得最優(yōu)的效果。BACK7.3.4封鎖及其產(chǎn)生問題的解決4、死鎖和活鎖封鎖技術(shù)可有效解決并行操作引起的數(shù)據(jù)不一致性問題,但也可產(chǎn)生新的問題,即可能產(chǎn)生活鎖和死鎖問題。1、活鎖(Livelock)當(dāng)某個(gè)事務(wù)請(qǐng)求對(duì)某一數(shù)據(jù)的排它性封鎖時(shí),由于其他事務(wù)一直優(yōu)先得到對(duì)該數(shù)據(jù)的封鎖與操作而使這個(gè)事務(wù)一直處于等待狀態(tài),這種狀態(tài)形成活鎖。例如,事務(wù)T1在對(duì)數(shù)據(jù)R封鎖后,事務(wù)T2又請(qǐng)求封鎖R,于是T2等待。T3也請(qǐng)求封鎖R。當(dāng)T1釋放了R上的封鎖后,系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2繼續(xù)等待。然后又有T4請(qǐng)求封鎖R,T3釋放了R上的封鎖后,系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求…T2可能永遠(yuǎn)處于等待狀態(tài),從而發(fā)生了活鎖。如表5.11所示。BACK7.3.4封鎖及其產(chǎn)生問題的解決時(shí)間事務(wù)T1事務(wù)T2事務(wù)T3事務(wù)T4t0LOCKR

t1…LOCKR

t2…WAITLOCKR

t3UNLOCKWAITWAITLOCKRt4…WAITLOCKRWAITt5

WAIT

WAITt6

WAITUNLOCKWAITt7

WAIT

LOCKRt8

WAIT

時(shí)間事務(wù)T1事務(wù)T2t0LOCKR1

t1

LOCKR2t2

t3LOCKR2

t4WAIT

t5WAITLOCKR1t6WAITWAITt7WAITWAIT表5.11活鎖表5.12死鎖BACK7.3.4封鎖及其產(chǎn)生問題的解決2、死鎖(Deadlock)在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,每個(gè)事務(wù)都在等待其中另一個(gè)事務(wù)解除封鎖,它才能繼續(xù)執(zhí)行下去,結(jié)果造成任何一個(gè)事務(wù)都無法繼續(xù)執(zhí)行,這種狀態(tài)稱為死鎖。例如,事務(wù)T1在對(duì)數(shù)據(jù)R1封鎖后,又要求對(duì)數(shù)據(jù)R2封鎖,而事務(wù)T2已獲得對(duì)數(shù)據(jù)R2的封鎖,又要求對(duì)數(shù)據(jù)R1封鎖,這樣兩個(gè)事務(wù)由于都不能得到全部所需封鎖而處于等待狀態(tài),發(fā)生了死鎖。如表5.12所示。BACK7.3.4封鎖及其產(chǎn)生問題的解決(1)死鎖產(chǎn)生的條件發(fā)生死鎖的必要條件有以下四條:①互斥條件:一個(gè)數(shù)據(jù)對(duì)象一次只能被一個(gè)事務(wù)所使用,即對(duì)數(shù)據(jù)的封鎖采用排它式;②不可搶占條件:一個(gè)數(shù)據(jù)對(duì)象只能被占有它的事務(wù)所釋放,而不能被別的事務(wù)強(qiáng)行搶占;③部分分配條件:一個(gè)事務(wù)已經(jīng)封鎖分給它的數(shù)據(jù)對(duì)象,但仍然要求封鎖其他數(shù)據(jù);④循環(huán)等待條件:允許等待其他事務(wù)釋放數(shù)據(jù)對(duì)象,系統(tǒng)處于加鎖請(qǐng)求相互等待的狀態(tài)。BACK7.3.4封鎖及其產(chǎn)生問題的解決(2)死鎖的預(yù)防死鎖一旦發(fā)生,系統(tǒng)效率將會(huì)大大下降,因而要盡量避免死鎖的發(fā)生。在操作系統(tǒng)的多道程序運(yùn)行中,由于多個(gè)進(jìn)程的并行執(zhí)行需要分別占用不同資源時(shí),也會(huì)發(fā)生死鎖。要想預(yù)防死鎖的產(chǎn)生,就得破壞形成死鎖的條件。同操作系統(tǒng)預(yù)防死鎖的方法類似,在數(shù)據(jù)庫環(huán)境下,常用的方法有以下兩種:①一次加鎖法BACK7.3.4封鎖及其產(chǎn)生問題的解決圖5.2一次加鎖法

一次加鎖法是每個(gè)事物必須將所有要使用的數(shù)據(jù)對(duì)象全部依次加鎖,并要求加鎖成功,只要一個(gè)加鎖不成功,表示本次加鎖失敗,則應(yīng)該立即釋放所有已加鎖成功的數(shù)據(jù)對(duì)象,然后重新開始從頭加鎖。一次加鎖法的程序框圖如圖5.2。BACK7.3.4封鎖及其產(chǎn)生問題的解決一次加鎖法雖然可以有效地預(yù)防死鎖的發(fā)生,但也存在一些問題。首先,對(duì)某一事務(wù)所要使用的全部數(shù)據(jù)一次性加鎖,擴(kuò)大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。其次,數(shù)據(jù)庫中的數(shù)據(jù)是不斷變化的,原來不要求封鎖的數(shù)據(jù),在執(zhí)行過程中可能會(huì)變成封鎖對(duì)象,所以很難事先精確地確定每個(gè)事務(wù)所要封鎖的數(shù)據(jù)對(duì)象,這樣只能在開始擴(kuò)大封鎖范圍,將可能要封鎖的數(shù)據(jù)全部加鎖,這就進(jìn)一步降低了并發(fā)度,影響了系統(tǒng)的運(yùn)行效率。BACK7.3.4封鎖及其產(chǎn)生問題的解決②順序加鎖法順序加鎖法是預(yù)先對(duì)所有可加鎖的數(shù)據(jù)對(duì)象規(guī)定一個(gè)加鎖順序,每個(gè)事務(wù)都需要按此順序加鎖,在釋放時(shí),按逆序進(jìn)行。順序加鎖法同一次加鎖法一樣,也存在一些問題。因?yàn)槭聞?wù)的封鎖請(qǐng)求可以隨著事務(wù)的執(zhí)行而動(dòng)態(tài)地決定,所以很難事先確定封鎖對(duì)象,從而更難確定封鎖順序。即使確定了封鎖順序,隨著數(shù)據(jù)操作的不斷變化,維護(hù)這些數(shù)據(jù)的封鎖順序要需要很大的系統(tǒng)開銷。BACK7.3.4封鎖及其產(chǎn)生問題的解決在數(shù)據(jù)庫系統(tǒng)中,由于可加鎖的目標(biāo)集合不但很大,而且是動(dòng)態(tài)變化的;可加鎖的目標(biāo)常常不是按名尋址,而是按內(nèi)容尋址,預(yù)防死鎖常要付出很高的代價(jià),因而上述兩種在操作系統(tǒng)中廣泛使用的預(yù)防死鎖的方法并不很適合數(shù)據(jù)庫的特點(diǎn)。在數(shù)據(jù)庫系統(tǒng)中,還有一種解決死鎖的辦法,即可以允許發(fā)生死鎖,但在死鎖發(fā)生后可以由系統(tǒng)及時(shí)自動(dòng)診斷并解除已發(fā)生的死鎖,從而避免事務(wù)自身不可解決的資源爭用問題。BACK7.3.4封鎖及其產(chǎn)生問題的解決(3)死鎖的診斷與解除數(shù)據(jù)庫系統(tǒng)中診斷死鎖的方法與操作系統(tǒng)類似??梢岳檬聞?wù)信賴圖的形式來測試系統(tǒng)中是否存在死鎖。例如在圖5.3中,事務(wù)T1需要數(shù)據(jù)R1,但R1已經(jīng)被事務(wù)T2封鎖,那么從T1到T2劃一個(gè)箭頭。如果在事務(wù)依賴圖中沿著箭頭方向存在一個(gè)循環(huán),那么死鎖的條件就形成了,系統(tǒng)就會(huì)出現(xiàn)死鎖。圖5.3事務(wù)依賴圖BACK7.3.4封鎖及其產(chǎn)生問題的解決如果已經(jīng)發(fā)現(xiàn)死鎖,DBA從依賴相同資源的事務(wù)中抽出某個(gè)事務(wù)作為犧牲品,將它撤銷,并釋放此事務(wù)占用的所有數(shù)據(jù)資源,分配給其他事務(wù),使其他事務(wù)得以繼續(xù)運(yùn)行下去,這樣就有可能消除死鎖。在解除死鎖的過程中,抽取犧牲事務(wù)的標(biāo)準(zhǔn)是根據(jù)系統(tǒng)狀態(tài)及其應(yīng)用的實(shí)際情況來確定的,通常采用的方法之一是選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷;或從用戶等級(jí)角度考慮,取消等級(jí)低的用戶事務(wù),釋放其封鎖的資源給其它需要的事務(wù)。BACK7.3.5SQLServer的并發(fā)控制機(jī)制

SQLServer使用加鎖技術(shù)確保事務(wù)完整性和數(shù)據(jù)庫一致性。鎖定可以防止用戶讀取正在由其他用戶更改的數(shù)據(jù),并可以防止多個(gè)用戶同時(shí)更改相同數(shù)據(jù)。雖然SQLServer自動(dòng)強(qiáng)制鎖定,但可以通過了解鎖定并在應(yīng)用程序中自定義鎖定來設(shè)計(jì)更有效的并發(fā)控制應(yīng)用程序。SQLServer提供如下八種鎖類型:共享(S)、更新(U)、排它(X)、意向共享(IS)、意向排它(IX)、與意向排它共享(SIX)、架構(gòu)(Sch)、大容量更新(BU),只有兼容的鎖類型才可以放置在已鎖定的資源上。BACK7.3.5SQLServer的并發(fā)控制機(jī)制SQLServer使用的主要鎖類型描述如下:①共享(S):用于不更改或不更新數(shù)據(jù)的操作(只讀操作如select語句)。資源上存在共享鎖時(shí),任何其它事務(wù)都不能修改數(shù)據(jù);②更新(U):用于可更新的資源中。一次只有一個(gè)事務(wù)可以獲得資源的更新鎖。如果事務(wù)修改資源,則更新鎖轉(zhuǎn)換為排它(X)鎖。否則鎖轉(zhuǎn)換為共享鎖。防止當(dāng)多個(gè)會(huì)話在讀取、鎖定以及隨后可能進(jìn)行的資源更新時(shí)發(fā)生死鎖;BACK7.3.5SQLServer的并發(fā)控制機(jī)制③排它(X):用于數(shù)據(jù)修改操作例如insert、update或delete。加排它鎖后其它事務(wù)不能讀取或修改排它鎖鎖定的數(shù)據(jù)。確保不會(huì)同時(shí)對(duì)同一資源進(jìn)行多重更新;④意向(I):用于建立鎖的層次結(jié)構(gòu)。意向鎖又細(xì)分為:意向共享(IS)、意向排它(IX)以及與意向排它共享(SIX)。BACK7.3.5SQLServer的并發(fā)控制機(jī)制

在transact-sql語句使用中有如下缺省加鎖規(guī)則:select查詢?nèi)笔r(shí)請(qǐng)求獲得共享鎖(頁級(jí)或表級(jí));insert語句總是請(qǐng)求獨(dú)占的頁級(jí)鎖;update和delete查詢通常獲得某種類型的獨(dú)占鎖以進(jìn)行數(shù)據(jù)修改;如果當(dāng)前將被修改的頁上存在讀鎖,則delete或update語句首先會(huì)得到修改鎖,當(dāng)讀過程結(jié)束以后,修改鎖自動(dòng)改變?yōu)楠?dú)占鎖。BACK7.3.5SQLServer的并發(fā)控制機(jī)制可以使用select、insert、update和delete語句指定表級(jí)鎖定提示的范圍,以引導(dǎo)SQLServer使用所需的鎖類型。當(dāng)需要對(duì)對(duì)象所獲得鎖類型進(jìn)行更精細(xì)控制時(shí),可以使用手工鎖定提示如:holdlock、nolock、paglock、readpast、rowlock、tablock、tablockx、updlock、xlock等,這些鎖定提示取代了會(huì)話的當(dāng)前事務(wù)隔離級(jí)別指定的鎖。例如查詢時(shí),可強(qiáng)制設(shè)定加獨(dú)占鎖,命令為:selectsnofromstudentwith(tablockx)wheredept='CS'BACK7.3.5SQLServer的并發(fā)控制機(jī)制SQLServer具有多粒度鎖定能力,允許一個(gè)事務(wù)鎖定不同類型的資源。為了使鎖定的成本減至最少,SQLServer自動(dòng)將資源鎖定在適合任務(wù)的級(jí)別。鎖定在較小的粒度(例如行)可以增加并發(fā)但需要較大的開銷,因?yàn)槿绻i定了許多行,則需要控制更多的鎖。鎖定在較大的粒度(例如表)就并發(fā)而言是相當(dāng)昂貴的,因?yàn)殒i定整個(gè)表限制了其它事務(wù)對(duì)表中任意部分進(jìn)行訪問,但要求的開銷較低,因?yàn)樾枰S護(hù)的鎖較少。BACK7.3.5SQLServer的并發(fā)控制機(jī)制SQLServer可以鎖定以下資源,見表7.13。表7.13資源加鎖粒度表資源描述RID行標(biāo)識(shí)符。用于單獨(dú)鎖定表中的一行。鍵索引中的行鎖。用于保護(hù)可串行事務(wù)中的鍵范圍。頁8千字節(jié)(KB)的數(shù)據(jù)頁或索引頁。擴(kuò)展盤區(qū)相鄰的八個(gè)數(shù)據(jù)頁或索引頁構(gòu)成的一組。表包括所有數(shù)據(jù)和索引在內(nèi)的整個(gè)表。DB數(shù)據(jù)庫。BACK7.3.5SQLServer的并發(fā)控制機(jī)制

事務(wù)準(zhǔn)備接受不一致數(shù)據(jù)的級(jí)別稱為隔離級(jí)別。隔離級(jí)別是一個(gè)事務(wù)必須與其它事務(wù)進(jìn)行隔離的程度。較低的隔離級(jí)別可以增加并發(fā),但代價(jià)是降低數(shù)據(jù)的正確性。相反,較高的隔離級(jí)別可以確保數(shù)據(jù)的正確性,但可能對(duì)并發(fā)產(chǎn)生負(fù)面影響。應(yīng)用程序要求的隔離級(jí)別確定了SQLServer使用的鎖定行為。如:settransactionisolationlevelrepeatableread--設(shè)置為可重復(fù)讀BACK7.3.5SQLServer的并發(fā)控制機(jī)制SQL-92定義了下列四種隔離級(jí)別,如下由低到高的四種隔離級(jí)別:readuncommitted、readcommitted、repeatableread、serializable,默認(rèn)情況下,SQLServer在readcommitted隔離級(jí)別上操作。但是應(yīng)用程序可能必須運(yùn)行于不同的隔離級(jí)別。若要在應(yīng)用程序中使用更嚴(yán)格或較寬松的隔離級(jí)別,可以使用Transact-SQL或通過數(shù)據(jù)庫API來設(shè)置事務(wù)隔離級(jí)別,來自定義整個(gè)會(huì)話的鎖定。如:settransactionisolationlevelrepeatableread--設(shè)置為可重復(fù)讀BACK7.3.5SQLServer的并發(fā)控制機(jī)制隔離級(jí)別含義如下:①readuncommitted:執(zhí)行臟讀或0級(jí)隔離鎖定,這表示事務(wù)中不發(fā)出共享鎖,也不接受排它鎖。當(dāng)設(shè)置該選項(xiàng)時(shí),可以對(duì)數(shù)據(jù)執(zhí)行未提交讀或臟讀;在事務(wù)結(jié)束前可以更改數(shù)據(jù)內(nèi)的數(shù)值,行也可以出現(xiàn)在數(shù)據(jù)集中或從數(shù)據(jù)集消失。該選項(xiàng)的作用與在事務(wù)內(nèi)所有語句中的所有表上設(shè)置nolock相同。這是四個(gè)隔離級(jí)別中限制最小的級(jí)別。②readcommitted:指定在讀取數(shù)據(jù)時(shí)控制共享鎖以避免臟讀,但數(shù)據(jù)可在事務(wù)結(jié)束前更改,從而產(chǎn)生不可重復(fù)讀取或幻影數(shù)據(jù)。該選項(xiàng)是SQLServer的默認(rèn)值。

BACK7.3.5SQLServer的并發(fā)控制機(jī)制③repeatableread:鎖定查詢中使用的所有數(shù)據(jù)以防止其他用戶更新數(shù)據(jù),但是其他用戶可以將新的幻影行插入數(shù)據(jù)集,且幻影行包括在當(dāng)前事務(wù)的后續(xù)讀取中。④

溫馨提示

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

評(píng)論

0/150

提交評(píng)論