




已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
講義六 事務管理 主要內容 事務的概念恢復措施并發(fā)控制小結 6 1事務的概念 事務 構成單一邏輯工作單元的操作的集合事務是由一系列的對數(shù)據庫的查詢操作和更新操作構成 這些操作是一個整體 不能分割 事務要么所有的操作都順利完成 要么一個操作也不要做 絕不能只完成了部分操作 而還有一些操作沒有完成 DBMS中的事務管理子系統(tǒng)負責事務的處理 1 原子性 Atomicity 一個事務中的所有操作 是一個邏輯上不可分割的單位 2 一致性 Consistency 數(shù)據庫處于一個一致性狀態(tài)是指數(shù)據庫中的數(shù)據滿足各種完整性約束 1事務的特性 3 隔離性 Isolation 隔離性的含義是指無論同時有多少事務在執(zhí)行 DBMS會保證事務之間互不干擾 就像只有一個事務在運行一樣 4 持久性 Durability DBMS的恢復子系統(tǒng)采用日志和備份技術保證事務的持久性 事務的這四個特性一般簡稱為事務的ACID特性 1事務的特性 1 啟動事務 BEGINTRANSACTION 2 提交事務COMMITTRANSACTION 3 回滾語句ROLLBACKTRANSACTION 2事務的語句 例 在運輸部門的訂票數(shù)據庫一個完整事務 開始事務 1 查詢某趟車次TrainNo的剩余車票 2 插入訂票記錄ReservedTicket 3 更新剩余票額Ticket的數(shù)量 提交事務 3事務舉例 Select TSum TicketSum 取出剩余車票數(shù)量FromTrainTicketWhereTrainNo D123 IF TSum 0 沒有剩余車票ROLLBACKTRANSACTION 回滾事務ELSEBEGINTRANSACTIONINSERTINTOReservedTicketvalues 車次 發(fā)站 到站 座位號 票價 日期 UPDATETrainTicketSETTicketSum TicketSum 1whereTicketNo D123 COMMITTRANSACTION 提交事務END 3事務舉例 4事務狀態(tài) 事務必須處于下列狀態(tài)之一活動狀態(tài) 初始狀態(tài) 事務執(zhí)行時處于這個狀態(tài)部分提交狀態(tài) 最后一條語句執(zhí)行后失敗狀態(tài) 發(fā)現(xiàn)正常的執(zhí)行不能繼續(xù)之后中止狀態(tài) 事務回滾并且數(shù)據庫已恢復到事務開始執(zhí)行前的狀態(tài)之后提交狀態(tài) 成功完成后 6 2事務恢復 DBMS中的數(shù)據如何流動的 圖 數(shù)據的流動 標號 和 的流程分別是讀操作和寫操作的數(shù)據流動過程 6 2事務恢復 恢復機制 1 數(shù)據庫系統(tǒng)必不可少的組成部分 負責將數(shù)據庫恢復到故障發(fā)生前的某個一致的狀態(tài) 2 高可用性 盡快恢復數(shù)據庫功能 使崩潰的數(shù)據庫不能使用的時間減少到最小 1 事務故障事務在運行過程中 如果出現(xiàn)運算溢出 違反了某些完整性規(guī)則 某些應用程序的錯誤 以及并發(fā)事務發(fā)生死鎖等 使事務不能繼續(xù)執(zhí)行下去 這種情況稱為事務故障 非法輸入 溢出或超出資源限制等 1故障種類 2 系統(tǒng)故障系統(tǒng)故障是指系統(tǒng)在運行過程中 由于某種原因 如操作系統(tǒng)或DBMS代碼錯誤 操作員操作失誤 特定類型的硬件錯誤 如CPU故障 突然停電等造成系統(tǒng)停止運行 丟失了系統(tǒng)緩沖區(qū)中的數(shù)據 而存儲在磁盤中的數(shù)據未受到影響 1故障種類 3 介質故障系統(tǒng)在運行過程中 由于某種硬件故障 如磁盤壞損 磁頭碰撞 或由于操作系統(tǒng)的某種潛在的錯誤 瞬時強磁場干擾 使存儲在外存上的數(shù)據部分損失或全部損失 稱為介質故障 這類故障比前兩類故障的可能性小的多 但破壞性最大 所有正在運行的事務被中止 系統(tǒng)緩沖區(qū)中的數(shù)據無法寫到磁盤 存儲在磁盤上的數(shù)據全部丟失 1故障種類 2恢復措施 1 日志文件事務由一系列對數(shù)據庫的讀寫操作組成 按照操作執(zhí)行的先后次序 記錄下事務所執(zhí)行的所有對數(shù)據庫的寫操作 更新操作 就構成了事務的日志文件 日志文件的格式和內容日志文件從邏輯上來看是由若干條記錄構成的 這些記錄叫做日志記錄 同一個事務的日志記錄組織成了一個鏈表 日志文件示意圖 2恢復措施 日志文件示意圖在圖中 圖 a 為向一個表中插入一條記錄 出錯了 則終止事物執(zhí)行 圖 b 中給出Update記錄的內部結構 T1表示發(fā)出操作的是事務T1 U表示操作類型是修改 Update Ticket TicketSum 表示修改的數(shù)據對象是TrainTicket表的TicketSum列 修改前的值是80 修改后的值是79 2恢復措施 日志文件記錄日志文件由若干記錄組成 記錄有三種類型 一是記錄事務的開始 用Begin表示 主要記錄事務的內部標識和開始時間 二是記錄事務的結束 圖中用Rollback和Commit表示 主要記錄事務的內部標識和結束時間 三是記錄事務的更新操作 2恢復措施 日志文件記錄信息其中事務的更新操作用Update表示 更新要記錄以下的信息 1 事務標識 標明是哪個事務 2 操作的類型 插入 刪除或修改 3 操作對象 記錄內部標識 4 更新前數(shù)據的舊值 對插入操作而言 此項為空值 5 更新后數(shù)據的新值 對刪除操作而言 此項為空值 2恢復措施 2 登記日志文件日志文件為數(shù)據庫的數(shù)據建立了副本 冗余 為了保證數(shù)據庫數(shù)據的可恢復性 必須堅持先寫日志 后寫數(shù)據的原則 事務更新了某個數(shù)據后 把數(shù)據由工作區(qū)復制到系統(tǒng)緩沖區(qū) 同時形成了一條日志記錄 該日志記錄也被存放到系統(tǒng)緩沖區(qū) DBMS保證 把更新后的數(shù)據由系統(tǒng)緩沖區(qū)移動到數(shù)據庫之前 要首先把相應的日志記錄寫到日志文件中 這叫做先寫日志規(guī)則 2恢復措施 3 登記日志文件步驟第一步 事務把更新后的數(shù)據和形成的日志記錄寫到系統(tǒng)緩沖區(qū) 第二步 將日志記錄寫到磁盤上的日志文件 第三步 把更新后的數(shù)據寫到數(shù)據庫 2恢復措施 4 數(shù)據庫備份為了處理介質故障 需要由DBA定期地將數(shù)據庫和日志文件復制到磁帶或磁盤上 并將這些備用的數(shù)據文本妥善地保存起來 當數(shù)據庫遭到破壞時就可以將后備副本重新裝入 恢復數(shù)據庫 2恢復措施 4 數(shù)據庫備份制做備份的過程稱為轉儲 轉儲是十分耗費時間和資源的 不能頻繁進行 DBA應根據應用情況確定適當?shù)霓D儲時間和周期 轉儲可以分為增量轉儲和海量轉儲 海量轉儲是指每次轉儲全部數(shù)據庫 而增量轉儲是指每次轉儲上次轉儲后修改過的數(shù)據 轉儲還可分為靜態(tài)轉儲和動態(tài)轉儲 靜態(tài)轉儲是指系統(tǒng)停止對外服務 不允許用戶運行事務 只進行轉儲操作 動態(tài)轉儲是指轉儲期間允許用戶對數(shù)據庫進行存取操作 即轉儲和用戶事務可以并發(fā)執(zhí)行 2恢復措施 5 故障恢復事務故障恢復事務未運行至正常終止點前被DBMS或用戶撤消 這時恢復子系統(tǒng)對此事務做UNDO處理 具體做法 反向閱讀日志文件 找出該事務的所有更新操作 對每一個更新操作做它的逆操作 即若記錄中是插入操作 則做刪除操作 若記錄中是刪除操作 則做插入操作 若是修改操作 則用修改前的值代替修改后的值 如此處理直至讀到此事務的開始標簽 事務故障恢復完成 2恢復措施 5 故障恢復系統(tǒng)故障恢復造成數(shù)據庫不一致狀態(tài)的原因有兩個 一是由于一些未完成事務對數(shù)據庫的更新已寫入數(shù)據庫 二是由于一些已提交事務對數(shù)據庫的更新還留在緩沖區(qū)沒來得及寫入數(shù)據庫 系統(tǒng)故障恢復是在系統(tǒng)重新啟動以后進行的 基本的恢復算法分為二步 1 根據日志文件建立重作隊列和撤消隊列2 對UNDO隊列中的事務進行UNDO處理 對REDO隊列中事務的進行REDO處理 2恢復措施 5 故障恢復介質故障恢復在發(fā)生介質故障時 磁盤上的物理數(shù)據庫被破壞 因此 需要重裝最后一次備份的數(shù)據庫備份 但重裝副本只能將數(shù)據庫恢復到轉儲時的狀態(tài) 從那以后的所有更新事務必須重新運行才能恢復到故障時的狀態(tài) 2恢復措施 6 恢復過程示例舉例 系統(tǒng)在t1時刻停止運行事務 進行數(shù)據庫轉儲 在t2時刻轉儲完畢 得到t2時刻的數(shù)據庫的一致性副本 當系統(tǒng)運行到tn時刻發(fā)生故障 運行事務 介質故障恢復過程 t1 t2 tn 故障點 轉儲完畢 轉儲開始 2恢復措施 6 恢復過程示例重裝轉儲的數(shù)據庫副本 使數(shù)據庫恢復到轉儲時的一致狀態(tài) 裝入轉儲后備份的第一個日志文件讀日志文件 找出已提交的事務 按提交次序的先后將其記入REDO隊列 重做REDO隊列中每個事務的所有更新操作 裝入下一個日志文件重復上一步 直至處理完所有的日志文件 這時數(shù)據庫恢復至故障前一時刻的一致狀態(tài) 2恢復措施 6 3并發(fā)控制 DBMS為了有效的利用計算機的硬件資源和數(shù)據庫中的數(shù)據 允許多個事務并發(fā)執(zhí)行 但事務的并發(fā)執(zhí)行可能出現(xiàn)諸如丟失修改 讀臟數(shù)據 不可重復讀問題 使數(shù)據庫處于不一致性的狀態(tài) 為了防止并發(fā)執(zhí)行產生的問題 DBMS需要具備并發(fā)控制的功能 并發(fā)控制常用的方法有封鎖法 時間印法和樂觀控制法 商用的DBMS一般都采用封鎖法 并發(fā)控制由DBMS中的調度器 事務管理器以及存儲子系統(tǒng)協(xié)同完成并發(fā)控制 6 3并發(fā)控制 并發(fā)控制示意圖 作用 實現(xiàn)可串行化調度采用串行調度來保證數(shù)據庫處于一致性狀態(tài)本節(jié)中對數(shù)據庫的操作用更底層的讀操作和寫操作來描述并發(fā)控制 用R x 表示對數(shù)據x的讀操作W x 表示對數(shù)據x的寫操作 一個事務由若干的讀操作和寫操作組成 SQL中的SELECT語句可以用一串讀操作表示 INSERT語句可以用一串寫操作表示 UPDATE和DELETE可以用一串讀寫操作表示 6 3并發(fā)控制 舉例 假設有兩個售票員同時運行售票的事務 分別用T1和T2表示 事務用底層操作可以表示為 W A R B W B W A 表示向ReservedTicket表插入一個元組 R B 和W B 表示讀 寫Ticket表的TicketSum列 因為一個UPDATE語句首先要讀出TicketSum上的值 然后才能做加1運算 所以 UPDATE語句要使用兩個底層操作 1并發(fā)產生的問題 并發(fā)執(zhí)行一 在t1 t2和t3時刻售票1的事務的三個操作被送到DBMS的存取層 并立刻獲得執(zhí)行 在t4 t5和t6時刻執(zhí)行售票2的三個操作 執(zhí)行的結果和我們預期的結果完全相同 如右圖所示 兩個事務的執(zhí)行是實際上是串行執(zhí)行 先執(zhí)行完T1 再執(zhí)行T2 1并發(fā)產生的問題 并發(fā)執(zhí)行二 如右圖所示 T1和T2的操作穿插執(zhí)行 結果是T1的修改操作沒有起到應有的作用 這種現(xiàn)象稱為 丟失修改 1并發(fā)產生的問題 并發(fā)執(zhí)行三 售票1執(zhí)行事務T1 但是在確認是否真正買票時 他放棄了買票 事務被回滾 具體的執(zhí)行過程如右圖所示 T2的售票操作也沒有獲得成功 原因是在T1沒有結束時 就讀了ticketsum 這種現(xiàn)象叫做 讀臟數(shù)據 1并發(fā)產生的問題 并發(fā)執(zhí)行四 T1在執(zhí)行過程中讀了兩次ticketsum 但是發(fā)現(xiàn)ticketsum的兩次余額不一樣 由于不知道發(fā)生了什么情況而將T1撤消了 原因是在兩個讀操作中間執(zhí)行了另外的事務T2 這種現(xiàn)象叫做 不可重復讀 1并發(fā)產生的問題 2鎖 類型 S鎖和X鎖S鎖又被稱為共享鎖 ShareLocks X鎖又被叫做排它鎖 eXclusiveLocks 共享鎖又稱為讀鎖 若事務T對數(shù)據對象A加上S鎖 則事務T可以讀A但不能修改A 其它事務只能再對A加S鎖 而不能加X鎖 直到T釋放A上的S鎖 這就保證了其它事務可以讀A 但在T釋放A上的S鎖之前不能對A做任何修改 2 排它鎖排它鎖又稱為寫鎖 若事務T對數(shù)據對象A加上X鎖 則只允許T讀取和修改A 其它任何事務都不能再對A加任何類型的鎖 直到T釋放A上的鎖 這就保證了其它事務在T釋放A上的鎖之前不能讀取和修改A 封鎖類型的相容矩陣 Y Yes 相容的請求N No 不相容的請求 2鎖 封鎖級別對數(shù)據對象加鎖所采用的規(guī)則 一級封鎖協(xié)議 事務T在修改數(shù)據R之前必須先對其加X鎖 直到事務結束才釋放 事務結束包括正常結束 COMMIT 和非正常結束 ROLLBACK 可防止 丟失修改不能防止 可重復讀和不讀 臟 數(shù)據 2鎖 封鎖級別 二級封鎖協(xié)議 實施一級封鎖協(xié)議 并且事務T在讀取數(shù)據R之前必須先對其加S鎖 讀完后即可釋放S鎖 二級封鎖協(xié)議除防止了丟失修改 還可進一步防止讀 臟 數(shù)據 由于讀完數(shù)據后即可釋放S鎖 所以它不能保證可重復讀 2鎖 封鎖級別三級封鎖協(xié)議 實施一級封鎖協(xié)議 并且事務T在讀取數(shù)據R之前必須先對其加S鎖 直到事務結束才釋放 三級封鎖協(xié)議除防止了丟失修改和不讀 臟 數(shù)據外 還進一步防止了不可重復讀 2鎖 兩階段封鎖協(xié)議 加鎖和解鎖 兩階段 是獲得鎖的第一階段和釋放鎖的第二階段一個事務中一旦開始釋放鎖 就不能再申請新鎖了 事務的加鎖和解鎖嚴格分為兩個階段 第一階段加鎖 第二階段解鎖 可實現(xiàn)并發(fā)的串行化調度 2鎖 加鎖內容包括 在事務T的R A 操作之前 先對A加S鎖 如果加鎖成功 則執(zhí)行操作R A 否則 將R A 加入A的等待隊列 在事務T的W A 操作之前 先對A加X鎖 如果加鎖成功 則執(zhí)行操作W A 否則 將W A 加入A的等待隊列 2鎖 解鎖內容包括 在收到事務的Abort或Commit請求后 釋放T在每個數(shù)據上所加的鎖 如果在數(shù)據A的等待隊列中不空 即有其它的事務等待對A進行操作 則從隊列中取出第一個操作 完成加鎖 然后執(zhí)行該操作 執(zhí)行Abort和Commit請求后 不再接收該事務的讀寫操作 2鎖 兩階段封鎖協(xié)議舉例 事務1的封鎖序列 SlockA SlockB XlockC UnlockC UnlockB UnlockA 事務2的封鎖序列 SlockA UnlockA SlockB XlockC UnlockC UnlockB 事務1遵守兩段鎖協(xié)議 而事務2不遵守兩段協(xié)議 2鎖 封鎖粒度封鎖對象的大小稱為封鎖粒度 封鎖對象可以是邏輯單位 這時的粒度可以是數(shù)據庫 表 元組 屬性 封鎖對象也可以是物理單位 這時的封鎖對象可以是數(shù)據塊 物理記錄 不同的粒度會影響事務的并發(fā)度 2鎖 兩個事務造成的死鎖問題 2鎖 DBMS的并發(fā)控制子系統(tǒng)保證了事務的隔離性 盡管同時有很多事務在使用系統(tǒng) 但是它們互不干擾 就像單獨使用系統(tǒng)一樣 不會出現(xiàn)丟失修改 讀臟數(shù)據 不可重復讀等問題 對于一些只讀事務 有時可以忍受讀臟數(shù)據 不可重復讀等問題 為了加快它的執(zhí)行 不需要嚴格的按照兩段鎖協(xié)議運行 SQL提供的隔離級別設置語句能滿足這個要求 3隔離級別 隔離級別考慮因素是否在讀數(shù)據的時候使用鎖讀鎖持續(xù)多長時間在讀數(shù)據的時候使用何種類型的鎖SETTRANSACTIONISOLATIONLEVEL READUNCOMMITTED READCOMMITTED REPEATABLEREAD SERIALIZABLE 3隔離級別 1 READUNCOMMITTED執(zhí)行事務的讀操作之前不對數(shù)據對象加S鎖 可能會讀到未完成事務的操作結果 臟數(shù)據 不能重復讀 2 READCOMMITTED執(zhí)行事務的讀操作之前對數(shù)據對象加S鎖 執(zhí)行完讀操作之后立刻釋放S鎖 不會讀到臟數(shù)據 但不能重復讀 3 REPEATABLEREAD執(zhí)行事務的讀操作之前對數(shù)據對象加S鎖 持有該鎖直到事務結束 可以重復讀 3隔離級別 4 SERIALIZABLE嚴格按照兩段封鎖協(xié)議對數(shù)據加鎖 3隔離級別 ANSI99定義了4種事務隔離級別 SQLServer能夠完全支持這些級別 未提交讀在讀數(shù)據時不會檢查或使用任何鎖 因此 在這種隔離級別中可能讀取到沒有提交的數(shù)據 已提交讀只讀取提交的數(shù)據并等待其它事務釋放排它鎖 讀數(shù)據的共享鎖在讀操作完
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023-2024學年遼寧大石橋八年級上期末模擬物理卷【含答案】
- 房屋合同糾紛預防與解決四
- 勞動合同男方提出終止合約
- 設備租賃預付款合同
- 貨車租賃公司合同范本
- 裝修材料采購合同模板
- 2《以禮待人》公開課一等獎創(chuàng)新教學設計
- 中國古典舞的審美特征
- 醫(yī)院總值班管理控制
- 八年級生物上冊 15.2《動物運動的形成》教學設計 (新版)北師大版
- 新款h2夜視移動電源
- 天津大學年《巖體力學》期末試題及答案
- 成果報告書(模板)
- 牛腿計算表(自動版)
- 供料機工作原理與使用
- 口腔科學第七章口腔局部麻醉備課講稿課件
- 普通話朗讀技巧語調
- CPK計算表格EXCEL格式-自動套用自動計算分析
- 重慶市國家職業(yè)資格鑒定申報表(三、四、五級) - 重慶市職業(yè)技能鑒定
- 代付款協(xié)議(中英文對照版本)
- 半鋼子午胎培訓
評論
0/150
提交評論