(數(shù)據(jù)庫原理)第8章數(shù)據(jù)庫管理講解_第1頁
(數(shù)據(jù)庫原理)第8章數(shù)據(jù)庫管理講解_第2頁
(數(shù)據(jù)庫原理)第8章數(shù)據(jù)庫管理講解_第3頁
(數(shù)據(jù)庫原理)第8章數(shù)據(jù)庫管理講解_第4頁
(數(shù)據(jù)庫原理)第8章數(shù)據(jù)庫管理講解_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)庫原理與應(yīng)用教程第第8章章 數(shù)據(jù)庫管理數(shù)據(jù)庫管理數(shù)據(jù)庫原理與應(yīng)用教程數(shù)據(jù)庫管理目錄數(shù)據(jù)庫管理目錄v8.1 數(shù)據(jù)庫中事務(wù)的概念數(shù)據(jù)庫中事務(wù)的概念v8.2 數(shù)據(jù)庫的恢復(fù)數(shù)據(jù)庫的恢復(fù)v8.3 數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制v8.4 數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性v8.5 數(shù)據(jù)庫的安全性數(shù)據(jù)庫的安全性v本章小結(jié)本章小結(jié)數(shù)據(jù)庫原理與應(yīng)用教程數(shù)據(jù)庫管理數(shù)據(jù)庫管理 數(shù)據(jù)庫管理系統(tǒng)要保證數(shù)據(jù)庫及整個系統(tǒng)的正常運轉(zhuǎn),數(shù)據(jù)庫管理系統(tǒng)要保證數(shù)據(jù)庫及整個系統(tǒng)的正常運轉(zhuǎn),確保數(shù)據(jù)的安全性、完整性、并在多用戶同時使用數(shù)據(jù)庫時確保數(shù)據(jù)的安全性、完整性、并在多用戶同時使用數(shù)據(jù)庫時進行并發(fā)控制,以及當(dāng)數(shù)據(jù)庫受到破壞后能及時

2、恢復(fù)正常,進行并發(fā)控制,以及當(dāng)數(shù)據(jù)庫受到破壞后能及時恢復(fù)正常,這就是數(shù)據(jù)庫管理系統(tǒng)要履行的職責(zé)。本章首先介紹事務(wù)概這就是數(shù)據(jù)庫管理系統(tǒng)要履行的職責(zé)。本章首先介紹事務(wù)概念及其特性,然后講述安全性控制、完整性控制、并發(fā)性控念及其特性,然后講述安全性控制、完整性控制、并發(fā)性控制和數(shù)據(jù)庫恢復(fù)技術(shù)四個方面制和數(shù)據(jù)庫恢復(fù)技術(shù)四個方面,介紹數(shù)據(jù)庫管理系統(tǒng)的功能介紹數(shù)據(jù)庫管理系統(tǒng)的功能及實現(xiàn)這些功能的方法。及實現(xiàn)這些功能的方法。數(shù)據(jù)庫原理與應(yīng)用教程8.1 數(shù)據(jù)庫中事務(wù)的概念 事務(wù)是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用程序的基本事務(wù)是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用程序的基本邏輯單元。事務(wù)處理技術(shù)主要包括數(shù)據(jù)庫恢復(fù)

3、技術(shù)和并發(fā)控邏輯單元。事務(wù)處理技術(shù)主要包括數(shù)據(jù)庫恢復(fù)技術(shù)和并發(fā)控制技術(shù)。數(shù)據(jù)庫恢復(fù)機制和并發(fā)控制機制是數(shù)據(jù)庫管理系統(tǒng)制技術(shù)。數(shù)據(jù)庫恢復(fù)機制和并發(fā)控制機制是數(shù)據(jù)庫管理系統(tǒng)的重要組成部分。在討論數(shù)據(jù)恢復(fù)技術(shù)和并發(fā)控制技術(shù)之前的重要組成部分。在討論數(shù)據(jù)恢復(fù)技術(shù)和并發(fā)控制技術(shù)之前先講解事務(wù)的基本概念和事務(wù)的性質(zhì)。先講解事務(wù)的基本概念和事務(wù)的性質(zhì)。數(shù)據(jù)庫原理與應(yīng)用教程8.1.1事務(wù)的基本概念 1事務(wù)的概念事務(wù)的概念 事務(wù)是用戶定義的一個數(shù)據(jù)操作序列,這些操作要么全做,要么全事務(wù)是用戶定義的一個數(shù)據(jù)操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。不做,是一個不可分割的工作單位。 一個事務(wù)

4、可以是一條一個事務(wù)可以是一條SQL語句、一組語句、一組SQL語句或整個程序,一個程語句或整個程序,一個程序中可以包含多個事務(wù)。事務(wù)的開始與結(jié)束可以由用戶顯式控制。如果序中可以包含多個事務(wù)。事務(wù)的開始與結(jié)束可以由用戶顯式控制。如果用戶沒有顯式地定義事務(wù),則由用戶沒有顯式地定義事務(wù),則由DBMS按缺省規(guī)定自動劃分事務(wù)。按缺省規(guī)定自動劃分事務(wù)。 在在SQL語言中,定義事務(wù)的語句有三條:語言中,定義事務(wù)的語句有三條:BEGIN TRANSACTION;COMMIT;ROLLBACK。事務(wù)通常是以事務(wù)通常是以BEGIN TRANSACTION開始;以開始;以COMMIT 表示事務(wù)的提交,即表示提交事務(wù)表

5、示事務(wù)的提交,即表示提交事務(wù)的所有操作,將事務(wù)中所有對數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫的所有操作,將事務(wù)中所有對數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫中去,事務(wù)正常結(jié)束;中去,事務(wù)正常結(jié)束;ROLLBACK表示事務(wù)的回滾,即在事務(wù)運行的表示事務(wù)的回滾,即在事務(wù)運行的過程中發(fā)生了故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對數(shù)據(jù)庫的所有過程中發(fā)生了故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對數(shù)據(jù)庫的所有已完成的操作全部撤銷,回滾到事務(wù)開始時的狀態(tài)。已完成的操作全部撤銷,回滾到事務(wù)開始時的狀態(tài)。數(shù)據(jù)庫原理與應(yīng)用教程 2事務(wù)的特性事務(wù)的特性 事務(wù)具有四個特性:原子性(事務(wù)具有四個特性:原子性(Atomicity

6、)、一致性)、一致性(Consistency)、隔離、隔離(Isolation)和持續(xù)性和持續(xù)性(Durability)。這。這四個特性也簡稱為四個特性也簡稱為ACID特性。特性。 (1)原子性原子性(Atomicity):一個事務(wù)是一個不可分割的工作):一個事務(wù)是一個不可分割的工作單位,事務(wù)中包括的操作要么都做,要么都不做,即不允許單位,事務(wù)中包括的操作要么都做,要么都不做,即不允許事務(wù)部分完成。事務(wù)部分完成。 (2)一致性一致性(Consistency):事務(wù)對數(shù)據(jù)庫的操作必須使數(shù)據(jù):事務(wù)對數(shù)據(jù)庫的操作必須使數(shù)據(jù)庫從一個一致性狀態(tài)變成另一個一致性狀態(tài)。因此,只有當(dāng)庫從一個一致性狀態(tài)變成另一

7、個一致性狀態(tài)。因此,只有當(dāng)事務(wù)成功提交的結(jié)果時,就說數(shù)據(jù)庫處于一致性狀態(tài)。如果事務(wù)成功提交的結(jié)果時,就說數(shù)據(jù)庫處于一致性狀態(tài)。如果數(shù)據(jù)庫系統(tǒng)運行中發(fā)生故障,有些事務(wù)還沒有完成就被迫中數(shù)據(jù)庫系統(tǒng)運行中發(fā)生故障,有些事務(wù)還沒有完成就被迫中斷,這些沒有完成的事務(wù)對數(shù)據(jù)庫所做的修改有一部分已寫斷,這些沒有完成的事務(wù)對數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫,這時數(shù)據(jù)庫就處于一種不一致的狀態(tài)。入物理數(shù)據(jù)庫,這時數(shù)據(jù)庫就處于一種不一致的狀態(tài)。 (3)隔離性隔離性(Isolation):一個事務(wù)的執(zhí)行不能被其它事務(wù)干擾。:一個事務(wù)的執(zhí)行不能被其它事務(wù)干擾。即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔

8、即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的。離的。 (4)持續(xù)性持續(xù)性(Durability):指一個事務(wù)一旦提交,它對數(shù)據(jù)庫:指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。即使數(shù)據(jù)庫因其它操作或中數(shù)據(jù)的改變就應(yīng)該是永久性的。即使數(shù)據(jù)庫因其它操作或故障而受到破壞,都不應(yīng)對結(jié)果有任何影響。故障而受到破壞,都不應(yīng)對結(jié)果有任何影響。數(shù)據(jù)庫原理與應(yīng)用教程 事務(wù)上述事務(wù)上述4個性質(zhì)的英文第一個字母分別為個性質(zhì)的英文第一個字母分別為A、C、I、D。因此,這因此,這4個性質(zhì)也稱為事務(wù)的個性質(zhì)也稱為事務(wù)的ACID準則。下面是一個銀行準則。下面是一個銀行轉(zhuǎn)帳事務(wù),這個事務(wù)把一筆金額從

9、一個帳戶甲轉(zhuǎn)給另一個帳轉(zhuǎn)帳事務(wù),這個事務(wù)把一筆金額從一個帳戶甲轉(zhuǎn)給另一個帳戶乙。戶乙。 BEGIN TRANSACTION READ BALANCE;(帳戶甲帳戶甲) BALANCE=BALANCE-AMOUNT;(AMOUNT為轉(zhuǎn)帳金額為轉(zhuǎn)帳金額) IF(BALANCE0)THEN DISPLAY“BALANCE余額不足余額不足” ROLLBACK ELSE BALANCE1=BALANCE1+AMOUNT (帳戶乙?guī)粢? DISPLAY“轉(zhuǎn)賬成功!轉(zhuǎn)賬成功!” COMMIT END數(shù)據(jù)庫原理與應(yīng)用教程8.2 數(shù)據(jù)庫的恢復(fù) 盡管數(shù)據(jù)庫系統(tǒng)中已采取各種各樣的措施來防止數(shù)據(jù)盡管數(shù)據(jù)庫系統(tǒng)中已采

10、取各種各樣的措施來防止數(shù)據(jù)庫的安全性和完整性不被破壞,但是數(shù)據(jù)庫中的數(shù)據(jù)仍然庫的安全性和完整性不被破壞,但是數(shù)據(jù)庫中的數(shù)據(jù)仍然無法保證絕對不遭到破壞,比如計算機系統(tǒng)中硬件的故障、無法保證絕對不遭到破壞,比如計算機系統(tǒng)中硬件的故障、軟件的錯誤、操作員的失誤、惡意的破壞等都不可避免,軟件的錯誤、操作員的失誤、惡意的破壞等都不可避免,一旦數(shù)據(jù)庫損壞,將會帶來巨大的損失,所以數(shù)據(jù)庫恢復(fù)一旦數(shù)據(jù)庫損壞,將會帶來巨大的損失,所以數(shù)據(jù)庫恢復(fù)越來越重要,因此,數(shù)據(jù)庫管理系統(tǒng)必須能夠把數(shù)據(jù)庫從越來越重要,因此,數(shù)據(jù)庫管理系統(tǒng)必須能夠把數(shù)據(jù)庫從錯誤狀態(tài)恢復(fù)到某一已知的正確狀態(tài),這就是數(shù)據(jù)庫的恢錯誤狀態(tài)恢復(fù)到某一已

11、知的正確狀態(tài),這就是數(shù)據(jù)庫的恢復(fù)。復(fù)。數(shù)據(jù)庫原理與應(yīng)用教程8.2.1事務(wù)的故障 在講恢復(fù)的實現(xiàn)技術(shù)之前,我們首先來了解一下在數(shù)據(jù)庫在講恢復(fù)的實現(xiàn)技術(shù)之前,我們首先來了解一下在數(shù)據(jù)庫系統(tǒng)中都有哪些故障。數(shù)據(jù)庫系統(tǒng)在運行過程中可能發(fā)生各種系統(tǒng)中都有哪些故障。數(shù)據(jù)庫系統(tǒng)在運行過程中可能發(fā)生各種各樣的故障,大致可以分為以下幾類:各樣的故障,大致可以分為以下幾類: 1事務(wù)故障事務(wù)故障 事務(wù)故障表示由非預(yù)期的、不能由事務(wù)程序本身發(fā)現(xiàn)的故事務(wù)故障表示由非預(yù)期的、不能由事務(wù)程序本身發(fā)現(xiàn)的故障。如輸入數(shù)據(jù)錯誤、運算溢出、違反某些完整性限制、并行障。如輸入數(shù)據(jù)錯誤、運算溢出、違反某些完整性限制、并行事務(wù)發(fā)生死鎖等

12、。事務(wù)發(fā)生死鎖等。 發(fā)生事務(wù)故障時,事務(wù)沒有達到預(yù)期的終點(發(fā)生事務(wù)故障時,事務(wù)沒有達到預(yù)期的終點(COMMIT或或是顯式的是顯式的ROLLBACK),被迫中斷的事務(wù)可能已對數(shù)據(jù)庫進),被迫中斷的事務(wù)可能已對數(shù)據(jù)庫進行了修改,為了消除對數(shù)據(jù)庫的影響,強行回滾行了修改,為了消除對數(shù)據(jù)庫的影響,強行回滾(ROLLBACK)該事務(wù),將數(shù)據(jù)庫恢復(fù)到修改前的初始狀態(tài),)該事務(wù),將數(shù)據(jù)庫恢復(fù)到修改前的初始狀態(tài),使得事務(wù)像沒有啟動一樣。使得事務(wù)像沒有啟動一樣。數(shù)據(jù)庫原理與應(yīng)用教程 2系統(tǒng)故障系統(tǒng)故障 系統(tǒng)故障是指由于某種原因造成整個系統(tǒng)的正常運行突系統(tǒng)故障是指由于某種原因造成整個系統(tǒng)的正常運行突然停止,致使

13、所有正在運行的事務(wù)都以非正常方式終止,系然停止,致使所有正在運行的事務(wù)都以非正常方式終止,系統(tǒng)要重新啟動。引起系統(tǒng)故障的原因可能有:硬件錯誤統(tǒng)要重新啟動。引起系統(tǒng)故障的原因可能有:硬件錯誤(CPU故障)、操作系統(tǒng)故障、故障)、操作系統(tǒng)故障、DBMS代碼錯誤、突然斷電代碼錯誤、突然斷電等。這時,數(shù)據(jù)庫緩沖區(qū)的內(nèi)容丟失,存儲在外部存儲設(shè)備等。這時,數(shù)據(jù)庫緩沖區(qū)的內(nèi)容丟失,存儲在外部存儲設(shè)備上的數(shù)據(jù)庫并未被破壞,但內(nèi)容不可靠了。系統(tǒng)故障發(fā)生后,上的數(shù)據(jù)庫并未被破壞,但內(nèi)容不可靠了。系統(tǒng)故障發(fā)生后,對數(shù)據(jù)庫的影響有以下兩種情況。對數(shù)據(jù)庫的影響有以下兩種情況。 一種情況是一些未完成事務(wù)的結(jié)果已寫入數(shù)據(jù)庫

14、,這樣一種情況是一些未完成事務(wù)的結(jié)果已寫入數(shù)據(jù)庫,這樣在系統(tǒng)重新啟動后。要強行撤銷(在系統(tǒng)重新啟動后。要強行撤銷(UNDO)所有未完成事務(wù),)所有未完成事務(wù),清除這些事務(wù)對數(shù)據(jù)庫所做的修改。清除這些事務(wù)對數(shù)據(jù)庫所做的修改。 另一種情況是有些已提交的事務(wù)對數(shù)據(jù)庫的更新結(jié)果還另一種情況是有些已提交的事務(wù)對數(shù)據(jù)庫的更新結(jié)果還保留在緩沖區(qū)中,尚未寫到磁盤上的物理數(shù)據(jù)庫中,這也使保留在緩沖區(qū)中,尚未寫到磁盤上的物理數(shù)據(jù)庫中,這也使用數(shù)據(jù)庫處于不一致狀態(tài),因此應(yīng)將這些事務(wù)已提交的結(jié)果用數(shù)據(jù)庫處于不一致狀態(tài),因此應(yīng)將這些事務(wù)已提交的結(jié)果重新寫入數(shù)據(jù)庫。所以系統(tǒng)重新啟動后,恢復(fù)子系統(tǒng)除需要重新寫入數(shù)據(jù)庫。所以

15、系統(tǒng)重新啟動后,恢復(fù)子系統(tǒng)除需要撤銷所有未完成事務(wù)外,還需要重做(撤銷所有未完成事務(wù)外,還需要重做(REDO)所有已提交)所有已提交的事務(wù),以將數(shù)據(jù)庫真正恢復(fù)到一致狀態(tài)。的事務(wù),以將數(shù)據(jù)庫真正恢復(fù)到一致狀態(tài)。數(shù)據(jù)庫原理與應(yīng)用教程 3介質(zhì)故障介質(zhì)故障 介質(zhì)故障是指系統(tǒng)在運行過程中,由于外存儲器受到破介質(zhì)故障是指系統(tǒng)在運行過程中,由于外存儲器受到破壞,使儲存在外存儲器中的數(shù)據(jù)部分丟失或全部丟失。這類壞,使儲存在外存儲器中的數(shù)據(jù)部分丟失或全部丟失。這類故障發(fā)生的可能性要小,但破壞性很大。故障發(fā)生的可能性要小,但破壞性很大。 4計算機病毒計算機病毒 計算機病毒是一種人為的故障或破壞,是一種帶有對計計算

16、機病毒是一種人為的故障或破壞,是一種帶有對計算機產(chǎn)生破壞的程序。算機產(chǎn)生破壞的程序。 通過以上對通過以上對4類故障的分析可以看出,故障發(fā)生后對數(shù)類故障的分析可以看出,故障發(fā)生后對數(shù)據(jù)庫的影響有兩種可能性。據(jù)庫的影響有兩種可能性。 一是數(shù)據(jù)庫本身被破壞。二是數(shù)據(jù)庫沒有破壞,但數(shù)據(jù)一是數(shù)據(jù)庫本身被破壞。二是數(shù)據(jù)庫沒有破壞,但數(shù)據(jù)可能不正確,這是因為事務(wù)的運行被非正常終止造成的??赡懿徽_,這是因為事務(wù)的運行被非正常終止造成的。 接下來,我們將介紹如何通過數(shù)據(jù)庫恢復(fù)技術(shù)來解決這接下來,我們將介紹如何通過數(shù)據(jù)庫恢復(fù)技術(shù)來解決這些事務(wù)故障,使數(shù)據(jù)庫回到一致性的狀態(tài)?;謴?fù)的基本原理些事務(wù)故障,使數(shù)據(jù)庫回到

17、一致性的狀態(tài)。恢復(fù)的基本原理十分簡單。就是用冗余技術(shù)。數(shù)據(jù)庫中任何一部分被破壞的十分簡單。就是用冗余技術(shù)。數(shù)據(jù)庫中任何一部分被破壞的或不正確的數(shù)據(jù)可以根據(jù)存儲在系統(tǒng)別處的冗余數(shù)據(jù)來重建?;虿徽_的數(shù)據(jù)可以根據(jù)存儲在系統(tǒng)別處的冗余數(shù)據(jù)來重建。盡管恢復(fù)的基本原理很簡單,但實現(xiàn)技術(shù)的細節(jié)相當(dāng)復(fù)雜,盡管恢復(fù)的基本原理很簡單,但實現(xiàn)技術(shù)的細節(jié)相當(dāng)復(fù)雜,下面介紹數(shù)據(jù)恢復(fù)的實現(xiàn)技術(shù)。下面介紹數(shù)據(jù)恢復(fù)的實現(xiàn)技術(shù)。數(shù)據(jù)庫原理與應(yīng)用教程8.2.2數(shù)據(jù)庫恢復(fù)的基本原理及實現(xiàn)技術(shù) 數(shù)據(jù)庫恢復(fù)技術(shù)的基本原理十分簡單,就是如數(shù)據(jù)庫恢復(fù)技術(shù)的基本原理十分簡單,就是如何利用數(shù)據(jù)的冗余。數(shù)據(jù)庫中任何一部分被破壞的何利用數(shù)據(jù)的冗

18、余。數(shù)據(jù)庫中任何一部分被破壞的或不正確的數(shù)據(jù)都根據(jù)存儲在系統(tǒng)別處的冗余數(shù)據(jù)或不正確的數(shù)據(jù)都根據(jù)存儲在系統(tǒng)別處的冗余數(shù)據(jù)來重建。恢復(fù)技術(shù)應(yīng)該解決二個問題就可以做到數(shù)來重建。恢復(fù)技術(shù)應(yīng)該解決二個問題就可以做到數(shù)據(jù)的恢復(fù):一種是如何建立冗余數(shù)據(jù),即對可能發(fā)據(jù)的恢復(fù):一種是如何建立冗余數(shù)據(jù),即對可能發(fā)生的故障作某些準備;另一種如何利用這些冗余數(shù)生的故障作某些準備;另一種如何利用這些冗余數(shù)據(jù)實施數(shù)據(jù)庫恢復(fù)。據(jù)實施數(shù)據(jù)庫恢復(fù)。 建立冗余數(shù)據(jù)最常用的技術(shù)是建立冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)轉(zhuǎn)儲和登記數(shù)據(jù)轉(zhuǎn)儲和登記日志文件日志文件,通常在一個數(shù)據(jù)庫系統(tǒng)中,這兩種方法,通常在一個數(shù)據(jù)庫系統(tǒng)中,這兩種方法結(jié)合起來一起

19、使用。結(jié)合起來一起使用。數(shù)據(jù)庫原理與應(yīng)用教程 1數(shù)據(jù)轉(zhuǎn)儲數(shù)據(jù)轉(zhuǎn)儲 數(shù)據(jù)轉(zhuǎn)儲是指數(shù)據(jù)庫管理員定期地將整個數(shù)據(jù)庫復(fù)制到數(shù)據(jù)轉(zhuǎn)儲是指數(shù)據(jù)庫管理員定期地將整個數(shù)據(jù)庫復(fù)制到磁盤或其它磁盤上保存起來的過程,它是數(shù)據(jù)庫恢復(fù)中采用磁盤或其它磁盤上保存起來的過程,它是數(shù)據(jù)庫恢復(fù)中采用的基本方法。這些轉(zhuǎn)存數(shù)據(jù)稱為后備副本或后援副本,當(dāng)數(shù)的基本方法。這些轉(zhuǎn)存數(shù)據(jù)稱為后備副本或后援副本,當(dāng)數(shù)據(jù)庫遭到破壞后就可利用后援副本。據(jù)庫遭到破壞后就可利用后援副本。 轉(zhuǎn)儲是十分耗費時間和資源的,不能頻繁的進行,數(shù)據(jù)轉(zhuǎn)儲是十分耗費時間和資源的,不能頻繁的進行,數(shù)據(jù)庫管理員應(yīng)該根據(jù)數(shù)據(jù)庫實際使用情況來確定一個適當(dāng)?shù)霓D(zhuǎn)庫管理員應(yīng)該根據(jù)

20、數(shù)據(jù)庫實際使用情況來確定一個適當(dāng)?shù)霓D(zhuǎn)儲周期。儲周期。 按照轉(zhuǎn)儲方式轉(zhuǎn)儲可以分為海量轉(zhuǎn)儲和增量轉(zhuǎn)儲。海量按照轉(zhuǎn)儲方式轉(zhuǎn)儲可以分為海量轉(zhuǎn)儲和增量轉(zhuǎn)儲。海量轉(zhuǎn)儲是指每次轉(zhuǎn)儲全部數(shù)據(jù)庫;增量轉(zhuǎn)儲每次只轉(zhuǎn)儲上一次轉(zhuǎn)儲是指每次轉(zhuǎn)儲全部數(shù)據(jù)庫;增量轉(zhuǎn)儲每次只轉(zhuǎn)儲上一次轉(zhuǎn)儲后被更新過的數(shù)據(jù)。利用海量轉(zhuǎn)儲得到的后備副本進行轉(zhuǎn)儲后被更新過的數(shù)據(jù)。利用海量轉(zhuǎn)儲得到的后備副本進行恢復(fù)的話,一般說來會更方便,但是如果數(shù)據(jù)庫內(nèi)容多,事恢復(fù)的話,一般說來會更方便,但是如果數(shù)據(jù)庫內(nèi)容多,事務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲方式更實用。務(wù)處理又十分頻繁,則增量轉(zhuǎn)儲方式更實用。數(shù)據(jù)庫原理與應(yīng)用教程 按照轉(zhuǎn)儲狀態(tài),轉(zhuǎn)儲又可以分為靜態(tài)轉(zhuǎn)儲

21、和動態(tài)轉(zhuǎn)儲。按照轉(zhuǎn)儲狀態(tài),轉(zhuǎn)儲又可以分為靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲。靜態(tài)轉(zhuǎn)儲期間不允許對數(shù)據(jù)庫存取、修改活動,因而必須等靜態(tài)轉(zhuǎn)儲期間不允許對數(shù)據(jù)庫存取、修改活動,因而必須等待當(dāng)前用戶正在進行的事務(wù)結(jié)束后進行,新用戶事務(wù)又必須待當(dāng)前用戶正在進行的事務(wù)結(jié)束后進行,新用戶事務(wù)又必須在轉(zhuǎn)儲結(jié)束之后才能進行,這就降低了數(shù)據(jù)庫的可用性;動在轉(zhuǎn)儲結(jié)束之后才能進行,這就降低了數(shù)據(jù)庫的可用性;動態(tài)轉(zhuǎn)儲則不同,它允許在轉(zhuǎn)儲期間對數(shù)據(jù)庫進行存取或修改,態(tài)轉(zhuǎn)儲則不同,它允許在轉(zhuǎn)儲期間對數(shù)據(jù)庫進行存取或修改,可以克服靜態(tài)轉(zhuǎn)儲的缺點,但產(chǎn)生的后援副本不能保證正確可以克服靜態(tài)轉(zhuǎn)儲的缺點,但產(chǎn)生的后援副本不能保證正確有效。為了盡量避

22、免數(shù)據(jù)的不正確性,可以把轉(zhuǎn)儲期間各事有效。為了盡量避免數(shù)據(jù)的不正確性,可以把轉(zhuǎn)儲期間各事務(wù)對數(shù)據(jù)庫的修改活動登記下來,建立日志文件。因此,備務(wù)對數(shù)據(jù)庫的修改活動登記下來,建立日志文件。因此,備用副本加上日志文件就能把數(shù)據(jù)庫恢復(fù)到某一時刻的正確狀用副本加上日志文件就能把數(shù)據(jù)庫恢復(fù)到某一時刻的正確狀態(tài)。態(tài)。 2登記日志文件登記日志文件 日志文件(日志文件(Logging)是用來記錄事務(wù)對數(shù)據(jù)庫更新操)是用來記錄事務(wù)對數(shù)據(jù)庫更新操作的文件。日志文件在數(shù)據(jù)庫恢復(fù)中起著非常重要的作用。作的文件。日志文件在數(shù)據(jù)庫恢復(fù)中起著非常重要的作用??梢杂盟鼇韺κ聞?wù)故障和系統(tǒng)故障進行恢復(fù),并協(xié)助后授副可以用它來對事務(wù)

23、故障和系統(tǒng)故障進行恢復(fù),并協(xié)助后授副本進行介質(zhì)故障的恢復(fù)。不同數(shù)據(jù)庫采用的日志文件格式并本進行介質(zhì)故障的恢復(fù)。不同數(shù)據(jù)庫采用的日志文件格式并不完全一樣。不完全一樣。數(shù)據(jù)庫原理與應(yīng)用教程 對于以記錄為單位的日志文件,日志文件需要登記的內(nèi)對于以記錄為單位的日志文件,日志文件需要登記的內(nèi)容包括:容包括: 各個事務(wù)的開始;各個事務(wù)的開始; 各個事務(wù)的結(jié)束;各個事務(wù)的結(jié)束; 各個事務(wù)的所有更新操作;各個事務(wù)的所有更新操作; 這里每個事務(wù)開始的標記、每個事務(wù)的結(jié)束標記和每個這里每個事務(wù)開始的標記、每個事務(wù)的結(jié)束標記和每個更新操作均作為日志文件中的一個日志記錄。更新操作均作為日志文件中的一個日志記錄。 典型

24、的日志記錄主要包含以下內(nèi)容:典型的日志記錄主要包含以下內(nèi)容: 事務(wù)標識(標明是哪個事務(wù));事務(wù)標識(標明是哪個事務(wù)); 操作的類型(插入、刪除或修改);操作的類型(插入、刪除或修改); 操作對象(記錄內(nèi)部標識);操作對象(記錄內(nèi)部標識); 更新前數(shù)據(jù)的舊值(對于插入操作而言;此項為空更新前數(shù)據(jù)的舊值(對于插入操作而言;此項為空值);值); 更新后數(shù)據(jù)的新值(對于刪除操作而言,此項為空更新后數(shù)據(jù)的新值(對于刪除操作而言,此項為空值);值);數(shù)據(jù)庫原理與應(yīng)用教程 為保證數(shù)據(jù)庫是可恢復(fù)的,登記日志文件必須遵循兩條為保證數(shù)據(jù)庫是可恢復(fù)的,登記日志文件必須遵循兩條原則:原則: 登記的次序嚴格按并發(fā)事務(wù)執(zhí)

25、行的時間次序。登記的次序嚴格按并發(fā)事務(wù)執(zhí)行的時間次序。 必須先寫日志文件,后寫數(shù)據(jù)庫。必須先寫日志文件,后寫數(shù)據(jù)庫。 為什么一定要遵循這兩條原則呢?因為對數(shù)據(jù)的修改寫為什么一定要遵循這兩條原則呢?因為對數(shù)據(jù)的修改寫入數(shù)據(jù)庫中和把修改的日志記錄寫到日志文件中是二個不同入數(shù)據(jù)庫中和把修改的日志記錄寫到日志文件中是二個不同的操作。如果先進行日志記錄的修改,一旦出現(xiàn)故障,之前的操作。如果先進行日志記錄的修改,一旦出現(xiàn)故障,之前只對日志文件中登記了所做的修改,但沒有修改數(shù)據(jù)庫,這只對日志文件中登記了所做的修改,但沒有修改數(shù)據(jù)庫,這樣在系統(tǒng)重新啟動進行恢復(fù)時,只是撤銷或重新做因發(fā)生事樣在系統(tǒng)重新啟動進行恢

26、復(fù)時,只是撤銷或重新做因發(fā)生事故而沒有做過的修改,并不會影響數(shù)據(jù)庫的正確性。而如果故而沒有做過的修改,并不會影響數(shù)據(jù)庫的正確性。而如果先寫了數(shù)據(jù)庫修改,而在運行記錄中沒有登記這個修改,則先寫了數(shù)據(jù)庫修改,而在運行記錄中沒有登記這個修改,則以后就無法恢復(fù)這個修改了,所以為了安全,一定要先寫日以后就無法恢復(fù)這個修改了,所以為了安全,一定要先寫日志文件,后寫數(shù)據(jù)庫的修改。志文件,后寫數(shù)據(jù)庫的修改。 數(shù)據(jù)庫原理與應(yīng)用教程 在大型的數(shù)據(jù)庫管理系統(tǒng)當(dāng)中,如在大型的數(shù)據(jù)庫管理系統(tǒng)當(dāng)中,如SQL Server2005,就含有日志備份功能。就含有日志備份功能。SQL Server2005 的備份和還原組件的備份

27、和還原組件使用戶得以創(chuàng)建數(shù)據(jù)的副本??蓪⒋烁北敬鎯υ谀硞€位置,使用戶得以創(chuàng)建數(shù)據(jù)的副本??蓪⒋烁北敬鎯υ谀硞€位置,以便一旦運行以便一旦運行SQL Server實例的服務(wù)出現(xiàn)故障使用。如果實例的服務(wù)出現(xiàn)故障使用。如果運行運行SQL Server實例的服務(wù)器出現(xiàn)故障,或者數(shù)據(jù)庫遭到實例的服務(wù)器出現(xiàn)故障,或者數(shù)據(jù)庫遭到某種程度的損壞,可以用備份副本重新創(chuàng)建或還原數(shù)據(jù)庫。某種程度的損壞,可以用備份副本重新創(chuàng)建或還原數(shù)據(jù)庫。 SQL Server2005提供以下完善的備份和還原功能:提供以下完善的備份和還原功能: (1)完整數(shù)據(jù)庫備份是數(shù)據(jù)庫的完整副本;完整數(shù)據(jù)庫備份是數(shù)據(jù)庫的完整副本; (2)事務(wù)日志

28、備份公復(fù)制事務(wù)日志;事務(wù)日志備份公復(fù)制事務(wù)日志; (3)差異備份僅復(fù)制自上一次完整數(shù)據(jù)庫備份之后修改過差異備份僅復(fù)制自上一次完整數(shù)據(jù)庫備份之后修改過的數(shù)據(jù)庫頁;的數(shù)據(jù)庫頁; (4)文件或文件組還原僅允許恢復(fù)數(shù)據(jù)庫中位于故障磁盤文件或文件組還原僅允許恢復(fù)數(shù)據(jù)庫中位于故障磁盤上的那部分數(shù)據(jù)。這些選項允許根據(jù)數(shù)據(jù)庫中數(shù)據(jù)的重要程上的那部分數(shù)據(jù)。這些選項允許根據(jù)數(shù)據(jù)庫中數(shù)據(jù)的重要程度調(diào)整備份和還原進程。度調(diào)整備份和還原進程。數(shù)據(jù)庫原理與應(yīng)用教程8.2.3故障恢復(fù)策略 1事務(wù)故障的恢復(fù)事務(wù)故障的恢復(fù) 事務(wù)故障是指事務(wù)在運行至正常結(jié)束前被終止,這時恢事務(wù)故障是指事務(wù)在運行至正常結(jié)束前被終止,這時恢復(fù)子系統(tǒng)

29、應(yīng)利用日志文件撤銷此事務(wù)已對數(shù)據(jù)庫進行的修改。復(fù)子系統(tǒng)應(yīng)利用日志文件撤銷此事務(wù)已對數(shù)據(jù)庫進行的修改。這類恢復(fù)操作稱為事務(wù)撤銷(這類恢復(fù)操作稱為事務(wù)撤銷(UNDO),具體恢復(fù)步驟是:),具體恢復(fù)步驟是: (1)反向掃描日志文件,查找該事務(wù)的更新操作。)反向掃描日志文件,查找該事務(wù)的更新操作。 (2)對該事務(wù)的更新操作執(zhí)行反向操作,即對已經(jīng)插入的)對該事務(wù)的更新操作執(zhí)行反向操作,即對已經(jīng)插入的新記錄進行刪除操作,對已經(jīng)刪除的記錄進行插入操作,對新記錄進行刪除操作,對已經(jīng)刪除的記錄進行插入操作,對修改的數(shù)據(jù)恢復(fù)舊值,這樣由后向前逐個掃描該事務(wù)做完所修改的數(shù)據(jù)恢復(fù)舊值,這樣由后向前逐個掃描該事務(wù)做完所

30、有更新操作,并做同樣處理,直到掃描到此事務(wù)的開始標記,有更新操作,并做同樣處理,直到掃描到此事務(wù)的開始標記,事務(wù)故障恢復(fù)完畢。事務(wù)故障恢復(fù)完畢。數(shù)據(jù)庫原理與應(yīng)用教程2系統(tǒng)故障的恢復(fù)系統(tǒng)故障的恢復(fù) 前面已經(jīng)介紹過,系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原前面已經(jīng)介紹過,系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因有兩個,一是未完成事務(wù)對數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)因有兩個,一是未完成事務(wù)對數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)庫,二是已提交事務(wù)對數(shù)據(jù)庫的更新可能還留在緩沖區(qū)還沒庫,二是已提交事務(wù)對數(shù)據(jù)庫的更新可能還留在緩沖區(qū)還沒寫入數(shù)據(jù)庫。因此系統(tǒng)故障的恢復(fù)既要撤銷所有未完成的事寫入數(shù)據(jù)庫。因此系統(tǒng)故障的恢復(fù)既要撤銷所有未完成

31、的事務(wù),還需要重做所有已提交的事務(wù),這樣才能將數(shù)據(jù)庫真正務(wù),還需要重做所有已提交的事務(wù),這樣才能將數(shù)據(jù)庫真正恢復(fù)到一致的狀態(tài)。具體做法如下:恢復(fù)到一致的狀態(tài)。具體做法如下: (1)正向掃描日志文件,查找已經(jīng)提交的事務(wù),將其事務(wù)標正向掃描日志文件,查找已經(jīng)提交的事務(wù),將其事務(wù)標識記入重做(識記入重做(REDO)隊列;同時查找尚未提交的事務(wù),將)隊列;同時查找尚未提交的事務(wù),將其事務(wù)標識記入撤銷(其事務(wù)標識記入撤銷(UNDO)隊列。)隊列。 (2)對撤銷隊列中的各個事務(wù)進行撤銷(對撤銷隊列中的各個事務(wù)進行撤銷(UNDO)處理,對該)處理,對該事務(wù)的更新操作執(zhí)行反向操作,即對已經(jīng)插入的新記錄進行事務(wù)

32、的更新操作執(zhí)行反向操作,即對已經(jīng)插入的新記錄進行刪除操作,對已經(jīng)刪除的記錄進行插入操作,對修改的數(shù)據(jù)刪除操作,對已經(jīng)刪除的記錄進行插入操作,對修改的數(shù)據(jù)恢復(fù)舊值,這樣由后向前逐個掃描該事務(wù),做完所有更新操恢復(fù)舊值,這樣由后向前逐個掃描該事務(wù),做完所有更新操作,并做同樣處理,直到掃描到此事務(wù)的開始標記。作,并做同樣處理,直到掃描到此事務(wù)的開始標記。 (3)對重做隊列中的各個事務(wù)進行重做(對重做隊列中的各個事務(wù)進行重做(REDO)處理,進行)處理,進行REDO處理的方法是:正向掃描日志文件,對每個處理的方法是:正向掃描日志文件,對每個REDO事事務(wù)重新執(zhí)行日志文件登記的操作。務(wù)重新執(zhí)行日志文件登記

33、的操作。數(shù)據(jù)庫原理與應(yīng)用教程 3介質(zhì)故障的恢復(fù)介質(zhì)故障的恢復(fù) 發(fā)生介質(zhì)故障后,磁盤上的所有數(shù)據(jù)都會被破壞,這是發(fā)生介質(zhì)故障后,磁盤上的所有數(shù)據(jù)都會被破壞,這是最嚴重的一種故障,破壞性很大,恢復(fù)方法是裝入發(fā)生介質(zhì)最嚴重的一種故障,破壞性很大,恢復(fù)方法是裝入發(fā)生介質(zhì)故障前最新的后備副本,然后利用日志文件重做已完成的事故障前最新的后備副本,然后利用日志文件重做已完成的事務(wù)。具體方法如下。務(wù)。具體方法如下。 (1)裝入最新的數(shù)據(jù)庫后備副本,使數(shù)據(jù)庫恢復(fù)到最近一次裝入最新的數(shù)據(jù)庫后備副本,使數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)儲時的一致性狀態(tài)。轉(zhuǎn)儲時的一致性狀態(tài)。 (2)裝入最新的日志文件后備副本,根據(jù)日志文件中的內(nèi)

34、容裝入最新的日志文件后備副本,根據(jù)日志文件中的內(nèi)容重做已完成的事務(wù)。首先掃描日志文件,找出故障發(fā)生時已重做已完成的事務(wù)。首先掃描日志文件,找出故障發(fā)生時已提交的事務(wù),將其記入重做隊列。然后正向掃描日志文件,提交的事務(wù),將其記入重做隊列。然后正向掃描日志文件,對每個重做隊列中的所有事務(wù)進行重做處理,即將日志記錄對每個重做隊列中的所有事務(wù)進行重做處理,即將日志記錄中中“更新后的值更新后的值”寫入數(shù)據(jù)庫。這樣就可以將數(shù)據(jù)庫恢復(fù)至寫入數(shù)據(jù)庫。這樣就可以將數(shù)據(jù)庫恢復(fù)至故障前某一時刻的一致狀態(tài)。故障前某一時刻的一致狀態(tài)。數(shù)據(jù)庫原理與應(yīng)用教程8.3 數(shù)據(jù)庫的并發(fā)控制 數(shù)據(jù)庫最大特點就是資源的共享,可以供多個

35、用戶使數(shù)據(jù)庫最大特點就是資源的共享,可以供多個用戶使用。例如火車訂票系統(tǒng)、銀行數(shù)據(jù)庫系統(tǒng)等都是多用戶數(shù)據(jù)用。例如火車訂票系統(tǒng)、銀行數(shù)據(jù)庫系統(tǒng)等都是多用戶數(shù)據(jù)庫系統(tǒng)。在這樣的系統(tǒng)中,在同一時刻并行運行的事務(wù)可達庫系統(tǒng)。在這樣的系統(tǒng)中,在同一時刻并行運行的事務(wù)可達數(shù)百個。如果對并發(fā)操作不加控制的話,可能會產(chǎn)生操作沖數(shù)百個。如果對并發(fā)操作不加控制的話,可能會產(chǎn)生操作沖突,破壞數(shù)據(jù)的完整性。即發(fā)生所謂的丟失修改、污讀、不突,破壞數(shù)據(jù)的完整性。即發(fā)生所謂的丟失修改、污讀、不可重復(fù)讀等問題。數(shù)據(jù)庫的并發(fā)控制機制能解決這類問題,可重復(fù)讀等問題。數(shù)據(jù)庫的并發(fā)控制機制能解決這類問題,以保持數(shù)據(jù)庫中數(shù)據(jù)在多用戶并

36、發(fā)操作時的一致性、正確性。以保持數(shù)據(jù)庫中數(shù)據(jù)在多用戶并發(fā)操作時的一致性、正確性。數(shù)據(jù)庫原理與應(yīng)用教程8.3.1并發(fā)控制概述 前面,我們介紹到,事務(wù)是并發(fā)控制的基本單位,保前面,我們介紹到,事務(wù)是并發(fā)控制的基本單位,保證事務(wù)證事務(wù)ACID特性是事務(wù)處理的重要任務(wù),而事務(wù)特性是事務(wù)處理的重要任務(wù),而事務(wù)ACID特性特性可能受到破壞的原因之一是多個事務(wù)對數(shù)據(jù)庫的并發(fā)操作造可能受到破壞的原因之一是多個事務(wù)對數(shù)據(jù)庫的并發(fā)操作造成的。為了保證數(shù)據(jù)庫的一致性,成的。為了保證數(shù)據(jù)庫的一致性,DBMS必須對并發(fā)操作進必須對并發(fā)操作進行調(diào)度。這就是數(shù)據(jù)庫管理系統(tǒng)中并發(fā)控制的責(zé)任。行調(diào)度。這就是數(shù)據(jù)庫管理系統(tǒng)中并發(fā)

37、控制的責(zé)任。 下面先來看個例子,說明并發(fā)操作帶來的數(shù)據(jù)的不一致下面先來看個例子,說明并發(fā)操作帶來的數(shù)據(jù)的不一致性問題。性問題。數(shù)據(jù)庫原理與應(yīng)用教程 例例8.1 并發(fā)售票操作。并發(fā)售票操作。 甲售票點(甲事務(wù))讀出某一客運班線的車票余額甲售票點(甲事務(wù))讀出某一客運班線的車票余額R,設(shè),設(shè)R=30。 乙售票點(乙事務(wù))讀出同一客運班線的車票余額乙售票點(乙事務(wù))讀出同一客運班線的車票余額R,也,也為為R=30。 甲售票點賣出一張車票,修改余額甲售票點賣出一張車票,修改余額R=R-1=29,把,把R=29寫寫回數(shù)據(jù)庫。回數(shù)據(jù)庫。 乙售票點賣出一張車票,修改余額乙售票點賣出一張車票,修改余額R=R-

38、1=29,把,把R=29寫寫回數(shù)據(jù)庫?;財?shù)據(jù)庫。 結(jié)果兩個事務(wù)共售出結(jié)果兩個事務(wù)共售出2張票,但是數(shù)據(jù)庫中的車票只減張票,但是數(shù)據(jù)庫中的車票只減少少1張。得到這種錯誤情況是由數(shù)據(jù)庫的并發(fā)操作所引起的,張。得到這種錯誤情況是由數(shù)據(jù)庫的并發(fā)操作所引起的,數(shù)據(jù)庫的并發(fā)操作導(dǎo)致數(shù)據(jù)庫不一致性有以下數(shù)據(jù)庫的并發(fā)操作導(dǎo)致數(shù)據(jù)庫不一致性有以下3種情況。種情況。數(shù)據(jù)庫原理與應(yīng)用教程 1丟失修改丟失修改 當(dāng)兩個或多個事務(wù)選擇同一數(shù)據(jù),并且基于最初選定的當(dāng)兩個或多個事務(wù)選擇同一數(shù)據(jù),并且基于最初選定的值更新該數(shù)據(jù)時,會發(fā)生丟失修改問題。每個事務(wù)都不知道值更新該數(shù)據(jù)時,會發(fā)生丟失修改問題。每個事務(wù)都不知道其它事務(wù)的

39、存在。最后的更新將重寫由其它事務(wù)所做的更新,其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。上面預(yù)定車票的例子就屬于這種并發(fā)問這將導(dǎo)致數(shù)據(jù)丟失。上面預(yù)定車票的例子就屬于這種并發(fā)問題。事務(wù)題。事務(wù)1與事務(wù)與事務(wù)2先后讀入同一數(shù)據(jù)先后讀入同一數(shù)據(jù)R=30,事務(wù),事務(wù)1執(zhí)行執(zhí)行R-1,并將結(jié)果并將結(jié)果A=29寫回,事務(wù)寫回,事務(wù)2執(zhí)行執(zhí)行R-1,并將結(jié)果,并將結(jié)果R=29寫回。寫回。事務(wù)事務(wù)2提交的結(jié)果覆蓋了事務(wù)提交的結(jié)果覆蓋了事務(wù)1對數(shù)據(jù)庫的修改,從而使事務(wù)對數(shù)據(jù)庫的修改,從而使事務(wù)1對數(shù)據(jù)庫的修改丟失了,具體見表對數(shù)據(jù)庫的修改丟失了,具體見表8.1所示。所示。數(shù)據(jù)庫原理與

40、應(yīng)用教程表表8.18.1丟失修改問題丟失修改問題時間事務(wù)1R的值事務(wù)2T030T1FIND RT2FIND RT3R=R-1T4R=R-1T5UPDATE RT629UPDATE RT729數(shù)據(jù)庫原理與應(yīng)用教程 2污讀污讀 一個事務(wù)讀取了另一個未提交的并行事務(wù)寫的數(shù)據(jù)。一個事務(wù)讀取了另一個未提交的并行事務(wù)寫的數(shù)據(jù)。當(dāng)?shù)诙€事務(wù)選擇其它事務(wù)正在更新的時候,會發(fā)生未確認當(dāng)?shù)诙€事務(wù)選擇其它事務(wù)正在更新的時候,會發(fā)生未確認的相關(guān)性問題。第二個事務(wù)正在讀取的數(shù)據(jù)還沒有確認并且的相關(guān)性問題。第二個事務(wù)正在讀取的數(shù)據(jù)還沒有確認并且可能由更新此行的事務(wù)所更改。換句話說,當(dāng)事務(wù)可能由更新此行的事務(wù)所更改。換句

41、話說,當(dāng)事務(wù)1修改某修改某一數(shù)據(jù),并將其寫回磁盤,事務(wù)一數(shù)據(jù),并將其寫回磁盤,事務(wù)2讀取同一數(shù)據(jù)后,事務(wù)讀取同一數(shù)據(jù)后,事務(wù)1由由于某種原因被撤銷,這時事務(wù)于某種原因被撤銷,這時事務(wù)1已修改過的數(shù)據(jù)恢復(fù)原值,已修改過的數(shù)據(jù)恢復(fù)原值,事務(wù)事務(wù)2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,是不正確的讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,是不正確的數(shù)據(jù),稱為污讀,具體見表數(shù)據(jù),稱為污讀,具體見表8.2所示。所示。數(shù)據(jù)庫原理與應(yīng)用教程表表8.28.2污讀問題污讀問題時間事務(wù)1R的值事務(wù)2T030T1FIND RT2R=R-1T3UPDATE RT429FIND RT5ROLLBACKT630數(shù)據(jù)庫原理與應(yīng)用教程

42、 3不可重復(fù)讀不可重復(fù)讀 一個事務(wù)重新讀取前面讀取過的數(shù)據(jù),發(fā)現(xiàn)該數(shù)據(jù)已經(jīng)一個事務(wù)重新讀取前面讀取過的數(shù)據(jù),發(fā)現(xiàn)該數(shù)據(jù)已經(jīng)被另一個已提交的事務(wù)修改過。即事務(wù)被另一個已提交的事務(wù)修改過。即事務(wù)1讀取某一數(shù)據(jù)后,讀取某一數(shù)據(jù)后,事務(wù)事務(wù)2對其做了修改,當(dāng)事務(wù)對其做了修改,當(dāng)事務(wù)1再次讀數(shù)據(jù)時,得到的與第一再次讀數(shù)據(jù)時,得到的與第一次不同的值,具體見表次不同的值,具體見表8.3所示。所示。數(shù)據(jù)庫原理與應(yīng)用教程表8.3不可重復(fù)讀問題時間事務(wù)1R的值事務(wù)2T030T1FIND R30T2FIND RT3R=R-1T429UPDATE RT5FIND R29數(shù)據(jù)庫原理與應(yīng)用教程 產(chǎn)生上述產(chǎn)生上述3類數(shù)據(jù)不

43、一致的主要原因就是并發(fā)操作破壞類數(shù)據(jù)不一致的主要原因就是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要求了事務(wù)的隔離性。并發(fā)控制就是要求DBMS提供并發(fā)控制功提供并發(fā)控制功能以正確的方式高度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干能以正確的方式高度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫的完整性。擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫的完整性。數(shù)據(jù)庫原理與應(yīng)用教程8.3.2封鎖及其解決問題的辦法 封鎖是事務(wù)并發(fā)控制的一個非常重要的技術(shù)。所謂封鎖就封鎖是事務(wù)并發(fā)控制的一個非常重要的技術(shù)。所謂封鎖就是事務(wù)是事務(wù)T在對某個數(shù)據(jù)對象操作之前,先向系統(tǒng)發(fā)出請求,對在對某個數(shù)據(jù)對象操作之前,先向

44、系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)其加鎖。加鎖后事務(wù)T就對數(shù)據(jù)庫對象有了一定的控制,在事就對數(shù)據(jù)庫對象有了一定的控制,在事務(wù)務(wù)T釋放它的鎖之前,其他事務(wù)不能更新此數(shù)據(jù)對象。釋放它的鎖之前,其他事務(wù)不能更新此數(shù)據(jù)對象。 1.封鎖類型封鎖類型 DBMS通常提供了多種數(shù)據(jù)類型的封鎖。一個事務(wù)對某個通常提供了多種數(shù)據(jù)類型的封鎖。一個事務(wù)對某個數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制是由封鎖類型決定的。數(shù)據(jù)對象加鎖后究竟擁有什么樣的控制是由封鎖類型決定的。基本的封鎖類型有兩種:基本的封鎖類型有兩種:排他鎖排他鎖(Exclusive lock,簡記為,簡記為X鎖鎖)和)和共享鎖共享鎖(Share lock簡記為

45、簡記為S鎖鎖) 排他鎖又稱為寫鎖。若事務(wù)排他鎖又稱為寫鎖。若事務(wù)T對數(shù)據(jù)對象對數(shù)據(jù)對象R加上加上X鎖,則只鎖,則只允許允許T讀取和修改讀取和修改R,其他任何事務(wù)都不能再對,其他任何事務(wù)都不能再對R加任何類型的加任何類型的鎖,直到鎖,直到T釋放釋放R上的鎖。這就保證了其他事務(wù)在上的鎖。這就保證了其他事務(wù)在T釋放釋放R上的上的鎖之前不能再讀取和修改鎖之前不能再讀取和修改R。 數(shù)據(jù)庫原理與應(yīng)用教程 共享鎖又稱為讀鎖。若事務(wù)共享鎖又稱為讀鎖。若事務(wù)T對數(shù)據(jù)對象對數(shù)據(jù)對象R加上加上S鎖,則鎖,則其他事務(wù)只能再對其他事務(wù)只能再對R加加S鎖,而不能加鎖,而不能加X鎖,直到鎖,直到T釋放釋放R上上的鎖。這就保

46、證了其他事務(wù)可以讀的鎖。這就保證了其他事務(wù)可以讀R,但在,但在T釋放釋放R上的上的S鎖鎖之前不能對之前不能對R做任何修改。做任何修改。 2.封鎖協(xié)議封鎖協(xié)議 封鎖的目的是為了保證能夠正確地調(diào)度并發(fā)操作。為封鎖的目的是為了保證能夠正確地調(diào)度并發(fā)操作。為此,在運用此,在運用X鎖和鎖和S鎖這兩種基本封鎖,對一定粒度的數(shù)據(jù)鎖這兩種基本封鎖,對一定粒度的數(shù)據(jù)對象加鎖時,還需要約定一些規(guī)則,例如,應(yīng)何時申請對象加鎖時,還需要約定一些規(guī)則,例如,應(yīng)何時申請X鎖鎖或或S鎖、持鎖時間、何時釋放等。我們稱這些規(guī)則為封鎖協(xié)鎖、持鎖時間、何時釋放等。我們稱這些規(guī)則為封鎖協(xié)議(議(locking protocol)。對

47、封鎖方式規(guī)定不同的規(guī)則,就)。對封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議,它們分別在不同的程度上為并形成了各種不同的封鎖協(xié)議,它們分別在不同的程度上為并發(fā)操作的正確調(diào)度提供一定的保證。本節(jié)介紹保證數(shù)據(jù)一致發(fā)操作的正確調(diào)度提供一定的保證。本節(jié)介紹保證數(shù)據(jù)一致性的三級封鎖協(xié)議。性的三級封鎖協(xié)議。 數(shù)據(jù)庫原理與應(yīng)用教程 對并發(fā)操作的不正確調(diào)度可能會帶來三種數(shù)據(jù)不一致性:對并發(fā)操作的不正確調(diào)度可能會帶來三種數(shù)據(jù)不一致性:丟失更新、污讀、不可重復(fù)讀。三級封鎖協(xié)議分別在不同程丟失更新、污讀、不可重復(fù)讀。三級封鎖協(xié)議分別在不同程度上解決了這一問題。度上解決了這一問題。 一級封鎖協(xié)議一級封鎖協(xié)議 一

48、級封鎖協(xié)議的內(nèi)容是:事務(wù)一級封鎖協(xié)議的內(nèi)容是:事務(wù)T在修改數(shù)據(jù)在修改數(shù)據(jù)R之前必須先之前必須先對其加對其加X鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束()和非正常結(jié)束(ROLLBACK)。)。 一級封鎖協(xié)議可以防止丟失或覆蓋更新,并保證事務(wù)一級封鎖協(xié)議可以防止丟失或覆蓋更新,并保證事務(wù)T是是可以恢復(fù)的。例如,表可以恢復(fù)的。例如,表8.4使用一級封鎖協(xié)議解決了定車票使用一級封鎖協(xié)議解決了定車票例子的丟失修改問題。例子的丟失修改問題。數(shù)據(jù)庫原理與應(yīng)用教程時間事務(wù)1R的值事務(wù)2T0XLOCK R30T1FIND RT2XLOC

49、K RT3R=R-1WAITT4UPDATE RWAITT5UNLOCK R29WAITT6XLOCK RT7R=R-1T8UPDATE RT928UNLOCK R表8.4無丟失修改問題數(shù)據(jù)庫原理與應(yīng)用教程 上圖中,事務(wù)上圖中,事務(wù)1在讀在讀R進行修改之前先對進行修改之前先對R加加X鎖,當(dāng)事鎖,當(dāng)事務(wù)務(wù)2再請求對再請求對R加加X鎖時被拒絕,只能等事務(wù)鎖時被拒絕,只能等事務(wù)1釋放釋放R上的鎖。上的鎖。事務(wù)事務(wù)1修改值修改值R=29寫回磁盤,釋放寫回磁盤,釋放R上的上的X鎖后,事務(wù)鎖后,事務(wù)2獲得獲得對對R的的X鎖,這時他讀到的鎖,這時他讀到的R已經(jīng)是事務(wù)已經(jīng)是事務(wù)1更新過的值更新過的值29,再,

50、再按此新的按此新的R值進行運算,并將結(jié)果值值進行運算,并將結(jié)果值A(chǔ)=28回到磁盤。這樣就回到磁盤。這樣就避免了丟失事務(wù)避免了丟失事務(wù)1的更新。的更新。 在一級封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對其進行修改,在一級封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對其進行修改,是不需要加鎖的,所以它不能保證可重復(fù)讀和臟讀。是不需要加鎖的,所以它不能保證可重復(fù)讀和臟讀。 二級封鎖協(xié)議二級封鎖協(xié)議 二級封鎖協(xié)議的內(nèi)容是:在一級封鎖協(xié)議的基礎(chǔ)上,另二級封鎖協(xié)議的內(nèi)容是:在一級封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)外加上事務(wù)T在讀取數(shù)據(jù)在讀取數(shù)據(jù)R之前必須先對其加之前必須先對其加S鎖,讀完后即鎖,讀完后即可釋放可釋放S鎖。鎖。 二級封

51、鎖協(xié)議除防止了丟失問題,還可進一步防止污讀。二級封鎖協(xié)議除防止了丟失問題,還可進一步防止污讀。例如,表例如,表8.5使用二級封鎖協(xié)議解決了污讀的問題。使用二級封鎖協(xié)議解決了污讀的問題。數(shù)據(jù)庫原理與應(yīng)用教程表8.5無污讀問題時間事務(wù)1R的值事務(wù)2T0XLOCK R30T1FIND RT2T3R=R-1T4UPDATE RT529SLOCK RT6ROLLBACKWAITT7UNLOCK R30SLOCK RT830FIND RT9UNLOCK S數(shù)據(jù)庫原理與應(yīng)用教程 事務(wù)事務(wù)1在對在對R進行修改之前,先對進行修改之前,先對R加加X鎖,修改其值后鎖,修改其值后寫回磁盤。這時事務(wù)寫回磁盤。這時事務(wù)2

52、請求請求R加上加上S鎖,因事務(wù)鎖,因事務(wù)1已在已在R上加上加了了X鎖,事務(wù)鎖,事務(wù)2只能等待事務(wù)只能等待事務(wù)1釋放它。之后事務(wù)釋放它。之后事務(wù)1因某種原因某種原因被撤銷,因被撤銷,R恢復(fù)為原值恢復(fù)為原值30,并釋放,并釋放R上的上的X鎖。事務(wù)鎖。事務(wù)2獲得獲得R上的上的S鎖,讀鎖,讀R=30。這就避免了事務(wù)。這就避免了事務(wù)2污讀數(shù)據(jù)。污讀數(shù)據(jù)。 在二級封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放在二級封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所鎖,所以它不能保證可重復(fù)讀。以它不能保證可重復(fù)讀。 三級封鎖協(xié)議三級封鎖協(xié)議 三級封鎖協(xié)議的內(nèi)容是:三級封鎖協(xié)議的內(nèi)容是:1級封鎖協(xié)議加上事務(wù)級封鎖協(xié)議加上事務(wù)T在

53、讀在讀取數(shù)據(jù)之前必須先對其加取數(shù)據(jù)之前必須先對其加S鎖,直到事務(wù)結(jié)束才釋放。鎖,直到事務(wù)結(jié)束才釋放。 三級封鎖協(xié)議除防止丟失或覆蓋更新和不污讀數(shù)據(jù)外,三級封鎖協(xié)議除防止丟失或覆蓋更新和不污讀數(shù)據(jù)外,還進一步防止了不可重復(fù)讀例如表還進一步防止了不可重復(fù)讀例如表8.6所示,使用三級封鎖所示,使用三級封鎖協(xié)議解決了可重復(fù)讀。協(xié)議解決了可重復(fù)讀。 數(shù)據(jù)庫原理與應(yīng)用教程表8.6可重復(fù)讀問題時間事務(wù)1R的值事務(wù)2T030T1SLOCK R T2FIND R30T3XLOCK RT4FIND R30WAITT5COMMITWAITT6UNLOCK SWAITT7XLOCK RT830FINDT9R=R-1T

54、1029UPDATE RT11UNLOCK X數(shù)據(jù)庫原理與應(yīng)用教程 3.封鎖粒度封鎖粒度 X鎖和鎖和S鎖都是加在某一個數(shù)據(jù)對象上的。封鎖的對象鎖都是加在某一個數(shù)據(jù)對象上的。封鎖的對象可以是邏輯單元,也可以是物理單元。例如,在關(guān)系數(shù)據(jù)庫可以是邏輯單元,也可以是物理單元。例如,在關(guān)系數(shù)據(jù)庫中,封鎖對象可以是屬性值、屬性值集合、元組、關(guān)系、索中,封鎖對象可以是屬性值、屬性值集合、元組、關(guān)系、索引項、整個索引、整個數(shù)據(jù)庫等邏輯單元;也可以是頁(數(shù)引項、整個索引、整個數(shù)據(jù)庫等邏輯單元;也可以是頁(數(shù)據(jù)頁或索引頁)、塊等物理單元。封鎖對象可以很大,比如據(jù)頁或索引頁)、塊等物理單元。封鎖對象可以很大,比如對

55、整個數(shù)據(jù)庫加鎖,也可以很小,比如只對某個屬性值加鎖。對整個數(shù)據(jù)庫加鎖,也可以很小,比如只對某個屬性值加鎖。封鎖對象的大小稱為封鎖的粒度(封鎖對象的大小稱為封鎖的粒度(lock granularity)。)。 封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密切相關(guān)。封鎖的粒度越大,系統(tǒng)中能夠被封鎖的對象就越小,并發(fā)度封鎖的粒度越大,系統(tǒng)中能夠被封鎖的對象就越小,并發(fā)度也就越小,但同時系統(tǒng)開銷也越小也就越小,但同時系統(tǒng)開銷也越小;相反,封鎖的粒度越小,;相反,封鎖的粒度越小,并發(fā)度越高,但系統(tǒng)開銷也就越大。并發(fā)度越高,但系統(tǒng)開銷也就越大。數(shù)據(jù)庫原理與應(yīng)用教程

56、 因此,如果在一個系統(tǒng)中同時存在不同大小的封鎖單元因此,如果在一個系統(tǒng)中同時存在不同大小的封鎖單元供不同的事務(wù)選擇使用是比較理想的。而選擇封鎖粒度時必供不同的事務(wù)選擇使用是比較理想的。而選擇封鎖粒度時必須同時考慮封鎖機構(gòu)和并發(fā)度兩個因素,對系統(tǒng)開銷與并發(fā)須同時考慮封鎖機構(gòu)和并發(fā)度兩個因素,對系統(tǒng)開銷與并發(fā)度進行權(quán)衡,以求得最優(yōu)的效果。一般說來,需要處理大量度進行權(quán)衡,以求得最優(yōu)的效果。一般說來,需要處理大量元組的用戶事務(wù)可以以關(guān)系為封鎖單元;需要處理多個關(guān)系元組的用戶事務(wù)可以以關(guān)系為封鎖單元;需要處理多個關(guān)系的大量元組的用戶事務(wù)可以以數(shù)據(jù)庫為封鎖單位;而對于一的大量元組的用戶事務(wù)可以以數(shù)據(jù)庫為

57、封鎖單位;而對于一個處理少量元組的用戶事務(wù),可以以元組為封鎖單位以提高個處理少量元組的用戶事務(wù),可以以元組為封鎖單位以提高并發(fā)度。并發(fā)度。 4.死鎖和活鎖死鎖和活鎖 前面介紹的封鎖技術(shù)有效地解決了并行操作引起的數(shù)據(jù)前面介紹的封鎖技術(shù)有效地解決了并行操作引起的數(shù)據(jù)不一致性問題,但也產(chǎn)生新的問題,即可能產(chǎn)生活鎖和死鎖不一致性問題,但也產(chǎn)生新的問題,即可能產(chǎn)生活鎖和死鎖問題。問題。數(shù)據(jù)庫原理與應(yīng)用教程 (1)活鎖活鎖 如果事務(wù)如果事務(wù)T1在對數(shù)據(jù)在對數(shù)據(jù)R 封鎖后,事務(wù)封鎖后,事務(wù)T2又請求封鎖又請求封鎖R,于是于是T2等待。等待。T3也請求封鎖也請求封鎖R。當(dāng)。當(dāng)T1釋放了釋放了R上的封鎖后,上的

58、封鎖后,系統(tǒng)首先批準了系統(tǒng)首先批準了T3的請求,的請求,T2繼續(xù)等待。然后又有繼續(xù)等待。然后又有T4請求請求封鎖封鎖R,T3釋放了釋放了R上的上的 封鎖后,系統(tǒng)又批準了封鎖后,系統(tǒng)又批準了T4的請求,的請求,以此類推,以此類推,T2可能永遠處于等待狀態(tài),從而發(fā)生了活鎖,如可能永遠處于等待狀態(tài),從而發(fā)生了活鎖,如表表8.7所示。所示。數(shù)據(jù)庫原理與應(yīng)用教程表8.7 活鎖時間事務(wù)T1事務(wù)T2事務(wù)T3事務(wù)T4T0LOCK R-T1LOCK R-T2WAITLOCK R-T3UNLOCKWAITWAITLOCK RT4WAITLOCK RWAITT5WAIT-WAITT6WAITUNLOCKWAITT7

59、WAIT-LOCK RT8WAIT-數(shù)據(jù)庫原理與應(yīng)用教程 避免活鎖的簡單方法是采用先來先服務(wù)的策略。當(dāng)多個避免活鎖的簡單方法是采用先來先服務(wù)的策略。當(dāng)多個事務(wù)請求封鎖同一數(shù)據(jù)對象時,封鎖子系統(tǒng)按請求封鎖的先事務(wù)請求封鎖同一數(shù)據(jù)對象時,封鎖子系統(tǒng)按請求封鎖的先后次序?qū)κ聞?wù)排隊,數(shù)據(jù)對象上的鎖一旦釋放就批準申請隊后次序?qū)κ聞?wù)排隊,數(shù)據(jù)對象上的鎖一旦釋放就批準申請隊列中第列中第1個事務(wù)獲得鎖。個事務(wù)獲得鎖。 (2)死鎖死鎖 如果事務(wù)如果事務(wù)T1在對數(shù)據(jù)在對數(shù)據(jù)R1封鎖后,又要求對數(shù)據(jù)封鎖后,又要求對數(shù)據(jù)R2封鎖,封鎖,而事務(wù)而事務(wù)T2已獲得對數(shù)據(jù)已獲得對數(shù)據(jù)R2的封鎖,又要求對數(shù)據(jù)的封鎖,又要求對數(shù)

60、據(jù)R1封鎖,封鎖,這樣就出現(xiàn)了這樣就出現(xiàn)了T1在等待在等待T2,而,而T2又在等待又在等待T1的局面,的局面,T1和和T2兩個事務(wù)永遠不能結(jié)束,形成死鎖。如果表兩個事務(wù)永遠不能結(jié)束,形成死鎖。如果表8.8所示。所示。數(shù)據(jù)庫原理與應(yīng)用教程表8.8死鎖時間事務(wù)T1事務(wù)T2T0LOCK R1-T1-LOCK R2T2-T3LOCK R2-T4WAIT-T5WAITLOCK R1T6WAITWAITT7WAITWAIT數(shù)據(jù)庫原理與應(yīng)用教程 (3)死鎖的預(yù)防死鎖的預(yù)防 在數(shù)據(jù)庫中,產(chǎn)生死鎖的原因是兩個或多個事務(wù)都已經(jīng)封在數(shù)據(jù)庫中,產(chǎn)生死鎖的原因是兩個或多個事務(wù)都已經(jīng)封鎖了一些數(shù)據(jù)對象,然后又都請求對已為

溫馨提示

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

評論

0/150

提交評論