(數(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ù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

9、一個帳戶甲轉給另一個帳轉帳事務,這個事務把一筆金額從一個帳戶甲轉給另一個帳戶乙。戶乙。 BEGIN TRANSACTION READ BALANCE;(帳戶甲帳戶甲) BALANCE=BALANCE-AMOUNT;(AMOUNT為轉帳金額為轉帳金額) IF(BALANCE0)THEN DISPLAY“BALANCE余額不足余額不足” ROLLBACK ELSE BALANCE1=BALANCE1+AMOUNT (帳戶乙?guī)粢? DISPLAY“轉賬成功!轉賬成功!” COMMIT END數(shù)據(jù)庫原理與應用教程8.2 數(shù)據(jù)庫的恢復 盡管數(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ù)庫恢復一旦數(shù)據(jù)庫損壞,將會帶來巨大的損失,所以數(shù)據(jù)庫恢復越來越重要,因此,數(shù)據(jù)庫管理系統(tǒng)必須能夠把數(shù)據(jù)庫從越來越重要,因此,數(shù)據(jù)庫管理系統(tǒng)必須能夠把數(shù)據(jù)庫從錯誤狀態(tài)恢復到某一已知的正確狀態(tài),這就是數(shù)據(jù)庫的恢錯誤狀態(tài)恢復到某一已

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

34、容裝入最新的日志文件后備副本,根據(jù)日志文件中的內容重做已完成的事務。首先掃描日志文件,找出故障發(fā)生時已重做已完成的事務。首先掃描日志文件,找出故障發(fā)生時已提交的事務,將其記入重做隊列。然后正向掃描日志文件,提交的事務,將其記入重做隊列。然后正向掃描日志文件,對每個重做隊列中的所有事務進行重做處理,即將日志記錄對每個重做隊列中的所有事務進行重做處理,即將日志記錄中中“更新后的值更新后的值”寫入數(shù)據(jù)庫。這樣就可以將數(shù)據(jù)庫恢復至寫入數(shù)據(jù)庫。這樣就可以將數(shù)據(jù)庫恢復至故障前某一時刻的一致狀態(tài)。故障前某一時刻的一致狀態(tài)。數(shù)據(jù)庫原理與應用教程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)中,在同一時刻并行運行的事務可達庫系統(tǒng)。在這樣的系統(tǒng)中,在同一時刻并行運行的事務可達數(shù)百個。如果對并發(fā)操作不加控制的話,可能會產生操作沖數(shù)百個。如果對并發(fā)操作不加控制的話,可能會產生操作沖突,破壞數(shù)據(jù)的完整性。即發(fā)生所謂的丟失修改、污讀、不突,破壞數(shù)據(jù)的完整性。即發(fā)生所謂的丟失修改、污讀、不可重復讀等問題。數(shù)據(jù)庫的并發(fā)控制機制能解決這類問題,可重復讀等問題。數(shù)據(jù)庫的并發(fā)控制機制能解決這類問題,以保持數(shù)據(jù)庫中數(shù)據(jù)在多用戶并

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

57、封鎖單位;而對于一個處理少量元組的用戶事務,可以以元組為封鎖單位以提高個處理少量元組的用戶事務,可以以元組為封鎖單位以提高并發(fā)度。并發(fā)度。 4.死鎖和活鎖死鎖和活鎖 前面介紹的封鎖技術有效地解決了并行操作引起的數(shù)據(jù)前面介紹的封鎖技術有效地解決了并行操作引起的數(shù)據(jù)不一致性問題,但也產生新的問題,即可能產生活鎖和死鎖不一致性問題,但也產生新的問題,即可能產生活鎖和死鎖問題。問題。數(shù)據(jù)庫原理與應用教程 (1)活鎖活鎖 如果事務如果事務T1在對數(shù)據(jù)在對數(shù)據(jù)R 封鎖后,事務封鎖后,事務T2又請求封鎖又請求封鎖R,于是于是T2等待。等待。T3也請求封鎖也請求封鎖R。當。當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ù)庫原理與應用教程表8.7 活鎖時間事務T1事務T2事務T3事務T4T0LOCK R-T1LOCK R-T2WAITLOCK R-T3UNLOCKWAITWAITLOCK RT4WAITLOCK RWAITT5WAIT-WAITT6WAITUNLOCKWAITT7

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

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

溫馨提示

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

最新文檔