數(shù)據(jù)庫(kù)原理及應(yīng)用開(kāi)發(fā)技術(shù)_事務(wù)管理6_第1頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用開(kāi)發(fā)技術(shù)_事務(wù)管理6_第2頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用開(kāi)發(fā)技術(shù)_事務(wù)管理6_第3頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用開(kāi)發(fā)技術(shù)_事務(wù)管理6_第4頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用開(kāi)發(fā)技術(shù)_事務(wù)管理6_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、講義六:事務(wù)管理講義六:事務(wù)管理主要內(nèi)容主要內(nèi)容 事務(wù)的概念事務(wù)的概念 恢復(fù)措施恢復(fù)措施 并發(fā)控制并發(fā)控制 小結(jié)小結(jié)6.1 事務(wù)的概念事務(wù)的概念事務(wù):構(gòu)成單一邏輯工作單元的操作的集合事務(wù):構(gòu)成單一邏輯工作單元的操作的集合事務(wù)是由一系列的對(duì)數(shù)據(jù)庫(kù)的查詢(xún)操作和更新操事務(wù)是由一系列的對(duì)數(shù)據(jù)庫(kù)的查詢(xún)操作和更新操作構(gòu)成,這些操作是一個(gè)整體,不能分割。作構(gòu)成,這些操作是一個(gè)整體,不能分割。事務(wù)要么所有的操作都順利完成,要么一個(gè)操作事務(wù)要么所有的操作都順利完成,要么一個(gè)操作也不要做,絕不能只完成了部分操作,而還有一些也不要做,絕不能只完成了部分操作,而還有一些操作沒(méi)有完成。操作沒(méi)有完成。DBMS中的事務(wù)管理

2、子系統(tǒng)負(fù)責(zé)事務(wù)的處理中的事務(wù)管理子系統(tǒng)負(fù)責(zé)事務(wù)的處理(1)原子性()原子性(Atomicity) 一個(gè)事務(wù)中的所有操作,是一個(gè)邏輯上不可分一個(gè)事務(wù)中的所有操作,是一個(gè)邏輯上不可分割的單位。割的單位。(2)一致性()一致性(Consistency) 數(shù)據(jù)庫(kù)處于一個(gè)一致性狀態(tài)是指數(shù)據(jù)庫(kù)中的數(shù)數(shù)據(jù)庫(kù)處于一個(gè)一致性狀態(tài)是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)滿(mǎn)足各種完整性約束。據(jù)滿(mǎn)足各種完整性約束。1 事務(wù)的特性事務(wù)的特性(3)隔離性()隔離性(Isolation) 隔離性的含義是指無(wú)論同時(shí)有多少事務(wù)在執(zhí)行,隔離性的含義是指無(wú)論同時(shí)有多少事務(wù)在執(zhí)行,DBMS會(huì)保證事務(wù)之間互不干擾,就像只有一個(gè)事會(huì)保證事務(wù)之間互不干擾,就像

3、只有一個(gè)事務(wù)在運(yùn)行一樣。務(wù)在運(yùn)行一樣。(4)持久性()持久性(Durability) DBMS的恢復(fù)子系統(tǒng)采用日志和備份技術(shù)保證的恢復(fù)子系統(tǒng)采用日志和備份技術(shù)保證事務(wù)的持久性。事務(wù)的持久性。事務(wù)的這四個(gè)特性一般簡(jiǎn)稱(chēng)為事務(wù)的事務(wù)的這四個(gè)特性一般簡(jiǎn)稱(chēng)為事務(wù)的ACID特特性。性。1 事務(wù)的特性事務(wù)的特性(1)啟動(dòng)事務(wù):?jiǎn)?dòng)事務(wù): BEGIN TRANSACTION(2)提交事務(wù)提交事務(wù) COMMIT TRANSACTION(3)回滾語(yǔ)句回滾語(yǔ)句 ROLLBACK TRANSACTION2 事務(wù)的語(yǔ)句事務(wù)的語(yǔ)句例例 在運(yùn)輸部門(mén)的訂票數(shù)據(jù)庫(kù)在運(yùn)輸部門(mén)的訂票數(shù)據(jù)庫(kù)一個(gè)完整事務(wù):一個(gè)完整事務(wù):-開(kāi)始事務(wù):開(kāi)

4、始事務(wù):(1)查詢(xún)某趟車(chē)次查詢(xún)某趟車(chē)次TrainNo的剩余車(chē)票的剩余車(chē)票(2)插入訂票記錄插入訂票記錄ReservedTicket(3)更新剩余票額更新剩余票額Ticket的數(shù)量的數(shù)量-提交事務(wù)提交事務(wù)3 事務(wù)舉例事務(wù)舉例Select TSum = TicketSum -取出剩余車(chē)票數(shù)量取出剩余車(chē)票數(shù)量From TrainTicketWhere TrainNo = D123;IF TSum = 0 -沒(méi)有剩余車(chē)票沒(méi)有剩余車(chē)票ROLLBACK TRANSACTION -回滾事務(wù)回滾事務(wù)ELSEBEGIN TRANSACTIONINSERT INTO ReservedTicket values(“

5、車(chē)次車(chē)次”,“發(fā)站發(fā)站”,“到站到站”,“座位號(hào)座位號(hào)”,“票價(jià)票價(jià)”,”日日期期”,););UPDATE TrainTicket SET TicketSum = TicketSum 1where TicketNo = D123;COMMIT TRANSACTION -提交事務(wù)提交事務(wù) END3 事務(wù)舉例事務(wù)舉例4 4 事務(wù)狀態(tài)事務(wù)狀態(tài) 事務(wù)必須處于下列狀態(tài)之一事務(wù)必須處于下列狀態(tài)之一活動(dòng)狀態(tài):活動(dòng)狀態(tài): 初始狀態(tài);事務(wù)執(zhí)行時(shí)處于這個(gè)狀態(tài)初始狀態(tài);事務(wù)執(zhí)行時(shí)處于這個(gè)狀態(tài)部分提交狀態(tài):部分提交狀態(tài): 最后一條語(yǔ)句執(zhí)行后最后一條語(yǔ)句執(zhí)行后失敗狀態(tài):失敗狀態(tài): 發(fā)現(xiàn)正常的執(zhí)行不能繼續(xù)之后發(fā)現(xiàn)正常的執(zhí)

6、行不能繼續(xù)之后中止?fàn)顟B(tài):中止?fàn)顟B(tài): 事務(wù)回滾并且數(shù)據(jù)庫(kù)已恢復(fù)到事務(wù)開(kāi)始執(zhí)行前的狀態(tài)之后事務(wù)回滾并且數(shù)據(jù)庫(kù)已恢復(fù)到事務(wù)開(kāi)始執(zhí)行前的狀態(tài)之后提交狀態(tài):提交狀態(tài): 成功完成后成功完成后6.2 6.2 事務(wù)恢復(fù)事務(wù)恢復(fù) DBMS中的數(shù)據(jù)如何流動(dòng)的:中的數(shù)據(jù)如何流動(dòng)的:DB系統(tǒng)緩沖區(qū)系統(tǒng)緩沖區(qū)T1工作區(qū)工作區(qū)T2工作區(qū)工作區(qū)內(nèi)存內(nèi)存圖:圖: 數(shù)據(jù)的流動(dòng)數(shù)據(jù)的流動(dòng) 標(biāo)號(hào)和的流程分別標(biāo)號(hào)和的流程分別是讀操作和寫(xiě)操作的數(shù)是讀操作和寫(xiě)操作的數(shù)據(jù)流動(dòng)過(guò)程。據(jù)流動(dòng)過(guò)程。 6.2 6.2 事務(wù)恢復(fù)事務(wù)恢復(fù) 恢復(fù)機(jī)制:恢復(fù)機(jī)制:1.數(shù)據(jù)庫(kù)系統(tǒng)必不可少的組成部分,負(fù)責(zé)將數(shù)數(shù)據(jù)庫(kù)系統(tǒng)必不可少的組成部分,負(fù)責(zé)將數(shù)據(jù)庫(kù)恢復(fù)到故

7、障發(fā)生前的某個(gè)一致的狀態(tài)。據(jù)庫(kù)恢復(fù)到故障發(fā)生前的某個(gè)一致的狀態(tài)。2.高可用性:盡快恢復(fù)數(shù)據(jù)庫(kù)功能,使崩潰的高可用性:盡快恢復(fù)數(shù)據(jù)庫(kù)功能,使崩潰的數(shù)據(jù)庫(kù)不能使用的時(shí)間減少到最小。數(shù)據(jù)庫(kù)不能使用的時(shí)間減少到最小。(1)事務(wù)故障)事務(wù)故障 事務(wù)在運(yùn)行過(guò)程中,如果出現(xiàn)運(yùn)算溢出,違反事務(wù)在運(yùn)行過(guò)程中,如果出現(xiàn)運(yùn)算溢出,違反了某些完整性規(guī)則,某些應(yīng)用程序的錯(cuò)誤,以及并了某些完整性規(guī)則,某些應(yīng)用程序的錯(cuò)誤,以及并發(fā)事務(wù)發(fā)生死鎖等,使事務(wù)不能繼續(xù)執(zhí)行下去,這發(fā)事務(wù)發(fā)生死鎖等,使事務(wù)不能繼續(xù)執(zhí)行下去,這種情況稱(chēng)為事務(wù)故障。種情況稱(chēng)為事務(wù)故障。非法輸入;溢出或超出資源限制等非法輸入;溢出或超出資源限制等1 1 故

8、障種類(lèi)故障種類(lèi) (2)系統(tǒng)故障)系統(tǒng)故障 系統(tǒng)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于某種原系統(tǒng)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于某種原因,如操作系統(tǒng)或因,如操作系統(tǒng)或DBMS代碼錯(cuò)誤,操作員操作失代碼錯(cuò)誤,操作員操作失誤、特定類(lèi)型的硬件錯(cuò)誤(如誤、特定類(lèi)型的硬件錯(cuò)誤(如CPU故障)、突然停故障)、突然停電等造成系統(tǒng)停止運(yùn)行,丟失了系統(tǒng)緩沖區(qū)中的數(shù)電等造成系統(tǒng)停止運(yùn)行,丟失了系統(tǒng)緩沖區(qū)中的數(shù)據(jù),而存儲(chǔ)在磁盤(pán)中的數(shù)據(jù)未受到影響。據(jù),而存儲(chǔ)在磁盤(pán)中的數(shù)據(jù)未受到影響。1 1 故障種類(lèi)故障種類(lèi) (3)介質(zhì)故障)介質(zhì)故障 系統(tǒng)在運(yùn)行過(guò)程中,由于某種硬件故障,如磁系統(tǒng)在運(yùn)行過(guò)程中,由于某種硬件故障,如磁盤(pán)壞損,磁頭碰撞

9、、或由于操作系統(tǒng)的某種潛在的盤(pán)壞損,磁頭碰撞、或由于操作系統(tǒng)的某種潛在的錯(cuò)誤、瞬時(shí)強(qiáng)磁場(chǎng)干擾,使存儲(chǔ)在外存上的數(shù)據(jù)部錯(cuò)誤、瞬時(shí)強(qiáng)磁場(chǎng)干擾,使存儲(chǔ)在外存上的數(shù)據(jù)部分損失或全部損失,稱(chēng)為介質(zhì)故障。這類(lèi)故障比前分損失或全部損失,稱(chēng)為介質(zhì)故障。這類(lèi)故障比前兩類(lèi)故障的可能性小的多,但破壞性最大,所有正兩類(lèi)故障的可能性小的多,但破壞性最大,所有正在運(yùn)行的事務(wù)被中止,系統(tǒng)緩沖區(qū)中的數(shù)據(jù)無(wú)法寫(xiě)在運(yùn)行的事務(wù)被中止,系統(tǒng)緩沖區(qū)中的數(shù)據(jù)無(wú)法寫(xiě)到磁盤(pán),存儲(chǔ)在磁盤(pán)上的數(shù)據(jù)全部丟失!到磁盤(pán),存儲(chǔ)在磁盤(pán)上的數(shù)據(jù)全部丟失!1 1 故障種類(lèi)故障種類(lèi) 2 2 恢復(fù)措施恢復(fù)措施 (1) 日志文件日志文件 事務(wù)由一系列對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)

10、操作組成,按照事務(wù)由一系列對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)操作組成,按照操作執(zhí)行的先后次序,記錄下事務(wù)所執(zhí)行的所有對(duì)操作執(zhí)行的先后次序,記錄下事務(wù)所執(zhí)行的所有對(duì)數(shù)據(jù)庫(kù)的寫(xiě)操作(更新操作),就構(gòu)成了事務(wù)的日數(shù)據(jù)庫(kù)的寫(xiě)操作(更新操作),就構(gòu)成了事務(wù)的日志文件。志文件。l日志文件的格式和內(nèi)容日志文件的格式和內(nèi)容日志文件從邏輯上來(lái)看是由若干條記錄構(gòu)成的,這些日志文件從邏輯上來(lái)看是由若干條記錄構(gòu)成的,這些記錄叫做日志記錄,同一個(gè)事務(wù)的日志記錄組織成了一個(gè)鏈記錄叫做日志記錄,同一個(gè)事務(wù)的日志記錄組織成了一個(gè)鏈表。表。l日志文件示意圖日志文件示意圖 T1UTrainTicket(TicketSum)8079(b)(a)Beg

11、inInsertRollbackBeginInsertCommitUpdate2 2 恢復(fù)措施恢復(fù)措施 l日志文件示意圖日志文件示意圖 在圖中,圖在圖中,圖(a)為向一個(gè)表中插入一條記錄,為向一個(gè)表中插入一條記錄,出錯(cuò)了,則終止事物執(zhí)行。出錯(cuò)了,則終止事物執(zhí)行。 圖圖(b)中給出中給出Update記錄的內(nèi)部結(jié)構(gòu),記錄的內(nèi)部結(jié)構(gòu),T1表示表示發(fā)出操作的是事務(wù)發(fā)出操作的是事務(wù)T1,U表示操作類(lèi)型是修改表示操作類(lèi)型是修改(Update),Ticket(TicketSum)表示修改的數(shù)據(jù)對(duì)表示修改的數(shù)據(jù)對(duì)象是象是TrainTicket表的表的TicketSum列,修改前的值是列,修改前的值是80,修改

12、后的值是修改后的值是79。2 2 恢復(fù)措施恢復(fù)措施 l日志文件記錄日志文件記錄日志文件由若干記錄組成,記錄有三種類(lèi)型,日志文件由若干記錄組成,記錄有三種類(lèi)型,一是記錄事務(wù)的開(kāi)始,用一是記錄事務(wù)的開(kāi)始,用Begin表示,主要記表示,主要記錄事務(wù)的內(nèi)部標(biāo)識(shí)和開(kāi)始時(shí)間;錄事務(wù)的內(nèi)部標(biāo)識(shí)和開(kāi)始時(shí)間;二是記錄事務(wù)的結(jié)束,圖中用二是記錄事務(wù)的結(jié)束,圖中用Rollback和和Commit表示,主要記錄事務(wù)的內(nèi)部標(biāo)識(shí)和結(jié)束時(shí)表示,主要記錄事務(wù)的內(nèi)部標(biāo)識(shí)和結(jié)束時(shí)間;間;三是記錄事務(wù)的更新操作。三是記錄事務(wù)的更新操作。2 2 恢復(fù)措施恢復(fù)措施 l日志文件記錄信息日志文件記錄信息 其中事務(wù)的更新操作用其中事務(wù)的更新

13、操作用Update表示,更新要記表示,更新要記錄以下的信息:錄以下的信息:1.事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù))事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù))2.操作的類(lèi)型(插入、刪除或修改)操作的類(lèi)型(插入、刪除或修改)3.操作對(duì)象操作對(duì)象(記錄內(nèi)部標(biāo)識(shí)記錄內(nèi)部標(biāo)識(shí))4.更新前數(shù)據(jù)的舊值(對(duì)插入操作而言,此項(xiàng)為更新前數(shù)據(jù)的舊值(對(duì)插入操作而言,此項(xiàng)為空值)空值)5.更新后數(shù)據(jù)的新值(對(duì)刪除操作而言,更新后數(shù)據(jù)的新值(對(duì)刪除操作而言, 此項(xiàng)為此項(xiàng)為空值)空值)2 2 恢復(fù)措施恢復(fù)措施 (2)登記日志文件登記日志文件 日志文件為數(shù)據(jù)庫(kù)的數(shù)據(jù)建立了副本(冗余),日志文件為數(shù)據(jù)庫(kù)的數(shù)據(jù)建立了副本(冗余),為了保證數(shù)據(jù)庫(kù)數(shù)據(jù)的可

14、恢復(fù)性,必須堅(jiān)持先寫(xiě)日為了保證數(shù)據(jù)庫(kù)數(shù)據(jù)的可恢復(fù)性,必須堅(jiān)持先寫(xiě)日志,后寫(xiě)數(shù)據(jù)的原則。事務(wù)更新了某個(gè)數(shù)據(jù)后,把志,后寫(xiě)數(shù)據(jù)的原則。事務(wù)更新了某個(gè)數(shù)據(jù)后,把數(shù)據(jù)由工作區(qū)復(fù)制到系統(tǒng)緩沖區(qū),同時(shí)形成了一條數(shù)據(jù)由工作區(qū)復(fù)制到系統(tǒng)緩沖區(qū),同時(shí)形成了一條日志記錄,該日志記錄也被存放到系統(tǒng)緩沖區(qū)。日志記錄,該日志記錄也被存放到系統(tǒng)緩沖區(qū)。 DBMS保證,把更新后的數(shù)據(jù)由系統(tǒng)緩沖區(qū)移保證,把更新后的數(shù)據(jù)由系統(tǒng)緩沖區(qū)移動(dòng)到數(shù)據(jù)庫(kù)之前,要首先把相應(yīng)的日志記錄寫(xiě)到日動(dòng)到數(shù)據(jù)庫(kù)之前,要首先把相應(yīng)的日志記錄寫(xiě)到日志文件中,這叫做先寫(xiě)日志規(guī)則。志文件中,這叫做先寫(xiě)日志規(guī)則。2 2 恢復(fù)措施恢復(fù)措施 (3)登記日志文件步驟

15、登記日志文件步驟第一步,事務(wù)把更新后的數(shù)據(jù)和形成的日志記錄寫(xiě)第一步,事務(wù)把更新后的數(shù)據(jù)和形成的日志記錄寫(xiě)到系統(tǒng)緩沖區(qū)。到系統(tǒng)緩沖區(qū)。第二步,將日志記錄寫(xiě)到磁盤(pán)上的日志文件。第二步,將日志記錄寫(xiě)到磁盤(pán)上的日志文件。第三步,把更新后的數(shù)據(jù)寫(xiě)到數(shù)據(jù)庫(kù)。第三步,把更新后的數(shù)據(jù)寫(xiě)到數(shù)據(jù)庫(kù)。DB系統(tǒng)緩沖區(qū)T1工作區(qū)T2工作區(qū)內(nèi)存Log2 2 恢復(fù)措施恢復(fù)措施 (4)數(shù)據(jù)庫(kù)備份數(shù)據(jù)庫(kù)備份 為了處理介質(zhì)故障,需要由為了處理介質(zhì)故障,需要由DBA定期地將數(shù)據(jù)定期地將數(shù)據(jù)庫(kù)和日志文件復(fù)制到磁帶或磁盤(pán)上,并將這些備用庫(kù)和日志文件復(fù)制到磁帶或磁盤(pán)上,并將這些備用的數(shù)據(jù)文本妥善地保存起來(lái),當(dāng)數(shù)據(jù)庫(kù)遭到破壞時(shí)的數(shù)據(jù)文本妥

16、善地保存起來(lái),當(dāng)數(shù)據(jù)庫(kù)遭到破壞時(shí)就可以將后備副本重新裝入,恢復(fù)數(shù)據(jù)庫(kù)。就可以將后備副本重新裝入,恢復(fù)數(shù)據(jù)庫(kù)。 2 2 恢復(fù)措施恢復(fù)措施 (4)數(shù)據(jù)庫(kù)備份數(shù)據(jù)庫(kù)備份 制做備份的過(guò)程稱(chēng)為轉(zhuǎn)儲(chǔ)。轉(zhuǎn)儲(chǔ)是十分耗費(fèi)時(shí)間和資源制做備份的過(guò)程稱(chēng)為轉(zhuǎn)儲(chǔ)。轉(zhuǎn)儲(chǔ)是十分耗費(fèi)時(shí)間和資源的,不能頻繁進(jìn)行。的,不能頻繁進(jìn)行。DBA應(yīng)根據(jù)應(yīng)用情況確定適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)應(yīng)根據(jù)應(yīng)用情況確定適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)時(shí)間和周期。時(shí)間和周期。 轉(zhuǎn)儲(chǔ)可以分為增量轉(zhuǎn)儲(chǔ)和海量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)可以分為增量轉(zhuǎn)儲(chǔ)和海量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù),而增量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后修轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù),而增量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后修改過(guò)的數(shù)據(jù)。改過(guò)的數(shù)

17、據(jù)。 轉(zhuǎn)儲(chǔ)還可分為靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。靜態(tài)轉(zhuǎn)儲(chǔ)是指系統(tǒng)轉(zhuǎn)儲(chǔ)還可分為靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。靜態(tài)轉(zhuǎn)儲(chǔ)是指系統(tǒng)停止對(duì)外服務(wù),不允許用戶(hù)運(yùn)行事務(wù),只進(jìn)行轉(zhuǎn)儲(chǔ)操作。停止對(duì)外服務(wù),不允許用戶(hù)運(yùn)行事務(wù),只進(jìn)行轉(zhuǎn)儲(chǔ)操作。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)是指轉(zhuǎn)儲(chǔ)期間允許用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取操作,動(dòng)態(tài)轉(zhuǎn)儲(chǔ)是指轉(zhuǎn)儲(chǔ)期間允許用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取操作,即轉(zhuǎn)儲(chǔ)和用戶(hù)事務(wù)可以并發(fā)執(zhí)行。即轉(zhuǎn)儲(chǔ)和用戶(hù)事務(wù)可以并發(fā)執(zhí)行。 2 2 恢復(fù)措施恢復(fù)措施 (5) 故障恢復(fù)故障恢復(fù)l事務(wù)故障恢復(fù)事務(wù)故障恢復(fù)事務(wù)未運(yùn)行至正常終止點(diǎn)前被事務(wù)未運(yùn)行至正常終止點(diǎn)前被DBMS或用戶(hù)撤或用戶(hù)撤消,這時(shí)恢復(fù)子系統(tǒng)對(duì)此事務(wù)做消,這時(shí)恢復(fù)子系統(tǒng)對(duì)此事務(wù)做UNDO處理。處理。具體做法

18、:具體做法:反向閱讀日志文件,找出該事務(wù)的所有更新反向閱讀日志文件,找出該事務(wù)的所有更新操作,對(duì)每一個(gè)更新操作做它的逆操作。即若記錄操作,對(duì)每一個(gè)更新操作做它的逆操作。即若記錄中是插入操作,則做刪除操作。若記錄中是刪除操中是插入操作,則做刪除操作。若記錄中是刪除操作,則做插入操作,若是修改操作,則用修改前的作,則做插入操作,若是修改操作,則用修改前的值代替修改后的值。如此處理直至讀到此事務(wù)的開(kāi)值代替修改后的值。如此處理直至讀到此事務(wù)的開(kāi)始標(biāo)簽,事務(wù)故障恢復(fù)完成始標(biāo)簽,事務(wù)故障恢復(fù)完成。2 2 恢復(fù)措施恢復(fù)措施 (5)故障恢復(fù)故障恢復(fù)l系統(tǒng)故障恢復(fù)系統(tǒng)故障恢復(fù)造成數(shù)據(jù)庫(kù)不一致?tīng)顟B(tài)的原因有兩個(gè),一

19、是造成數(shù)據(jù)庫(kù)不一致?tīng)顟B(tài)的原因有兩個(gè),一是由于一些未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新已寫(xiě)入數(shù)據(jù)庫(kù),由于一些未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新已寫(xiě)入數(shù)據(jù)庫(kù),二是由于一些已提交事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新還留在緩二是由于一些已提交事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新還留在緩沖區(qū)沒(méi)來(lái)得及寫(xiě)入數(shù)據(jù)庫(kù)。沖區(qū)沒(méi)來(lái)得及寫(xiě)入數(shù)據(jù)庫(kù)。 系統(tǒng)故障恢復(fù)是在系統(tǒng)重新啟動(dòng)以后進(jìn)行的。系統(tǒng)故障恢復(fù)是在系統(tǒng)重新啟動(dòng)以后進(jìn)行的。基本的恢復(fù)算法分為二步:基本的恢復(fù)算法分為二步: 1.根據(jù)日志文件建立重作隊(duì)列和撤消隊(duì)列根據(jù)日志文件建立重作隊(duì)列和撤消隊(duì)列 2.對(duì)對(duì)UNDO隊(duì)列中的事務(wù)進(jìn)行隊(duì)列中的事務(wù)進(jìn)行UNDO處理,對(duì)處理,對(duì)REDO隊(duì)列中事務(wù)的進(jìn)行隊(duì)列中事務(wù)的進(jìn)行REDO處理。

20、處理。 2 2 恢復(fù)措施恢復(fù)措施 (5)故障恢復(fù)故障恢復(fù)l介質(zhì)故障恢復(fù)介質(zhì)故障恢復(fù) 在發(fā)生介質(zhì)故障時(shí),磁盤(pán)上的物理數(shù)據(jù)庫(kù)被破壞,在發(fā)生介質(zhì)故障時(shí),磁盤(pán)上的物理數(shù)據(jù)庫(kù)被破壞,因此,需要重裝最后一次備份的數(shù)據(jù)庫(kù)備份,但重因此,需要重裝最后一次備份的數(shù)據(jù)庫(kù)備份,但重裝副本只能將數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài)。從那以裝副本只能將數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài)。從那以后的所有更新事務(wù)必須重新運(yùn)行才能恢復(fù)到故障時(shí)后的所有更新事務(wù)必須重新運(yùn)行才能恢復(fù)到故障時(shí)的狀態(tài)。的狀態(tài)。2 2 恢復(fù)措施恢復(fù)措施 (6)恢復(fù)過(guò)程示例恢復(fù)過(guò)程示例舉例:舉例:系統(tǒng)在系統(tǒng)在t1時(shí)刻停止運(yùn)行事務(wù),進(jìn)行數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ),時(shí)刻停止運(yùn)行事務(wù),進(jìn)行數(shù)據(jù)庫(kù)轉(zhuǎn)

21、儲(chǔ),在在t2時(shí)刻轉(zhuǎn)儲(chǔ)完畢,得到時(shí)刻轉(zhuǎn)儲(chǔ)完畢,得到t2時(shí)刻的數(shù)據(jù)庫(kù)的一致性副本。當(dāng)時(shí)刻的數(shù)據(jù)庫(kù)的一致性副本。當(dāng)系統(tǒng)運(yùn)行到系統(tǒng)運(yùn)行到tn時(shí)刻發(fā)生故障。時(shí)刻發(fā)生故障。運(yùn)行事務(wù)運(yùn)行事務(wù)介質(zhì)故障恢復(fù)過(guò)程介質(zhì)故障恢復(fù)過(guò)程t1t2tn故障點(diǎn)故障點(diǎn)轉(zhuǎn)儲(chǔ)完畢轉(zhuǎn)儲(chǔ)完畢轉(zhuǎn)儲(chǔ)開(kāi)始轉(zhuǎn)儲(chǔ)開(kāi)始2 2 恢復(fù)措施恢復(fù)措施 (6)恢復(fù)過(guò)程示例恢復(fù)過(guò)程示例l 重裝轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本,使數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)重裝轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本,使數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的一致?tīng)顟B(tài)。的一致?tīng)顟B(tài)。l 裝入轉(zhuǎn)儲(chǔ)后備份的第一個(gè)日志文件裝入轉(zhuǎn)儲(chǔ)后備份的第一個(gè)日志文件l 讀日志文件,找出已提交的事務(wù),按提交次序的讀日志文件,找出已提交的事務(wù),按提交次序的先后將其記入先后

22、將其記入REDO隊(duì)列。隊(duì)列。l 重做重做REDO隊(duì)列中每個(gè)事務(wù)的所有更新操作。隊(duì)列中每個(gè)事務(wù)的所有更新操作。l 裝入下一個(gè)日志文件重復(fù)上一步,直至處理完所裝入下一個(gè)日志文件重復(fù)上一步,直至處理完所有的日志文件,這時(shí)數(shù)據(jù)庫(kù)恢復(fù)至故障前一時(shí)刻的有的日志文件,這時(shí)數(shù)據(jù)庫(kù)恢復(fù)至故障前一時(shí)刻的一致?tīng)顟B(tài)。一致?tīng)顟B(tài)。2 2 恢復(fù)措施恢復(fù)措施 6.3 6.3 并發(fā)控制并發(fā)控制 DBMS為了有效的利用計(jì)算機(jī)的硬件資源和數(shù)為了有效的利用計(jì)算機(jī)的硬件資源和數(shù)據(jù)庫(kù)中的數(shù)據(jù),據(jù)庫(kù)中的數(shù)據(jù),允許多個(gè)事務(wù)并發(fā)執(zhí)行允許多個(gè)事務(wù)并發(fā)執(zhí)行,但事務(wù)的,但事務(wù)的并發(fā)執(zhí)行可能出現(xiàn)諸如丟失修改、讀臟數(shù)據(jù)、不可并發(fā)執(zhí)行可能出現(xiàn)諸如丟失修改

23、、讀臟數(shù)據(jù)、不可重復(fù)讀問(wèn)題,使數(shù)據(jù)庫(kù)處于不一致性的狀態(tài)。重復(fù)讀問(wèn)題,使數(shù)據(jù)庫(kù)處于不一致性的狀態(tài)。 為了防止并發(fā)執(zhí)行產(chǎn)生的問(wèn)題,為了防止并發(fā)執(zhí)行產(chǎn)生的問(wèn)題,DBMS需要具備需要具備并發(fā)控制的功能。并發(fā)控制的功能。并發(fā)控制常用的方法有并發(fā)控制常用的方法有封鎖法封鎖法、時(shí)間印法時(shí)間印法和和樂(lè)觀控制法樂(lè)觀控制法,商用的,商用的DBMS一般都采用一般都采用封鎖法。封鎖法。 并發(fā)控制由并發(fā)控制由DBMS中的調(diào)度器、事務(wù)管理器以及中的調(diào)度器、事務(wù)管理器以及存儲(chǔ)子系統(tǒng)協(xié)同完成并發(fā)控制存儲(chǔ)子系統(tǒng)協(xié)同完成并發(fā)控制READ(X),WRITE(X)LOCK(X),READ(X),WRITE(X),UNLOCK(X)R

24、EAD(X),WRITE(X),COMMIT(T),ABORT(T)事務(wù)管理器調(diào)度器 第一部分DB調(diào)度器 第二部分鎖表6.3 6.3 并發(fā)控制并發(fā)控制并發(fā)控制示意圖并發(fā)控制示意圖l作用:作用:實(shí)現(xiàn)可串行化調(diào)度實(shí)現(xiàn)可串行化調(diào)度采用串行調(diào)度來(lái)保證數(shù)據(jù)庫(kù)處于一致性狀態(tài)采用串行調(diào)度來(lái)保證數(shù)據(jù)庫(kù)處于一致性狀態(tài)本節(jié)中對(duì)數(shù)據(jù)庫(kù)的操作用更底層的讀操作和寫(xiě)操作本節(jié)中對(duì)數(shù)據(jù)庫(kù)的操作用更底層的讀操作和寫(xiě)操作來(lái)描述并發(fā)控制。來(lái)描述并發(fā)控制。用用R(x)表示對(duì)數(shù)據(jù)表示對(duì)數(shù)據(jù)x的讀操作的讀操作W(x)表示對(duì)數(shù)據(jù)表示對(duì)數(shù)據(jù)x的寫(xiě)操作,的寫(xiě)操作,一個(gè)事務(wù)由若干的讀操作和寫(xiě)操作組成。一個(gè)事務(wù)由若干的讀操作和寫(xiě)操作組成。SQL中

25、的中的SELECT語(yǔ)句可以用一串讀操作表示,語(yǔ)句可以用一串讀操作表示,INSERT語(yǔ)句可以用一串寫(xiě)操作表示,語(yǔ)句可以用一串寫(xiě)操作表示,UPDATE和和DELETE可以用一串讀寫(xiě)操作表示。可以用一串讀寫(xiě)操作表示。6.3 6.3 并發(fā)控制并發(fā)控制舉例:舉例: 假設(shè)有兩個(gè)售票員同時(shí)運(yùn)行售票的事務(wù),分別假設(shè)有兩個(gè)售票員同時(shí)運(yùn)行售票的事務(wù),分別用用T1和和T2表示。事務(wù)用底層操作可以表示為:表示。事務(wù)用底層操作可以表示為:W(A)R(B)W(B)-W(A)表示向表示向ReservedTicket表插入一個(gè)元組;表插入一個(gè)元組;-R(B)和和W(B)表示讀、寫(xiě)表示讀、寫(xiě)Ticket表的表的TicketSu

26、m列,因?yàn)橐粋€(gè)列,因?yàn)橐粋€(gè)UPDATE語(yǔ)句首先要讀出語(yǔ)句首先要讀出TicketSum上上的值,然后才能做加的值,然后才能做加1運(yùn)算,所以,運(yùn)算,所以,UPDATE語(yǔ)句要語(yǔ)句要使用兩個(gè)底層操作。使用兩個(gè)底層操作。1 1 并發(fā)產(chǎn)生的問(wèn)題并發(fā)產(chǎn)生的問(wèn)題并發(fā)執(zhí)行一:并發(fā)執(zhí)行一: 在在t1、t2和和t3時(shí)刻售票時(shí)刻售票1的事務(wù)的三個(gè)操作被送到的事務(wù)的三個(gè)操作被送到DBMS的存取層,并立刻的存取層,并立刻獲得執(zhí)行,在獲得執(zhí)行,在t4、t5和和t6時(shí)時(shí)刻執(zhí)行售票刻執(zhí)行售票2的三個(gè)操作,的三個(gè)操作,執(zhí)行的結(jié)果和我們預(yù)期的執(zhí)行的結(jié)果和我們預(yù)期的結(jié)果完全相同,如右圖所結(jié)果完全相同,如右圖所示。兩個(gè)事務(wù)的執(zhí)行是實(shí)示

27、。兩個(gè)事務(wù)的執(zhí)行是實(shí)際上是串行執(zhí)行,先執(zhí)行際上是串行執(zhí)行,先執(zhí)行完完T1,再執(zhí)行,再執(zhí)行T2。開(kāi)始時(shí)Limit = 80 時(shí)時(shí)刻刻 T1 T2 t1 W(A) t2R(ticketsum=80)t3W(ticketsum=ticketsum -1)t4 W(A)t5R(ticketsum=79)t6W(ticketsum=ticketsum -2) 結(jié)束時(shí)Limit=77 1 1 并發(fā)產(chǎn)生的問(wèn)題并發(fā)產(chǎn)生的問(wèn)題并發(fā)執(zhí)行二:并發(fā)執(zhí)行二: 如右圖所示,如右圖所示,T1和和T2的操作穿插執(zhí)行,結(jié)的操作穿插執(zhí)行,結(jié)果是果是T1的修改操作沒(méi)有的修改操作沒(méi)有起到應(yīng)有的作用,這種起到應(yīng)有的作用,這種現(xiàn)象稱(chēng)為現(xiàn)

28、象稱(chēng)為“丟失修改丟失修改”。1 1 并發(fā)產(chǎn)生的問(wèn)題并發(fā)產(chǎn)生的問(wèn)題開(kāi)始時(shí)Limit = 80 時(shí)時(shí)刻刻 T1 T2 t1 W(A) t2R(ticketsum=80)W(A)t3R(ticketsum=80)t4W(ticketsum=ticketsum -1) t5W(ticketsum=ticketsum -2) t6結(jié)束時(shí)Limit=78 并發(fā)執(zhí)行三:并發(fā)執(zhí)行三: 售票售票1執(zhí)行事務(wù)執(zhí)行事務(wù)T1,但是在確認(rèn)是否真正買(mǎi)票但是在確認(rèn)是否真正買(mǎi)票時(shí),他放棄了買(mǎi)票,事務(wù)時(shí),他放棄了買(mǎi)票,事務(wù)被回滾。具體的執(zhí)行過(guò)程被回滾。具體的執(zhí)行過(guò)程如右圖所示,如右圖所示,T2的售票操的售票操作也沒(méi)有獲得成功,原

29、因作也沒(méi)有獲得成功,原因是在是在T1沒(méi)有結(jié)束時(shí),就讀沒(méi)有結(jié)束時(shí),就讀了了ticketsum,這種現(xiàn)象,這種現(xiàn)象叫做叫做“讀臟數(shù)據(jù)讀臟數(shù)據(jù)”。開(kāi)始時(shí)Limit = 1 時(shí)刻時(shí)刻 T1 T2 t1 W(A) t2R(ticketsum=1)t3W(ticketsum=0)W(A)t4R(ticketsum=0)t5t6t7RollBack 結(jié)束時(shí)Limit=0 1 1 并發(fā)產(chǎn)生的問(wèn)題并發(fā)產(chǎn)生的問(wèn)題并發(fā)執(zhí)行四并發(fā)執(zhí)行四: T1在執(zhí)行過(guò)程中讀了兩在執(zhí)行過(guò)程中讀了兩次次ticketsum,但是發(fā)現(xiàn),但是發(fā)現(xiàn)ticketsum的兩次余額不一的兩次余額不一樣,由于不知道發(fā)生了什樣,由于不知道發(fā)生了什么情況而

30、將么情況而將T1撤消了。原撤消了。原因是在兩個(gè)讀操作中間執(zhí)因是在兩個(gè)讀操作中間執(zhí)行了另外的事務(wù)行了另外的事務(wù)T2,這種,這種現(xiàn)象叫做現(xiàn)象叫做“不可重復(fù)讀不可重復(fù)讀”。開(kāi)始時(shí)Limit = 1時(shí)刻時(shí)刻 T1 T2 t1 W(A) t2R(ticketsum=1)t3W(A)t4W(ticketsum=0)t5R(ticketsum=0)t6RollBackt7RollBack結(jié)束時(shí)Limit=1 1 1 并發(fā)產(chǎn)生的問(wèn)題并發(fā)產(chǎn)生的問(wèn)題2 2 鎖鎖l 類(lèi)型:類(lèi)型:S鎖和鎖和X鎖鎖 S鎖又被稱(chēng)為共享鎖鎖又被稱(chēng)為共享鎖(Share Locks),X鎖又被叫鎖又被叫做排它鎖做排它鎖(eXclusive L

31、ocks)。 共享鎖又稱(chēng)為讀鎖:若事務(wù)共享鎖又稱(chēng)為讀鎖:若事務(wù)T對(duì)數(shù)據(jù)對(duì)象對(duì)數(shù)據(jù)對(duì)象A加上加上S鎖,則事務(wù)鎖,則事務(wù)T可以讀可以讀A但不能修改但不能修改A,其它事務(wù)只能再其它事務(wù)只能再對(duì)對(duì)A加加S鎖,而不能加鎖,而不能加X(jué)鎖,直到鎖,直到T釋放釋放A上的上的S鎖。鎖。這就保證了其它事務(wù)可以讀這就保證了其它事務(wù)可以讀A,但在,但在T釋放釋放A上的上的S鎖之前不能對(duì)鎖之前不能對(duì)A做任何修改。做任何修改。(2)排它鎖排它鎖 排它鎖又稱(chēng)為寫(xiě)鎖。若事務(wù)排它鎖又稱(chēng)為寫(xiě)鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象對(duì)數(shù)據(jù)對(duì)象A加上加上X鎖,則只允許鎖,則只允許T讀取和修改讀取和修改A,其它任何事務(wù)都不能,其它任何事務(wù)都不能再對(duì)再對(duì)

32、A加任何類(lèi)型的鎖,直到加任何類(lèi)型的鎖,直到T釋放釋放A上的鎖。這就上的鎖。這就保證了其它事務(wù)在保證了其它事務(wù)在T釋放釋放A上的鎖之前不能讀取和修上的鎖之前不能讀取和修改改A。 T2 T1XS-XNNYSNYY-YYY封鎖類(lèi)型的相容矩陣封鎖類(lèi)型的相容矩陣 Y=Yes,相容的請(qǐng)求N=No,不相容的請(qǐng)求2 2 鎖鎖l封鎖級(jí)別封鎖級(jí)別l對(duì)數(shù)據(jù)對(duì)象加鎖所采用的規(guī)則。對(duì)數(shù)據(jù)對(duì)象加鎖所采用的規(guī)則。 一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議:事務(wù):事務(wù)T在修改數(shù)據(jù)在修改數(shù)據(jù)R之前必之前必須先對(duì)其加須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。事務(wù)鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常結(jié)束結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束和

33、非正常結(jié)束(ROLLBACK)。1. 可防止:丟失修改可防止:丟失修改2. 不能防止:可重復(fù)讀和不讀不能防止:可重復(fù)讀和不讀“臟臟”數(shù)據(jù)。數(shù)據(jù)。2 2 鎖鎖l封鎖級(jí)別封鎖級(jí)別: 二級(jí)封鎖協(xié)議二級(jí)封鎖協(xié)議:實(shí)施一級(jí)封鎖協(xié)議:實(shí)施一級(jí)封鎖協(xié)議,并且事務(wù)并且事務(wù)T在讀取數(shù)據(jù)在讀取數(shù)據(jù)R之前必須先對(duì)其加之前必須先對(duì)其加S鎖,讀完后即可釋鎖,讀完后即可釋放放S鎖。鎖。 二級(jí)封鎖協(xié)議除防止了丟失修改,還可進(jìn)一步二級(jí)封鎖協(xié)議除防止了丟失修改,還可進(jìn)一步防止讀防止讀“臟臟”數(shù)據(jù),由于讀完數(shù)據(jù)后即可釋放數(shù)據(jù),由于讀完數(shù)據(jù)后即可釋放S鎖,鎖,所以它不能保證可重復(fù)讀。所以它不能保證可重復(fù)讀。2 2 鎖鎖l封鎖級(jí)別封

34、鎖級(jí)別三級(jí)封鎖協(xié)三級(jí)封鎖協(xié)議:實(shí)施一級(jí)封鎖協(xié)議,并且事議:實(shí)施一級(jí)封鎖協(xié)議,并且事務(wù)務(wù)T在讀取數(shù)據(jù)在讀取數(shù)據(jù)R之前必須先對(duì)其加之前必須先對(duì)其加S鎖,直到事務(wù)鎖,直到事務(wù)結(jié)束才釋放。結(jié)束才釋放。三級(jí)封鎖協(xié)議除防止了丟失修改和不讀三級(jí)封鎖協(xié)議除防止了丟失修改和不讀“臟臟”數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀。數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀。2 2 鎖鎖l兩階段封鎖協(xié)議:加鎖和解鎖兩階段封鎖協(xié)議:加鎖和解鎖l“兩階段兩階段”是獲得鎖的第一階段和釋放鎖的第是獲得鎖的第一階段和釋放鎖的第二階段二階段l一個(gè)事務(wù)中一旦開(kāi)始釋放鎖,就不能再申請(qǐng)新一個(gè)事務(wù)中一旦開(kāi)始釋放鎖,就不能再申請(qǐng)新鎖了。事務(wù)的加鎖和解鎖嚴(yán)格

35、分為兩個(gè)階段,第鎖了。事務(wù)的加鎖和解鎖嚴(yán)格分為兩個(gè)階段,第一階段加鎖,第二階段解鎖。一階段加鎖,第二階段解鎖。l可實(shí)現(xiàn)并發(fā)的串行化調(diào)度可實(shí)現(xiàn)并發(fā)的串行化調(diào)度2 2 鎖鎖l加鎖內(nèi)容包括加鎖內(nèi)容包括:l在事務(wù)在事務(wù)T的的R(A)操作之前,先對(duì)操作之前,先對(duì)A加加S鎖,如果鎖,如果加鎖成功,則執(zhí)行操作加鎖成功,則執(zhí)行操作R(A),否則,將,否則,將R(A)加加入入A的等待隊(duì)列。的等待隊(duì)列。l在事務(wù)在事務(wù)T的的W(A)操作之前,先對(duì)操作之前,先對(duì)A加加X(jué)鎖,如果鎖,如果加鎖成功,則執(zhí)行操作加鎖成功,則執(zhí)行操作W(A),否則,將,否則,將W(A)加加入入A的等待隊(duì)列。的等待隊(duì)列。2 2 鎖鎖l解鎖內(nèi)容包

36、括:解鎖內(nèi)容包括:l在收到事務(wù)的在收到事務(wù)的Abort或或Commit請(qǐng)求后,釋放請(qǐng)求后,釋放T在每個(gè)數(shù)據(jù)上所加的鎖,如果在數(shù)據(jù)在每個(gè)數(shù)據(jù)上所加的鎖,如果在數(shù)據(jù)A的等待隊(duì)的等待隊(duì)列中不空,即有其它的事務(wù)等待對(duì)列中不空,即有其它的事務(wù)等待對(duì)A進(jìn)行操作,進(jìn)行操作,則從隊(duì)列中取出第一個(gè)操作,完成加鎖,然后執(zhí)則從隊(duì)列中取出第一個(gè)操作,完成加鎖,然后執(zhí)行該操作。行該操作。l執(zhí)行執(zhí)行Abort和和Commit請(qǐng)求后,不再接收該事務(wù)請(qǐng)求后,不再接收該事務(wù)的讀寫(xiě)操作的讀寫(xiě)操作 。2 2 鎖鎖l兩階段封鎖協(xié)議舉例:兩階段封鎖協(xié)議舉例:事務(wù)1的封鎖序列:Slock A . Slock B . Xlock C .

37、Unlock C . Unlock B . Unlock A;事務(wù)2的封鎖序列:Slock A . Unlock A . Slock B . Xlock C . Unlock C . Unlock B;事務(wù)1遵守兩段鎖協(xié)議,而事務(wù)2不遵守兩段協(xié)議。2 2 鎖鎖l封鎖粒度封鎖粒度l封鎖對(duì)象的大小稱(chēng)為封鎖粒度。封鎖對(duì)象的大小稱(chēng)為封鎖粒度。l封鎖對(duì)象可以是邏輯單位,這時(shí)的粒度可以是封鎖對(duì)象可以是邏輯單位,這時(shí)的粒度可以是數(shù)據(jù)庫(kù)、表、元組、屬性。數(shù)據(jù)庫(kù)、表、元組、屬性。l封鎖對(duì)象也可以是物理單位,這時(shí)的封鎖對(duì)象封鎖對(duì)象也可以是物理單位,這時(shí)的封鎖對(duì)象可以是數(shù)據(jù)塊、物理記錄。不同的粒度會(huì)影響事可以是數(shù)據(jù)

38、塊、物理記錄。不同的粒度會(huì)影響事務(wù)的并發(fā)度。務(wù)的并發(fā)度。2 2 鎖鎖兩個(gè)事務(wù)造成的死鎖問(wèn)題兩個(gè)事務(wù)造成的死鎖問(wèn)題T1ABT22 2 鎖鎖DBMS的并發(fā)控制子系統(tǒng)保證了事務(wù)的隔離的并發(fā)控制子系統(tǒng)保證了事務(wù)的隔離性,盡管同時(shí)有很多事務(wù)在使用系統(tǒng),但是它們互性,盡管同時(shí)有很多事務(wù)在使用系統(tǒng),但是它們互不干擾,就像單獨(dú)使用系統(tǒng)一樣,不會(huì)出現(xiàn)丟失修不干擾,就像單獨(dú)使用系統(tǒng)一樣,不會(huì)出現(xiàn)丟失修改,讀臟數(shù)據(jù),不可重復(fù)讀等問(wèn)題。改,讀臟數(shù)據(jù),不可重復(fù)讀等問(wèn)題。對(duì)于一些只讀事務(wù),有時(shí)可以忍受讀臟數(shù)據(jù),對(duì)于一些只讀事務(wù),有時(shí)可以忍受讀臟數(shù)據(jù),不可重復(fù)讀等問(wèn)題,為了加快它的執(zhí)行,不需要嚴(yán)不可重復(fù)讀等問(wèn)題,為了加快它

39、的執(zhí)行,不需要嚴(yán)格的按照兩段鎖協(xié)議運(yùn)行。格的按照兩段鎖協(xié)議運(yùn)行。SQL提供的隔離級(jí)別設(shè)提供的隔離級(jí)別設(shè)置語(yǔ)句能滿(mǎn)足這個(gè)要求。置語(yǔ)句能滿(mǎn)足這個(gè)要求。3 3 隔離級(jí)別隔離級(jí)別隔離級(jí)別考慮因素隔離級(jí)別考慮因素l是否在讀數(shù)據(jù)的時(shí)候使用鎖是否在讀數(shù)據(jù)的時(shí)候使用鎖l讀鎖持續(xù)多長(zhǎng)時(shí)間讀鎖持續(xù)多長(zhǎng)時(shí)間l在讀數(shù)據(jù)的時(shí)候使用何種類(lèi)型的鎖在讀數(shù)據(jù)的時(shí)候使用何種類(lèi)型的鎖SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE 3 3 隔離級(jí)別隔離級(jí)別(1)READ UNCOMMI

40、TTED 執(zhí)行事務(wù)的讀操作之前執(zhí)行事務(wù)的讀操作之前不對(duì)數(shù)據(jù)對(duì)象加不對(duì)數(shù)據(jù)對(duì)象加S鎖,可能會(huì)讀到未完成事務(wù)的操鎖,可能會(huì)讀到未完成事務(wù)的操作結(jié)果(臟數(shù)據(jù)),不能重復(fù)讀。作結(jié)果(臟數(shù)據(jù)),不能重復(fù)讀。(2)READ COMMITTED執(zhí)行事務(wù)的讀操作之前對(duì)數(shù)執(zhí)行事務(wù)的讀操作之前對(duì)數(shù)據(jù)對(duì)象加據(jù)對(duì)象加S鎖,執(zhí)行完讀操作之后立刻釋放鎖,執(zhí)行完讀操作之后立刻釋放S鎖。不鎖。不會(huì)讀到臟數(shù)據(jù),但不能重復(fù)讀。會(huì)讀到臟數(shù)據(jù),但不能重復(fù)讀。(3)REPEATABLE READ執(zhí)行事務(wù)的讀操作之前對(duì)執(zhí)行事務(wù)的讀操作之前對(duì)數(shù)據(jù)對(duì)象加數(shù)據(jù)對(duì)象加S鎖,持有該鎖直到事務(wù)結(jié)束,可以重鎖,持有該鎖直到事務(wù)結(jié)束,可以重復(fù)讀。復(fù)讀。3 3 隔離級(jí)別隔離級(jí)別(4) SERIALIZABLEl嚴(yán)格按照兩段封鎖協(xié)議對(duì)數(shù)據(jù)加鎖。嚴(yán)格按照兩段封鎖協(xié)議對(duì)數(shù)據(jù)加鎖。3 3 隔離級(jí)別隔離級(jí)別ANSI 99定義了定義了4種事務(wù)隔離級(jí)別,種事務(wù)隔離級(jí)別,SQL Server 能夠完全支能夠完全支持這些級(jí)別:持這些級(jí)別: l未提交讀未提交讀 在讀數(shù)據(jù)時(shí)不會(huì)檢查或使用任何鎖。因此,在這在讀數(shù)據(jù)時(shí)不會(huì)檢查或使用任何鎖。因此,在這種隔離級(jí)別中可能讀取到?jīng)]有提交的數(shù)據(jù)。種隔離級(jí)別中可能讀取到?jīng)]有提交的數(shù)據(jù)。l已提交讀已提交讀 只讀取提

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論