數據庫系統概論習題集 第八章 數據庫並發控制


第八章 數據庫並發控制 

  一、選擇題

  1. 為了防止一個用戶的工作不適當地影響另一個用戶,應該采取( ) 。

  A. 完整性控制 B. 訪問控制

  C. 安全性控制 D. 並發控制

  2. 解決並發操作帶來的數據不一致問題普遍采用( )技術。

  A. 封鎖 B. 存取控制

  C. 恢復 D. 協商

  3. 下列不屬於並發操作帶來的問題是( )。

  A. 丟失修改 B. 不可重復讀

  C. 死鎖 D. 臟讀

  4. DBMS普遍采用( )方法來保證調度的正確性 。

  A. 索引 B. 授權

  C. 封鎖 D. 日志

  5.事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放,這是( ) 。

  A. 一級封鎖協議 B. 二級封鎖協議

  C. 三級封鎖協議 D. 零級封鎖協議

  6. 如果事務T獲得了數據項Q上的排他鎖,則T對Q( ) 。

  A. 只能讀不能寫 B. 只能寫不能讀

  C. 既可讀又可寫 D. 不能讀也不能寫

  7.設事務T1和T2,對數據庫中地數據A進行操作,可能有如下幾種情況,請問哪一種不會發生沖突操作( ) 。

  A. T1正在寫A,T2要讀A

  B. T1正在寫A,T2也要寫A

  C. T1正在讀A,T2要寫A

  D. T1正在讀A,T2也要讀A

  8.如果有兩個事務,同時對數據庫中同一數據進行操作,不會引起沖突的操作是( ) 。

  A. 一個是DELETE,一個是SELECT

  B. 一個是SELECT,一個是DELETE

  C. 兩個都是UPDATE

  D. 兩個都是SELECT

  9. 在數據庫系統中,死鎖屬於( )。

  A. 系統故障 B. 事務故障

  C. 介質故障 D. 程序故障

  選擇題答案:

   (1) D (2) A (3) C (4) C (5) A

   (6) C (7) D (8) D (9) B

 二、簡答題

  1. 在數據庫中為什么要並發控制?

  答: 數據庫是共享資源,通常有許多個事務同時在運行。

  當多個事務並發地存取數據庫時就會產生同時讀取和/或修改同一數據的情況。若對並發操作不加控制就可能會存取和存儲不正確的數據,破壞數據庫的一致性。所以數據庫管理系統必須提供並發控制機制。

  2. 並發操作可能會產生哪幾類數據不一致?用什么方法能避免各種不一致的情況?

  答: 並發操作帶來的數據不一致性包括三類:丟失修改、不可重復讀和讀“臟”數據。

  (1)丟失修改(Lost Update)

  兩個事務T1和T2讀入同一數據並修改,T2提交的結果破壞了(覆蓋了)T1提交的結果,導致T1的修改被丟失。

  (2)不可重復讀(Non-Repeatable Read)

  不可重復讀是指事務T1讀取數據后,事務T2執行更新操作,使T1無法再現前一次讀取結果。

  (3)讀“臟”數據(Dirty Read)

  讀“臟”數據是指事務T1修改某一數據,並將其寫回磁盤,事務T2讀取同一數據后,T1由於某種原因被撤銷,這時T1已修改過的數據恢復原值,T2讀到的數據就與數據庫中的數據不一致,則T2讀到的數據就為“臟”數據,即不正確的數據。

  避免不一致性的方法和技術就是並發控制。最常用的並發控制技術是封鎖技術。

  也可以用其他技術,例如在分布式數據庫系統中可以采用時間戳方法來進行並發控制。

  3. 什么是封鎖?

  答: 封鎖就是事務T在對某個數據對象例如表、記錄等操作之前,先向系統發出請求,對其加鎖。加鎖后事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其他的事務不能更新此數據對象。

  封鎖是實現並發控制的一個非常重要的技術。

  4. 基本的封鎖類型有幾種?試述它們的含義。

  答: 基本的封鎖類型有兩種: 排它鎖(Exclusive Locks,簡稱X鎖) 和共享鎖(Share Locks,簡稱S鎖)。

  排它鎖又稱為寫鎖。若事務T對數據對象A加上X鎖,則只允許T讀取和修改A,其他任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖。這就保證了其他事務在T釋放A上的鎖之前不能再讀取和修改A。

  共享鎖又稱為讀鎖。若事務T對數據對象A加上S鎖,則事務T可以讀A但不能修改A,其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這就保證了其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改。

 5. 什么是封鎖協議?不同級別的封鎖協議的主要區別是什么?

  答: 在運用封鎖技術對數據加鎖時,要約定一些規則。例如,在運用X鎖和S鎖對數據對象加鎖時,要約定何時申請X鎖或S鎖、何時釋放封鎖等。這些約定或者規則稱為封鎖協議(Locking Protocol)。對封鎖方式約定不同的規則,就形成了各種不同的封鎖協議。不同級別的封鎖協議,例如《概論》中介紹的三級封鎖協議,三級協議的主要區別在於什么操作需要申請封鎖,何時申請封鎖以及何時釋放鎖(即持鎖時間的長短)。

   一級封鎖協議:事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。

   二級封鎖協議:一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,讀完后即可釋放S鎖。

   三級封鎖協議:一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。

 6. 不同封鎖協議與系統一致性級別的關系是什么?

  答: 不同的封鎖協議對應不同的一致性級別。

  一級封鎖協議可防止丟失修改,並保證事務T是可恢復的。在一級封鎖協議中,對讀數據是不加S鎖的,所以它不能保證可重復讀和不讀“臟”數據。

   二級封鎖協議除防止了丟失修改,還可進一步防止讀“臟”數據。在二級封鎖協議中,由於讀完數據后立即釋放S鎖,所以它不能保證可重復讀。

   在三級封鎖協議中,無論是讀數據還是寫數據都加長鎖,即都要到事務結束時才釋放封鎖。所以三級封鎖協議除防止了丟失修改和不讀“臟”數據外,還進一步防止了不可重復讀。

    7. 試述活鎖的產生原因和解決方法。

  答:

  活鎖產生的原因:當一系列封鎖不能按照其先后順序執行時,就可能導致一些事務無限期等待某個封鎖,從而導致活鎖。

  避免活鎖的簡單方法是采用先來先服務的策略。當多個事務請求封鎖同一數據對象時,封鎖子系統按請求封鎖的先后次序對事務排隊,數據對象上的鎖一旦釋放就批准申請隊列中第一個事務獲得鎖。

   8. 請給出預防死鎖的若干方法。

  答:

  在數據庫中,產生死鎖的原因是兩個或多個事務都已封鎖了一些數據對象,然后又都請求已被其他事務封鎖的數據加鎖,從而出現死等待。

  防止死鎖的發生其實就是要破壞產生死鎖的條件。預防死鎖通常有兩種方法:

  (1)一次封鎖法

  要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行。

  (2)順序封鎖法

  預先對數據對象規定一個封鎖順序,所有事務都按這個順序實行封鎖。

  不過,預防死鎖的策略不大適合數據庫系統的特點。

    9. 請給出檢測死鎖發生的一種方法,當發生死鎖后如何解除死鎖?

  答:

  數據庫系統一般采用允許死鎖發生,DBMS檢測到死鎖后加以解除的方法。

  DBMS中診斷死鎖的方法與操作系統類似,一般使用超時法或事務等待圖法。

  超時法是:如果一個事務的等待時間超過了規定的時限,就認為發生了死鎖。超時法實現簡單,但有可能誤判死鎖,事務因其他原因長時間等待超過時限時,系統會誤認為發生了死鎖。若時限設置得太長,又不能及時發現死鎖發生。

  DBMS並發控制子系統檢測到死鎖后,就要設法解除。通常采用的方法是選擇一個處理死鎖代價最小的事務,將其撤消,釋放此事務持有的所有鎖,使其他事務得以繼續運行下去。當然,對撤銷的事務所執行的數據修改操作必須加以恢復。

    10. 什么樣的並發調度是正確的調度?

  答:

  可串行化(Serializable)的調度是正確的調度。

  可串行化的調度的定義:多個事務的並發執行是正確的,當且僅當其結果與按某一次序串行地執行它們時的結果相同,我們稱這種調度策略為可串行化的調度。

    11. 試述兩段鎖協議的概念。

  答:

  兩段鎖協議是指所有事務必須分兩個階段對數據項加鎖和解鎖。

  · 在對任何數據進行讀、寫操作之前,首先要申請並獲得對該數據的封鎖;

  · 在釋放一個封鎖之后,事務不再申請和獲得任何其他封鎖。

  “兩段”的含義是,事務分為兩個階段:

  第一階段是獲得封鎖,也稱為擴展階段。在這階段,事務可以申請獲得任何數據項上的任何類型的鎖,但是不能釋放任何鎖。

  第二階段是釋放封鎖,也稱為收縮階段。在這階段,事務釋放已經獲得的鎖,但是不能再申請任何鎖。

    12. 為什么要引進意向鎖? 意向鎖的含義是什么?

  答:

  引進意向鎖是為了提高封鎖子系統的效率。該封鎖子系統支持多種封鎖粒度。

  原因是:在多粒度封鎖方法中一個數據對象可能以兩種方式加鎖—顯式封鎖和隱式封鎖。因此系統在對某一數據對象加鎖時不僅要檢查該數據對象上有無(顯式和隱式)封鎖與之沖突;還要檢查其所有上級結點和所有下級結點,看申請的封鎖是否與這些結點上的(顯式和隱式)封鎖沖突;顯然,這樣的檢查方法效率很低。為此引進了意向鎖。

  意向鎖的含義是:對任一結點加鎖時,必須先對它的上層結點加意向鎖。

   例如事務T要對某個元組加X鎖,則首先要對關系和數據庫加IX鎖。換言之,對關系和數據庫加IX鎖,表示它的后裔結點—某個元組擬(意向)加X鎖。

  引進意向鎖后,系統對某一數據對象加鎖時不必逐個檢查與下一級結點的封鎖沖突了。例如,事務T要對關系R加X鎖時,系統只要檢查根結點數據庫和R本身是否已加了不相容的鎖(如發現已經加了IX,則與X沖突),而不再需要搜索和檢查R中的每一個元組是否加了X鎖或S鎖。

   13. 試述常用的意向鎖:IS鎖,IX鎖,SIX鎖,給出這些鎖的相容矩陣。

  答:

  IS鎖

  如果對一個數據對象加IS鎖,表示它的后裔結點擬(意向)加S鎖。例如,要對某個元組加S鎖,則要首先對關系和數據庫加IS鎖

  IX鎖

  如果對一個數據對象加IX鎖,表示它的后裔結點擬(意向)加X鎖。例如,要對某個元組加X鎖,則要首先對關系和數據庫加IX鎖。

  SIX鎖

  如果對一個數據對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX = S + IX。

  相容矩陣(略) 

  14. 理解並解釋下列術語的含義:封鎖,活鎖,死鎖,排它鎖,共享鎖,並發事務的調度,可串行化的調度,兩段鎖協議。

  答:(略,已經在上面有關習題中解答)

  *25. 試述你了解的某一個實際的DBMS產品的並發控制機制。

  答:(略,參見《概論》第8節,簡單介紹了有關Oracle的並發控制機制。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM