我的數(shù)據(jù)庫(kù)課件保護(hù)_第1頁(yè)
我的數(shù)據(jù)庫(kù)課件保護(hù)_第2頁(yè)
我的數(shù)據(jù)庫(kù)課件保護(hù)_第3頁(yè)
我的數(shù)據(jù)庫(kù)課件保護(hù)_第4頁(yè)
我的數(shù)據(jù)庫(kù)課件保護(hù)_第5頁(yè)
已閱讀5頁(yè),還剩90頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第五章 數(shù)據(jù)庫(kù)保護(hù)本章重點(diǎn): 1. 安全性 2. 完整性 3. 并發(fā)控制 4. 恢復(fù)本章概要 隨著計(jì)算機(jī)的普及,數(shù)據(jù)庫(kù)的使用也越來(lái)越廣泛。例如,一個(gè)企業(yè)的全部信息,國(guó)家機(jī)構(gòu)的事務(wù)管理信息,國(guó)防情報(bào)等機(jī)密信息,都集中地存放在數(shù)據(jù)庫(kù)中。在前面我們已經(jīng)講到,數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)是由DBMS統(tǒng)一進(jìn)行管理和控制的。為了適應(yīng)和滿足數(shù)據(jù)共享的環(huán)境和要求,DBMS要保證整個(gè)系統(tǒng)的正常運(yùn)轉(zhuǎn),防止數(shù)據(jù)意外丟失和不一致數(shù)據(jù)的產(chǎn)生,以及當(dāng)數(shù)據(jù)庫(kù)遭受破壞后能迅速地恢復(fù)正常,這就是數(shù)據(jù)庫(kù)的安全保護(hù)。DBMS對(duì)數(shù)據(jù)庫(kù)的安全保護(hù)功能是通過四方面實(shí)現(xiàn)的,即安全性控制、完整性控制、并發(fā)性控制和數(shù)據(jù)庫(kù)恢復(fù)。本章就是從這四方面來(lái)介紹數(shù)

2、據(jù)庫(kù)的安全保護(hù)功能:要求掌握安全性、完整性、并發(fā)性和數(shù)據(jù)庫(kù)恢復(fù)的含義,掌握這四方面分別實(shí)現(xiàn)安全保護(hù)功能的方法。 5.1.1 數(shù)據(jù)庫(kù)安全性的含義數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止非法使用所造成數(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)工作方式。5.1 數(shù)據(jù)庫(kù)的安全性

3、(6)操作系統(tǒng)安全性方面,在主存儲(chǔ)器和數(shù)據(jù)文件用過以后,操作系統(tǒng)是否把它們的內(nèi)容清除掉。(7)數(shù)據(jù)庫(kù)系統(tǒng)本身安全性方面。這里討論的是數(shù)據(jù)庫(kù)本身的安全性問題,即主要考慮安全保護(hù)的策略,尤其是控制訪問的策略。5.1.2 安全性控制的一般方法安全性控制是指要盡可能地杜絕所有可能的數(shù)據(jù)庫(kù)非法訪問。用戶非法使用數(shù)據(jù)庫(kù)可以有很多種情況。例如,編寫合法的程序繞過DBMS授權(quán)機(jī)制,通過操作系統(tǒng)直接存取、修改或備份有關(guān)數(shù)據(jù)。用戶訪問非法數(shù)據(jù),無(wú)論它們是有意的還是無(wú)意的,都應(yīng)該加以嚴(yán)格控制,因此,系統(tǒng)還要考慮數(shù)據(jù)信息的流動(dòng)問題并加以控制,否則有隱蔽的危險(xiǎn)性。因?yàn)閿?shù)據(jù)的流動(dòng)可能使無(wú)權(quán)訪問的用戶獲得訪問權(quán)利。例如,甲

4、用戶可以訪問文件F1,但無(wú)權(quán)訪問文件F2,如果乙用戶把文件F2移至文件F1中之后,則由于乙用戶的操作,使甲用戶獲得了對(duì)文件F2的訪問權(quán)。此外,用戶可以多次利用允許的訪問結(jié)果,經(jīng)過邏輯推理得到他無(wú)權(quán)訪問的數(shù)據(jù)。為防止這一點(diǎn),訪問的許可權(quán)還要結(jié)合過去訪問的情況而定。可見安全性的實(shí)施是要花費(fèi)一定代價(jià)的,安全保護(hù)策略就是要以最小的代價(jià)來(lái)防止對(duì)數(shù)據(jù)的非法訪問,層層設(shè)置安全措施。 實(shí)際上,安全性問題并不是數(shù)據(jù)庫(kù)系統(tǒng)所獨(dú)有的,所有計(jì)算機(jī)系統(tǒng)中都存在這個(gè)問題。在計(jì)算機(jī)系統(tǒng)中,安全措施是一級(jí)一級(jí)層層設(shè)置的,安全控制模型如圖5.1所示。 圖5.1 安全控制模型 用戶標(biāo)識(shí)和鑒定應(yīng)用用戶存取權(quán)限控制DBMS操作系統(tǒng)安

5、全保護(hù)OS密碼存儲(chǔ)DB根據(jù)圖5.1的安全模型,當(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)行合法的操作。DBMS是建立在操作系統(tǒng)之上的,安全的操作系統(tǒng)是數(shù)據(jù)庫(kù)安全的前提。操作系統(tǒng)應(yīng)能保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)必須由DBMS訪問,而不允許用戶越過DBMS,直接通過操作系統(tǒng)訪問。數(shù)據(jù)最后可以通過密碼的形式存儲(chǔ)到數(shù)據(jù)庫(kù)中。5.1.2.1 用戶標(biāo)識(shí)和鑒定(Identification and Authentication)DBS不允許一個(gè) 的用戶對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。用戶標(biāo)識(shí)和鑒定是系統(tǒng)提供的最外層的安全

6、保護(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í)和鑒定的方法有多種,為了獲得更強(qiáng)的安全性,往往是多種方法并舉,常用的方法有以下幾種:1用一個(gè)用戶名或用戶標(biāo)識(shí)符來(lái)標(biāo)明用戶的身份,系統(tǒng)以此來(lái)鑒別用戶的合法性。如果正確,則可進(jìn)入下一步的核實(shí),否則,不能使用計(jì)算機(jī)。 2用戶標(biāo)識(shí)符是用戶公開的標(biāo)識(shí),它不足以成為鑒別用戶身份的憑證。為了進(jìn)一步核實(shí)用戶身份,常采用用戶名與口令(Password)相結(jié)合的方法,系統(tǒng)通過核對(duì)口令判別用戶身份的真?zhèn)?。系統(tǒng)有一張用戶口令表,為每個(gè)用戶保持

7、一個(gè)記錄,包括用戶名和口令兩部分?jǐn)?shù)據(jù)。用戶先輸入用戶名,然后系統(tǒng)要求用戶輸入口令。為了保密,用戶在終端上輸入的口令不顯示在屏幕上。系統(tǒng)核對(duì)口令以鑒別用戶身份。3通過用戶名和口令來(lái)鑒定用戶的方法簡(jiǎn)單易行,但該方法在使用時(shí),由于用戶名和口令的產(chǎn)生和使用比較簡(jiǎn)單,也容易被竊取,因此還可采用更復(fù)雜的方法。 例如,每個(gè)用戶都預(yù)先約定好一個(gè)計(jì)算過程或者函數(shù),鑒別用戶身份時(shí),系統(tǒng)提供一個(gè)隨機(jī)數(shù),用戶根據(jù)自己預(yù)先約定的計(jì)算過程或者函數(shù)進(jìn)行計(jì)算,系統(tǒng)根據(jù)計(jì)算結(jié)果辨別用戶身份的合法性。例如,讓用戶記住一個(gè)表達(dá)式,如T=X+2Y,系統(tǒng)告訴用戶X=1,Y=2,如果用戶回答T=5,則證實(shí)了該用戶的身份。當(dāng)然,這是一個(gè)簡(jiǎn)

8、單的例子,在實(shí)際使用中,還可以設(shè)計(jì)復(fù)雜的表達(dá)式,以使安全性更好。系統(tǒng)每次提供不同的X,Y值,其他人可能看到的是X、Y的值,但不能推算出確切的變換公式T。5.1.2.2 用戶存取權(quán)限控制用戶存取權(quán)限指的是不同的用戶對(duì)于不同的數(shù)據(jù)對(duì)象允許執(zhí)行的操作權(quán)限。在數(shù)據(jù)庫(kù)系統(tǒng)中,每個(gè)用戶只能訪問他有權(quán)存取的數(shù)據(jù)并執(zhí)行有權(quán)使用的操作。因此,必須預(yù)先定義用戶的存取權(quán)限。對(duì)于合法的用戶,系統(tǒng)根據(jù)其存取權(quán)限的定義對(duì)其各種操作請(qǐng)求進(jìn)行控制,確保合法操作。存取權(quán)限由兩個(gè)要素組成,數(shù)據(jù)對(duì)象和操作類型。定義一個(gè)用戶的存取權(quán)限就是要定義這個(gè)用戶可以在哪些數(shù)據(jù)對(duì)象上進(jìn)行哪些類型的操作。在數(shù)據(jù)庫(kù)系統(tǒng)中,定義用戶存取權(quán)限稱為授權(quán)(

9、Authorization)。第三章討論SQL的數(shù)據(jù)控制功能時(shí),我們已知道授權(quán)有兩種:系統(tǒng)特權(quán)和對(duì)象特權(quán)。系統(tǒng)特權(quán)是由DBA授予某些數(shù)據(jù)庫(kù)用戶,只有得到系統(tǒng)特權(quán),才能成為數(shù)據(jù)庫(kù)用戶。對(duì)象特權(quán)可以由DBA授予,也可以由數(shù)據(jù)對(duì)象的創(chuàng)建者授予,使數(shù)據(jù)庫(kù)用戶具有對(duì)某些數(shù)據(jù)對(duì)象進(jìn)行某些操作的特權(quán)。在系統(tǒng)初始化時(shí),系統(tǒng)中至少有一個(gè)具有DBA特權(quán)的用戶,DBA可以通過GRANT語(yǔ)句將系統(tǒng)特權(quán)或?qū)ο筇貦?quán)授予其他用戶。對(duì)于已授權(quán)的用戶可以通過REVOKE語(yǔ)句收回所授予的特權(quán)。授權(quán)定義經(jīng)編譯后以一張授權(quán)表的形式存放在數(shù)據(jù)字典中。授權(quán)表主要有三個(gè)屬性,用戶標(biāo)識(shí)、數(shù)據(jù)對(duì)象和操作類型。用戶標(biāo)識(shí)不但可以是用戶個(gè)人,也可是

10、團(tuán)體、程序和終端。在非關(guān)系系統(tǒng)中,存取控制的數(shù)據(jù)對(duì)象僅限于數(shù)據(jù)本身。而關(guān)系系統(tǒng)中,存取控制的數(shù)據(jù)對(duì)象不僅有基本表、屬性列等數(shù)據(jù)本身,還有內(nèi)模式、外模式、模式等數(shù)據(jù)字典中的內(nèi)容。下表列出了關(guān)系系統(tǒng)中的存取權(quán)限。數(shù)據(jù)對(duì)象操作類型模式模式建立、修改、檢索外模式建立、修改、檢索內(nèi)模式建立、修改、檢索數(shù)據(jù)表查找、插入、修改、刪除屬性列查找、插入、修改、刪除對(duì)于授權(quán)表,一個(gè)衡量授權(quán)機(jī)制的重要指標(biāo)就是授權(quán)粒度,即可以定義的數(shù)據(jù)對(duì)象的范圍;在關(guān)系數(shù)據(jù)庫(kù)中,授權(quán)粒度包括關(guān)系、記錄或?qū)傩?。一般?lái)說,授權(quán)定義中粒度越細(xì),授權(quán)子系統(tǒng)就越靈活例如,表5.2是一個(gè)授權(quán)粒度很粗的表,它只能對(duì)整個(gè)關(guān)系授權(quán)。如USER1擁有對(duì)

11、關(guān)系S的一切權(quán)限;USER2擁有對(duì)關(guān)系C的SELECT權(quán)和對(duì)關(guān)系SC的UPDATE權(quán);USER3只可以向關(guān)系SC中插入新記錄。表5.2 授權(quán)表1用戶標(biāo)識(shí)數(shù)據(jù)對(duì)象操作類型USER1關(guān)系SALLUSER2關(guān)系CSELECTUSER2關(guān)系SCUPDATEUSER3關(guān)系SCINSERT表5.3是一個(gè)授權(quán)粒度較為精細(xì),它可以精確到關(guān)系的某一屬性。USER1擁有對(duì)關(guān)系S的一切權(quán)限;USER2只能查詢關(guān)系C的CNO屬性和修改關(guān)系SC的SCORE屬性;USER3可以向關(guān)系SC中插入新記錄。 表5.3 授權(quán)表2 用戶標(biāo)識(shí)數(shù)據(jù)對(duì)象操作類型USER1關(guān)系SALLUSER2列 OSELECTUSER2列SC.SCOR

12、EUPDATEUSER3關(guān)系SCINSERT表5.3的授權(quán)表中的授權(quán)只涉及到數(shù)據(jù)名(關(guān)系、記錄或?qū)傩缘拿郑?,而未提到具體的值。系統(tǒng)不必訪問具體的數(shù)據(jù)本身,就可以執(zhí)行這種控制。這種控制稱為“值獨(dú)立”的控制。表5.4中的授權(quán)表則不但可以對(duì)屬性列授權(quán),還可以提供與數(shù)值有關(guān)的授權(quán),即可以對(duì)關(guān)系中的一組記錄授權(quán)。比如,USER1只能對(duì)計(jì)算機(jī)系的學(xué)生進(jìn)行操作。對(duì)于提供與數(shù)據(jù)值有關(guān)的授權(quán),系統(tǒng)必須能夠支持存取謂詞的操作。表5.4 授權(quán)表3用戶標(biāo)識(shí)數(shù)據(jù)對(duì)象操作類型存取謂詞USER1關(guān)系SALLDEPT=計(jì)算機(jī)USER2列 OSELECTUSER2列SC.SCOREUPDATEUSER3關(guān)系SCINSERT可

13、見授權(quán)粒度越細(xì),授權(quán)子系統(tǒng)就越靈活,能夠提供的安全性就越完善。但另一方面,如果用戶比較多,數(shù)據(jù)庫(kù)比較大,授權(quán)表將很大,而且每次數(shù)據(jù)庫(kù)訪問都要用到這張表做授權(quán)檢查,這將影響數(shù)據(jù)庫(kù)的性能。所幸的是,在大部分?jǐn)?shù)據(jù)庫(kù)中,需要保密的數(shù)據(jù)是少數(shù),對(duì)于大部分公開的數(shù)據(jù),可以一次性地授權(quán)給PUBLIC,而不必再對(duì)每個(gè)用戶個(gè)別授權(quán)。對(duì)于表5.4中與數(shù)據(jù)值有關(guān)的授權(quán),可以通過另外一種數(shù)據(jù)庫(kù)安全措施,即定義視圖。5.1.2.3 定義視圖為不同的用戶定義不同的視圖,可限制各個(gè)用戶的訪問范圍。通過視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取這些數(shù)據(jù)的用戶隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。例如,USER1只能對(duì)計(jì)算機(jī)

14、系的學(xué)生進(jìn)行操作,一種方法是通過授權(quán)機(jī)制對(duì)USER1授權(quán),如表5.5所示,另一種簡(jiǎn)單的方法就是定義一個(gè)計(jì)算機(jī)系的視圖。但視圖機(jī)制的安全保護(hù)功能太不精細(xì),往往不能達(dá)到應(yīng)用系統(tǒng)的要求,其主要功能在于提供了數(shù)據(jù)庫(kù)的邏輯獨(dú)立性。在實(shí)際應(yīng)用中,通常將視圖機(jī)制與授權(quán)機(jī)制結(jié)合起來(lái)使用,首先用視圖機(jī)制屏蔽一部分保密數(shù)據(jù),然后在視圖上面再進(jìn)一步定義存取權(quán)限。5.1.2.4 數(shù)據(jù)加密(Data Encryption)前面介紹的幾種數(shù)據(jù)庫(kù)安全措施,都是防止從數(shù)據(jù)庫(kù)系統(tǒng)竊取保密數(shù)據(jù),不能防止通過不正常渠道非法訪問數(shù)據(jù),例如,偷取存儲(chǔ)數(shù)據(jù)的磁盤,或在通信線路上竊取數(shù)據(jù),為了防止這些竊密活動(dòng),比較好的辦法是對(duì)數(shù)據(jù)加密。數(shù)

15、據(jù)加密是防止數(shù)據(jù)庫(kù)中數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段。加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)(術(shù)語(yǔ)為明文,Plain text)加密成為不可直接識(shí)別的格式(術(shù)語(yǔ)為密文,Clipher text),數(shù)據(jù)以密碼的形式存儲(chǔ)和傳輸。加密方法有兩種,一種是替換方法,該方法使用密鑰(Encryption Key)將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的一個(gè)字符。另一種是轉(zhuǎn)換方法,該方法將明文中的字符按不同的順序重新排列。通常將這兩種方法結(jié)合起來(lái)使用,就可以達(dá)到相當(dāng)高的安全程度。例如美國(guó)1977年制定的官方加密標(biāo)準(zhǔn),數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,簡(jiǎn)稱DES)就是使用這種算法的例

16、子。數(shù)據(jù)加密后,對(duì)于不知道解密算法的人,即使利用系統(tǒng)安全措施的漏洞非法訪問數(shù)據(jù),也只能看到一些無(wú)法辨認(rèn)的二進(jìn)制代碼。合法的用戶檢索數(shù)據(jù)時(shí),首先提供密碼鑰匙,由系統(tǒng)進(jìn)行譯碼后,才能得到可識(shí)別的數(shù)據(jù)。 目前不少數(shù)據(jù)庫(kù)產(chǎn)品提供了數(shù)據(jù)加密例行程序,用戶可根據(jù)要求自行進(jìn)行加密處理,還有一些未提供加密程序的產(chǎn)品也提供了相應(yīng)的接口,通話用戶用其他廠商的加密程序?qū)?shù)據(jù)加密。用密碼存儲(chǔ)數(shù)據(jù),在存入時(shí)需加密,在查詢時(shí)需解密,這個(gè)過程會(huì)占用大量系統(tǒng)資源,降低了數(shù)據(jù)庫(kù)的性能。因此數(shù)據(jù)加密功能通常允許用戶自由選擇,只對(duì)那些保密要求特別高的數(shù)據(jù),才值得采用此方法。5.1.2.5 審計(jì)(Audit)前面介紹的各種數(shù)據(jù)庫(kù)安全

17、性措施,都可將用戶操作限制在規(guī)定的安全范圍內(nèi)。但實(shí)際上任何系統(tǒng)的安全性措施都不是絕對(duì)可靠的,竊密者總有辦法打破這些控制。對(duì)于某些高度敏感的保密數(shù)據(jù),必須以審計(jì)功作為預(yù)防手段。審計(jì)功能是一種監(jiān)視措施,跟蹤記錄有關(guān)數(shù)據(jù)的訪問活動(dòng)。審計(jì)追蹤把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái),存放在一個(gè)特殊文件上中,即審計(jì)日志(Audit Log)中。記錄的內(nèi)容一般包括:操作類型,如修改、查詢等;操作終端標(biāo)識(shí)與操作者標(biāo)識(shí);操作日期和時(shí)間;操作所涉及到的相關(guān)數(shù)據(jù),如基本表、視圖、記錄、屬性等;數(shù)據(jù)的前象和后象。利用這些信息,可以重現(xiàn)導(dǎo)致數(shù)據(jù)庫(kù)現(xiàn)有狀況的一系列事件,以進(jìn)一步找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等。使用審計(jì)功

18、能會(huì)大大增加系統(tǒng)的開銷,所以DBMS通常將其作為可選特征,提供相應(yīng)的操作語(yǔ)句可靈活地打開或關(guān)閉審計(jì)功能。例如,可使用如下SQL語(yǔ)句打開對(duì)表S的審計(jì)功能,對(duì)表S的每次成功的查詢、增加、刪除、修改操作都作審計(jì)追蹤:AUDIT SELECT,INSERT,DELETE,UPDATE,ON S WHENEVER SUCCESSFUL要關(guān)閉對(duì)表S的審計(jì)功能可以使用如下語(yǔ)句:NO AUDIT ALL ON S。 5.2.1 數(shù)據(jù)庫(kù)完整性的含義數(shù)據(jù)庫(kù)的完整性是指保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容性,防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)造成無(wú)效操作。有關(guān)完整性的含義在第一章中已作簡(jiǎn)要介紹。比如年齡屬于數(shù)值型數(shù)據(jù),只能

19、含0,1,9,不能含字母或特殊符號(hào);月份只能用112之間的正整數(shù)表示;表示同一事實(shí)的兩個(gè)數(shù)據(jù)應(yīng)相同,否則就不相容,如一個(gè)人不能有兩個(gè)學(xué)號(hào)。顯然,維護(hù)數(shù)據(jù)庫(kù)的完整性非常重要,數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否具備完整性關(guān)系到數(shù)據(jù)能否真實(shí)地反映現(xiàn)實(shí)世界。5.2 完整性控制數(shù)據(jù)庫(kù)的完整性和安全性是數(shù)據(jù)庫(kù)保護(hù)的兩個(gè)不同的方面。安全性是保護(hù)數(shù)據(jù)庫(kù),以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞,安全性措施的防范對(duì)象是非法用戶和非法操作;完整性是防止合法用戶使用數(shù)據(jù)庫(kù)時(shí)向數(shù)據(jù)庫(kù)中加入不符合語(yǔ)義的數(shù)據(jù),完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。但從數(shù)據(jù)庫(kù)的安全保護(hù)角度來(lái)講,安全性和完整性又是密切相關(guān)的。5.2.2 完整性規(guī)則的組成

20、為了實(shí)現(xiàn)完整性控制,數(shù)據(jù)庫(kù)管理員應(yīng)向DBMS提出一組完整性規(guī)則,來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù),看其是否滿足語(yǔ)義約束。這些語(yǔ)義約束構(gòu)成了數(shù)據(jù)庫(kù)的完整性規(guī)則,這組規(guī)則作為DBMS控制數(shù)據(jù)完整性的依據(jù)。它定義了何時(shí)檢查、檢查什么、查出錯(cuò)誤又怎樣處理等事項(xiàng)。具體地說,完整性規(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)作來(lái)保證數(shù)據(jù)的完整性,即違約時(shí)要做的事情。完整性規(guī)則從執(zhí)行時(shí)間上可分為立即執(zhí)行約束(Immediate Cons

21、traints)和延遲執(zhí)行約束(Deferred Constrainsts)。立即執(zhí)行約束是指在執(zhí)行用戶事務(wù)過程中,某一條語(yǔ)句執(zhí)行完成后,系統(tǒng)立即對(duì)此數(shù)據(jù)進(jìn)行完整性約束條件檢查。延遲執(zhí)行約束是指在整個(gè)事務(wù)執(zhí)行結(jié)束后,再對(duì)約束條件進(jìn)行完整性檢查,結(jié)果正確后才能提交。某一條語(yǔ)句執(zhí)行完成后,系統(tǒng)立即對(duì)此數(shù)據(jù)進(jìn)行完整性約束條件檢查。例如,銀行數(shù)據(jù)庫(kù)中“借貸總金額應(yīng)平衡”的約束就應(yīng)該屬于延遲執(zhí)行約束,從賬號(hào)A轉(zhuǎn)一筆錢到賬號(hào)B為一個(gè)事務(wù),從賬號(hào)A轉(zhuǎn)出去錢后,賬就不平了,必須等轉(zhuǎn)入賬號(hào)B后,賬才能重新平衡,這時(shí)才能進(jìn)行完整性檢查。如果發(fā)現(xiàn)用戶操作請(qǐng)求違背了立即執(zhí)行約束,則可以拒絕該操作,以保護(hù)數(shù)據(jù)的完整性。

22、如果發(fā)現(xiàn)用戶操作請(qǐng)求違背了延遲執(zhí)行約束,而又不知道是哪個(gè)事務(wù)的操作破壞了完整性,則只能拒絕整個(gè)事務(wù),把數(shù)據(jù)庫(kù)恢復(fù)到該事務(wù)執(zhí)行前的狀態(tài)。一條完整性規(guī)則可以用一個(gè)五元組(D,O,A,C,P)來(lái)形式化地表示。其中:D(data):代表約束作用的數(shù)據(jù)對(duì)象;O(operation):代表觸發(fā)完整性檢查的數(shù)據(jù)庫(kù)操作,即當(dāng)用戶發(fā)出什么操作請(qǐng)求時(shí)需要檢查該完整性規(guī)則; A(assertion):代表數(shù)據(jù)對(duì)象必須滿足的語(yǔ)義約束,這是規(guī)則的主體;C(condition):代表選擇A作用的數(shù)據(jù)對(duì)象值的謂詞;P(procdure):代表違反完整性規(guī)則時(shí)觸發(fā)執(zhí)行的操作過程。例如,對(duì)于“學(xué)號(hào)不能為空”的這條完整性約束,D

23、:代表約束作用的數(shù)據(jù)對(duì)象為SNO屬性;O(operation):當(dāng)用戶插入或修改數(shù)據(jù)時(shí)需要檢查該完整性規(guī)則;A(assertion):SNO不能為空;C(condition):A可作用于所有記錄的SNO屬性;P(procdure):拒絕執(zhí)行用戶請(qǐng)求。 關(guān)系模型的完整性包括實(shí)體完整性,參照完整性和用戶定義完整性。對(duì)于違反實(shí)體完整性和用戶定義完整性規(guī)則的操作一般都是采用拒絕執(zhí)行的方式進(jìn)行處理。而對(duì)于違反參照完整性的操作,并不都是簡(jiǎn)單的拒絕執(zhí)行,一般在接受這個(gè)操作的同時(shí),執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫(kù)的狀態(tài)仍然是正確的。例如在刪除被參照關(guān)系中的元組時(shí),應(yīng)該將參照關(guān)系中所有的外碼值與被參照關(guān)系中要?jiǎng)h

24、除元組主碼值相對(duì)應(yīng)的元組一起刪除。比如,要?jiǎng)h除S關(guān)系中SNO=S1的元組,而SC關(guān)系中又有兩個(gè)SNO=S1的元組。這時(shí)根據(jù)應(yīng)用環(huán)境的語(yǔ)義,因?yàn)楫?dāng)一個(gè)學(xué)生畢業(yè)或退學(xué)后,他的個(gè)人記錄從S關(guān)系中刪除,選課記錄也應(yīng)隨之從SC表中刪除,所以應(yīng)該將SC關(guān)系中兩個(gè)SNO=S1的元組一起刪除。這些完整性規(guī)則都由DBMS提供的語(yǔ)句進(jìn)行描述,經(jīng)過編譯后存放在數(shù)據(jù)字典中。一旦進(jìn)入系統(tǒng),就開始執(zhí)行該組規(guī)則。其主要優(yōu)點(diǎn)是違約由系統(tǒng)來(lái)處理,而不是由用戶處理。另外,規(guī)則集中在數(shù)據(jù)字典中,而不是散布在各應(yīng)用程序之中,易于從整體上理解和修改,效率較高。數(shù)據(jù)庫(kù)系統(tǒng)的整個(gè)完整性控制都是圍繞著完整性約束條件進(jìn)行的,從這個(gè)角度來(lái)看,完

25、整性約束條件是完整性控制機(jī)制的核心。5.2.3 完整性約束條件的分類5.2.3.1 從約束條件使用的對(duì)象分為值的約束和結(jié)構(gòu)的約束1值的約束:即對(duì)數(shù)據(jù)類型、數(shù)據(jù)格式、取值范圍等進(jìn)行規(guī)定。(1)對(duì)數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長(zhǎng)度、單位和精度等。例如,規(guī)定學(xué)生姓名的數(shù)據(jù)類型應(yīng)為字符型,長(zhǎng)度為8。(2)對(duì)數(shù)據(jù)格式的約束。例如,規(guī)定出生日期的數(shù)據(jù)格式為YY.MM.DD。(3)對(duì)取值范圍的約束。例如,月份的取值范圍為112,日期131。(4)對(duì)空值的約束??罩当硎疚炊x或未知的值,它與零值和空格不同。有的列值允許空值,有的則不允許。例如,學(xué)號(hào)和課程號(hào)不可以為空值,但成績(jī)可以為空值。2結(jié)構(gòu)約束:即對(duì)數(shù)據(jù)

26、之間聯(lián)系的約束。數(shù)據(jù)庫(kù)中同一關(guān)系的不同屬性之間,應(yīng)滿足一定的約束條件,同時(shí),不同關(guān)系的屬性之間也有聯(lián)系,也應(yīng)滿足一定的約束條件。常見的結(jié)構(gòu)約束有如下四種:(1)函數(shù)依賴約束:說明了同一關(guān)系中不同屬性之間應(yīng)滿足的約束條件。如:2NF,3NF,BCNF這些不同的范式應(yīng)滿足不同的約束條件。大部分函數(shù)依賴約束都是隱含在關(guān)系模式結(jié)構(gòu)中的,特別是對(duì)于規(guī)范化程度較高的關(guān)系模式,都是由模式來(lái)保持函數(shù)依賴的。 (2)實(shí)體完整性約束:說明了關(guān)系鍵的屬性列必須唯一,其值不能為空或部分為空。(3)參照完整性約束:說明了不同關(guān)系的屬性之間的約束條件,即外部鍵的值應(yīng)能夠在參照關(guān)系的主鍵值中找到或取空值。(4)統(tǒng)計(jì)約束,規(guī)

27、定某個(gè)屬性值與一個(gè)關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間必須滿足某種約束條件。例如,規(guī)定系主任的獎(jiǎng)金不得高于該系的平均獎(jiǎng)金的40%。,不得低于該系的平均獎(jiǎng)金的20%。這里該系平均獎(jiǎng)金的值就是一個(gè)統(tǒng)計(jì)計(jì)算值。其中,實(shí)體完整性約束和參照完整性約束是關(guān)系模型的兩個(gè)極其重要的約束,被稱為關(guān)系的兩個(gè)不變性。統(tǒng)計(jì)約束實(shí)現(xiàn)起來(lái)開銷很大。5.2.3.2 從約束對(duì)象的狀態(tài)分為靜態(tài)約束和動(dòng)態(tài)約束1靜態(tài)約束靜態(tài)約束是指對(duì)數(shù)據(jù)庫(kù)每一個(gè)確定狀態(tài)所應(yīng)滿足的約束條件,是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束,這是最重要的一類完整性約束。上面介紹的值的約束和結(jié)構(gòu)的約束均屬于靜態(tài)約束。2動(dòng)態(tài)約束動(dòng)態(tài)約束是指數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新舊值之間

28、所應(yīng)滿足的約束條件,動(dòng)態(tài)約束反映的是數(shù)據(jù)庫(kù)狀態(tài)變遷的約束。例如,學(xué)生年齡在更改時(shí)只能增長(zhǎng),職工工資在調(diào)整時(shí)不得低于其原來(lái)的工資。5.3.1 數(shù)據(jù)庫(kù)并發(fā)性的含義上一節(jié)討論的完整性是保證各個(gè)事務(wù)本身能得到正確的數(shù)據(jù),只考慮一個(gè)用戶使用數(shù)據(jù)庫(kù)的情況,但實(shí)際上數(shù)據(jù)庫(kù)中有許多用戶。每個(gè)用戶在存取數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),可能是串行執(zhí)行,即每個(gè)時(shí)刻只有一個(gè)用戶程序運(yùn)行,也可能是多個(gè)用戶并行地存取數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)的最大特點(diǎn)之一就是數(shù)據(jù)資源是共享的,串行執(zhí)行意味著一個(gè)用戶在運(yùn)行程序時(shí),其他用戶程序必須等到這個(gè)用戶程序結(jié)束才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取,這樣如果一個(gè)用戶程序涉及大量數(shù)據(jù)的輸入/輸出交換,則數(shù)據(jù)庫(kù)系統(tǒng)的大部分時(shí)間將處

29、于閑置狀態(tài)。5.3 并發(fā)控制與封鎖因此,為了充分利用數(shù)據(jù)庫(kù)資源,很多時(shí)候數(shù)據(jù)庫(kù)用戶都是對(duì)數(shù)據(jù)庫(kù)系統(tǒng)并行存取數(shù)據(jù),這樣就會(huì)發(fā)生多個(gè)用戶并發(fā)存取同一數(shù)據(jù)塊的情況,如果對(duì)并發(fā)操作不加控制可能會(huì)產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)的完整性,并發(fā)控制就是解決這類問題,以保持?jǐn)?shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,即在任何一個(gè)時(shí)刻數(shù)據(jù)庫(kù)都將以相同的形式給用戶提供數(shù)據(jù)。5.3.2 事務(wù)(Transaction)5.3.2.1 事務(wù)的定義在上一節(jié)中就曾提到過事務(wù)的概念,DBMS的并發(fā)控制也是以事務(wù)為基本單位進(jìn)行的。那么到底什么是事務(wù)呢?事務(wù)是數(shù)據(jù)庫(kù)系統(tǒng)中執(zhí)行的一個(gè)工作單位,它是由用戶定義的一組操作序列。一個(gè)事務(wù)可以是一組SQL語(yǔ)句、一條

30、SQL語(yǔ)句或整個(gè)程序,一個(gè)應(yīng)用程序可以包括多個(gè)事務(wù)。事務(wù)的開始與結(jié)束可以由用戶顯式控制。如果用戶沒有顯式地定義事務(wù),則由DBMS按照缺省規(guī)定自動(dòng)劃分事務(wù)。在SQL語(yǔ)言中,定義事務(wù)的語(yǔ)句有三條:BEGIN TRANSACTIONCOMMITROLLBACKBEGIN TRANSACTION表示事務(wù)的開始;COMMIT表示事務(wù)的提交,即將事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新寫回到磁盤上的物理數(shù)據(jù)庫(kù)中去,此時(shí)事務(wù)正常結(jié)束;ROLLBACK表示事務(wù)的回滾,即在事務(wù)運(yùn)行的過程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的更新操作全部撤銷,再回滾到事務(wù)開始時(shí)的狀態(tài)。 5.3.2.2 事務(wù)的特征

31、事務(wù)是由有限的數(shù)據(jù)庫(kù)操作序列組成,但并不是任意的數(shù)據(jù)庫(kù)操作序列都能成為事務(wù),為了保護(hù)數(shù)據(jù)的完整性,一般要求事務(wù)具有以下四個(gè)特征:1原子性(Atomic)一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該遵守“要么不做,要么全做”(nothing or all)的原則,即不允許事務(wù)部分的完成。即使因?yàn)楣收隙故聞?wù)未能完成,它執(zhí)行的部分結(jié)果要被取消。2一致性(Consistency)事務(wù)對(duì)數(shù)據(jù)庫(kù)的作用是數(shù)據(jù)庫(kù)從一個(gè)一致狀態(tài)轉(zhuǎn)變到另一個(gè)一致狀態(tài)。所謂數(shù)據(jù)庫(kù)的一致狀態(tài)是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)滿足完整性約束。例如,銀行企業(yè)中,“從帳號(hào)A轉(zhuǎn)移資金額R到帳號(hào)B”是一個(gè)典型的事務(wù),這個(gè)事務(wù)包括兩個(gè)操作,從帳號(hào)A中

32、減去資金額R和在帳號(hào)B中增加資金額R,如果只執(zhí)行其中一個(gè)操作,則數(shù)據(jù)庫(kù)處于不一致狀態(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ù)是隔離的。并以控制就是為了保證事務(wù)間的隔離性。4持久性(Durability)指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫(kù)因故障而受到破壞,DBMS也應(yīng)該能夠恢復(fù)。事務(wù)上述四個(gè)性質(zhì)的英文術(shù)語(yǔ)的第一個(gè)字母為ACID。

33、因此,這四個(gè)性質(zhì)以稱為事務(wù)的ACID準(zhǔn)則。下面是一個(gè)事務(wù)的例子,從帳號(hào)A轉(zhuǎn)移資金額R到帳號(hào)B:BEGIN TRANSACTION READ A AA-R IF A0/* A 款不足*/ THEN BEGIN DISPLAY “A款不足”ROLLBACK ENDELSE /* 撥款 */ BEGIN BB+R DISPLAY “撥款完成” COMMIT END這是對(duì)一個(gè)簡(jiǎn)單事務(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ù)庫(kù)修改

34、過程中,數(shù)據(jù)可能是不一致的,事務(wù)本身也可能被撤銷。只有在COMMIT之后,事務(wù)對(duì)數(shù)據(jù)庫(kù)所產(chǎn)生的變化才對(duì)其他事務(wù)開放,這就可以避免其他事務(wù)訪問不一致或不存在的數(shù)據(jù)。 5.3.3 并發(fā)操作與數(shù)據(jù)的不一致性當(dāng)同一數(shù)據(jù)庫(kù)系統(tǒng)中有多個(gè)事務(wù)并發(fā)運(yùn)行時(shí),如果不加以適當(dāng)控制,可能產(chǎn)生數(shù)據(jù)的不一致性。例1并發(fā)取款操作。假設(shè)存款余額R=1000元,甲事務(wù)T1取走存款100元,乙事務(wù)T2取走存款200元,如果正常操作,即甲事務(wù)T1執(zhí)行完畢再執(zhí)行乙事務(wù)T2,存款余額更新后應(yīng)該是700元。但是如果按照如下順序操作,則會(huì)有不同的結(jié)果:甲事務(wù)T1讀取存款余額R =1000元;乙事務(wù)T2讀取存款余額R =1000元;甲事務(wù)T

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

36、0,事務(wù)T1包含三個(gè)操作:讀入R初值(FIND R);計(jì)算(R=R-100);更新R(UPDATE R)。事務(wù)T2也包含三個(gè)操作:FIND R;計(jì)算(R=R-200);UPDATE R。如果事務(wù)T1和T2順序執(zhí)行,則更新后,R的值是700。但如果T1和T2按照表5.5所示的并發(fā)執(zhí)行,R的值是800,得到錯(cuò)誤的結(jié)果,原因在于在t7時(shí)刻丟失了T1對(duì)數(shù)據(jù)庫(kù)的更新操作。因此,這個(gè)并發(fā)操作不正確。表5.5 丟失更新問題時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2T01000t1FIND Rt2FIND Rt3R=R-100t4R=R-200t5UPDATE Rt6900UPDATE Rt78002污讀(Dirty

37、 Read)事務(wù)T1更新了數(shù)據(jù)R,事務(wù)T2讀取了更新后的數(shù)據(jù)R,事務(wù)T1由于某種原因被撤消,修改無(wú)效,數(shù)據(jù)R恢復(fù)原值。事務(wù)T2得到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的內(nèi)容不一致,這種情況稱為“污讀”。在表5.6中,事務(wù)T1把R的值改為900,但此時(shí)尚未做COMMIT操作,事務(wù)T2將修改過的值900讀出來(lái),之后事務(wù)T1執(zhí)行ROLLBACK操作,R的值恢復(fù)為1000,而事務(wù)T2將仍在使用已被撤消了的R值900。原因在于在t4時(shí)刻事務(wù)T2讀取了T1未提交的更新操作結(jié)果,這種值是不穩(wěn)定的,在事務(wù)T1結(jié)束前隨時(shí)可能執(zhí)行ROLLBACK操作。對(duì)于這些未提交的隨后又被撤消的更新數(shù)據(jù)稱為“臟數(shù)據(jù)”。比如,這里事務(wù)T2在t2時(shí)刻讀

38、取的就是“臟數(shù)據(jù)”。表5.6 污讀問題 時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2t01000t1FIND Rt2R=R-100t3UPDATE Rt4900FIND Rt5ROLLBACKt610003不可重讀(Unrepeatable Read)事務(wù)T1讀取了數(shù)據(jù)R,事務(wù)T2讀取并更新了數(shù)據(jù)R,當(dāng)事務(wù)T1再讀取數(shù)據(jù)R以進(jìn)行核對(duì)時(shí),得到的兩次讀取值不一致,這種情況稱為“不可重讀”。在表5.7中,在t0時(shí)刻事務(wù)T1讀取R的值為1000,但事務(wù)T2在t4時(shí)刻將R的值更新為為800。所以T1所使用的值已經(jīng)與開始讀取的值不一致。時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2t01000t1FIND Rt2FIND Rt

39、3R=R-200t4UPDATE Rt5800表5.7 不可重讀問題產(chǎn)生上述三類數(shù)據(jù)不一致性的主要原因就是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要求DBMS提供并發(fā)控制功能以正確的方式高度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫(kù)的完整性。5.3.4 封鎖實(shí)現(xiàn)并發(fā)控制的方法主要有兩種:封鎖(Lock)技術(shù)和時(shí)標(biāo)(Timestamping)技術(shù)。這里只介紹封鎖技術(shù)。5.3.4.1 封鎖類型(Lock Type)所謂封鎖就是當(dāng)一個(gè)事務(wù)在對(duì)某個(gè)數(shù)據(jù)對(duì)象(可以是數(shù)據(jù)項(xiàng)、記錄、數(shù)據(jù)集、以至整個(gè)數(shù)據(jù)庫(kù))進(jìn)行操作之前,必須獲得相應(yīng)的鎖,以保證數(shù)據(jù)操作的正確性和一致性。封鎖是目前DB

40、MS普遍采用的并發(fā)控制方法,基本的封鎖類型有兩種:排它鎖和共享鎖。 1排它鎖(Exclusive Lock)排它鎖又稱寫鎖,簡(jiǎn)稱為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共享鎖(Share Lock)共享鎖又稱讀鎖,,簡(jiǎn)稱為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

41、,而不能再對(duì)R作任何修改。5.3.4.2 封鎖協(xié)議(Lock Protocol)封鎖可以保證合理的進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。實(shí)際上,鎖是一個(gè)控制塊,其中包括被加鎖記錄的標(biāo)識(shí)符及持有鎖的事務(wù)的標(biāo)識(shí)符等。在封鎖時(shí),要考慮一定的封鎖規(guī)則,例如,何時(shí)開始封鎖、封鎖多長(zhǎng)時(shí)間、何時(shí)釋放等,這些封鎖規(guī)則稱為封鎖協(xié)議。對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。封鎖協(xié)議在不同程序上對(duì)正確控制并發(fā)操作提供了一定的保證。上面講述過的并發(fā)操作所帶來(lái)的丟失更新、污讀和不可重讀等到數(shù)據(jù)不一致性問題,可以通過三級(jí)封鎖協(xié)議在不同程度上給予解決,下面介紹三級(jí)封鎖協(xié)議。1一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議的內(nèi)容是:事務(wù)T

42、在修改數(shù)據(jù)對(duì)象之前必須對(duì)其加X鎖,直到事務(wù)結(jié)束。具體地說,就是任何企圖更新記錄R的事務(wù)必須先執(zhí)行“XLOCK R”操作,以獲得對(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ā)生的丟失更新問題。利用一級(jí)封鎖協(xié)議可以解決表5.5中的數(shù)據(jù)丟失更新問題,如表5.8所示。事務(wù)T1先對(duì)R進(jìn)行X封鎖(XLOCK),事務(wù)T2執(zhí)行“XLOCK R”

43、操作,未獲準(zhǔn)“X封鎖”,則進(jìn)入等待狀態(tài),直到事務(wù)T1更新R值以后,解除X封鎖操作(UNLOCK X)。此后事務(wù)T2再執(zhí)行“XLOCK R”操作,獲準(zhǔn)“X封鎖”,并對(duì)R值進(jìn)行更新(此時(shí)R已是事務(wù)T1更新過的值,R=900)。這樣就能得出正確的結(jié)果。 表5.8 無(wú)丟失更新問題時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2t0XLOCK R1000t1FIND Rt2XLOCK Rt3R=R-100WAITt4UPDATE RWAITt5UNLOCK X900WAITt6XLOCK Rt7R=R-200T8UPDATE Rt9700UNLOCK X一級(jí)封鎖協(xié)議只有當(dāng)修改數(shù)據(jù)時(shí)才進(jìn)行加鎖,如果只是讀取數(shù)據(jù)并不加鎖

44、,所以它不能防止“污讀”和“重讀”數(shù)據(jù)。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)一步防止“污讀”。利用二級(jí)封鎖協(xié)議可以解決表5.6中的數(shù)據(jù)“污讀”問題,如表5.9所示。事務(wù)T1先對(duì)R進(jìn)行X封鎖(XLOCK),把R的值改為900,但尚未提交。這時(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,得到了

45、正確的結(jié)果,從而避免了事務(wù)T2讀取“臟數(shù)據(jù)”。時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2t0XLOCK R1000t1FIND Rt2R=R-100t3UPDATE Rt4900SLOCK Rt5ROLLBACKWAITt6UNLOCK R1000SLOCK Rt7FIND RT8UNLOCK S二級(jí)封鎖協(xié)議在讀取數(shù)據(jù)之后,立即釋放S鎖,所以它仍然不能防止“重讀”數(shù)據(jù)。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ù)

46、,徹底解決了并發(fā)操作所帶來(lái)的三個(gè)不一致性問題。利用三級(jí)封鎖協(xié)議可以解決表5.7中的不可重讀問題,如表5.10所示。在表5.10中,事務(wù)T1讀取R的值之前先對(duì)其加S鎖,這樣其他事務(wù)只能對(duì)R加S鎖,而不能加X鎖,即其他事務(wù)只能讀取R,而不能對(duì)R進(jìn)行修改。所以當(dāng)事務(wù)T2在t3時(shí)刻申請(qǐng)對(duì)R加X鎖時(shí)被拒絕,使其無(wú)法執(zhí)行修改操作,只能等待事務(wù)T1釋放R上的S鎖,這時(shí)事務(wù)T1再讀取數(shù)據(jù)R進(jìn)行核對(duì)時(shí),得到的值仍是1000,與開始所讀取的數(shù)據(jù)是一致的,即可重讀。在事務(wù)T1釋放S鎖后,事務(wù)T2可以對(duì)R加X鎖,進(jìn)行更新操作,這樣便保證了數(shù)據(jù)的一致性。表5.10 可重讀問題時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2t0100

47、0t1SLOCK Rt2FIND Rt3XLOCK Rt4COMMITWAITt5UNLOCK SWAITt6XLOCK Rt7FIND RT8R=R-200t9UPDATE Rt10UNLOCK X5.3.4.3 封鎖粒度(Lock Granularity)封鎖粒度指封鎖的單位。根據(jù)對(duì)數(shù)據(jù)的不同處理,封鎖的對(duì)象可以是這樣一些邏輯單元:字段、記錄、表、數(shù)據(jù)庫(kù)等。封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。封鎖粒度越小,系統(tǒng)中能夠被封鎖的對(duì)象就越多,并發(fā)度越高,但封鎖機(jī)構(gòu)復(fù)雜,系統(tǒng)開銷也就越大。相反,封鎖粒度越大,系統(tǒng)中能夠被封鎖的對(duì)象就越少,并發(fā)度越小,封鎖機(jī)構(gòu)簡(jiǎn)單,相應(yīng)系統(tǒng)開銷也就越小。

48、因此,在實(shí)際應(yīng)用中,選擇封鎖粒度時(shí)應(yīng)同時(shí)考慮封鎖機(jī)構(gòu)和并發(fā)度兩個(gè)因素,對(duì)系統(tǒng)開銷與并發(fā)度進(jìn)行權(quán)衡,以求得最優(yōu)的效果。由于同時(shí)封鎖一個(gè)記錄的概率很小,一般數(shù)據(jù)庫(kù)系統(tǒng)都在記錄級(jí)上進(jìn)行封鎖,以獲得更高的并發(fā)度。5.3.4.4 死鎖和活鎖封鎖技術(shù)可有效解決并行操作的一致性問題,但也可產(chǎn)生新的問題,即活鎖和死鎖問題。1活鎖(Livelock)當(dāng)某個(gè)事務(wù)請(qǐng)求對(duì)某一數(shù)據(jù)的排它性封鎖時(shí),由于其他事務(wù)對(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上的封鎖后首先批準(zhǔn)了T3的請(qǐng)求,T2繼續(xù)等待。然后又

49、有又T4請(qǐng)求封鎖R,T3釋放了R上的封鎖后又批準(zhǔn)了T4的請(qǐng)求T2可能永遠(yuǎn)處于等待狀態(tài),從而發(fā)生了活鎖。如表5.11所示。表5.11 活鎖時(shí)間事務(wù)T1事務(wù)T2事務(wù)T3事務(wù)T4t0LOCK Rt1LOCK Rt2WAITLOCK Rt3UNLOCKWAITWAITLOCK Rt4WAITLOCK RWAITt5WAITWAITt6WAITUNLOCKWAITt7WAITLOCK RT8WAIT避免活鎖的簡(jiǎn)單方法是采用先來(lái)先服務(wù)的策略,按照請(qǐng)求封鎖的次序?qū)κ聞?wù)排隊(duì),一旦記錄上的鎖釋放,就使申請(qǐng)隊(duì)列中的第一個(gè)事務(wù)獲得鎖。有關(guān)活鎖的問題我們不再詳細(xì)討論,因?yàn)樗梨i的問題較為常見,這里主要討論有關(guān)死鎖的問題

50、。1死鎖(Deadlock)在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,其中的每一個(gè)在它能夠進(jìn)行之前,都等待著某個(gè)數(shù)據(jù)、而這個(gè)數(shù)據(jù)已被它們中的某個(gè)事務(wù)所封鎖,這種狀態(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所示。表5.12 死鎖時(shí)間事務(wù)T1事務(wù)T2t0LOCK R1t1LOCK R2t2t3LOCK R2t4WAITt5WAITLOCK R1t6WAITWAITt7WAITWAIT(1)死鎖產(chǎn)生的條件發(fā)生死鎖的必要條件有以下四條:互斥條件:一個(gè)數(shù)據(jù)對(duì)

51、象一次只能被一個(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)。(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ù)庫(kù)環(huán)境下,常用的方法有以下兩種:一次加鎖法一次加鎖法是每個(gè)事物必須將所有要

52、使用的數(shù)據(jù)對(duì)象全部依次加鎖,并要求加鎖成功,只要一個(gè)加鎖不成功,表示本次加鎖失敗,則應(yīng)該立即釋放所有已加鎖成功的數(shù)據(jù)對(duì)象,然后重新開始從頭加鎖。一次加鎖法的程序框圖如圖5.2。YYNYN開始加鎖加鎖第1個(gè)數(shù)據(jù)加鎖成功嗎?加鎖成功嗎?對(duì)第m個(gè)表加鎖加鎖成功嗎?加鎖第2個(gè)數(shù)據(jù)釋放所有已加鎖的數(shù)據(jù)N一次加鎖成功圖5.2 一次加鎖法 如表5.12發(fā)生死鎖的例子,可以通過一次加鎖法加以預(yù)防。事務(wù)T1啟動(dòng)后,立即對(duì)數(shù)據(jù)R1和R2依次加鎖,加鎖成功后,執(zhí)行T1,而事務(wù)T2等待。直到T1執(zhí)行完后釋放R1和R2上的鎖,T2繼續(xù)執(zhí)行。這樣就不會(huì)發(fā)生死鎖。一次加鎖法雖然可以有效地預(yù)防死鎖的發(fā)生,但也存在一些問題。首

53、先,對(duì)某一事務(wù)所要使用的全部數(shù)據(jù)一次性加鎖,擴(kuò)大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。其次,數(shù)據(jù)庫(kù)中的數(shù)據(jù)是不斷變化的,原來(lái)不要求封鎖的數(shù)據(jù),在執(zhí)行過程中可能會(huì)變成封鎖對(duì)象,所以很難事先精確地確定每個(gè)事務(wù)所要封鎖的數(shù)據(jù)對(duì)象,這樣只能在開始擴(kuò)大封鎖范圍,將可能要封鎖的數(shù)據(jù)全部加鎖,這就進(jìn)一步降低了并發(fā)度,影響了系統(tǒng)的運(yùn)行效率。順序加鎖法順序加鎖法是預(yù)先對(duì)所有可加鎖的數(shù)據(jù)對(duì)象規(guī)定一個(gè)加鎖順序,每個(gè)事務(wù)都需要按此順序加鎖,在釋放時(shí),按逆序進(jìn)行。例如對(duì)于表5.12發(fā)生的死鎖,我們可以規(guī)定封鎖順序?yàn)镽1、R2,事務(wù)T1和T2都需要按此順序加鎖。T1先封鎖R1,再封鎖R2。當(dāng)T2再請(qǐng)求封鎖R1時(shí),因?yàn)門1

54、已經(jīng)對(duì)R1加鎖,T2只能等待。待T1釋放R1后,T2再封鎖R1,則不會(huì)發(fā)生死鎖。順序加鎖法同一次加鎖法一樣,也存在一些問題。因?yàn)槭聞?wù)的封鎖請(qǐng)求可以隨著事務(wù)的執(zhí)行而動(dòng)態(tài)地決定,所以很難事先確定封鎖對(duì)象,從而更難確定封鎖順序。即使確定了封鎖順序,隨著數(shù)據(jù)操作的不斷變化,維護(hù)這些數(shù)據(jù)的封鎖順序要需要很大的系統(tǒng)開銷。在數(shù)據(jù)庫(kù)系統(tǒng)中,由于可加鎖的目標(biāo)集合不但很大,而且是動(dòng)態(tài)變化的;可加鎖的目標(biāo)常常不是按名尋址,而是按內(nèi)容尋址,預(yù)防死鎖常要付出很高的代價(jià),因而上述兩種在操作系統(tǒng)中廣泛使用的預(yù)防死鎖的方法并不很適合數(shù)據(jù)庫(kù)的特點(diǎn)。一般情況下,在數(shù)據(jù)庫(kù)系統(tǒng)中,可以允許發(fā)生死鎖,在死鎖發(fā)生后可以自動(dòng)診斷并解除死鎖

55、。(3)死鎖的診斷與解除數(shù)據(jù)庫(kù)系統(tǒng)中診斷死鎖的方法與操作系統(tǒng)類似??梢岳檬聞?wù)信賴圖的形式來(lái)測(cè)試系統(tǒng)中是否存在死鎖。例如在圖5.3中,事務(wù)T1需要數(shù)據(jù)R,但R已經(jīng)被事務(wù)T2封鎖,那么從T1到T2劃一個(gè)箭頭。如果在事務(wù)依賴圖中沿著箭頭方向存在一個(gè)循環(huán),那么死鎖的條件就形成了,系統(tǒng)就會(huì)出現(xiàn)死鎖。圖5.3 事務(wù)依賴圖 數(shù)據(jù)RT1T2如果已經(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í)際情況來(lái)確定的

56、,通常采用的方法之一是選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷。不重要的用戶,取消其操作,釋放封鎖的數(shù)據(jù),恢復(fù)對(duì)數(shù)據(jù)庫(kù)所作的改變。 5.4.1 數(shù)據(jù)庫(kù)恢復(fù)的含義雖然數(shù)據(jù)庫(kù)系統(tǒng)中已采取一定的措施,來(lái)防止數(shù)據(jù)庫(kù)的安全性和完整性的破壞,保證并發(fā)事務(wù)的正確執(zhí)行,但數(shù)據(jù)庫(kù)中的數(shù)據(jù)仍然無(wú)法保證絕對(duì)不遭受破壞,比如計(jì)算機(jī)系統(tǒng)中硬件的故障、軟件的的錯(cuò)誤,操作員的失誤,惡意的破壞等都有可能發(fā)生,這些故障的發(fā)生影響數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性,甚至可能破壞數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)中的數(shù)據(jù)全部或部分丟失。因此,系統(tǒng)必須具有檢測(cè)故障并把數(shù)據(jù)從錯(cuò)誤狀態(tài)中恢復(fù)到某一正確狀態(tài)的功能,這就是數(shù)據(jù)庫(kù)的恢復(fù)。5.4 數(shù)據(jù)庫(kù)的恢復(fù)5.4.2 數(shù)據(jù)庫(kù)

57、恢復(fù)的原理服及其實(shí)現(xiàn)技術(shù)數(shù)據(jù)庫(kù)恢復(fù)的基本原理十分簡(jiǎn)單,就是數(shù)據(jù)的冗余。數(shù)據(jù)庫(kù)中任何一部分被破壞的或不正確的數(shù)據(jù)都可以利用存儲(chǔ)在系統(tǒng)其他地方的冗余數(shù)據(jù)來(lái)修復(fù)。因此恢復(fù)系統(tǒng)應(yīng)該提供兩種類型的功能:一種是生成冗余數(shù)據(jù),即對(duì)可能發(fā)生的故障作某些準(zhǔn)備;另一種是冗余重建,即利用這些冗余數(shù)據(jù)恢復(fù)數(shù)據(jù)庫(kù)。生成冗余數(shù)據(jù)最常用的技術(shù)是登記日志文件和數(shù)據(jù)轉(zhuǎn)儲(chǔ),在實(shí)際應(yīng)用中,這兩種方法常常結(jié)合起來(lái)一起使用。 5.4.2.1 登記日志文件(Logging)日志文件是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。對(duì)數(shù)據(jù)庫(kù)的每次修改,都將被修改項(xiàng)目的舊值和新值寫在一個(gè)叫做運(yùn)行日志的文件中,目的是為數(shù)據(jù)庫(kù)的恢復(fù)保留詳細(xì)的數(shù)據(jù)。典型的

58、日志文件主要包含以下內(nèi)容:1更新數(shù)據(jù)庫(kù)的事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù));2操作的類型(插入、刪除或修改)3操作對(duì)象;4更新前數(shù)據(jù)的舊值(對(duì)于插入操作而言,沒有舊值);5更新前數(shù)據(jù)的新值(對(duì)于刪除操作而言,沒有新值);6事務(wù)處理中的各個(gè)關(guān)鍵時(shí)刻(事務(wù)的開始、結(jié)束及其真正回寫的時(shí)間)。日志文件是系統(tǒng)運(yùn)行的歷史記載,必須高度可靠。所以一般都是雙副本的,并且獨(dú)立地寫在兩個(gè)不同類型的設(shè)備上。日志的信息量很大,一般保存在海量存儲(chǔ)器上。在對(duì)數(shù)據(jù)庫(kù)修改時(shí),在運(yùn)行日志中要寫入一個(gè)表示這個(gè)修改的運(yùn)行記錄。為了防止在這兩個(gè)操作之間發(fā)生故障后,運(yùn)行日志中沒有記錄下這個(gè)修改,以后也無(wú)法撤消這個(gè)修改。為保證數(shù)據(jù)庫(kù)是可恢復(fù)的,

59、登記日志文件必須遵循兩條原則原則:1.至少要等到相應(yīng)運(yùn)行記錄的撤消部分已經(jīng)寫入日志文件中以后,才允許該事務(wù)往物理數(shù)據(jù)庫(kù)中寫入記錄;2.直到事務(wù)的所有運(yùn)行記錄的撤消和重做兩部分都已寫入日志文件中以后,才允許事務(wù)完成提交處理。這兩條原則稱為日志文件的先寫原則。先寫原則蘊(yùn)含了如下意義:如果出現(xiàn)故障,只可能在日志文件中登記所做的修改,但沒有修改數(shù)據(jù)庫(kù),這樣在系統(tǒng)重新啟動(dòng)進(jìn)行恢復(fù)時(shí),只是撤消或重做因發(fā)生事故而沒有做過的修改,并不會(huì)影響數(shù)據(jù)庫(kù)的正確性。而如果先寫了數(shù)據(jù)庫(kù)修改,而在運(yùn)行記錄中沒有登記這個(gè)修改,則以后就無(wú)法恢復(fù)這個(gè)修改了。所以這了安全,一定要先定日志文件,后寫數(shù)據(jù)庫(kù)的修改。5.4.2.2 數(shù)據(jù)

60、轉(zhuǎn)儲(chǔ)(Data Dump)數(shù)據(jù)轉(zhuǎn)儲(chǔ)是指定期地將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備如磁帶、磁盤上保存起來(lái)的過程,它是數(shù)據(jù)庫(kù)恢復(fù)中采用的基本手段。轉(zhuǎn)儲(chǔ)的數(shù)據(jù)文本稱為后備副本或后援副本,當(dāng)數(shù)據(jù)庫(kù)遭到破壞后就可利用后援副本把數(shù)據(jù)庫(kù)有效地加以恢復(fù)。轉(zhuǎn)儲(chǔ)是十分耗費(fèi)時(shí)間和資源的,不能頻繁地進(jìn)行,應(yīng)該根據(jù)數(shù)據(jù)庫(kù)使用情況確定一個(gè)適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)周期。按照轉(zhuǎn)儲(chǔ)方式轉(zhuǎn)儲(chǔ)可以分為海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)。增量轉(zhuǎn)儲(chǔ)每次只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后被更新過的數(shù)據(jù)。上次轉(zhuǎn)儲(chǔ)以來(lái)對(duì)數(shù)據(jù)庫(kù)的更新修改情況記錄在日志文件中,利用日志文件就可進(jìn)行這種轉(zhuǎn)儲(chǔ),將更新過的那些數(shù)據(jù)重新寫入上次轉(zhuǎn)儲(chǔ)的文件中,就完成了轉(zhuǎn)儲(chǔ)操作,這與轉(zhuǎn)儲(chǔ)整個(gè)數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論