第7章事務處理_第1頁
第7章事務處理_第2頁
第7章事務處理_第3頁
第7章事務處理_第4頁
第7章事務處理_第5頁
已閱讀5頁,還剩44頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

7.1事務的基本概念

7.2數據庫恢復概述

第七章事務管理7.3恢復的實現技術7.4故障恢復7.5SQL對事務管理的支持7.6事務并發控制本章小結第七章事務管理7.1事務的基本概念1、事務(Transaction)是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。事務和程序關系:(1)程序是靜止的,事務是動態的。事務是程序的執行而不是程序本身。(2)一個程序可分為多個獨立部分同時執行,每一執行則是一個不同的事務,即一個程序中可包含多個事務事務生成:用戶顯式地定義事務由DBMS按缺省自動劃分事務7.1事務的基本概念在SQL語言中,定義事務的語句有三條:BEGINTRANSACTION事務開始COMMIT-----事務提交ROLLBACK-----事務回滾事務的分類:(1)只讀型

SETTRANSACTIONREADONLY

(2)讀/寫型

SETTRANSACTIONREADWRITE

7.1事務的基本概念2、事務的狀態執行事務事務無法繼續正常執行事務回滾,數據庫恢復到事務開始前狀態最后一條語句被執行后成功完成,永久寫入數據庫活動狀態

失敗

狀態

中止

狀態

提交

狀態

局部提交

狀態

事務定義語句與狀態的關系

ROLLBACKCOMMITBEGINTRANSACTION7.1事務的基本概念3、事務的特性(ACID)原子性一致性隔離性持續性ACID特性遭到破壞的因素有:(1)多個事務并發運行時,不同事務的操作交叉執行;(2)事務在運行過程中被強行停止。第七章事務管理4、更新事務的執行與恢復

更新事務的執行要求:更新事務在活動狀態下對數據庫的任何修改都不能直接在磁盤中進行,而只能在內存緩沖區中進行。更新事務的恢復:(1)從活動狀態轉入失敗狀態的恢復(2)從局部提交狀態轉入失敗狀態的恢復。7.2數據庫恢復概述數據庫的恢復:指DBMS必須具有把數據庫從錯誤狀態恢復到某一已知的正確狀態(亦稱為一致狀態或完整狀態)的功能。

7.3恢復的實現技術

數據庫恢復原理:冗余

建立冗余數據常用技術:數據轉儲登記日志文件一、數據轉儲1.數據轉儲的概念

轉儲即DBA定期地將整個數據庫復制到磁帶或另一個磁盤上保存起來的過程。這些備用的數據文本稱為后備副本或后援副本。正常運行TaTbTf

故障發生點得到副本

轉儲運行事務恢復

裝副本重新運行事務

數據轉儲與恢復[例]

7.3恢復的實現技術2、靜態轉儲和動態轉儲(1)靜態轉儲:是在系統中無運行事務時進行的轉儲操作。靜態轉儲得到的一定是一個數據一致性的副本。(2)動態轉儲:是指轉儲期間允許對數據庫進行存取或修改。即轉儲和用戶事務可以并發執行。3、海量轉儲和增量轉儲

(1)海量轉儲:每次轉儲全部數據庫。

(2)增量轉儲:每次只轉儲上一次轉儲后更新過的數據。

7.3恢復的實現技術二、登記(建立)日志文件1、日志文件的格式和內容日志文件—用來記錄事務對數據庫的更新操作的文件。日志文件主要有兩種格式:以記錄為單位以數據塊為單位(1)以記錄為單位的日志文件內容:事務開始、結束標記操作對象(表、屬性等)更新前、后值7.3恢復的實現技術例:日志文件

事務編號表元組標識屬性更新前更新后201**事務開始201庫存k102在庫數量410310201應收帳801-2341233余額10006000201**事務提交(2)以數據塊為單位的日志文件內容:事務標識更新前、后的數據塊7.3恢復的實現技術

2、日志文件的作用進行事務故障、系統故障恢復,并協助后備副本進行介質故障恢復。3、登記日志文件應遵循兩條原則:(1)登記的次序嚴格按并發事務執行的時間次序。(2)必須先寫日志文件,后寫數據庫。正常運行TaTbTf

故障發生點

靜態轉儲運行事務利用日志文件恢復事務

登記日志文件登記日志文件恢復

裝副本繼續運行7.4故障恢復

一、事務故障及恢復事務故障:是指事務運行過程中由于種種原因使事務未運行至正常終止點而夭折的情況。如:運算溢出死鎖而被選中撤銷該事務違反了完整性規則等事務故障的恢復:(1)反向掃描文件日志,查找該事務的更新操作。(2)對該事務的更新操作執行逆操作。(3)重復(1)、(2)直到遇此事務的開始標記。7.4故障恢復二、系統故障及恢復(軟故障)系統故障:是指造成系統停止運轉的任何事件,使得系統要重新啟動。例如,特定類型的硬件錯誤(CPU故障)、操作系統故障、DBMS代碼錯誤、突然停電等。系統故障的恢復:恢復操作:要撤銷故障發生時未完成的事務重做(REDO)已完成的事務系統故障的恢復是由系統在重新啟動時自動完成的,不需要用戶干預。7.4故障恢復三、介質故障(硬故障)介質故障:是指外存設備故障。如:磁盤損壞磁頭碰撞盤面瞬時強磁場干擾介質故障的恢復:

(1)裝入最新的數據庫后備副本,使數據庫恢復到最近一次轉儲時的一致性狀態。

(2)裝入相應的日志文件副本,重做已完成的事務。介質故障的恢復需要DBA介入。但DBA只需要重裝最近轉儲的數據庫副本和有關的各日志文件副本,然后執行系統提供的恢復命令即可,具體的恢復操作仍由DBMS完成。

7.4故障恢復四、具有檢查點的恢復技術

利用日志文件進行數據庫恢復時存在的問題:(1)搜索整個日志文件將耗費大量的時間。(2)很多需要REDO處理的事務實際上已經將它們的更新操作結果寫到數據庫中了,然而恢復子系統又重新執行了這些操作,浪費了大量時間。解決:使用檢查點方法。當事務T在一個檢查點之前提交,T對數據庫所做的修改一定都已經寫入數據庫,這樣,在進行恢復處理時,就不必對事務T執行REDO操作,從而改善了恢復效率。

7.4故障恢復增加:①日志文件中的檢查點記錄②一個重新開始文件并讓恢復子系統在登錄日志文件期間動態地維護日志。檢查點記錄的內容包括:①建立檢查點時刻所有正在執行的事務清單(Ti)。②各事務最近一個日志記錄的地址(Di)。Ci的記錄地址Cj的記錄地址重新開始文件日志文件T1D1T2D2…日志文件檢查點記錄檢查點Ci的重新開始記錄7.4故障恢復動態維護日志文件的方法是周期性地執行:建立檢查點,保存數據庫狀態。具體步驟是:①將當前所有日志記錄寫入磁盤日志文件上;②在日志文件中寫入一個檢查點記錄;③將當前所有數據記錄寫入磁盤的數據庫中;④把檢查點記錄在日志文件中的地址寫入重新開始文件。恢復系統將根據事務的不同狀態采取不同的恢復策略:時間系統故障Ti檢查點TcT1T2T3T4T5在檢查點前開始,在其后且故障點前提交撤銷重做不重做7.4故障恢復系統使用檢查點方法進行恢復的步驟是:①從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄。②由該檢查點記錄得到檢查點建立時刻所有正在執行的事務清單ACTIVE-LIST。③從檢查點開始正向掃描日志文件如有新開始的事務Tj,把Tj暫時放入UNDO-LIST隊列;如有提交的事務Tj,把Tj從UNDO-LIST隊列移到REDO-LIST隊列;直到日志文件結束。④對UNDO-LIST中的每個事務執行UNDO操作,對REDO-LIST中的每個事務執行REDO操作。7.4故障恢復五、數據庫鏡像

根據DBA的要求,自動把整個數據庫或其中的關鍵數據復制到另一個磁盤上。DBMS自動保證鏡像數據與主數據的一致性。作用:一旦出現介質故障,可由鏡像磁盤繼續提供使用,同時DBMS自動利用鏡像磁盤數據進行數據庫的恢復,不需要關閉系統和重裝數據庫副本。在沒有出現故障時,數據庫鏡像還可以用于并發操作,即當一個用戶對數據加排它鎖修改數據時,其他用戶可以讀鏡像數據庫上的數據,而不必等待該用戶釋放鎖。

7.4故障恢復圖7.6數據庫鏡像update鏡像DB復制應用1應用3應用4應用2read恢復update7.6事務并發控制7.6.1概念并發操作—在多用戶共享系統中,多個用戶同時存取同一數據的情形稱為并發操作。并發操作可能帶來的問題:(1)破壞數據庫的一致性(2)破壞事務的隔離性并發操作帶來的三類數據不一致性:

1.丟失修改

T1、T2讀入同一數據并修改,T2提交的結果破壞了T1提交的結果。A=16甲事務①讀出A=16乙事務

②讀出A=16③A—1寫回④A—1寫回A=157.6.1并發控制的概念

2.不可重復讀

T1讀數據后,T2執行更新操作,使T1無法再現前一次讀取結果。B=100甲事務①讀出B=100乙事務

②刪除B

③讀不出B不可重復讀包括三種情況:

(1)某事務兩次讀同一數據時,得到的值不同。

(2)某事務再次按相同條件讀取數據時,發現記錄丟失。

(3)某事務再次按相同條件讀取數據時,發現多了記錄。

7.6.1并發控制的概念

3.臟讀T1修改數據并寫回磁盤,T2讀取同一數據后,T1被撤銷即數據恢復原值,T2讀的數據與DB中的不一致,稱“臟”數據。并發控制方法:封鎖C=100甲事務①讀出CC*2寫回乙事務

②讀出C=200③撤銷C=200C=100“臟”數據7.6.2封鎖與封鎖協議

封鎖:指事務T在對某個數據對象操作之前,對其加鎖。在T未釋放鎖之前,其他的事務不能更新此數據對象。基本的封鎖類型有兩種:排它鎖(X鎖或寫鎖):保證其他事務在T釋放A上的鎖之前,不能再讀取和修改A。共享鎖(S鎖或讀鎖):保證其他事務可以讀A,但在T釋放A上的S鎖之前,不能對A做任何修改。數據對象A事務TS鎖T可讀、不可改A禁止加X鎖數據對象A事務TX鎖T可讀、修改A事務Ti禁止加鎖事務Ti可加S鎖鎖的相容矩陣共享鎖(S鎖)排它鎖(X鎖)封鎖類型的相容矩陣

T1

T2XS-XNNYSNYYY=Yes,相容的請求

-YYYN=No,不相容的請求7.6.2封鎖與封鎖協議

封鎖協議:對數據對象加鎖時,約定的規則。封鎖協議是為了保證并發操作的正確調度的。三級封鎖協議:1、一級封鎖協議是事務T在修改數據R之前必須先對其加X鎖,直到事務T結束(COMMIT和ROLLBACK)才釋放。作用:可防止丟失修改,并保證事務T是可恢復的。7.6.2封鎖與封鎖協議

2、二級封鎖協議是一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,讀完后即可釋放S鎖。作用:防止丟失修改,還可進一步防止讀“臟”數據。

3、三級封鎖協議是一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。作用:除防止丟失修改和讀“臟”數據外,還可防止不可重復讀。7.6.3活鎖與死鎖活鎖:使某個事務永遠處于等待狀態,而得不到執行的現象稱為活鎖。事務T1S鎖請求加鎖事務T2事務T3事務T4等待數據D避免活鎖的方法:先來先服務。T2申請D上的X鎖,而D上已有S鎖,此時,T3、T4…..分別申請D上的S鎖,造成T2永遠等待。加S鎖7.6.3活鎖與死鎖死鎖:P.314數據R1數據R2事務T1事務T2請求加鎖7.6.3活鎖與死鎖1、死鎖的預防(OS中預防死鎖的方法)(1)一次加鎖法要求每個事務必須一次將所要使用的數據全部加鎖。缺點:降低系統的并發度;難于確定每個事務所要封鎖的數據對象。(2)順序封鎖法預先對數據對象規定一個封鎖順序,所有事務都按這個順序實行封鎖。缺點:難于按規定的順序施加封鎖。注意:這些方法并不適合數據庫的特點。7.6.3活鎖與死鎖2、死鎖的診斷

(1)超時法事務等待時間超過規定時限,就認為發生了死鎖。

7.6.3活鎖與死鎖2、死鎖的診斷

(1)超時法事務等待時間超過規定時限,就認為發生了死鎖。

(2)等待圖法

檢測事務等待圖中是否存在回路。死鎖檢測事務等待有向圖:結點是事務,弧線T1T2表示事務T1正在等待T2加了鎖的項。若圖中出現回路,表明有死鎖發生。當死鎖狀態發生時,系統必須回滾其中一個事務或多個事務,且使得代價最小。T1T2T5T4T3T1T2T5T4T3無環等待圖有環等待圖等待圖法用事務等待圖動態反映所有事務的等待情況事務等待圖是一個有向圖G=(T,U)T為結點的集合,每個結點表示正運行的事務U為邊的集合,每條邊表示事務等待的情況若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2并發控制子系統周期性地(比如每隔1min)檢測事務等待圖,如果發現圖中存在回路,則表示系統中出現了死鎖。7.6.3活鎖與死鎖2、死鎖的診斷

(1)超時法事務等待時間超過規定時限,就認為發生了死鎖。

(2)等待圖法

檢測事務等待圖中是否存在回路。3、死鎖的解除選擇一個處理代價最小的事務,將其撤消,釋放此事務持有的所有鎖。是否死鎖時間更新事務T1T2T3

t1T1:SReadAt2T2:SReadBt3T2:B=B-10t4T2:XWriteBt5T3:SReadAt6T3:A=A+10t7T3:XWriteAt8T1:SReadBt9T2:SReadAt10T4:SReadCt11T4:C=C+5t12T4:XwriteC

t13T4:Commit……7.6.4并發調度的可串行性調度:事務的執行次序。調度方式:(1)串行調度(2)并行調度串行調度:多個事務依次執行的調度。并行調度:利用分時的方法處理多個事務的調度。可串行化調度:如果一個并發調度執行的結果等價于某一個串行調度的結果,稱這種調度策略為可串行化的調度。7.6.4并發調度的可串行性例:表8.5的串行調度(T1→T2)

執行結果:A=3,B=4;例:表8.5的串行調度(T2→T1)

執行結果:A=4,B=3;例:表8.5并行調度(d)執行結果:A=3,B=4;與T1T2的串行調度結果相同,為可串行化調度。例:表8.5并行調度執行結果:A=3,B=3;與T1T2,T2T1的串行調度結果都相同,為不可串行化調度。注意:(1)一組事務并發調度的正確性準則:可串行化調度。(2)一組事務的可串行化調度不惟一。7.6.4并發調度的可串行性兩段鎖協議:指所有事務必須分兩個階段對數據項加鎖和解鎖。獲得封鎖:對任何數據進行讀、寫操作之前,要申請并獲得對該數據的封鎖;釋放封鎖:釋放一個封鎖后,事務不再申請和獲得任何其他封鎖。例如:事務T遵守兩段鎖協議,其封鎖序列是;SlockASlockBXlockCUnlockBUnlockAUnlockC|<——---擴展階段——-->|<———--收縮階段----——>|結論:若并發執行的所有事務均遵守兩段鎖協議,則對這些事務的任何并發調度策略都是可串行化的。說明:事務遵守兩段鎖協議是可串行化調度的充分條件,而不是必要條件。7.6.7封鎖的粒度封鎖粒度:封鎖對象的大小。封鎖對象:屬性、元組、關系、數據庫封鎖粒度與系統的并發度和并發控制的開銷密切相關:封鎖的粒度越大,并發度越小,系統開銷越小;封鎖的粒度越小,并發度越高,系統開銷越大。多粒度封鎖:一個系統中同時支持多種封鎖粒度供不同事務選擇的封鎖方法。封鎖粒度選擇原則:(1)需處理大量元組的事務以關系為封鎖粒度。(2)需處理多個關系的大量元組的事務以數據庫為封鎖粒度。(3)處理少量元組的事務以元組為封鎖粒度。7.6.7封鎖的粒度一、多粒度封鎖1.定義多粒度樹四級粒度樹關系R1…關系Rn數據庫元組元組元組…元組列…列列…列……7.6.7封鎖的粒度2.多粒度樹封鎖協議可對多粒度樹中的每個結點獨立加鎖。(注意:自動對其所有后裔結點加同類型的鎖。)多粒度封鎖方式:顯式封鎖和隱式封鎖。

顯式封鎖是應事務的要求直接加到數據對象上的封鎖;隱式封鎖是該數據對象沒有獨立加鎖,是由于其上級結點加鎖而使該數據對象加上了鎖。數據庫關系R1…關系Rn元組…元組元組…元組事務T1列…列列…列……7.6.7封鎖的粒度封鎖沖突檢查:(1)與顯示封鎖沖突(本結點)(2)顯示封鎖與隱式封鎖的沖突(與上層結點、與下層結點)問題?檢查效率低。解決?引進意向鎖。7.6.7封鎖的粒度二、意向鎖意向鎖加鎖原則:如果對一個結點加意向鎖,則說明該結點的下層結點正在被加鎖;對任一結點加鎖時,必須先對它的上層結點加意向鎖。例如:對任一元組加鎖時,必須先對它所在的關系加意向鎖。封鎖沖突的檢查:本結點、上層結點(不必檢查下層結點)三種常用的意向鎖:1.意向共享鎖(IS鎖)若對一個數據對象加IS鎖,表示它的后裔結點擬加S鎖。7.6.7封鎖的粒度例如:要對某個元組加S鎖,則要先對關系和數據庫加IS鎖。2.意向排它鎖(IX鎖)若對一個數據對象加Ⅸ鎖,表示它的后裔結點擬加X鎖。3.共享意向排它鎖(SIX鎖)若對一個數據對象加SIX鎖,表示對它加S鎖,再加IX鎖,即SIX=S+IX意向鎖的相容矩陣T1T2SXISIXSIX-

溫馨提示

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

評論

0/150

提交評論