第10章事務管理與恢復—1_第1頁
第10章事務管理與恢復—1_第2頁
第10章事務管理與恢復—1_第3頁
第10章事務管理與恢復—1_第4頁
第10章事務管理與恢復—1_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、第10章 事務管理與恢復目 錄事務 10.1并發控制 10.2恢復與備份 10.3問題背景 現實應用中,數據庫的操作與操作之間往往具有一定的語義和關聯性。數據庫應用希望將這些有關聯的操作當作一個邏輯工作單元看待,要么都執行,要么都不執行。 例10.1 飛機訂票系統有兩個表Sale和Flight,分別記錄各售票點的售票數及全部航班的剩余票數: Sale(agentNo, flightNo, date, saledNumber) Flight(flightNo, date, remainNumber) 現有A0010售票點欲出售F005航班2008年8月8日機票2張。問題背景 可編制如下程序: 查

2、詢F005航班2008年8月8日剩余票數A; (1) if (A2) 拒絕操作,并通知票源不足; else 更新A0010售票點的售票數; 更新F005航班的剩余票數;如何用SQL語句分別實現語句(1)和語句(2)?n 語句(1)可用SQL語句表示為:SELECT remainNumber FROM Flight WHERE flightNo=F005 AND date=2008-08-08(2)問題背景 語句(2)是在當F005航班2008年8月8日的剩余票數大于請求票數時更新Sale和Flight表。該更新包括兩個update操作: UPDATE Sale SET saledNumber=

3、saledNumber+2 WHERE agentNo=A0010 AND flightNo=F005 AND date=2008-08-08 UPDATE Flight SET remainNumber=remainNumber2 WHERE flightNo=F005 AND date=2008-08-08如果第一個UPDATE語句執行成功,而第二個UPDATE語句執行失敗,會發生什么問題呢?問題背景 假設F005航班共有200個座位,2008年8月8日機票已售198張(其中被A0010售出20張),余票2張。 當第1個UPDATE語句執行成功時,即A0010已售票數更新為22。當系統發生

4、故障重新提供服務時,如果又有售票點請求出售F005航班2008年8月8日機票2張,由于F005的剩余票數未更新(仍為2),因此滿足其要求又出售了2張。 結果多賣了2張票!出現上述問題的原因是什么? 出現故障后,系統重新提供服務時數據庫狀態與現實世界狀態出現了不一致。對于機票系統來說,一航班的剩余票數加上已售出票數應等于該航班全部座位數。而重新提供服務時,F005的已售票數與剩余票數之和為202(不等于200!),導致多買了2張。 問題背景 為解決上述問題,數據庫管理系統引入了事務概念,它將這些有內在聯系的操作當作一個邏輯單元看待,并采取相應策略保證一個邏輯單元內的全部操作要么都執行成功,要么都

5、不執行。 對數據庫用戶而言,只需將具有完整邏輯意義的一組操作正確地定義在一個事務之內即可。事務概念 對于用戶而言,事務是具有完整邏輯意義的數據庫操作序列的集合。 對于數據庫管理系統而言,事務則是一個讀寫操作序列。這些操作是一個不可分割的邏輯工作單元,要么都做,要么都不做。 事務是數據庫管理系統中競爭資源、并發控制和恢復的基本單元。 它是由數據庫操作語言(如SQL)或高級編程語言(如Java、C、C+)提供的事務開始語句、事務結束語句以及由它們包含的全部數據庫操作語句組成。事務結束語句 事務結束的兩種類型: 事務提交(commit):將成功完成事務的執行結果(即更新)永久化,并釋放事務占有的全部

6、資源。 事務回滾(rollback):中止當前事務、撤銷其對數據庫所做的更新,并釋放事務占有的全部資源。SQL Server事務模式 SQL Server數據庫提供了三種類型的事務模式: 顯式事務是指用戶使用Transact-SQL事務語句所定義的事務,其事務語句包括: 事務開始:BEGIN TRANSACTION 事務提交:COMMIT TRANSACTION,COMMIT WORK 事務回滾:ROLLBACK TRANSACTION,ROLLBACK WORK 隱式事務是指事務提交或回滾后,系統自動開始新的事務。該類事務不需要采用BEGIN TRANSACTION語句標識事務的開始。 自動

7、定義事務:當一個語句成功執行后,它被自動提交,而當執行過程中出錯時,則被自動回滾。SQL Server事務定義舉例 例10.2 利用SQL Server提供的顯式事務模式定義例10.1中的數據庫更新事務。 BEGIN TRANSACTION UPDATE Sale SET saledNumber=saledNumber+2 WHERE agentNo=A0010 AND flightNo=F005 AND date=2008-08-08 UPDATE Flight SET remainNumber=remainNumber-2 WHERE flightNo=F005 AND date=2008

8、-08-08 COMMIT TRANSACTION事務特性 為了保證事務并發執行或發生故障時數據庫的一致性(完整性),事務應具有以下特性: 原子性(atomicity)。事務的所有操作要么全部都被執行,要么都不被執行。 一致性(consistency)。一個單獨執行的事務應保證其執行結果的一致性,即總是將數據庫從一個一致性狀態轉化到另一個一致性狀態。 隔離性(isolation)。當多個事務并發執行時,一個事務的執行不能影響另一個事務,即并發執行的各個事務不能互相干擾。 持久性(durability)。一個事務成功提交后,它對數據庫的改變必須是永久的,即使隨后系統出現故障也不會受到影響。DBM

9、S保證事務特性措施 原子性也稱為故障原子性或(故障)可靠性 由DBMS通過撤銷未完成事務對數據庫的影響來實現。 一致性是指單個事務的一致性,也稱為并發原子性或正確性 由編寫該事務代碼的應用程序員負責,但有時也可利用DBMS提供的數據庫完整性約束(如觸發器)的自動檢查功能來保證。 隔離性也稱為執行原子性或可串行化,可以看作是多個事務并發執行時的一致性或正確性要求 由DBMS的并發控制模塊保證。 持久性也稱為恢復原子性或恢復可靠性 它是利用已記錄在穩固存儲介質(如磁盤陣列)中的恢復信息(如日志、備份等)來實現丟失數據(如因中斷而丟失的存放在主存中但還未保存到磁盤數據庫中去的數據等)的恢復。 它是由

10、DBMS的恢復管理模塊保證。事務并發執行 數據庫管理系統允許多個事務并發執行: 優點 增加系統吞吐量(throughput)。吞吐量是指單位時間系統完成事務的數量。當一事務需等待磁盤I/O時,CPU可去處理其它正在等待CPU的事務。這樣,可減少CPU和磁盤空閑時間,增加給定時間內完成事務的數量。 減少平均響應時間(average response time)。事務響應時間是指事務從提交給系統到最后完成所需要的時間。事務的執行時間有長有短,如果按事務到達的順序依次執行,則短事務就可能會由于等待長事務導致完成時間的延長。如果允許并發執行,短事務可以較早地完成。因此,并發執行可減少事務的平均響應時間

11、。 缺點 若不對事務的并發執行加以控制,則可能破壞數據庫的一致性。事務并發執行可能出現的問題 讀臟數據。如果事務T2讀取事務T1修改但未提交的數據后,事務T1由于某種原因中止而撤銷,這時事務T2就讀取了不一致的數據。數據庫中將這種讀未提交且被撤銷的數據為讀“臟數據”。 丟失更新。兩個或多個事務都讀取了同一數據值并修改,最后提交事務的執行結果覆蓋了前面提交事務的執行結果,從而導致前面事務的更新被丟失。 事務并發執行可能出現的問題 不可重復讀。是指事務Ti兩次從數據庫中讀取的結果不同,可分為三種情況: 事務Ti讀取一數據后,事務Tj對該數據進行了更改。當事務Ti再次讀該數據時,則會讀到與前一次不同

12、的值。 事務Ti按某條件讀取數據庫中某些記錄后,事務Tj刪除了其中部分記錄。當事務Ti再次按相同條件讀取時,發現記錄數變少了。(幻影現象1) 事務Ti按某條件讀取數據庫中某些記錄后,事務Tj插入了新的記錄。當事務Ti再次按相同條件讀取時,發現記錄數變多了。(幻影現象2)事務并發執行問題舉例 例10.3 設A航班的剩余票數為10張,有兩個事務T1和T2同時請求出售該航班機票2張和3張。它們各自的執行序列如圖10-1所示(這里只考慮對航班剩余票數的更新)。 T1R(A)A=A-2W(A) T2R(A)A=A-3W(A)圖10-1 更新事務T1和T2事務并發執行問題舉例 如果是串行執行,則不管是T1

13、先執行再執行T2(圖10-2(a),還是T2先執行再執行T1(圖10-2(b),都可得到正確的執行結果,即剩余票數都為5。 T1R(A)A=A-2W(A) T2R(A)A= A-3W(A) T1R(A)A=A-2W(A)T2R(A)A=A-3W(A)A1088 5A10775(a)(b)圖10-2 T1和T2串行執行事務并發執行問題舉例 讀臟數據:在圖10-3中,事務T1在T2讀取其更新值(8)后回滾,而T2仍然使用讀到T1修改后的值進行運算,得到的結果是5。但實際上T1未執行成功,系統只出售了3張票,余票數應為7。 T1R(A)A=A-2W(A)rollback T2R(A)A=A-3W(A

14、)A10885圖10-3 T2讀臟數據事務并發執行問題舉例 不可重復讀:如圖10-4所示,T3第一次讀時余票數為10張,第二次讀時為8張,兩次讀結果不一致。 T3R(A)R(A)A101088 T1R(A)A=A-2W(A)圖10-4 T3不可重復讀事務并發執行問題舉例 丟失更新:在圖10-5中,T1和T2都讀到余票數為10,由于T1后于T2提交,導致T2的更新操作沒有發生作用,被T1的更新值(8)覆蓋。 T1R(A)A=A-2W(A) T2R(A)A=A-3W(A)A1010788圖10-5 T2更新丟失 是不是所有并發執行事務都會出現這些問題呢? 事務并發執行得到正確的結果 例10.4 設

15、A和B航班的剩余票數分別為10和15,事務T4與T5并發執行。事務T4請求出售A航班機票2張和B航班機票2張,事務T5請求出售A航班機票3張和B航班機票3張。它們的執行序列如圖10-6所示。圖10-6 T4和T5并發執行T4R(A)A=A-2W(A)R(B)B=B-2W(B)T5R(A)A=A-3W(A)R(B)B=B-3W(B)B15131310A10885n 可以驗證圖10-6中并發執行的結果與T4、T5按先后順序串行執行的結果是一樣的,也是正確的。啟示:如果一組并發執行事務的執行結果與它們串行執行得到的結果是相同的,那么就可以認為該并發執行的結果是正確的。事務調度定義 事務并發執行順序是

16、隨機的,將由多個事務操作組成的隨機執行序列稱為一個調度。 對由一組事務操作組成的調度序列而言,應滿足下列條件: 該調度應包括該組事務的全部操作; 屬于同一個事務的操作應保持在原事務中的執行順序。串行調度 定義10.1(串行調度) 在調度S中,如果屬于同一事務的操作都是相鄰的,則稱S是串行調度。 對由n個事務組成的一組事務而言,共有n!種有效串行調度。 事務串行執行可保證數據庫的一致性,如果能判斷一個并發調度的執行結果等價于一個串行調度的結果,就稱該并發調度可保證數據庫的一致性。沖突操作與沖突等價 假設調度S包含兩個事務Ti與Tj,若兩個相鄰操作OiTi,OjTj訪問不同的數據對象,則交換Oi與

17、Oj不會影響調度中任何操作的結果。若Oi與Oj訪問相同的數據對象,并且有一個為寫操作時,則不能改變它們被調度執行的順序。 定義10.2 在一調度S中,如果Oi與Oj是不同事務在相同數據對象上的操作,并且其中至少有一個是寫操作,則稱Oi與Oj是沖突操作;否則稱為非沖突操作。 定義10.3 如果一調度S可以經過交換一系列非沖突操作執行的順序而得到一個新的調度S,則稱S與S是沖突等價的(conflict equivalent)。沖突可串行化 定義10.4 如果一調度S與一串行調度是沖突等價的,則稱S是沖突可串行化的(conflict serializable). 在圖10-6的調度中,通過交互非沖突

18、操作可得到圖10-7所示的串行調度,故圖10-6的調度是沖突可串行化的。T4R(A)A=A-2W(AR(B)B=B-2W(B) T5R(A)A=A-3W(A)R(B)B=B-3W(B)圖10-7 交換圖10-6的非沖突操作后得到的串行調度 沖突可串行化 沖突可串行化僅僅是正確調度的充分條件,并不是必要條件,即沖突可串行化調度執行結果一定是正確的,而正確的調度不一定都是沖突可串行化的。T4R(A)A=A-2W(A)R(B)B=B-2W(B)T6R(B)B=B-3W(B)R(A)A=A-3W(A)B15121210A10885圖10-8 不滿足沖突可串行化的正確調度優先圖 設S是一個調度。由S構造

19、一個有向圖,稱為優先圖,記為G=(V, E),其中V是頂點集,E是邊集。頂點集由所有參與調度的事務組成,邊集由滿足下列3個條件之一的邊TiTj組成: Ti執行了Wi(Q)后Tj執行Rj(Q); Ti執行了Ri(Q)后Tj執行Wj(Q); Ti執行了Wi(Q)后Tj執行Wj(Q)。T1T2T2T1(a)(b)圖10-9 圖10-2的優先圖優先圖 T= t1: R1(X) W1(X) C1; t2: R2(X) R2(Y) W2(X) C2; t3: R3(Y) W3(Y) C3 HTR1(X) R2(X) W1(X) R2(Y) C1 W2(X) R3(Y) C2 W3(Y) C3 SG(HT)

20、: HTR1(X) W1(X) R2(X) R2(Y) C1 W2(X) R3(Y) C2 W3(Y) C3 SG(HT): t1 t2 t3 t1 t2 t3基于優先圖的沖突可串行化判別 基于優先圖的沖突可串行化判別準則:如果優先圖中無環,則S是沖突可串行化的;如果優先圖中有環,則S是非沖突可串行化的。 測試沖突可串行化的算法: 構建S的優先圖; 采用環路測試算法(如基于深度優先搜索的環檢測算法)檢測S中是否有環; 若S包含環,則S是非沖突可串行化的,否則調度S是沖突可串行化的。 例10.5 設并發調度事務集為: T=t1: R1(X) W1(X) C1, t2: R2(X) R2(Y) W2(X) C2, t3: R3(Y) W3(Y) C3兩個并發調度分別為: HTR1(X) R2(X) W1(X) R2(Y)

溫馨提示

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

評論

0/150

提交評論