第10_11章_數(shù)據(jù)庫恢復(fù)技術(shù)及并發(fā)控制_第1頁
第10_11章_數(shù)據(jù)庫恢復(fù)技術(shù)及并發(fā)控制_第2頁
第10_11章_數(shù)據(jù)庫恢復(fù)技術(shù)及并發(fā)控制_第3頁
第10_11章_數(shù)據(jù)庫恢復(fù)技術(shù)及并發(fā)控制_第4頁
第10_11章_數(shù)據(jù)庫恢復(fù)技術(shù)及并發(fā)控制_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、An Introduction to Database System 2015 數(shù)據(jù)庫原理與應(yīng)用數(shù)據(jù)庫原理與應(yīng)用 第十章第十章 數(shù)據(jù)庫恢復(fù)技術(shù)數(shù)據(jù)庫恢復(fù)技術(shù) 溫浩宇溫浩宇 An Introduction to Database System DBMS的數(shù)據(jù)保護(hù)的數(shù)據(jù)保護(hù) n數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)是由DBMS統(tǒng)一管理和控制的, 為了適應(yīng)數(shù)據(jù)共享的環(huán)境,DBMS必須提供數(shù)據(jù)保 護(hù)能力,以保證數(shù)據(jù)庫中數(shù)據(jù)的安全可靠和正確有 效。 n數(shù)據(jù)保護(hù) n安全性 n完整性 n數(shù)據(jù)庫恢復(fù) n并發(fā)控制 An Introduction to Database System 第十章第十章 數(shù)據(jù)庫恢復(fù)技術(shù)數(shù)據(jù)庫恢復(fù)技術(shù) 10

2、.1 事務(wù)的基本概念 10.2 數(shù)據(jù)庫恢復(fù)概述 10.3 故障的種類 10.4 恢復(fù)的實(shí)現(xiàn)技術(shù) 10.5 恢復(fù)策略 10.6 具有檢查點(diǎn)的恢復(fù)技術(shù) 10.7 數(shù)據(jù)庫鏡像 An Introduction to Database System 10.1 事務(wù)的基本概念事務(wù)的基本概念 一、什么是事務(wù) 二、如何定義事務(wù) 三、事務(wù)的特性 An Introduction to Database System 一、什么是事務(wù)一、什么是事務(wù) n定義定義: :事務(wù)(Transaction)是用戶定義的一個(gè)數(shù)據(jù)庫 操作序列,這些操作要么全做,要么全不做,是一 個(gè)不可分割的工作單位。 n事務(wù)和程序是兩個(gè)概念 n在關(guān)

3、系數(shù)據(jù)庫中,一個(gè)事務(wù)可以是一條SQL語句,一組 SQL語句或整個(gè)程序 n一個(gè)應(yīng)用程序通常包含多個(gè)事務(wù) n事務(wù)是恢復(fù)和并發(fā)控制的基本單位 An Introduction to Database System 二、如何定義事務(wù)二、如何定義事務(wù) n顯式定義方式 BEGIN TRANSACTION BEGIN TRANSACTION SQL 語句1 SQL 語句1 SQL 語句2 SQL 語句2 COMMIT ROLLBACK n隱式方式 當(dāng)用戶沒有顯式地定義事務(wù)時(shí), DBMS按缺省規(guī)定自動(dòng)劃分事務(wù) An Introduction to Database System 事務(wù)結(jié)束事務(wù)結(jié)束 COMMIT

4、事務(wù)正常正常結(jié)束 提交提交事務(wù)的所有操作(更新) 事務(wù)中所有對(duì)數(shù)據(jù)庫的更新永久生效 ROLLBACK 事務(wù)異常異常終止 n事務(wù)運(yùn)行的過程中發(fā)生了故障,不能繼續(xù)執(zhí)行 回滾回滾事務(wù)的所有更新操作 n事務(wù)滾回到開始時(shí)的狀態(tài) An Introduction to Database System 事務(wù)舉例事務(wù)舉例 n例:將Course表“數(shù)據(jù)庫”課程的編號(hào)由1改為8。 注意:要修改兩個(gè)表注意:要修改兩個(gè)表,Course和和SC,兩個(gè)都要修改成功,要么不修改兩個(gè)都要修改成功,要么不修改 BEGIN TRANSACTION UPDATE Course Set Cno=8 Where Cno=1 UPDATE

5、 SC Set Cno=8 Where Cno=1 COMMIT An Introduction to Database System 三、事務(wù)的特性三、事務(wù)的特性(ACID特性特性) 事務(wù)的ACID特性: n原子性(Atomicity) n一致性(Consistency) n隔離性(Isolation) n持續(xù)性(Durability ) An Introduction to Database System 1. 原子性原子性 事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中 包括的諸操作要么都做,要么都不做 。 An Introduction to Database System 2. 一致性一致性 事

6、務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一 個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。 一致性狀態(tài): 數(shù)據(jù)庫中只包含成功事務(wù)提交的結(jié)果。 不一致狀態(tài): 數(shù)據(jù)庫中包含失敗事務(wù)的結(jié)果。 An Introduction to Database System 一致性與原子性一致性與原子性 銀行轉(zhuǎn)帳例:銀行轉(zhuǎn)帳例:從帳號(hào)A中取出一萬元,存入帳號(hào)B。 n定義一個(gè)事務(wù),該事務(wù)包括兩個(gè)操作 n這兩個(gè)操作要么全做,要么全不做 n全做或者全不做,數(shù)據(jù)庫都處于一致性狀態(tài)。 n如果只做一個(gè)操作,數(shù)據(jù)庫就處于不一致性狀態(tài)。 B=B+10000 A=A-10000 BA An Introduction to Database System

7、3. 隔離性隔離性 對(duì)并發(fā)執(zhí)行而言 一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾,即: n一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其他并發(fā)事務(wù)是隔 離的。 n并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。 An Introduction to Database System T1的修改被的修改被T2覆蓋了!覆蓋了! 讀A=16 AA-3 寫回A=13 讀A=16 AA-1 寫回A=15 T2T1 非隔離性例子非隔離性例子 An Introduction to Database System 4. 持續(xù)性持續(xù)性 n持續(xù)性也稱永久性(Permanence),是指: n一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫中數(shù)據(jù)的改變就 應(yīng)該是永久性的。

8、 n接下來的其他操作或故障不應(yīng)該對(duì)其執(zhí)行結(jié)果有 任何影響。 An Introduction to Database System 事務(wù)的特性事務(wù)的特性 n保證事務(wù)ACID特性是事務(wù)處理的任務(wù) n破壞事務(wù)破壞事務(wù)ACIDACID特性的因素特性的因素 (1)多個(gè)事務(wù)并行運(yùn)行時(shí),不同事務(wù)的操作交叉執(zhí)行。 (2)事務(wù)在運(yùn)行過程中被強(qiáng)行停止。 An Introduction to Database System 10.2 數(shù)據(jù)庫恢復(fù)概述數(shù)據(jù)庫恢復(fù)概述 n故障是不可避免的 n計(jì)算機(jī)硬件故障 n系統(tǒng)軟件和應(yīng)用軟件的錯(cuò)誤 n操作員的失誤 n惡意的破壞 n故障的影響 n運(yùn)行事務(wù)非正常中斷 n破壞數(shù)據(jù)庫 所以需要

9、恢復(fù)機(jī)制所以需要恢復(fù)機(jī)制 ! An Introduction to Database System 數(shù)據(jù)庫恢復(fù)概述(續(xù))數(shù)據(jù)庫恢復(fù)概述(續(xù)) n數(shù)據(jù)庫管理系統(tǒng)對(duì)故障的對(duì)策 nDBMS提供恢復(fù)子系統(tǒng) n保證故障發(fā)生后,能把數(shù)據(jù)庫中的數(shù)據(jù)從錯(cuò)誤狀 態(tài)恢復(fù)到某種邏輯一致的狀態(tài) n保證事務(wù)ACID n恢復(fù)技術(shù)是衡量DBMS優(yōu)劣的重要指標(biāo) An Introduction to Database System 10.3 故障的種類故障的種類 一、事務(wù)內(nèi)部的故障 二、系統(tǒng)故障 三、介質(zhì)故障 四、計(jì)算機(jī)病毒 An Introduction to Database System 一、事務(wù)故障一、事務(wù)故障-用日志

10、文件自動(dòng)恢復(fù)用日志文件自動(dòng)恢復(fù) n什么是事務(wù)故障 n某個(gè)事務(wù)在運(yùn)行過程中由于種種原因未運(yùn)行至正 常終止點(diǎn)就中斷了 n事務(wù)故障的常見原因 n輸入數(shù)據(jù)有誤 n運(yùn)算溢出 n違反了某些完整性限制 n某些應(yīng)用程序出錯(cuò) n并行事務(wù)發(fā)生死鎖 n An Introduction to Database System 事務(wù)故障的恢復(fù)事務(wù)故障的恢復(fù) n發(fā)生事務(wù)故障時(shí),中斷的事務(wù)可能已把對(duì)數(shù) 據(jù)庫的部分修改寫回磁盤 n事務(wù)故障的恢復(fù):撤消事務(wù)(UNDO) n強(qiáng)行回滾(ROLLBACK)該事務(wù) n清除該事務(wù)對(duì)數(shù)據(jù)庫的所有修改,使得這個(gè) 事務(wù)象根本沒有啟動(dòng)過一樣 An Introduction to Database

11、System 例:銀行轉(zhuǎn)帳事務(wù)處理例:銀行轉(zhuǎn)帳事務(wù)處理 BEGIN TRANSACTION 讀A賬戶余額 A=A-1000 IF (A0) THEN ROLLBACK; ELSE 讀B賬戶余額; B=B+1000; 寫回B; COMMIT; An Introduction to Database System 二、系統(tǒng)故障二、系統(tǒng)故障-用日志文件自動(dòng)恢復(fù)用日志文件自動(dòng)恢復(fù) n什么是系統(tǒng)故障 n整個(gè)系統(tǒng)的正常運(yùn)行突然被破壞 n所有正在運(yùn)行的事務(wù)都都非正常終止 n內(nèi)存中數(shù)據(jù)庫緩沖區(qū)的信息全部丟失 n外部存儲(chǔ)設(shè)備上的數(shù)據(jù)未受影響外部存儲(chǔ)設(shè)備上的數(shù)據(jù)未受影響 An Introduction to Da

12、tabase System 系統(tǒng)故障的常見原因系統(tǒng)故障的常見原因 n操作系統(tǒng)或DBMS代碼錯(cuò)誤 n操作員操作失誤(例:強(qiáng)制重啟系統(tǒng)) n特定類型的硬件錯(cuò)誤(如CPU故障) n突然停電 An Introduction to Database System 系統(tǒng)故障的恢復(fù)系統(tǒng)故障的恢復(fù) n 清除尚未完成的事務(wù)對(duì)數(shù)據(jù)庫的所有修改 n系統(tǒng)重新啟動(dòng)時(shí),恢復(fù)程序要強(qiáng)行撤消(UNDO) 所有未完成事務(wù) n將緩沖區(qū)中已完成事務(wù)提交的結(jié)果寫入數(shù)據(jù)庫寫入數(shù)據(jù)庫 n系統(tǒng)重新啟動(dòng)時(shí),恢復(fù)程序需要重做(REDO) 所有已提交的事務(wù) 日志文件日志文件 已記錄已記錄 An Introduction to Database

13、System 三、介質(zhì)故障三、介質(zhì)故障-人工恢復(fù),用備份的數(shù)據(jù)人工恢復(fù),用備份的數(shù)據(jù) n硬件故障使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或 全部丟失 n介質(zhì)故障比前兩類故障的可能性小得多,但 破壞性大得多 An Introduction to Database System 介質(zhì)故障的常見原因介質(zhì)故障的常見原因 n硬件故障 n磁盤損壞 n操作系統(tǒng)的某種潛在錯(cuò)誤 n瞬時(shí)強(qiáng)磁場(chǎng)干擾 An Introduction to Database System 介質(zhì)故障的恢復(fù)介質(zhì)故障的恢復(fù) n裝入數(shù)據(jù)庫發(fā)生介質(zhì)故障前某個(gè)時(shí)刻的數(shù)據(jù) 副本 n重做自此時(shí)開始的所有成功事務(wù),將這些事 務(wù)已提交的結(jié)果重新記入數(shù)據(jù)庫 An In

14、troduction to Database System 四、計(jì)算機(jī)病毒四、計(jì)算機(jī)病毒-人工恢復(fù),用備份的數(shù)據(jù)人工恢復(fù),用備份的數(shù)據(jù) n恢復(fù)方法同介質(zhì)故障 An Introduction to Database System 數(shù)據(jù)恢復(fù)操作的基本原理數(shù)據(jù)恢復(fù)操作的基本原理 n恢復(fù)操作的基本原理:冗余 (原理很簡(jiǎn)單原理很簡(jiǎn)單) n利用存儲(chǔ)在系統(tǒng)其它地方的冗余數(shù)據(jù)來重建數(shù)據(jù) 庫中已被破壞或不正確的那部分?jǐn)?shù)據(jù) n恢復(fù)的實(shí)現(xiàn)技術(shù):復(fù)雜 n一個(gè)大型數(shù)據(jù)庫產(chǎn)品,恢復(fù)子系統(tǒng)的代碼要占全 部代碼的10%以上 An Introduction to Database System 10.4 恢復(fù)的實(shí)現(xiàn)技術(shù)恢復(fù)的實(shí)

15、現(xiàn)技術(shù) 恢復(fù)機(jī)制涉及的兩個(gè)關(guān)鍵問題 1. 如何建立冗余數(shù)據(jù) n數(shù)據(jù)轉(zhuǎn)儲(chǔ)(backup) n登記日志文件(logging) 2. 如何利用這些冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫恢復(fù) An Introduction to Database System 10.4.1 數(shù)據(jù)轉(zhuǎn)儲(chǔ)數(shù)據(jù)轉(zhuǎn)儲(chǔ) 一、什么是轉(zhuǎn)儲(chǔ) 二、轉(zhuǎn)儲(chǔ)的用途 三、轉(zhuǎn)儲(chǔ)方法 An Introduction to Database System 一、什么是轉(zhuǎn)儲(chǔ)一、什么是轉(zhuǎn)儲(chǔ) n轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ)是指DBA將整個(gè)數(shù)據(jù)庫復(fù)制到磁帶或另一個(gè)磁 盤上保存起來的過程。 n這些備用的數(shù)據(jù)文本稱為后備副本后備副本或后援副本后援副本。 An Introduction to Databa

16、se System 轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ) 故障發(fā)生點(diǎn)故障發(fā)生點(diǎn) 轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù)運(yùn)行事務(wù) 正常運(yùn)行正常運(yùn)行 Ta Ta Tb Tb Tf Tf 重裝后備副本重裝后備副本 重新運(yùn)行事務(wù)重新運(yùn)行事務(wù) 恢復(fù)恢復(fù) An Introduction to Database System 三、轉(zhuǎn)儲(chǔ)方法三、轉(zhuǎn)儲(chǔ)方法 1靜態(tài)轉(zhuǎn)儲(chǔ)與動(dòng)態(tài)轉(zhuǎn)儲(chǔ) 2海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ) 3轉(zhuǎn)儲(chǔ)方法小結(jié) An Introduction to Database System 1靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ) n在系統(tǒng)中無運(yùn)行事務(wù)時(shí)進(jìn)行轉(zhuǎn)儲(chǔ) n轉(zhuǎn)儲(chǔ)開始時(shí)數(shù)據(jù)庫處于一致性狀態(tài) n轉(zhuǎn)儲(chǔ)期間不允許對(duì)數(shù)據(jù)庫進(jìn)行任何存 取、修改活動(dòng) n優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單 n缺點(diǎn):降低了數(shù)據(jù)庫的可

17、用性 n轉(zhuǎn)儲(chǔ)必須等用戶事務(wù)結(jié)束 n新的事務(wù)必須等轉(zhuǎn)儲(chǔ)結(jié)束才能進(jìn)行 An Introduction to Database System 利用靜態(tài)轉(zhuǎn)儲(chǔ)副本進(jìn)行恢復(fù)利用靜態(tài)轉(zhuǎn)儲(chǔ)副本進(jìn)行恢復(fù) (如果沒有轉(zhuǎn)儲(chǔ)記錄日志文件)重新運(yùn)行事務(wù)。 故障發(fā)生點(diǎn)故障發(fā)生點(diǎn) 靜態(tài)靜態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù)運(yùn)行事務(wù) 正常運(yùn)行正常運(yùn)行 Ta Ta Tb Tb Tf Tf 重裝后備副本重裝后備副本 恢復(fù)恢復(fù) An Introduction to Database System 動(dòng)態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ) n轉(zhuǎn)儲(chǔ)操作與用戶事務(wù)并發(fā)進(jìn)行并發(fā)進(jìn)行 n轉(zhuǎn)儲(chǔ)期間允許允許對(duì)數(shù)據(jù)庫進(jìn)行存取或修改 n優(yōu)點(diǎn) n不用等待正在運(yùn)行的用戶事務(wù)結(jié)束 n不會(huì)影響新

18、事務(wù)的運(yùn)行 n動(dòng)態(tài)轉(zhuǎn)儲(chǔ)的缺點(diǎn) n不能保證副本中的數(shù)據(jù)正確有效 An Introduction to Database System 動(dòng)態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ) n利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)得到的副本進(jìn)行故障恢復(fù) n需要把動(dòng)態(tài)轉(zhuǎn)儲(chǔ)期間各事務(wù)對(duì)數(shù)據(jù)庫的修 改活動(dòng)登記下來,建立日志文件 n后備副本+日志文件才能把數(shù)據(jù)庫恢復(fù)到 某一時(shí)刻的正確狀態(tài) An Introduction to Database System 利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)副本進(jìn)行恢復(fù)利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)副本進(jìn)行恢復(fù) Ta Ta Tb Tb Tf Tf 動(dòng)態(tài)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù)運(yùn)行事務(wù) 故障發(fā)生點(diǎn)故障發(fā)生點(diǎn) 正常運(yùn)行正常運(yùn)行 登記日志文件登記日志文件 登記新日志文件登記新日志

19、文件 轉(zhuǎn)儲(chǔ)日志文件轉(zhuǎn)儲(chǔ)日志文件 重裝后備副本,然后利用轉(zhuǎn)儲(chǔ)的日志文件恢復(fù)重裝后備副本,然后利用轉(zhuǎn)儲(chǔ)的日志文件恢復(fù) 恢復(fù)到一恢復(fù)到一 致性狀態(tài)致性狀態(tài) An Introduction to Database System 2海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ)海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ) n海量轉(zhuǎn)儲(chǔ): 每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫 n增量轉(zhuǎn)儲(chǔ): 只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后更新過的數(shù)據(jù) n海量轉(zhuǎn)儲(chǔ)與增量轉(zhuǎn)儲(chǔ)比較 n從恢復(fù)角度看,使用海量轉(zhuǎn)儲(chǔ)得到的后備副本進(jìn) 行恢復(fù)往往更方便 n但如果數(shù)據(jù)庫很大,事務(wù)處理又十分頻繁,則增 量轉(zhuǎn)儲(chǔ)方式更實(shí)用更有效 An Introduction to Database System 3轉(zhuǎn)儲(chǔ)方法小結(jié)轉(zhuǎn)儲(chǔ)方法小結(jié) n轉(zhuǎn)

20、儲(chǔ)方法分類 轉(zhuǎn)儲(chǔ)狀態(tài)轉(zhuǎn)儲(chǔ)狀態(tài) 動(dòng)態(tài)轉(zhuǎn)儲(chǔ)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ) 轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ) 方式方式 海量轉(zhuǎn)儲(chǔ)海量轉(zhuǎn)儲(chǔ)動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ)動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ)靜態(tài)海量轉(zhuǎn)儲(chǔ)靜態(tài)海量轉(zhuǎn)儲(chǔ) 增量轉(zhuǎn)儲(chǔ)增量轉(zhuǎn)儲(chǔ)動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ)動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ)靜態(tài)增量轉(zhuǎn)儲(chǔ)靜態(tài)增量轉(zhuǎn)儲(chǔ) An Introduction to Database System 轉(zhuǎn)儲(chǔ)策略轉(zhuǎn)儲(chǔ)策略 n應(yīng)定期進(jìn)行數(shù)據(jù)轉(zhuǎn)儲(chǔ),制作后備副本。 n但轉(zhuǎn)儲(chǔ)又是十分耗費(fèi)時(shí)間和資源的,不能頻繁進(jìn)行。 nDBA應(yīng)該根據(jù)數(shù)據(jù)庫使用情況確定適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)周期 和轉(zhuǎn)儲(chǔ)方法。 例如: n每天晚上進(jìn)行動(dòng)態(tài)增量轉(zhuǎn)儲(chǔ) n每周進(jìn)行一次動(dòng)態(tài)海量轉(zhuǎn)儲(chǔ) n每月進(jìn)行一次靜態(tài)海量轉(zhuǎn)儲(chǔ) An Introduction to Databas

21、e System 10.4.2 登記日志文件登記日志文件 一、日志文件的內(nèi)容 二、日志文件的用途 三、登記日志文件的原則 An Introduction to Database System 一、日志文件的內(nèi)容一、日志文件的內(nèi)容 1. 什么是日志文件 定義:定義:日志文件(log)是用來記錄事務(wù)對(duì)數(shù)據(jù)庫的 更新更新操作的文件。 2. 日志文件的格式 以記錄為單位的日志文件 以數(shù)據(jù)塊為單位的日志文件 An Introduction to Database System 日志文件的內(nèi)容(續(xù))日志文件的內(nèi)容(續(xù)) 3. 日志文件內(nèi)容 n各個(gè)事務(wù)的開始標(biāo)記(BEGIN TRANSACTION) n各個(gè)

22、事務(wù)的所有更新更新操作 n各個(gè)事務(wù)的結(jié)束標(biāo)記(COMMIT或ROLLBACK) 日志文件中的一個(gè)日志記錄 (log record) 每個(gè)事件的開始標(biāo)記 每個(gè)更新操作均作為均作為日志文件的一個(gè)日志記錄日志記錄 每個(gè)事件的結(jié)束標(biāo)記 An Introduction to Database System 4. 基于記錄的日志文件基于記錄的日志文件 每條日志記錄的內(nèi)容 n事務(wù)標(biāo)識(shí)(標(biāo)明是那個(gè)事務(wù)) n操作類型(插入、刪除或修改) n操作對(duì)象(記錄ID) n更新前數(shù)據(jù)的舊值(對(duì)插入操作而言,此項(xiàng)為空值) n更新后數(shù)據(jù)的新值(對(duì)刪除操作而言, 此項(xiàng)為空值) An Introduction to Databa

23、se System 5. 基于數(shù)據(jù)塊的日志文件基于數(shù)據(jù)塊的日志文件 每條日志記錄的內(nèi)容 n事務(wù)標(biāo)識(shí)(標(biāo)明是那個(gè)事務(wù)) n操作對(duì)象(Block NO.) n更新前前數(shù)據(jù)所在的整個(gè)數(shù)據(jù)塊的值(對(duì)插入 操作而言,此項(xiàng)為空值) n更新后后整個(gè)數(shù)據(jù)塊的值(對(duì)刪除操作而言, 此項(xiàng)為空值) An Introduction to Database System 二、日志文件的用途二、日志文件的用途 1用途 n、進(jìn)行事務(wù)故障恢復(fù) n、進(jìn)行系統(tǒng)故障恢復(fù) n、協(xié)助后備副本進(jìn)行介質(zhì)故障恢復(fù) An Introduction to Database System 日志文件的用途(續(xù))日志文件的用途(續(xù))靜態(tài)轉(zhuǎn)儲(chǔ)時(shí)靜態(tài)轉(zhuǎn)儲(chǔ)

24、時(shí) 2與靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ)后備副本配合進(jìn)行介質(zhì)故障恢復(fù) n靜態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)已是一致性的數(shù)據(jù) n如果靜態(tài)轉(zhuǎn)儲(chǔ)完成后,仍能定期轉(zhuǎn)儲(chǔ)日志文件仍能定期轉(zhuǎn)儲(chǔ)日志文件, 則在出現(xiàn)介質(zhì)故障重裝數(shù)據(jù)副本后,可以利用 這些日志文件副本對(duì)已完成的事務(wù)進(jìn)行重做處 理 n這樣不必重新運(yùn)行那些已完成的事務(wù)程序就可 把數(shù)據(jù)庫恢復(fù)到故障前某一時(shí)刻的正確狀態(tài) An Introduction to Database System 日志文件的用途(續(xù)日志文件的用途(續(xù))靜態(tài)轉(zhuǎn)儲(chǔ)時(shí)靜態(tài)轉(zhuǎn)儲(chǔ)時(shí) 故障發(fā)生點(diǎn)故障發(fā)生點(diǎn) 靜態(tài)轉(zhuǎn)儲(chǔ)靜態(tài)轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù)運(yùn)行事務(wù) 正常運(yùn)行正常運(yùn)行 Ta Ta Tb TfTb Tf 登記日志文件登記日志文件 重裝后備

25、副本重裝后備副本 利用日志文件恢復(fù)事務(wù)利用日志文件恢復(fù)事務(wù) 繼續(xù)運(yùn)行繼續(xù)運(yùn)行 介質(zhì)故障恢復(fù)介質(zhì)故障恢復(fù) 登記日志文件登記日志文件 An Introduction to Database System 日志文件的用途(續(xù))日志文件的用途(續(xù))動(dòng)態(tài)轉(zhuǎn)儲(chǔ)時(shí)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)時(shí) 3介質(zhì)故障恢復(fù):LOG FILE + 動(dòng)態(tài)轉(zhuǎn)儲(chǔ)后備副本 n動(dòng)態(tài)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫:同時(shí)轉(zhuǎn)儲(chǔ)同一時(shí)間點(diǎn)的日志文件同時(shí)轉(zhuǎn)儲(chǔ)同一時(shí)間點(diǎn)的日志文件 n后備副本與該日志文件結(jié)合起來才能將數(shù)據(jù)庫恢復(fù)到 一致性狀態(tài)。 n利用這些日志文件副本進(jìn)一步恢復(fù)事務(wù),避免重新運(yùn) 行事務(wù)程序。 An Introduction to Database System 三、登記

26、日志文件的原則三、登記日志文件的原則 n為保證數(shù)據(jù)庫是可恢復(fù)的,登記日志文件時(shí)必須 遵循兩條原則 1、登記的次序嚴(yán)格按并行事務(wù)執(zhí)行的時(shí)間次序 2、必須先寫日志文件先寫日志文件,后寫數(shù)據(jù)庫 n寫日志文件操作:把表示這個(gè)修改的日志記錄 寫到日志文件 n寫數(shù)據(jù)庫操作:把對(duì)數(shù)據(jù)的修改寫到數(shù)據(jù)庫中 An Introduction to Database System 登記日志文件的原則(續(xù))登記日志文件的原則(續(xù)) n為什么要先寫日志文件 n寫數(shù)據(jù)庫和寫日志文件是兩個(gè)不同的操作 n在這兩個(gè)操作之間可能發(fā)生故障 n如果先寫了數(shù)據(jù)庫修改,而在日志文件中沒有登記下 這個(gè)修改,則以后就無法恢復(fù)這個(gè)修改了 n如果

27、先寫日志,但沒有修改數(shù)據(jù)庫,按日志文件恢復(fù) 時(shí)只不過是多執(zhí)行一次不必要的UNDO操作,并不會(huì) 影響數(shù)據(jù)庫的正確性 An Introduction to Database System 10.5 恢復(fù)策略恢復(fù)策略 不同故障其恢復(fù)策略和方法也不一樣 10.5.1 事務(wù)故障的恢復(fù) 10.5.2 系統(tǒng)故障的恢復(fù) 10.5.3 介質(zhì)故障的恢復(fù) An Introduction to Database System 10.5.1 事務(wù)故障的恢復(fù)事務(wù)故障的恢復(fù) n事務(wù)故障:事務(wù)在運(yùn)行至正常終止點(diǎn)前被中止 n恢復(fù)方法 n由恢復(fù)子系統(tǒng)利用日志文件撤消(撤消(UNDOUNDO)此事務(wù) 已對(duì)數(shù)據(jù)庫進(jìn)行的修改 n事務(wù)故

28、障的恢復(fù)由系統(tǒng)自動(dòng)完成,不需要用戶干預(yù) An Introduction to Database System 10.5.1 事務(wù)故障的恢復(fù)步驟事務(wù)故障的恢復(fù)步驟 1. 反向掃描文件日志(即從最后向前掃描日志文件即從最后向前掃描日志文件),查找 該事務(wù)的更新操作。 2. 對(duì)該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新 前的值”(Befor Image, BI)寫入數(shù)據(jù)庫。 n插入操作, “更新前的值”為空,則相當(dāng)于做刪除操作 n刪除操作,“更新后的值”為空,則相當(dāng)于做插入操作 n若是修改操作,則用BI 代替 AI(After Image) 3. 繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作

29、,并 做同樣處理。 4. 如此處理下去,直至讀到此事務(wù)的開始標(biāo)記讀到此事務(wù)的開始標(biāo)記,事務(wù)故障恢 復(fù)就完成了。 An Introduction to Database System 10.5.2 系統(tǒng)故障的恢復(fù)系統(tǒng)故障的恢復(fù) n系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因 n一些未完成事務(wù)對(duì)數(shù)據(jù)庫的更新已寫入數(shù)據(jù)庫 n一些已提交事務(wù)對(duì)數(shù)據(jù)庫的更新還留在緩沖區(qū) 沒來得及寫入數(shù)據(jù)庫 n恢復(fù)方法 n1. Undo 故障發(fā)生時(shí)未完成的事務(wù) n2. Redo 已完成的事務(wù) n系統(tǒng)故障的恢復(fù)由系統(tǒng)在重新啟動(dòng)時(shí)自動(dòng)完成, 不需要用戶干預(yù) An Introduction to Database System 10.5.

30、2 系統(tǒng)故障的恢復(fù)系統(tǒng)故障的恢復(fù)步驟步驟 1.正向掃描日志文件(即從頭掃描日志文件),形成 nRedo隊(duì)列: 在故障發(fā)生前已經(jīng)提交的事務(wù) (既有BEGIN TRANSACTION記錄, 也有COMMIT記錄) T1, T3, T8. nUndo隊(duì)列:故障發(fā)生時(shí)尚未完成的事務(wù) (只有BEGIN TRANSACTION記錄, 沒有COMMIT記錄) T2, T4, T5, T6, T7, T9 . An Introduction to Database System 系統(tǒng)故障的恢復(fù)步驟系統(tǒng)故障的恢復(fù)步驟 2. 對(duì)Undo隊(duì)列事務(wù)進(jìn)行UNDO處理 反向掃描日志文件,對(duì)每個(gè)UNDO事務(wù)的更 新操作執(zhí)行

31、逆操作 T2, T4, T5, T6, T7, T9 3. 對(duì)Redo隊(duì)列事務(wù)進(jìn)行REDO處理 正向掃描日志文件,對(duì)每個(gè)REDO事務(wù)重新 執(zhí)行登記的操作 T1, T3, T8. An Introduction to Database System 10.5.3 介質(zhì)故障的恢復(fù)介質(zhì)故障的恢復(fù) 1. 重裝數(shù)據(jù)庫, 使數(shù)據(jù)庫恢復(fù)到一致性狀態(tài) 2. 重做(日志文件中)已完成的事務(wù) An Introduction to Database System 10.5.3 介質(zhì)故障的恢復(fù)介質(zhì)故障的恢復(fù) n恢復(fù)步驟 1. 裝入最新的后備數(shù)據(jù)庫副本,使數(shù)據(jù)庫恢復(fù)到 最近一次轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài)。 n對(duì)于靜態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)

32、庫副本,裝入后數(shù)據(jù)庫 即處于一致性狀態(tài) n對(duì)于動(dòng)態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本,還須同時(shí)裝入還須同時(shí)裝入 轉(zhuǎn)儲(chǔ)時(shí)刻的日志文件副本,轉(zhuǎn)儲(chǔ)時(shí)刻的日志文件副本,利用與恢復(fù)系統(tǒng) 故障相同的方法(即REDO+UNDO),才能 將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。 An Introduction to Database System 利用靜態(tài)轉(zhuǎn)儲(chǔ)副本將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)利用靜態(tài)轉(zhuǎn)儲(chǔ)副本將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài) 故障發(fā)生點(diǎn)故障發(fā)生點(diǎn) 靜態(tài)靜態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù)運(yùn)行事務(wù) 正常運(yùn)行正常運(yùn)行 Ta Ta Tb Tb Tf Tf 登記日志文件登記日志文件 重裝后備副本重裝后備副本 恢復(fù)恢復(fù) An Introduction to Da

33、tabase System 利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)副本將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)利用動(dòng)態(tài)轉(zhuǎn)儲(chǔ)副本將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài) Ta Ta Tb Tb Tf Tf 動(dòng)態(tài)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)轉(zhuǎn)儲(chǔ) 運(yùn)行事務(wù)運(yùn)行事務(wù) 故障發(fā)生點(diǎn)故障發(fā)生點(diǎn) 正常運(yùn)行正常運(yùn)行 登記日志文件登記日志文件 登記新日志文件登記新日志文件 轉(zhuǎn)儲(chǔ)日志文件轉(zhuǎn)儲(chǔ)日志文件 重裝后備副本,然后利用轉(zhuǎn)儲(chǔ)的日志文件恢復(fù)重裝后備副本,然后利用轉(zhuǎn)儲(chǔ)的日志文件恢復(fù) 恢復(fù)到一恢復(fù)到一 致性狀態(tài)致性狀態(tài) An Introduction to Database System 介質(zhì)故障的恢復(fù)(續(xù))介質(zhì)故障的恢復(fù)(續(xù)) 2. 裝入有關(guān)的日志文件副本,重做已完成的事務(wù)。 n首先掃描日志文

34、件,找出故障發(fā)生時(shí)已提交的 事務(wù)的標(biāo)識(shí),將其記入重做隊(duì)列。 n然后正向掃描日志文件,對(duì)重做隊(duì)列中的所有 事務(wù)進(jìn)行重做處理。即將日志記錄中“更新后更新后 的值的值”寫入數(shù)據(jù)庫。 An Introduction to Database System 介質(zhì)故障的恢復(fù)(續(xù))介質(zhì)故障的恢復(fù)(續(xù)) 介質(zhì)故障的恢復(fù)需要DBA介入 nDBA的工作 n重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本和有關(guān)的各日志文件 副本 n執(zhí)行系統(tǒng)提供的恢復(fù)命令 n具體的恢復(fù)操作仍由DBMS完成 An Introduction to Database System 10.7 數(shù)據(jù)庫鏡像數(shù)據(jù)庫鏡像 n介質(zhì)故障是對(duì)系統(tǒng)影響最為嚴(yán)重的一種故障,嚴(yán)重 影響

35、數(shù)據(jù)庫的可用性 n介質(zhì)故障恢復(fù)比較費(fèi)時(shí) n為預(yù)防介質(zhì)故障,DBA必須周期性地轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫 n提高數(shù)據(jù)庫可用性的解決方案 n數(shù)據(jù)庫鏡像(Mirror) An Introduction to Database System 數(shù)據(jù)庫鏡像(續(xù))數(shù)據(jù)庫鏡像(續(xù)) n數(shù)據(jù)庫鏡像 nDBMS自動(dòng)把整個(gè)數(shù)據(jù)庫或其中的關(guān)鍵數(shù)據(jù)復(fù)制到另一個(gè) 磁盤上 nDBMS自動(dòng)保證鏡像數(shù)據(jù)與主數(shù)據(jù)的一致性(圖10.5a) An Introduction to Database System 數(shù)據(jù)庫鏡像的用途數(shù)據(jù)庫鏡像的用途 n出現(xiàn)介質(zhì)故障時(shí) nDBMS自動(dòng)利用鏡像磁盤數(shù)據(jù)進(jìn)行數(shù)據(jù)庫的 恢復(fù),不需要關(guān)閉系統(tǒng)和重裝數(shù)據(jù)庫副本 (圖1

36、0.5b) n沒有出現(xiàn)故障時(shí) n可用于并發(fā)操作(圖10.5a) n一個(gè)用戶對(duì)數(shù)據(jù)加排他鎖修改數(shù)據(jù) n其他用戶可以讀鏡像數(shù)據(jù)庫上的數(shù)據(jù) An Introduction to Database System 數(shù)據(jù)庫鏡像(續(xù)圖數(shù)據(jù)庫鏡像(續(xù)圖10.5) An Introduction to Database System 第十一章第十一章 并發(fā)控制并發(fā)控制 11.1 并發(fā)控制概述 11.2 封鎖 11.3 封鎖協(xié)議 11.4 活鎖和死鎖 11.5 并發(fā)調(diào)度的可串行性 11.6 兩段鎖協(xié)議 11.7 封鎖的粒度 An Introduction to Database System 并發(fā)控制并發(fā)控制 數(shù)

37、據(jù)庫是一個(gè)共享資源,可以供多個(gè)用戶 使用。在這樣的系統(tǒng)中,同一時(shí)間并行運(yùn)行并行運(yùn)行 的事務(wù)數(shù)可達(dá)數(shù)百上千、甚至更多數(shù)百上千、甚至更多。 多事務(wù)執(zhí)行方式多事務(wù)執(zhí)行方式 (1)事務(wù)串行執(zhí)行 n每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其他事務(wù)必 須等到這個(gè)事務(wù)結(jié)束以后方能運(yùn)行 n不能充分利用系統(tǒng)資源,發(fā)揮數(shù)據(jù)庫共享 資源的特點(diǎn) An Introduction to Database System 并發(fā)控制(續(xù))并發(fā)控制(續(xù)) (2)交叉并發(fā)方式(interleaved concurrency) n事務(wù)的并行執(zhí)行是這些并行事務(wù)的并行操作輪流 交叉運(yùn)行 n是單處理機(jī)系統(tǒng)中的并發(fā)方式,能夠減少處理機(jī) 的空閑時(shí)間,提高系

38、統(tǒng)的效率 An Introduction to Database System 并發(fā)控制(續(xù))并發(fā)控制(續(xù)) (3)同時(shí)并發(fā)方式(simultaneous concurrency) n多處理機(jī)系統(tǒng)中,每個(gè)處理機(jī)可以運(yùn)行一個(gè)事務(wù), 多個(gè)處理機(jī)可以同時(shí)運(yùn)行多個(gè)事務(wù),實(shí)現(xiàn)多個(gè)事 務(wù)真正的并行運(yùn)行 n最理想的并發(fā)方式,但受制于硬件環(huán)境 n更復(fù)雜的并發(fā)方式機(jī)制 本章討論的數(shù)據(jù)庫系統(tǒng)并發(fā)控制技術(shù)是以本章討論的數(shù)據(jù)庫系統(tǒng)并發(fā)控制技術(shù)是以單處單處 理機(jī)系統(tǒng)理機(jī)系統(tǒng)為基礎(chǔ)的。為基礎(chǔ)的。 An Introduction to Database System 事務(wù)并發(fā)執(zhí)行帶來的問題事務(wù)并發(fā)執(zhí)行帶來的問題 n可能會(huì)存

39、取和存儲(chǔ)不正確的數(shù)據(jù),破壞事務(wù) 的隔離性和數(shù)據(jù)庫的一致性 nDBMS必須提供并發(fā)控制機(jī)制 n并發(fā)控制機(jī)制也是衡量一個(gè)DBMS性能的重 要標(biāo)志之一 An Introduction to Database System 11.1 11.1 并發(fā)控制概述并發(fā)控制概述 n并發(fā)控制機(jī)制的任務(wù) n對(duì)并發(fā)操作進(jìn)行正確調(diào)度 n保證事務(wù)的隔離性 n保證數(shù)據(jù)庫的一致性 An Introduction to Database System T1的修改被的修改被T2覆蓋了!覆蓋了! 讀A=16 AA-3 寫回A=13 讀A=16 AA-1 寫回A=15 事務(wù) T2事務(wù) T1 數(shù)據(jù)不一致實(shí)例:飛機(jī)訂票系統(tǒng)數(shù)據(jù)不一致實(shí)例

40、:飛機(jī)訂票系統(tǒng) An Introduction to Database System 并發(fā)操作帶來的數(shù)據(jù)不一致性并發(fā)操作帶來的數(shù)據(jù)不一致性 n1、丟失修改(lost update) n2、不可重復(fù)讀(non-repeatable read) n3、讀“臟”數(shù)據(jù)(dirty read) An Introduction to Database System 1. 丟失修改丟失修改 丟失修改丟失修改是指事務(wù)1與事務(wù)2從數(shù)據(jù)庫中讀 入同一數(shù)據(jù)并修改 事務(wù)2的提交結(jié)果破壞了事務(wù)1提交的結(jié) 果,導(dǎo)致事務(wù)1的修改被丟失。 An Introduction to Database System 2. 不可重復(fù)讀

41、不可重復(fù)讀 不可重復(fù)讀不可重復(fù)讀是指事務(wù)1讀取數(shù)據(jù)后,事務(wù)2 執(zhí)行更新操作,使事務(wù)1無法再現(xiàn)前一次讀 取結(jié)果。 An Introduction to Database System 3. 讀讀“臟臟”數(shù)據(jù)數(shù)據(jù) 事務(wù)1修改某一數(shù)據(jù),并將其寫回磁盤 事務(wù)2讀取同一數(shù)據(jù)后 事務(wù)1由于某種原因被撤消,這時(shí)事務(wù)1已修改過 的數(shù)據(jù)恢復(fù)原值 事務(wù)2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致, 是不正確的數(shù)據(jù),又稱為“臟”數(shù)據(jù)。 An Introduction to Database System 圖圖11.1 三種數(shù)據(jù)不一致性三種數(shù)據(jù)不一致性 T1T2 讀A=16 AA-1 寫回 A=15 讀A=16 AA-1 寫

42、回A=15 (a) 丟失修改丟失修改 An Introduction to Database System 圖圖11.1 三種數(shù)據(jù)不一致性三種數(shù)據(jù)不一致性(續(xù)續(xù)) 讀B=100 BB*2 寫回B=200 讀A=50 讀B=100 求和=150 讀A=50 讀B=200 求和=250 (驗(yàn)算不對(duì)) T2T1 (b) 不可重復(fù)讀不可重復(fù)讀 An Introduction to Database System 圖圖11.1 三種數(shù)據(jù)不一致性三種數(shù)據(jù)不一致性(續(xù)續(xù)) 讀C=200 讀C=100 CC*2 寫回C ROLLBACK C恢復(fù)為100 T2T1 (c) 讀讀“臟臟”數(shù)據(jù)數(shù)據(jù) An Intro

43、duction to Database System 產(chǎn)生數(shù)據(jù)不一致的原因及處理對(duì)策產(chǎn)生數(shù)據(jù)不一致的原因及處理對(duì)策 n原因 產(chǎn)生上述三類數(shù)據(jù)不一致的主要原因是并發(fā)操作破壞了并發(fā)操作破壞了 事務(wù)的事務(wù)的隔離性。隔離性。 n對(duì)策 并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作用正確的方式調(diào)度并發(fā)操作,使一個(gè)用戶 事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一 致。 并發(fā)控制的主要技術(shù)就是封鎖。封鎖。 An Introduction to Database System 11.2 封鎖封鎖 一、什么是封鎖 二、基本封鎖類型 三、基本鎖的相容矩陣 An Introduction to Database

44、System 一、什么是封鎖一、什么是封鎖 n定義定義:封鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、 記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。 n加鎖后事務(wù)T就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在 事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新更新此數(shù) 據(jù)對(duì)象。 n封鎖是實(shí)現(xiàn)并發(fā)控制的一個(gè)非常重要的技術(shù) An Introduction to Database System 二、基本封鎖類型二、基本封鎖類型 nDBMS通常提供了多種類型的封鎖。一個(gè)事務(wù)對(duì)某 個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么樣的控制是由封鎖 的類型決定的。 n基本封鎖類型 n排它鎖(eXclusive lock,簡(jiǎn)記為X鎖) n共享鎖(Shar

45、e lock,簡(jiǎn)記為S鎖) An Introduction to Database System 排它鎖排它鎖 n排它鎖又稱為寫鎖 n定義:若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允 許T讀取和修改A,其它任何事務(wù)都不能再對(duì) A加任何類型的鎖,直到T釋放A上的鎖。 An Introduction to Database System 共享鎖共享鎖 n共享鎖又稱為讀鎖 n定義:若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則其它 事務(wù)只能再對(duì)A加S鎖,而不能加X鎖,直到T 釋放A上的S鎖。 An Introduction to Database System 三、鎖的相容矩陣三、鎖的相容矩陣 Y=Yes,相容的請(qǐng)求,

46、相容的請(qǐng)求 N=No,不相容的請(qǐng)求,不相容的請(qǐng)求 表示不加鎖表示不加鎖 T1 T2 XS- X N NY SNYY -YYY An Introduction to Database System 11.3 封鎖協(xié)議封鎖協(xié)議 n在運(yùn)用X鎖和S鎖對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),需要約定一些 規(guī)則,稱這些規(guī)則為封鎖協(xié)議封鎖協(xié)議(Locking Protocol)。 n何時(shí)申請(qǐng)X鎖或S鎖 n持鎖時(shí)間、何時(shí)釋放 n 不同的封鎖協(xié)議,在不同程度上不同程度上為并發(fā)操作的正 確調(diào)度提供一定的保證 n常用的封鎖協(xié)議:三級(jí)封鎖協(xié)議 An Introduction to Database System 1級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 n

47、定義:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X 鎖,直到事務(wù)結(jié)束才釋放。 n正常結(jié)束(COMMIT) n非正常結(jié)束(ROLLBACK) n1級(jí)封鎖協(xié)議可防止丟失修改可防止丟失修改 n在1級(jí)封鎖協(xié)議中,如果是讀數(shù)據(jù),是不需要加鎖 的,所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。 An Introduction to Database System 1級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 T1T2 Xlock A 獲得 讀A=16 AA-1 寫回A=15 Commit Unlock A Xlock A 等待 等待 等待 等待 獲得Xlock A 讀A=15 AA-1 寫回A=14 Commit Unlock A 沒有沒有

48、丟失修改丟失修改 An Introduction to Database System 1級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 讀A=15 Xlock A 獲得 讀A=16 AA-1 寫回A=15 Rollback Unlock A T2T1 讀讀“臟臟”數(shù)據(jù)數(shù)據(jù) An Introduction to Database System 1級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 Xlock B 獲得 讀B=100 BB*2 寫回B=200 Commit Unlock B 讀A=50 讀B=100 求和=150 讀A=50 讀B=200 求和=250 (驗(yàn)算不對(duì)) T2T1 不可重復(fù)讀不可重復(fù)讀 An Introduction to

49、 Database System 2級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 n定義: 1級(jí)封鎖協(xié)議+事務(wù)T在讀取數(shù)據(jù)R前必 須先加S鎖,讀完后即刻釋放S鎖。 n2級(jí)封鎖協(xié)議可以防止丟失修改和讀可以防止丟失修改和讀“臟臟” 數(shù)據(jù)。數(shù)據(jù)。 n在2級(jí)封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋 放S鎖,所以它不能保證可重復(fù)讀不能保證可重復(fù)讀。 An Introduction to Database System 2級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 不可重復(fù)讀不可重復(fù)讀 Sclock A 獲得 讀A=50 Unlock A Sclock B 獲得 讀B=100 Unlock B 求和=150 Xlock B 等待 等待 獲得Xlock B 讀

50、B=100 BB*2 寫回B=200 Commit Unlock B T2T1 Sclock A 獲得 讀A=50 Unlock A Sclock B 獲得 讀B=200 Unlock B 求和=250 (驗(yàn)算不對(duì)驗(yàn)算不對(duì)) T2T1 (續(xù)) An Introduction to Database System 3級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 n定義: 1級(jí)封鎖協(xié)議 + 事務(wù)T在讀取數(shù)據(jù)R之 前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。 n3級(jí)封鎖協(xié)議可防止丟失修改、讀臟數(shù)據(jù)和不可重可防止丟失修改、讀臟數(shù)據(jù)和不可重 復(fù)讀。復(fù)讀。 An Introduction to Database System 3級(jí)封鎖協(xié)議級(jí)封鎖協(xié)議 T1T2 Slock A 讀A=50 Slock B 讀B=100 求和=150 讀A=50 讀B=100 求和=150 Commit Unlock A Unlock B Xlock B 等待 等待 等待 等待 等待 等待 等待 等待 獲得Xloc

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論