系統實現技術——事務和鎖_第1頁
系統實現技術——事務和鎖_第2頁
系統實現技術——事務和鎖_第3頁
系統實現技術——事務和鎖_第4頁
系統實現技術——事務和鎖_第5頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第八章 系統實現技術 事務和鎖,本章重要概念,(1)事務的定義,COMMIT和ROLLBACK的語義,事務的ACID性質,事務的狀態變遷圖。(2)存儲器類型,穩定存儲器的實現,數據傳送過程。(3)恢復的定義、基本原則和實現方法,故障的類型,檢查點技術,REDO和UNDO操作,運行記錄優先原則。(4)并發操作帶來的三個問題,X鎖、S鎖、使用X鎖和S鎖的操作,封鎖協議,活鎖、餓死和死鎖,并發調度、串行調度、并發調度的可串行化,SQL中事務的存取模式和隔離級別,基于時標的并發控制。,第8章 系統實現技術,8.1 事務8.2 數據庫的恢復8.3 數據庫的并發控制,8.1 事務,8.1.1 事務的定義 8.1.2 事務的ACID性質,為什么需要事務8.1-1,例如,銀行轉帳問題: 假定資金從帳戶A轉到帳戶B,至少需要兩步:帳戶A的資金減少然后帳戶B的資金相應增加,為什么需要事務8.1-2,CREATE TABLE bank( customerName CHAR(10), -顧客姓名 currentMoney MONEY -當前余額)GOALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(currentMoney=1)GOINSERT INTO bank(customerName,currentMoney) VALUES(張三,1000)INSERT INTO bank(customerName,currentMoney) VALUES(李四,1),創建帳戶表,存放用戶的帳戶信息,添加約束:根據銀行規定,帳戶余額不能少于1元,否則視為銷戶,張三開戶,開戶金額為1000元 ;李四開戶,開戶金額1元,為什么需要事務8.1-3,目前兩個帳戶的余額總和為:1000+1=1001元,為什么需要事務8.1-4,模擬實現轉帳 : 從張三的帳戶轉帳1000元到李四的帳戶,/*-轉帳測試:張三轉賬1000元給李四-*/-我們可能會這樣這樣編寫語句-張三的帳戶少1000元,李四的帳戶多1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=張三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四GO-再次查看轉帳后的結果。 SELECT * FROM bankGO,請問:執行轉帳語句后,張三、李四的帳戶余額為多少?,張三的帳戶沒有減少 但李四的帳戶卻多了1000元 100010012001元 總額多出了1000元!,為什么需要事務8.1-5,-張三的帳戶減少1000元,李四的帳戶增加1000元UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=張三UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四GO,錯誤原因分析:,UPDATE語句違反約束:余額=1元,執行失敗,所以張三還是1000元,繼續往下執行:執行成功,所以李四變為1001元,如何解決呢?使用事務,8.1.1 事務的定義(1),定義8.1 事務(transaction)是構成單一邏輯工作單元的操作集合,要么完整地執行,要么完全不執行。不論發生何種情況,DBS必須保證事務能正確、完整地執行。 在程序中,事務以BEGIN TRANSACTION語句開始,以COMMIT語句或ROLLBACK語句結束。 COMMIT語句表示事務執行成功地結束(提交),此時告訴系統,數據庫要進入一個新的正確狀態,該事務對數據庫的所有更新都已交付實施(寫入磁盤)。 ROLLBACK語句表示事務執行不成功地結束(應該“回退”),此時告訴系統,已發生錯誤,數據庫可能處在不正確的狀態,該事務對數據庫的所有更新必須被撤消,數據庫應恢復該事務到初始狀態。,用戶定義的一個對數據庫讀寫操作序列一個不可分割的工作單位數據庫恢復和并發控制的基本單位數據庫系統中通常有多個事務并行運行事務和程序比較在關系數據庫中,一個事務可以是一條或多條SQL語句,也可以包含一個或多個程序。一個程序通常包含多個事務,轉帳過程就是一個事務。它需要兩條UPDATE語句來完成,這兩條語句是一個整體,如果其中任一條出現錯誤,則整個轉帳業務也應取消,兩個帳戶中的余額應恢復到原來的數據,從而確保轉帳前和轉帳后的余額不變,即都是1001元。,8.1.1 事務的定義(2),8.1.1 事務的定義(3),例8.1 設銀行數據庫中有一轉賬事務T,從賬號A轉一筆款子($50)到賬號B,其操作如下:T:read(A); A:=A50; write(A); read(B); B:=B + 50; write(B).,組織成如下事務:T:BEGIN RANSACTION; read(A); A:=A-50;write(A);if(A0)ROLLBACK;else read(B); B:=B+50; write(B); COMMIT;,8.1.1 事務的定義(4),對數據庫的訪問是建立在讀和寫兩個操作的基礎上的:read(X):把數據X,從磁盤的數據庫中讀到內存的緩沖區中。write(X):把數據X,從內存緩沖區中寫回磁盤的數據庫。 在系統運行時,write操作未必導致數據立即寫回磁盤,很可能先暫存在內存緩沖區中,稍后再寫回磁盤。這件事情是DBMS實現時必須注意的問題。,8.1.2 事務的ACID性質,性質:原子性(Atomicity):事務是一個不可分割的工作單元,事務中的操作要么都做,要么都不做 (All or None) 一致性(Consistency):即數據不會應事務的執行而遭受破壞。事務執行的結果必須使數據庫從一個一致性狀態變到另一個一致性狀態。與原子性密切相關。隔離性(Isolation):在多個事務并發執行時,系統應保證與這些事務先后單獨執行時的結果一樣。 持久性(Durability):一個事務一旦完成全部操作后,它對數據庫的所有更新應永久地反映在數據庫中。,8.2 數據庫的恢復,8.2.1 存儲器結構 8.2.2 恢復的基本原則和實現方法8.2.3 故障類型和恢復方法8.2.4 檢查點技術8.2.5 SQL對事務的支持,8.2.1 存儲器結構(1),1.存儲器類型易失性存儲器(volatile storage) 內存、cache存儲器 非易失性存儲器(nonvolatile storage) 磁盤和磁帶 穩定存儲器(stable storage)這是一個理論上的概念。存儲在穩定存儲器中的信息是決不會丟失的。 2.穩定存儲器的實現數據備份 數據銀行,8.2.1 存儲器結構(2),3. 數據訪問塊、物理塊和緩沖塊塊的操作input(A):把物理塊A的內容傳送到內存的緩沖塊中。Output(B):把緩沖塊B的內容傳送到磁盤中恰當的物理塊中,8.2.1 存儲器結構(3),8.2.1 存儲器結構(4),4. 恢復和原子性的聯系,8.2.2恢復的基本原則和實現方法,基本原則 :“冗余”,即數據庫重復存儲。具體實現方法 平時做好兩件事:轉儲和建立日志周期地(比如一天一次)對整個數據庫進行拷貝,轉儲到另一個磁盤或磁帶一類存儲介質中。 建立日志數據庫。記錄事務的開始、結束及數據每一次插入、刪除和修改前后的值,并寫到“日志”庫中。一旦發生數據庫故障,分兩種情況進行處理 如果數據庫已被破壞,則裝入last數據庫備份,再利用日志庫將這兩個數據庫狀態之間的所有更新重新做一遍。如果數據庫未被破壞,但某些數據不可靠,則撤消所有不可靠的修改,把數據庫恢復到正確的狀態。,8.2.3 故障類型和恢復方法(1),1.事務故障可以預期的事務故障,如存款余額透支等非預期事務故障,如運算溢出、數據錯誤、死鎖等2.系統故障:硬件故障、軟件錯誤或掉電等,重新啟動時,具體處理分兩種情況考慮。對未完成事務作UNDO處理;對已提交事務但更新還留在緩沖區的事務進行REDO處理。,8.2.3 故障類型和恢復方法(2),3介質故障在發生介質故障和遭受病毒破壞時,磁盤上的物理數據庫遭到毀滅性破壞。此時恢復的過程如下:重裝最近轉儲的后備副本到新的磁盤,使數據庫恢復到轉儲時的一致狀態。在日志中找出最近轉儲以后所有已提交的事務。對這些已提交的事務進行REDO處理,將數據庫恢復到故障前某一時刻的一致狀態。在實際中,系統故障通常稱為軟故障(Soft Crash),介質故障通常稱為硬故障(Hard Crash)。,8.2.4 檢查點技術(1),1檢查點方法 在DBS運行時,DBMS定時設置檢查點。在檢查點時刻才真正做到把對DB的修改寫到磁盤,并在日志文件寫入一條檢查點記錄(以便恢復時使用)。當DB需要恢復時,只有那些在檢查點后面的事務需要恢復。,事務T1不必恢復;事務T2和事務T4必須重做(REDO);事務T3和事務T5必須撤消(UNDO)。,8.2.4 檢查點技術(2),2檢查點方法的恢復算法:分成兩步。(1)根據日志文件建立事務重做隊列和事務撤銷隊列。此時,從頭掃描日志文件(正向掃描)。(2)對重做隊列中的事務進行REDO處理,對撤銷隊列中的事務進行UNDO處理。進行REDO處理的方法是:正向掃描日志文件,根據重做隊列的記錄對每一個重做事務重新實施對數據庫的更新操作。進行UNDO處理的方法是:反向掃描日志文件,根據撤銷隊列的記錄對每一個撤銷事務的更新操作執行逆操作。,8.2.5 SQL對事務的支持,無begin transactionCommitRollback,8.3 數據庫的并發控制,8.3.1 并發操作帶來的三個問題8.3.2 封鎖技術8.3.3 封鎖帶來的問題8.3.4 并發操作的調度8.3.5 SQL對事務處理的支持,8.3.1并發操作帶來的三個問題(1),圖8.5 在時間t8丟失了事務T1的更新(FIND表示從DB中讀值,UPD表示把值寫回到DB),1丟失更新問題(例8.2),8.3.1并發操作帶來的三個問題(2),圖8.6 事務T2在時間t4讀了未提交的A值(80),2讀臟數據問題(例8.3,用戶讀了“臟數據”,但沒有破壞數據庫的完整性),8.3.1并發操作帶來的三個問題(3),圖8.8 事務T2在時間t4讀了未提交的A值,并在時間t8丟失了自己的更新,2讀臟數據問題(例8.4,用戶讀了“臟數據”,引起自身的更新操作被丟失,破壞了數據庫的完整

溫馨提示

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

評論

0/150

提交評論