版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第9 9章章 事務(wù)與并發(fā)控制事務(wù)與并發(fā)控制 o關(guān)于數(shù)據(jù)庫(kù)保護(hù)關(guān)于數(shù)據(jù)庫(kù)保護(hù) 關(guān)于數(shù)據(jù)庫(kù)保護(hù) o保護(hù)數(shù)據(jù)庫(kù)工作是保護(hù)數(shù)據(jù)庫(kù)內(nèi)容正確、不受破壞和保護(hù)數(shù)據(jù)庫(kù)工作是保護(hù)數(shù)據(jù)庫(kù)內(nèi)容正確、不受破壞和 不被非法使用。主要包括不被非法使用。主要包括4方面內(nèi)容方面內(nèi)容: n完整性控制完整性控制 o靜態(tài)完整性控制靜態(tài)完整性控制(4.4) o動(dòng)態(tài)完整性控制動(dòng)態(tài)完整性控制-觸發(fā)器觸發(fā)器(12.3) n并發(fā)控制并發(fā)控制 (第第9章章) n安全性控制安全性控制 (第第14章章) n數(shù)據(jù)備份與恢復(fù)數(shù)據(jù)備份與恢復(fù) (第第15章章) 9.1 事務(wù)事務(wù) o事務(wù)事務(wù)(transaction)是作為完整的工作單元執(zhí)行的一)是作為完
2、整的工作單元執(zhí)行的一 系列操作。系列操作。 o如果一個(gè)事務(wù)中的所有操作都成功,則事務(wù)成功,其對(duì)如果一個(gè)事務(wù)中的所有操作都成功,則事務(wù)成功,其對(duì) 數(shù)據(jù)庫(kù)的更改都會(huì)成為永久性的更改。數(shù)據(jù)庫(kù)的更改都會(huì)成為永久性的更改。 o如果事務(wù)中的任何一個(gè)操作失敗,則整個(gè)事務(wù)失敗,其如果事務(wù)中的任何一個(gè)操作失敗,則整個(gè)事務(wù)失敗,其 中所完成的操作均被取消,所有對(duì)數(shù)據(jù)的更改均無效。中所完成的操作均被取消,所有對(duì)數(shù)據(jù)的更改均無效。 即即:一個(gè)事務(wù)內(nèi)的所有語句被作為一個(gè)整體,要么全部執(zhí)一個(gè)事務(wù)內(nèi)的所有語句被作為一個(gè)整體,要么全部執(zhí) 行,要么全部不執(zhí)行。行,要么全部不執(zhí)行。 o一個(gè)事務(wù)可以是一組一個(gè)事務(wù)可以是一組sql語
3、句、一條語句、一條sql語句或整個(gè)程語句或整個(gè)程 序。通常情況下,一個(gè)應(yīng)用程序包括多個(gè)事務(wù)。序。通常情況下,一個(gè)應(yīng)用程序包括多個(gè)事務(wù)。 o事務(wù)是數(shù)據(jù)庫(kù)并發(fā)控制和恢復(fù)的基本單位。事務(wù)是數(shù)據(jù)庫(kù)并發(fā)控制和恢復(fù)的基本單位。 事務(wù)概念(舉例) o例如:對(duì)于一個(gè)轉(zhuǎn)帳活動(dòng):例如:對(duì)于一個(gè)轉(zhuǎn)帳活動(dòng):a帳戶轉(zhuǎn)帳給帳戶轉(zhuǎn)帳給b帳戶帳戶n元錢,元錢, 這個(gè)活動(dòng)包含兩個(gè)動(dòng)作:這個(gè)活動(dòng)包含兩個(gè)動(dòng)作: n第一個(gè)動(dòng)作:第一個(gè)動(dòng)作:a帳戶帳戶 n n第二個(gè)動(dòng)作:第二個(gè)動(dòng)作:b帳戶帳戶 n o假設(shè)第一個(gè)動(dòng)作成功了,但第二個(gè)動(dòng)作由于某種原因沒假設(shè)第一個(gè)動(dòng)作成功了,但第二個(gè)動(dòng)作由于某種原因沒 有成功(比如突然停電等)。怎樣保證在系
4、統(tǒng)恢復(fù)之后,有成功(比如突然停電等)。怎樣保證在系統(tǒng)恢復(fù)之后, a帳戶中的金額是減帳戶中的金額是減n前的值呢?這就需要用到事務(wù)的前的值呢?這就需要用到事務(wù)的 概念。概念。 o當(dāng)?shù)诙€(gè)動(dòng)作沒有成功時(shí),系統(tǒng)自動(dòng)將第一個(gè)動(dòng)作也撤當(dāng)?shù)诙€(gè)動(dòng)作沒有成功時(shí),系統(tǒng)自動(dòng)將第一個(gè)動(dòng)作也撤 銷掉,使第一個(gè)動(dòng)作不做。這樣當(dāng)系統(tǒng)恢復(fù)正常時(shí),銷掉,使第一個(gè)動(dòng)作不做。這樣當(dāng)系統(tǒng)恢復(fù)正常時(shí),a 帳戶和帳戶和b帳戶中的數(shù)值才是正確的。帳戶中的數(shù)值才是正確的。 9.1.2 事務(wù)的特性(acid特性) o原子性原子性(atomicity) :指事務(wù)是數(shù)據(jù)庫(kù)的邏輯工:指事務(wù)是數(shù)據(jù)庫(kù)的邏輯工 作單位,事務(wù)中的操作要么都做,要么都不做
5、。作單位,事務(wù)中的操作要么都做,要么都不做。 o一致性一致性(consistency) :指事務(wù)執(zhí)行的結(jié)果必須:指事務(wù)執(zhí)行的結(jié)果必須 是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。 o隔離性隔離性(isolation) :指數(shù)據(jù)庫(kù)中一個(gè)事務(wù)的執(zhí)行:指數(shù)據(jù)庫(kù)中一個(gè)事務(wù)的執(zhí)行 不能被其它事務(wù)干擾。不能被其它事務(wù)干擾。 o持久性持久性(durability) :也稱為永久性指事務(wù)一旦:也稱為永久性指事務(wù)一旦 提交,則其對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就是永久的。提交,則其對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就是永久的。 舉例:事務(wù)及其特征 問題:?jiǎn)栴}:設(shè)銀行數(shù)據(jù)庫(kù)中有一設(shè)銀行數(shù)
6、據(jù)庫(kù)中有一 轉(zhuǎn)賬事務(wù)轉(zhuǎn)賬事務(wù)t t,從賬號(hào),從賬號(hào)a a轉(zhuǎn)一轉(zhuǎn)一 筆款子(筆款子($50$50)到賬號(hào))到賬號(hào)b b。 相應(yīng)的事務(wù):相應(yīng)的事務(wù): t t:readread(a a);); a:=a50a:=a50; writewrite(a a);); readread(b b);); b:=b + 50b:=b + 50; writewrite(b b). . o原子性(原子性(a,b同時(shí)被修改或同時(shí)被修改或 同時(shí)保持原值)同時(shí)保持原值) o一致性(一致性(a+b的值不變)的值不變) o隔離性隔離性 o持久性持久性 事務(wù)提交與撤銷 事務(wù)中操作完成后,可以事務(wù)中操作完成后,可以提交事務(wù)提交事務(wù)
7、 (commit)(commit),也可以,也可以撤銷事務(wù)撤銷事務(wù) ( (rollback)rollback)。 提交事務(wù)(commit) o如果事務(wù)成功,則提交。如果事務(wù)成功,則提交。 o提交就是將事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新提交就是將事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新 寫回到磁盤上的物理數(shù)據(jù)庫(kù)中去,事務(wù)寫回到磁盤上的物理數(shù)據(jù)庫(kù)中去,事務(wù) 正常結(jié)束。正常結(jié)束。 ocommitcommit語句保證事務(wù)的所有修改在數(shù)據(jù)語句保證事務(wù)的所有修改在數(shù)據(jù) 庫(kù)中都永久有效。庫(kù)中都永久有效。 撤消事務(wù)(rollback) o如果事務(wù)中出現(xiàn)錯(cuò)誤,或者用戶決定取消事如果事務(wù)中出現(xiàn)錯(cuò)誤,或者用戶決定取消事 務(wù),可撤消(回滾)該
8、事務(wù)。務(wù),可撤消(回滾)該事務(wù)。 o回滾是指在事務(wù)運(yùn)行的過程中發(fā)生了某種故回滾是指在事務(wù)運(yùn)行的過程中發(fā)生了某種故 障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù) 據(jù)庫(kù)的所有已完成的更新操作全部撤銷。據(jù)庫(kù)的所有已完成的更新操作全部撤銷。即即 撤消在該事務(wù)中對(duì)數(shù)據(jù)庫(kù)所做的更新操作,撤消在該事務(wù)中對(duì)數(shù)據(jù)庫(kù)所做的更新操作, 使數(shù)據(jù)庫(kù)回使數(shù)據(jù)庫(kù)回滾滾到事務(wù)的起始點(diǎn)。到事務(wù)的起始點(diǎn)。 orollbackrollback語句通過將數(shù)據(jù)返回到它在事務(wù)開語句通過將數(shù)據(jù)返回到它在事務(wù)開 始時(shí)所有的狀態(tài),來恢復(fù)在該事務(wù)中所做的始時(shí)所有的狀態(tài),來恢復(fù)在該事務(wù)中所做的 所有修改。所有修改。
9、 9.1.3 事務(wù)處理模型事務(wù)處理模型 o有兩種類型事務(wù):隱式事務(wù),顯式事務(wù)。有兩種類型事務(wù):隱式事務(wù),顯式事務(wù)。 o隱式事務(wù)隱式事務(wù):隱式事務(wù)是每一條數(shù)據(jù)操作語句都:隱式事務(wù)是每一條數(shù)據(jù)操作語句都 自動(dòng)地成為一個(gè)事務(wù)。自動(dòng)地成為一個(gè)事務(wù)。 o顯式事務(wù)顯式事務(wù):有顯式的開始和結(jié)束標(biāo)記的事務(wù)。:有顯式的開始和結(jié)束標(biāo)記的事務(wù)。 nisoiso事務(wù)處理模型事務(wù)處理模型 nt-sqlt-sql事務(wù)處理模型事務(wù)處理模型 isoiso事務(wù)處理模型事務(wù)處理模型 o明尾暗頭:事務(wù)的開頭是隱含的,結(jié)束有明確標(biāo)記。明尾暗頭:事務(wù)的開頭是隱含的,結(jié)束有明確標(biāo)記。 n事務(wù)開始:程序的首條事務(wù)開始:程序的首條sql語句
10、或事務(wù)結(jié)束符后的語句或事務(wù)結(jié)束符后的 第一條第一條sql語句。語句。 n事務(wù)結(jié)束事務(wù)結(jié)束 o在程序正常結(jié)束處或在程序正常結(jié)束處或commit語句處成功終止;語句處成功終止; o在程序出錯(cuò)處或或在程序出錯(cuò)處或或rollback處失敗終止。處失敗終止。 o事務(wù)提交方式事務(wù)提交方式 自動(dòng)提交:每條自動(dòng)提交:每條sql語句為一個(gè)事務(wù)語句為一個(gè)事務(wù) 指定位置提交:在事務(wù)結(jié)束符或程序正常結(jié)束處提交指定位置提交:在事務(wù)結(jié)束符或程序正常結(jié)束處提交 示例示例 update 支付表支付表 set 賬戶總額賬戶總額 賬戶總額賬戶總額 n where 賬戶名賬戶名 a update 支付表支付表 set 賬戶總額賬戶
11、總額 賬戶總額賬戶總額 n where 賬戶名賬戶名 b commit t-sqlt-sql事務(wù)處理模型事務(wù)處理模型 o每個(gè)事務(wù)都有顯式的開始和結(jié)束標(biāo)記。每個(gè)事務(wù)都有顯式的開始和結(jié)束標(biāo)記。 o事務(wù)的開始標(biāo)記是:事務(wù)的開始標(biāo)記是: begin transaction | tran o事務(wù)的結(jié)束標(biāo)記為:事務(wù)的結(jié)束標(biāo)記為: ncommit transactiontran nrollback transactiontran 示例示例 o例如前邊的轉(zhuǎn)帳例子用例如前邊的轉(zhuǎn)帳例子用transact-sql事務(wù)處事務(wù)處 理模型描述為:理模型描述為: begin transaction update 支付表支付
12、表 set 賬戶總額賬戶總額 賬戶總額賬戶總額 n where 賬戶名賬戶名 a update 支付表支付表 set 賬戶總額賬戶總額 賬戶總額賬戶總額 n where 賬戶名賬戶名 b commit sql server提供三種事務(wù)類型:提供三種事務(wù)類型: o自動(dòng)提交事務(wù):自動(dòng)提交事務(wù):每一條單獨(dú)的每一條單獨(dú)的sql語句都是一個(gè)事務(wù)。語句都是一個(gè)事務(wù)。 o顯式事務(wù):顯式事務(wù):每一個(gè)事務(wù)均以每一個(gè)事務(wù)均以begin transaction 語句顯式開始,以語句顯式開始,以commit或或rollback語句顯式語句顯式 結(jié)束。結(jié)束。 o隱式事務(wù):隱式事務(wù):在前一個(gè)事務(wù)完成時(shí)新事務(wù)隱式啟動(dòng),但每
13、在前一個(gè)事務(wù)完成時(shí)新事務(wù)隱式啟動(dòng),但每 個(gè)事務(wù)仍以個(gè)事務(wù)仍以commit或或rollback語句顯式結(jié)束。語句顯式結(jié)束。 osql server設(shè)置隱含事務(wù)方式的命令是:設(shè)置隱含事務(wù)方式的命令是: set implicit_transactions on o取消隱含事務(wù)方式的命令是:取消隱含事務(wù)方式的命令是: set implicit_transactions off 事務(wù)應(yīng)用舉例1 o對(duì)于單個(gè)的對(duì)于單個(gè)的transact-sql語句,可以使用語句,可以使用 go關(guān)鍵字指定一次事務(wù)的執(zhí)行。關(guān)鍵字指定一次事務(wù)的執(zhí)行。 use student go select * from s go 事務(wù)應(yīng)用舉
14、例2 -銀行轉(zhuǎn)帳業(yè)務(wù)處理事務(wù)示意銀行轉(zhuǎn)帳業(yè)務(wù)處理事務(wù)示意 use 銀行業(yè)務(wù)銀行業(yè)務(wù) begin transaction update 儲(chǔ)蓄儲(chǔ)蓄 set 余額余額=余額余額-1000 where 賬號(hào)賬號(hào)=123456789 update 儲(chǔ)蓄儲(chǔ)蓄 set 余額余額=余額余額+1000 where 賬號(hào)賬號(hào)= 987654321 if rowcount=0 or error != 0 begin rollback transaction print 發(fā)生錯(cuò)誤,該操作被取消。發(fā)生錯(cuò)誤,該操作被取消。 return end commit transaction z全局變量全局變量 rowcount返
15、返 回查詢結(jié)果記錄集;回查詢結(jié)果記錄集; error返回當(dāng)數(shù)返回當(dāng)數(shù) 據(jù)庫(kù)操作失敗時(shí)的錯(cuò)據(jù)庫(kù)操作失敗時(shí)的錯(cuò) 誤代碼。誤代碼。 z左側(cè)代碼表示,如左側(cè)代碼表示,如 果檢索出的記錄數(shù)為果檢索出的記錄數(shù)為0, 或者返回的錯(cuò)誤代碼或者返回的錯(cuò)誤代碼 不為不為0(出錯(cuò)),撤消(出錯(cuò)),撤消 事務(wù),并提示用戶,事務(wù),并提示用戶, 否則提交事務(wù)。否則提交事務(wù)。 9.2.1 并發(fā)控制概述 9.2.2 并發(fā)控制措施 9.2.3 封鎖協(xié)議 封鎖粒度 sql server封鎖機(jī)制 9.2.4 活鎖和死鎖 9.2.5 并發(fā)調(diào)度的可串行性 9.2.6 兩段鎖協(xié)議 9.2.1 9.2.1 并發(fā)控制概述并發(fā)控制概述 o數(shù)據(jù)
16、庫(kù)中的數(shù)據(jù)是一個(gè)共享的資源,因此會(huì)有很多用戶數(shù)據(jù)庫(kù)中的數(shù)據(jù)是一個(gè)共享的資源,因此會(huì)有很多用戶 同時(shí)使用數(shù)據(jù)庫(kù)中的數(shù)據(jù),同時(shí)使用數(shù)據(jù)庫(kù)中的數(shù)據(jù), o在多用戶數(shù)據(jù)庫(kù)系統(tǒng)中,允許多個(gè)用戶同時(shí)使用的數(shù)據(jù)在多用戶數(shù)據(jù)庫(kù)系統(tǒng)中,允許多個(gè)用戶同時(shí)使用的數(shù)據(jù) 庫(kù)系統(tǒng),可能同時(shí)運(yùn)行著多個(gè)事務(wù),而事務(wù)的運(yùn)行需要庫(kù)系統(tǒng),可能同時(shí)運(yùn)行著多個(gè)事務(wù),而事務(wù)的運(yùn)行需要 時(shí)間時(shí)間,并且事務(wù)中的操作是在一定的數(shù)據(jù)上進(jìn)行的。,并且事務(wù)中的操作是在一定的數(shù)據(jù)上進(jìn)行的。 o當(dāng)系統(tǒng)中同時(shí)有當(dāng)系統(tǒng)中同時(shí)有多個(gè)事務(wù)多個(gè)事務(wù)在運(yùn)行時(shí),特別是當(dāng)這些事務(wù)在運(yùn)行時(shí),特別是當(dāng)這些事務(wù) 是是對(duì)同一段數(shù)據(jù)進(jìn)行操作對(duì)同一段數(shù)據(jù)進(jìn)行操作時(shí),彼此之間就有可能
17、產(chǎn)生時(shí),彼此之間就有可能產(chǎn)生相相 互干擾互干擾的情況。的情況。 并發(fā)控制概述并發(fā)控制概述 o不同的多事務(wù)執(zhí)行方式不同的多事務(wù)執(zhí)行方式 n事務(wù)串行執(zhí)行事務(wù)串行執(zhí)行 o每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其 他事務(wù)必須等到這個(gè)事務(wù)結(jié)束以他事務(wù)必須等到這個(gè)事務(wù)結(jié)束以 后方能運(yùn)行后方能運(yùn)行 o不能充分利用系統(tǒng)資源,發(fā)揮數(shù)不能充分利用系統(tǒng)資源,發(fā)揮數(shù) 據(jù)庫(kù)共享資源的特點(diǎn)據(jù)庫(kù)共享資源的特點(diǎn) t1 t2 t3 事務(wù)的串行執(zhí)行方式事務(wù)的串行執(zhí)行方式 并發(fā)控制概述并發(fā)控制概述 n交叉并發(fā)方式交叉并發(fā)方式 n在單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行是這些在單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行是這些 并行事務(wù)的
18、并行操作輪流交叉運(yùn)行并行事務(wù)的并行操作輪流交叉運(yùn)行 o單處理機(jī)系統(tǒng)中的并行事務(wù)并沒有真正地單處理機(jī)系統(tǒng)中的并行事務(wù)并沒有真正地 并行運(yùn)行,但能夠減少處理機(jī)的空閑時(shí)間,并行運(yùn)行,但能夠減少處理機(jī)的空閑時(shí)間, 提高系統(tǒng)的效率提高系統(tǒng)的效率 并發(fā)控制概述并發(fā)控制概述 事務(wù)的交叉并發(fā)執(zhí)行方式事務(wù)的交叉并發(fā)執(zhí)行方式 并發(fā)控制概述并發(fā)控制概述 n同時(shí)并發(fā)方式同時(shí)并發(fā)方式 o多處理機(jī)系統(tǒng)中,每個(gè)處理機(jī)可以運(yùn)行一多處理機(jī)系統(tǒng)中,每個(gè)處理機(jī)可以運(yùn)行一 個(gè)事務(wù),多個(gè)處理機(jī)可以同時(shí)運(yùn)行多個(gè)事個(gè)事務(wù),多個(gè)處理機(jī)可以同時(shí)運(yùn)行多個(gè)事 務(wù),實(shí)現(xiàn)多個(gè)事務(wù)真正的并行運(yùn)行務(wù),實(shí)現(xiàn)多個(gè)事務(wù)真正的并行運(yùn)行 并發(fā)控制概述并發(fā)控制概述
19、o事務(wù)并發(fā)執(zhí)行帶來的問題事務(wù)并發(fā)執(zhí)行帶來的問題 n會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況 n可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞事可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞事 務(wù)一致性和數(shù)據(jù)庫(kù)的一致性務(wù)一致性和數(shù)據(jù)庫(kù)的一致性 并發(fā)控制概述(續(xù))并發(fā)控制概述(續(xù)) 并發(fā)操作帶來數(shù)據(jù)的不一致性實(shí)例并發(fā)操作帶來數(shù)據(jù)的不一致性實(shí)例 例例1飛機(jī)訂票系統(tǒng)中的一個(gè)活動(dòng)序列飛機(jī)訂票系統(tǒng)中的一個(gè)活動(dòng)序列 甲售票點(diǎn)甲售票點(diǎn)(事務(wù)事務(wù)t1)讀出某航班的機(jī)票余額讀出某航班的機(jī)票余額a,設(shè),設(shè)a=16; 乙售票點(diǎn)乙售票點(diǎn)(事務(wù)事務(wù)t2)讀出同一航班的機(jī)票余額讀出同一航班的機(jī)票余額a,也為,也為1
20、6; 甲售票點(diǎn)賣出一張機(jī)票,修改余額甲售票點(diǎn)賣出一張機(jī)票,修改余額aa-1,所以,所以a為為15,把,把a(bǔ) 寫回?cái)?shù)據(jù)庫(kù);寫回?cái)?shù)據(jù)庫(kù); 乙售票點(diǎn)也賣出一張機(jī)票,修改余額乙售票點(diǎn)也賣出一張機(jī)票,修改余額aa-1,所以,所以a為為15,把,把 a寫回?cái)?shù)據(jù)庫(kù)寫回?cái)?shù)據(jù)庫(kù) n結(jié)果明明賣出兩張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少結(jié)果明明賣出兩張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少1 并發(fā)控制概述并發(fā)控制概述 并發(fā)控制概述并發(fā)控制概述 o并發(fā)操作所帶來的數(shù)據(jù)不一致情況大致并發(fā)操作所帶來的數(shù)據(jù)不一致情況大致 可以概括:可以概括: n丟失修改丟失修改 n讀讀“臟臟”數(shù)據(jù)數(shù)據(jù) n不可重復(fù)讀不可重復(fù)讀 1.丟失數(shù)據(jù)修改丟失數(shù)據(jù)修改
21、o丟失數(shù)據(jù)的修改是指兩個(gè)事務(wù)丟失數(shù)據(jù)的修改是指兩個(gè)事務(wù)t1和和t2讀入同讀入同 一數(shù)據(jù)并進(jìn)行修改,一數(shù)據(jù)并進(jìn)行修改,t2提交的結(jié)果破壞提交的結(jié)果破壞t1了了 提交的結(jié)果,導(dǎo)致提交的結(jié)果,導(dǎo)致t1的修改被的修改被t2覆蓋掉了。覆蓋掉了。 丟失數(shù)據(jù)修改丟失數(shù)據(jù)修改 o這種情況稱為數(shù)據(jù)庫(kù)的不一致性,是由并發(fā)操作引起的。這種情況稱為數(shù)據(jù)庫(kù)的不一致性,是由并發(fā)操作引起的。 o在并發(fā)操作情況下,對(duì)在并發(fā)操作情況下,對(duì)t1、t2兩個(gè)事務(wù)的操作序列的調(diào)兩個(gè)事務(wù)的操作序列的調(diào) 度是隨機(jī)的。度是隨機(jī)的。 o若按上面的調(diào)度序列執(zhí)行,若按上面的調(diào)度序列執(zhí)行, t1事務(wù)的修改就被丟失。事務(wù)的修改就被丟失。 n原因:第原
22、因:第4步中步中t2事務(wù)修改事務(wù)修改a并寫回后覆蓋了并寫回后覆蓋了t1事務(wù)事務(wù) 的修改的修改 丟失數(shù)據(jù)修改丟失數(shù)據(jù)修改 2. 讀讀“臟臟”數(shù)據(jù)數(shù)據(jù) 讀讀“臟臟”數(shù)據(jù)是指:數(shù)據(jù)是指: n事務(wù)事務(wù)t1修改某一數(shù)據(jù),并將其寫回磁盤修改某一數(shù)據(jù),并將其寫回磁盤 n事務(wù)事務(wù)t2讀取同一數(shù)據(jù)后,讀取同一數(shù)據(jù)后,t1由于某種原因被撤由于某種原因被撤 銷銷 n這時(shí)這時(shí)t1已修改過的數(shù)據(jù)恢復(fù)原值,已修改過的數(shù)據(jù)恢復(fù)原值,t2讀到的數(shù)讀到的數(shù) 據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致?lián)团c數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致 nt2讀到的數(shù)據(jù)就為讀到的數(shù)據(jù)就為“臟臟”數(shù)據(jù),即不正確的數(shù)數(shù)據(jù),即不正確的數(shù) 據(jù)據(jù) 讀讀“臟臟”數(shù)據(jù)數(shù)據(jù) 讀讀“臟臟
23、”數(shù)據(jù)數(shù)據(jù) n t1將將b值修改為值修改為200,t2讀到讀到b為為200 n t1由于某種原因撤銷,其修改作廢,由于某種原因撤銷,其修改作廢,b恢復(fù)原恢復(fù)原 值值100 n 這時(shí)這時(shí)t2讀到的讀到的b為為200,與數(shù)據(jù)庫(kù)內(nèi)容不一致,與數(shù)據(jù)庫(kù)內(nèi)容不一致, 就是就是“臟臟”數(shù)據(jù)。數(shù)據(jù)。 3. 不可重復(fù)讀不可重復(fù)讀 o不可重復(fù)讀是指事務(wù)不可重復(fù)讀是指事務(wù)t1讀取數(shù)據(jù)后,事務(wù)讀取數(shù)據(jù)后,事務(wù) t2執(zhí)行更新操作,使執(zhí)行更新操作,使t1無法再現(xiàn)前一次讀無法再現(xiàn)前一次讀 取結(jié)果。取結(jié)果。 不可重復(fù)讀不可重復(fù)讀 o不可重復(fù)讀包括三種情況:不可重復(fù)讀包括三種情況: (1)事務(wù)事務(wù)t1讀取某一數(shù)據(jù)后,讀取某一數(shù)
24、據(jù)后,事務(wù)事務(wù)t2對(duì)其做對(duì)其做 了修改了修改,當(dāng)事務(wù),當(dāng)事務(wù)t1再次讀該數(shù)據(jù)時(shí),得到再次讀該數(shù)據(jù)時(shí),得到 與前一次不同的值與前一次不同的值 不可重復(fù)讀不可重復(fù)讀 不可重復(fù)讀不可重復(fù)讀 nt1讀取讀取b=100進(jìn)行運(yùn)算進(jìn)行運(yùn)算 nt2讀取同一數(shù)據(jù)讀取同一數(shù)據(jù)b,對(duì)其進(jìn)行修改后將,對(duì)其進(jìn)行修改后將 b=200寫回?cái)?shù)據(jù)庫(kù)。寫回?cái)?shù)據(jù)庫(kù)。 nt1為了對(duì)讀取值校對(duì)重讀為了對(duì)讀取值校對(duì)重讀b,b已為已為200, 與第一次讀取值不一致與第一次讀取值不一致 不可重復(fù)讀不可重復(fù)讀 (2)事務(wù)事務(wù)t1按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄后,按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄后, 事務(wù)事務(wù)t2刪除了其中部分記錄
25、刪除了其中部分記錄,當(dāng),當(dāng)t1再次按相同條件讀取再次按相同條件讀取 數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄消失了數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄消失了 (3)事務(wù)事務(wù)t1按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后,按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后,事事 務(wù)務(wù)t2插入了一些記錄插入了一些記錄,當(dāng),當(dāng)t1再次按相同條件讀取數(shù)據(jù)時(shí),再次按相同條件讀取數(shù)據(jù)時(shí), 發(fā)現(xiàn)多了一些記錄。發(fā)現(xiàn)多了一些記錄。 o后兩種不可重復(fù)讀有時(shí)也稱為后兩種不可重復(fù)讀有時(shí)也稱為幻影幻影現(xiàn)象現(xiàn)象(教材中稱為教材中稱為“幽靈幽靈” 數(shù)據(jù)。數(shù)據(jù)。 并發(fā)控制概述并發(fā)控制概述 o數(shù)據(jù)不一致性:由于數(shù)據(jù)不一致性:由于并發(fā)操作破壞了事務(wù)的隔并發(fā)操作破壞了事務(wù)的隔 離性
26、離性 o并發(fā)控制就是要用正確的方式并發(fā)控制就是要用正確的方式調(diào)度調(diào)度并發(fā)操作,并發(fā)操作, 使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾,使一個(gè)用戶事務(wù)的執(zhí)行不受其他事務(wù)的干擾, 從而避免造成數(shù)據(jù)的不一致性從而避免造成數(shù)據(jù)的不一致性 9.2.2 并發(fā)控制措施并發(fā)控制措施 o商用的商用的dbms一般都采用一般都采用封鎖封鎖方法方法 o封鎖就是事務(wù)封鎖就是事務(wù)t在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等) 操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖 o加鎖后事務(wù)加鎖后事務(wù)t就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)t 釋放
27、它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象。釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象。 并發(fā)控制措施并發(fā)控制措施 o一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么 樣的控制由封鎖的類型決定。樣的控制由封鎖的類型決定。 o基本封鎖類型基本封鎖類型 n排它鎖(排它鎖(exclusive locks,簡(jiǎn)記為,簡(jiǎn)記為x鎖)鎖) n共享鎖(共享鎖(share locks,簡(jiǎn)記為,簡(jiǎn)記為s鎖)鎖) 并發(fā)控制措施并發(fā)控制措施 o排它鎖排它鎖又稱為寫鎖又稱為寫鎖 n若事務(wù)若事務(wù)t對(duì)數(shù)據(jù)對(duì)象對(duì)數(shù)據(jù)對(duì)象a加上加上x鎖,則只允許鎖,則只允許t 讀取和修改讀取和修改a,其它任何事務(wù)
28、都不能再對(duì),其它任何事務(wù)都不能再對(duì)a 加任何類型的鎖,直到加任何類型的鎖,直到t釋放釋放a上的鎖上的鎖 n保證其他事務(wù)在保證其他事務(wù)在t釋放釋放a上的鎖之前不能再上的鎖之前不能再 讀取和修改讀取和修改a 并發(fā)控制措施并發(fā)控制措施 o共享鎖共享鎖又稱為讀鎖又稱為讀鎖 n若事務(wù)若事務(wù)t對(duì)數(shù)據(jù)對(duì)象對(duì)數(shù)據(jù)對(duì)象a加上加上s鎖,則其它事鎖,則其它事 務(wù)只能再對(duì)務(wù)只能再對(duì)a加加s鎖,而不能加鎖,而不能加x鎖,直到鎖,直到 t釋放釋放a上的上的s鎖鎖 n保證其他事務(wù)可以讀保證其他事務(wù)可以讀a,但在,但在t釋放釋放a上的上的 s鎖之前不能對(duì)鎖之前不能對(duì)a做任何修改做任何修改 鎖的相容矩陣鎖的相容矩陣 y=yes
29、,相容的請(qǐng)求,相容的請(qǐng)求 n=no,不相容的請(qǐng)求,不相容的請(qǐng)求 t1 t2 xs 無鎖無鎖 xnny snyy 無鎖無鎖 yyy 在鎖的相容矩陣中:在鎖的相容矩陣中: o最左邊一列表示事務(wù)最左邊一列表示事務(wù)t1已經(jīng)獲得的數(shù)據(jù)對(duì)象上的鎖的類已經(jīng)獲得的數(shù)據(jù)對(duì)象上的鎖的類 型。型。 o最上面一行表示另一事務(wù)最上面一行表示另一事務(wù)t2對(duì)同一數(shù)據(jù)對(duì)象發(fā)出的封鎖對(duì)同一數(shù)據(jù)對(duì)象發(fā)出的封鎖 請(qǐng)求。請(qǐng)求。 ot2的封鎖請(qǐng)求能否被滿足用矩陣中的的封鎖請(qǐng)求能否被滿足用矩陣中的y和和n表示表示 ny表示事務(wù)表示事務(wù)t2的封鎖要求與的封鎖要求與t1已持有的鎖相容,封鎖已持有的鎖相容,封鎖 請(qǐng)求可以滿足請(qǐng)求可以滿足 nn
30、表示表示t2的封鎖請(qǐng)求與的封鎖請(qǐng)求與t1已持有的鎖沖突,已持有的鎖沖突,t2的請(qǐng)的請(qǐng) 求被拒絕求被拒絕 9.2.3 封鎖協(xié)議封鎖協(xié)議 o在運(yùn)用在運(yùn)用x x鎖和鎖和s s鎖對(duì)數(shù)據(jù)對(duì)象進(jìn)行加鎖時(shí),還需鎖對(duì)數(shù)據(jù)對(duì)象進(jìn)行加鎖時(shí),還需 要約定一些規(guī)則,如何時(shí)申請(qǐng)要約定一些規(guī)則,如何時(shí)申請(qǐng)x x鎖或鎖或s s鎖、持鎖鎖、持鎖 時(shí)間、何時(shí)釋放鎖等。時(shí)間、何時(shí)釋放鎖等。 o稱這些規(guī)則為稱這些規(guī)則為封鎖協(xié)議封鎖協(xié)議或或加鎖協(xié)議加鎖協(xié)議(locking locking protocelprotocel)。)。 o對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不 同級(jí)別的封鎖協(xié)議。同
31、級(jí)別的封鎖協(xié)議。 o不同級(jí)別的封鎖協(xié)議達(dá)到的系統(tǒng)一致性級(jí)別不不同級(jí)別的封鎖協(xié)議達(dá)到的系統(tǒng)一致性級(jí)別不 同。同。 1. 一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議 o對(duì)事務(wù)要修改的數(shù)據(jù)加對(duì)事務(wù)要修改的數(shù)據(jù)加x x鎖,直到事務(wù)結(jié)鎖,直到事務(wù)結(jié) 束(包括正常結(jié)束和非正常結(jié)束)時(shí)才釋束(包括正常結(jié)束和非正常結(jié)束)時(shí)才釋 放。放。 o一級(jí)封鎖協(xié)議可以防止丟失修改,并保證一級(jí)封鎖協(xié)議可以防止丟失修改,并保證 事務(wù)是可恢復(fù)的事務(wù)是可恢復(fù)的 o但不能保證可重復(fù)讀和不讀但不能保證可重復(fù)讀和不讀“臟臟”數(shù)據(jù)。數(shù)據(jù)。 一級(jí)封鎖協(xié)議示例一級(jí)封鎖協(xié)議示例 使用封鎖機(jī)制解決丟失修改問題使用封鎖機(jī)制解決丟失修改問題 沒有丟失修改沒有丟失修改
32、 n 事務(wù)事務(wù)t1在讀在讀a進(jìn)行修改之前先對(duì)進(jìn)行修改之前先對(duì)a加加x鎖鎖 n 當(dāng)當(dāng)t2再請(qǐng)求對(duì)再請(qǐng)求對(duì)a加加x鎖時(shí)被拒絕鎖時(shí)被拒絕 n t2只能等待只能等待t1釋放釋放a上的鎖后上的鎖后t2獲得對(duì)獲得對(duì)a的的x鎖鎖 n 這時(shí)這時(shí)t2讀到的讀到的a已經(jīng)是已經(jīng)是t1更新過的值更新過的值15 n t2按此新的按此新的a值進(jìn)行運(yùn)算,并將結(jié)果值值進(jìn)行運(yùn)算,并將結(jié)果值a=11送回送回 到磁盤。避免了丟失到磁盤。避免了丟失t1的更新的更新15。 2. 二級(jí)封鎖協(xié)議二級(jí)封鎖協(xié)議 o在滿足一級(jí)封鎖協(xié)議的情況下,事務(wù)對(duì)在滿足一級(jí)封鎖協(xié)議的情況下,事務(wù)對(duì) 要讀取的數(shù)據(jù)加要讀取的數(shù)據(jù)加s s鎖,讀完后即釋放鎖,讀完后
33、即釋放s s鎖。鎖。 o除了可以防止丟失修改外,還可以防止除了可以防止丟失修改外,還可以防止 讀讀“臟臟”數(shù)據(jù)。數(shù)據(jù)。 o但不能保證可重復(fù)讀數(shù)據(jù)。但不能保證可重復(fù)讀數(shù)據(jù)。 二級(jí)封鎖協(xié)議示例二級(jí)封鎖協(xié)議示例 使用封鎖機(jī)制解決讀使用封鎖機(jī)制解決讀“臟臟”數(shù)據(jù)問題數(shù)據(jù)問題 不讀不讀“臟臟”數(shù)據(jù)數(shù)據(jù) n 事務(wù)事務(wù)t1在對(duì)在對(duì)c進(jìn)行修改之前,先對(duì)進(jìn)行修改之前,先對(duì)c加加x鎖,修改其值鎖,修改其值 后寫回磁盤后寫回磁盤 n t2請(qǐng)求在請(qǐng)求在c上加上加s鎖,因鎖,因t1已在已在c上加了上加了x鎖,鎖,t2只能只能 等待等待 n t1因某種原因被撤銷,因某種原因被撤銷,c恢復(fù)為原值恢復(fù)為原值50 n t1釋放
34、釋放c上的上的x鎖后鎖后t2獲得獲得c上的上的s鎖,讀鎖,讀c=50。避免。避免 了了t2讀讀“臟臟”數(shù)據(jù)數(shù)據(jù)100 3. 三級(jí)封鎖協(xié)議三級(jí)封鎖協(xié)議 o在滿足一級(jí)封鎖協(xié)議的情況下,事務(wù)對(duì)在滿足一級(jí)封鎖協(xié)議的情況下,事務(wù)對(duì) 要讀取的數(shù)據(jù)加要讀取的數(shù)據(jù)加s s鎖,并直到事務(wù)結(jié)束鎖,并直到事務(wù)結(jié)束 才釋放。才釋放。 o除了可以防止丟失修改和不讀除了可以防止丟失修改和不讀“臟臟”數(shù)數(shù) 據(jù)之外,還進(jìn)一步防止了不可重復(fù)讀。據(jù)之外,還進(jìn)一步防止了不可重復(fù)讀。 三級(jí)封鎖協(xié)議示例三級(jí)封鎖協(xié)議示例 使用封鎖機(jī)制解決不可重復(fù)讀問題使用封鎖機(jī)制解決不可重復(fù)讀問題 可重復(fù)讀可重復(fù)讀 n 事務(wù)事務(wù)t1在讀在讀a,b之前,
35、先對(duì)之前,先對(duì)a,b加加s鎖鎖 n 其他事務(wù)只能再對(duì)其他事務(wù)只能再對(duì)a,b加加s鎖,而不能加鎖,而不能加x鎖,即其他鎖,即其他 事務(wù)只能讀事務(wù)只能讀a,b,而不能修改,而不能修改 n 當(dāng)當(dāng)t2為修改為修改b而申請(qǐng)對(duì)而申請(qǐng)對(duì)b的的x鎖時(shí)被拒絕只能等待鎖時(shí)被拒絕只能等待t1釋釋 放放b上的鎖上的鎖 n t1為驗(yàn)算再讀為驗(yàn)算再讀a,b,這時(shí)讀出的,這時(shí)讀出的b仍是仍是100,求和結(jié),求和結(jié) 果仍為果仍為150,即可重復(fù)讀,即可重復(fù)讀 n t1結(jié)束才釋放結(jié)束才釋放a,b上的上的s鎖。鎖。t2才獲得對(duì)才獲得對(duì)b的的x鎖鎖 封鎖粒度(了解)封鎖粒度(了解) o封鎖對(duì)象的大小稱為封鎖粒度封鎖對(duì)象的大小稱為封
36、鎖粒度(granularity) o封鎖的對(duì)象:邏輯單元,物理單元封鎖的對(duì)象:邏輯單元,物理單元 例:在關(guān)系數(shù)據(jù)庫(kù)中,封鎖對(duì)象:例:在關(guān)系數(shù)據(jù)庫(kù)中,封鎖對(duì)象: n邏輯單元邏輯單元: 屬性值、屬性值集合、元組、關(guān)系、索引屬性值、屬性值集合、元組、關(guān)系、索引 項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù)等項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù)等 n物理單元:頁(yè)(數(shù)據(jù)頁(yè)或索引頁(yè))、物理記錄等物理單元:頁(yè)(數(shù)據(jù)頁(yè)或索引頁(yè))、物理記錄等 選擇封鎖粒度原則選擇封鎖粒度原則 o封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開銷密 切相關(guān)。切相關(guān)。 n封鎖的粒度越大,數(shù)據(jù)庫(kù)所能夠封鎖的數(shù)據(jù)單元封鎖的粒度越大,數(shù)據(jù)庫(kù)
37、所能夠封鎖的數(shù)據(jù)單元 就越少,并發(fā)度就越小,系統(tǒng)開銷也越小;就越少,并發(fā)度就越小,系統(tǒng)開銷也越??; n封鎖的粒度越小,并發(fā)度較高,但系統(tǒng)開銷也就封鎖的粒度越小,并發(fā)度較高,但系統(tǒng)開銷也就 越大越大 選擇封鎖粒度的原則選擇封鎖粒度的原則 例例 o若封鎖粒度是數(shù)據(jù)頁(yè),事務(wù)若封鎖粒度是數(shù)據(jù)頁(yè),事務(wù)t1需要修改元組需要修改元組l1,則,則t1 必須對(duì)包含必須對(duì)包含l1的整個(gè)數(shù)據(jù)頁(yè)的整個(gè)數(shù)據(jù)頁(yè)a加鎖。如果加鎖。如果t1對(duì)對(duì)a加鎖后加鎖后 事務(wù)事務(wù)t2要修改要修改a中元組中元組l2,則,則t2被迫等待,直到被迫等待,直到t1釋釋 放放a。 o如果封鎖粒度是元組,則如果封鎖粒度是元組,則t1和和t2可以同時(shí)
38、對(duì)可以同時(shí)對(duì)l1和和l2加加 鎖,不需要互相等待,提高了系統(tǒng)的并行度。鎖,不需要互相等待,提高了系統(tǒng)的并行度。 o又如,事務(wù)又如,事務(wù)t需要讀取整個(gè)表,若封鎖粒度是元組,需要讀取整個(gè)表,若封鎖粒度是元組,t必必 須對(duì)表中的每一個(gè)元組加鎖,開銷極大須對(duì)表中的每一個(gè)元組加鎖,開銷極大 選擇封鎖粒度的原則選擇封鎖粒度的原則 o多粒度封鎖多粒度封鎖 在一個(gè)系統(tǒng)中同時(shí)支持多種封鎖粒度供不同的事務(wù)選擇在一個(gè)系統(tǒng)中同時(shí)支持多種封鎖粒度供不同的事務(wù)選擇 o選擇封鎖粒度選擇封鎖粒度 同時(shí)考慮封鎖開銷和并發(fā)度兩個(gè)因素,適當(dāng)選擇封鎖粒同時(shí)考慮封鎖開銷和并發(fā)度兩個(gè)因素,適當(dāng)選擇封鎖粒 度度 n需要處理多個(gè)關(guān)系的大量元
39、組的用戶事務(wù):以數(shù)據(jù)庫(kù)需要處理多個(gè)關(guān)系的大量元組的用戶事務(wù):以數(shù)據(jù)庫(kù) 為封鎖單位為封鎖單位 n需要處理大量元組的用戶事務(wù):以關(guān)系為封鎖單元需要處理大量元組的用戶事務(wù):以關(guān)系為封鎖單元 n只處理少量元組的用戶事務(wù):以元組為封鎖單位只處理少量元組的用戶事務(wù):以元組為封鎖單位 sql server中與封鎖有關(guān)的命令中與封鎖有關(guān)的命令 osql server使用動(dòng)態(tài)鎖定策略確定最經(jīng)濟(jì)的鎖,自使用動(dòng)態(tài)鎖定策略確定最經(jīng)濟(jì)的鎖,自 動(dòng)調(diào)整鎖定,應(yīng)用程序開發(fā)人員可以不作選擇。動(dòng)調(diào)整鎖定,應(yīng)用程序開發(fā)人員可以不作選擇。 o如果需要,也可在應(yīng)用程序中自定義鎖來設(shè)計(jì)更有效如果需要,也可在應(yīng)用程序中自定義鎖來設(shè)計(jì)更有
40、效 的應(yīng)用程序。的應(yīng)用程序。 osql server的封鎖操作是在相關(guān)語句的的封鎖操作是在相關(guān)語句的“with ()”子句中完成的,該短語可以在子句中完成的,該短語可以在 select、insert、update和和delete等語句等語句 中指定表級(jí)鎖定的方式和范圍。中指定表級(jí)鎖定的方式和范圍。 sql server中與封鎖有關(guān)的命令中與封鎖有關(guān)的命令 o常用的封鎖關(guān)鍵詞有:常用的封鎖關(guān)鍵詞有: ntablock:對(duì)表施行共享封鎖,在讀完數(shù)據(jù)后立刻對(duì)表施行共享封鎖,在讀完數(shù)據(jù)后立刻 釋放封鎖,此類封鎖可以避免讀釋放封鎖,此類封鎖可以避免讀“臟臟”數(shù)據(jù),但不具數(shù)據(jù),但不具 有可重復(fù)讀的特性。有
41、可重復(fù)讀的特性。 nholdlock:與:與tablock一起使用,可將共享鎖保一起使用,可將共享鎖保 留到事務(wù)完成,而不是在讀完數(shù)據(jù)后立即釋放鎖,這留到事務(wù)完成,而不是在讀完數(shù)據(jù)后立即釋放鎖,這 樣可以保證數(shù)據(jù)的可重復(fù)獨(dú)特性。樣可以保證數(shù)據(jù)的可重復(fù)獨(dú)特性。 nnolock:不進(jìn)行封鎖,此關(guān)鍵詞僅應(yīng)用于:不進(jìn)行封鎖,此關(guān)鍵詞僅應(yīng)用于select 語句,這樣可能會(huì)讀取未提交事務(wù)的數(shù)據(jù),即有可能語句,這樣可能會(huì)讀取未提交事務(wù)的數(shù)據(jù),即有可能 發(fā)生發(fā)生“臟臟”讀。讀。 ntablockx:對(duì)表實(shí)施獨(dú)占封鎖。:對(duì)表實(shí)施獨(dú)占封鎖。 nupdlock:對(duì)表中的指定元組實(shí)施更新封鎖;這時(shí):對(duì)表中的指定元組實(shí)
42、施更新封鎖;這時(shí) 其他事務(wù)可以對(duì)同一表中的其他元組也實(shí)施更新封鎖,其他事務(wù)可以對(duì)同一表中的其他元組也實(shí)施更新封鎖, 但是不允許對(duì)表實(shí)施共享封鎖和獨(dú)占封鎖。但是不允許對(duì)表實(shí)施共享封鎖和獨(dú)占封鎖。 sql server中與封鎖有關(guān)的命令中與封鎖有關(guān)的命令 declare d datetime, t char(6), s char(2), n char(10) begin transaction select n=座位號(hào)座位號(hào) from r with (updlock) where 日期日期 = d and 車次車次 = t and 座別座別 = s and 狀狀 態(tài)態(tài) is null if upd
43、ate r set 狀態(tài)狀態(tài) = y where 座位號(hào)座位號(hào) = n and 日期日期 = d and 車次車次 = t and 座別座別 = s commit transaction else rollback transaction 9.2.4 活鎖和死鎖活鎖和死鎖 o封鎖技術(shù)可以有效地解決并行操作的一致封鎖技術(shù)可以有效地解決并行操作的一致 性問題,但也帶來一些新的問題性問題,但也帶來一些新的問題 n活鎖活鎖 n死鎖死鎖 1.活鎖活鎖 o事務(wù)事務(wù)t1封鎖了數(shù)據(jù)封鎖了數(shù)據(jù)r o事務(wù)事務(wù)t2又請(qǐng)求封鎖又請(qǐng)求封鎖r,于是,于是t2等待。等待。 ot3也請(qǐng)求封鎖也請(qǐng)求封鎖r,當(dāng),當(dāng)t1釋放了釋放
44、了r上的封鎖之后系上的封鎖之后系 統(tǒng)首先批準(zhǔn)了統(tǒng)首先批準(zhǔn)了t3的請(qǐng)求,的請(qǐng)求,t2仍然等待。仍然等待。 ot4又請(qǐng)求封鎖又請(qǐng)求封鎖r,當(dāng),當(dāng)t3釋放了釋放了r上的封鎖之后系上的封鎖之后系 統(tǒng)又批準(zhǔn)了統(tǒng)又批準(zhǔn)了t4的請(qǐng)求的請(qǐng)求 ot2有可能永遠(yuǎn)等待,這就是有可能永遠(yuǎn)等待,這就是活鎖活鎖的情形的情形 活鎖(續(xù))活鎖(續(xù)) 活鎖(續(xù))活鎖(續(xù)) o避免活鎖:避免活鎖:采用先來先服務(wù)的策略采用先來先服務(wù)的策略 n當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí)當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí) n按請(qǐng)求封鎖的先后次序?qū)@些事務(wù)排隊(duì)按請(qǐng)求封鎖的先后次序?qū)@些事務(wù)排隊(duì) n該數(shù)據(jù)對(duì)象上的鎖一旦釋放,首先批準(zhǔn)申該數(shù)據(jù)對(duì)象上的鎖
45、一旦釋放,首先批準(zhǔn)申 請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖 2.死鎖死鎖 o事務(wù)事務(wù)t1封鎖了數(shù)據(jù)封鎖了數(shù)據(jù)r1 ot2封鎖了數(shù)據(jù)封鎖了數(shù)據(jù)r2 ot1又請(qǐng)求封鎖又請(qǐng)求封鎖r2,因,因t2已封鎖了已封鎖了r2,于是,于是t1 等待等待t2釋放釋放r2上的鎖上的鎖 o接著接著t2又申請(qǐng)封鎖又申請(qǐng)封鎖r1,因,因t1已封鎖了已封鎖了r1,t2 也只能等待也只能等待t1釋放釋放r1上的鎖上的鎖 o這樣這樣t1在等待在等待t2,而,而t2又在等待又在等待t1,t1和和t2 兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖死鎖 死鎖(續(xù))死鎖(續(xù)) t1t2 lock r1 lock
46、 r2 lock r2. 等待 等待lock r1 等待等待 等待等待 死 鎖 解決死鎖的方法解決死鎖的方法 o兩類方法兩類方法 n預(yù)防死鎖預(yù)防死鎖 n死鎖的診斷與解除死鎖的診斷與解除 3.預(yù)防死鎖預(yù)防死鎖 o產(chǎn)生死鎖的原因是兩個(gè)或多個(gè)事務(wù)都已封鎖了產(chǎn)生死鎖的原因是兩個(gè)或多個(gè)事務(wù)都已封鎖了 一些數(shù)據(jù)對(duì)象,然后又都請(qǐng)求對(duì)已為其他事務(wù)一些數(shù)據(jù)對(duì)象,然后又都請(qǐng)求對(duì)已為其他事務(wù) 封鎖的數(shù)據(jù)對(duì)象加鎖,從而出現(xiàn)死等待。封鎖的數(shù)據(jù)對(duì)象加鎖,從而出現(xiàn)死等待。 o預(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件預(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件 死鎖的預(yù)防(續(xù))死鎖的預(yù)防(續(xù)) 預(yù)防死鎖的方法預(yù)防死鎖的方法 o 一次
47、封鎖法一次封鎖法 o 順序封鎖法順序封鎖法 一次封鎖法一次封鎖法 o要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù) 全部加鎖,否則就不能繼續(xù)執(zhí)行全部加鎖,否則就不能繼續(xù)執(zhí)行 o存在的問題存在的問題 n降低系統(tǒng)并發(fā)度降低系統(tǒng)并發(fā)度 n難于事先精確確定封鎖對(duì)象難于事先精確確定封鎖對(duì)象 順序封鎖法順序封鎖法 o順序封鎖法是預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封鎖順順序封鎖法是預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封鎖順 序,所有事務(wù)都按這個(gè)順序?qū)嵭蟹怄i。序,所有事務(wù)都按這個(gè)順序?qū)嵭蟹怄i。 o順序封鎖法存在的問題順序封鎖法存在的問題 n維護(hù)成本維護(hù)成本 數(shù)據(jù)庫(kù)系統(tǒng)中封鎖的數(shù)據(jù)對(duì)象極多,并且在數(shù)據(jù)庫(kù)系統(tǒng)
48、中封鎖的數(shù)據(jù)對(duì)象極多,并且在 不斷地變化。不斷地變化。 n難以實(shí)現(xiàn):很難事先確定每一個(gè)事務(wù)要封鎖難以實(shí)現(xiàn):很難事先確定每一個(gè)事務(wù)要封鎖 哪些對(duì)象哪些對(duì)象 死鎖的預(yù)防(續(xù))死鎖的預(yù)防(續(xù)) o結(jié)論結(jié)論 n在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略在操作系統(tǒng)中廣為采用的預(yù)防死鎖的策略 并不很適合數(shù)據(jù)庫(kù)的特點(diǎn)并不很適合數(shù)據(jù)庫(kù)的特點(diǎn) ndbms在解決死鎖的問題上更普遍采用的在解決死鎖的問題上更普遍采用的 是診斷并解除死鎖的方法是診斷并解除死鎖的方法 4. 死鎖的診斷與解除死鎖的診斷與解除 o死鎖的診斷死鎖的診斷 n超時(shí)法超時(shí)法 n事務(wù)等待圖法事務(wù)等待圖法 (1) 超時(shí)法超時(shí)法 o如果一個(gè)事務(wù)的等待時(shí)間超過了
49、規(guī)定的時(shí)限,如果一個(gè)事務(wù)的等待時(shí)間超過了規(guī)定的時(shí)限, 就認(rèn)為發(fā)生了死鎖就認(rèn)為發(fā)生了死鎖 o優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單 o缺點(diǎn)缺點(diǎn) n有可能誤判死鎖有可能誤判死鎖 n時(shí)限若設(shè)置得太長(zhǎng),死鎖發(fā)生后不能及時(shí)時(shí)限若設(shè)置得太長(zhǎng),死鎖發(fā)生后不能及時(shí) 發(fā)現(xiàn)發(fā)現(xiàn) (2)等待圖法等待圖法 o用事務(wù)等待圖動(dòng)態(tài)反映所有事務(wù)的等待情況用事務(wù)等待圖動(dòng)態(tài)反映所有事務(wù)的等待情況 n事務(wù)等待圖是一個(gè)有向圖事務(wù)等待圖是一個(gè)有向圖g=(t,u) nt為結(jié)點(diǎn)的集合,每個(gè)結(jié)點(diǎn)表示正運(yùn)行的事務(wù)為結(jié)點(diǎn)的集合,每個(gè)結(jié)點(diǎn)表示正運(yùn)行的事務(wù) nu為邊的集合,每條邊表示事務(wù)等待的情況為邊的集合,每條邊表示事務(wù)等待的情況 n若若t1等待等待t2,
50、則,則t1,t2之間劃一條有向邊,從之間劃一條有向邊,從t1 指向指向t2 等待圖法(續(xù))等待圖法(續(xù)) 事務(wù)等待圖 n 圖圖(a)中,事務(wù)中,事務(wù)t1等待等待t2,t2等待等待t1,產(chǎn)生了死鎖,產(chǎn)生了死鎖 n 圖圖(b)中,事務(wù)中,事務(wù)t1等待等待t2,t2等待等待t3,t3等待等待t4,t4又等待又等待 t1,產(chǎn)生了死鎖,產(chǎn)生了死鎖 n 圖圖(b)中,事務(wù)中,事務(wù)t3可能還等待可能還等待t2,在大回路中又有小的回路,在大回路中又有小的回路 等待圖法(續(xù))等待圖法(續(xù)) o并發(fā)控制子系統(tǒng)周期性地(比如每隔數(shù)秒)并發(fā)控制子系統(tǒng)周期性地(比如每隔數(shù)秒) 生成事務(wù)等待圖,檢測(cè)事務(wù)。如果發(fā)現(xiàn)圖生成事
51、務(wù)等待圖,檢測(cè)事務(wù)。如果發(fā)現(xiàn)圖 中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。 死鎖的診斷與解除(續(xù))死鎖的診斷與解除(續(xù)) o解除死鎖解除死鎖 n選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將 其撤消其撤消 n釋放此事務(wù)持有的所有的鎖,使其它事釋放此事務(wù)持有的所有的鎖,使其它事 務(wù)能繼續(xù)運(yùn)行下去務(wù)能繼續(xù)運(yùn)行下去 9.2.5 并發(fā)調(diào)度的可串行性并發(fā)調(diào)度的可串行性 odbms對(duì)并發(fā)事務(wù)不同的調(diào)度可能會(huì)產(chǎn)對(duì)并發(fā)事務(wù)不同的調(diào)度可能會(huì)產(chǎn) 生不同的結(jié)果生不同的結(jié)果 o什么樣的調(diào)度是正確的?什么樣的調(diào)度是正確的? 9.2.5 并發(fā)調(diào)度的可串行性并發(fā)調(diào)度的可串
52、行性 o可串行化調(diào)度可串行化調(diào)度 n多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng) 其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù) 時(shí)的結(jié)果相同時(shí)的結(jié)果相同 o事務(wù)的可串行性是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則事務(wù)的可串行性是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則 o一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行 化的,才認(rèn)為是正確調(diào)度?;?,才認(rèn)為是正確調(diào)度。 可串行化調(diào)度可串行化調(diào)度 例例現(xiàn)在有兩個(gè)事務(wù),分別包含下列操作:現(xiàn)在有兩個(gè)事務(wù),分別包含下列操作: n事務(wù)事務(wù)t1:讀:讀b;a=b+1;寫回;寫回a n事務(wù)事務(wù)t2:讀:讀a;b
53、=a+1;寫回;寫回b 現(xiàn)給出對(duì)這兩個(gè)事務(wù)不同的調(diào)度策略現(xiàn)給出對(duì)這兩個(gè)事務(wù)不同的調(diào)度策略 o記號(hào)記號(hào) nr(x):讀數(shù)據(jù)讀數(shù)據(jù)x nw(x):寫數(shù)據(jù)寫數(shù)據(jù)x 串行化調(diào)度串行化調(diào)度, ,正確的調(diào)度正確的調(diào)度 t1t2 slock b y=r(b)=2 unlock b xlock a a=y+1=3 w(a) unlock a slock a x=r(a)=3 unlock a xlock b b=x+1=4 w(b) unlock b n 假設(shè)假設(shè)a、b的初值均為的初值均為2。 n 按按t1t2次序執(zhí)行結(jié)果次序執(zhí)行結(jié)果 為為a=3,b=4 n 串行調(diào)度策略串行調(diào)度策略,正確的調(diào)度正確的調(diào)度 串
54、行調(diào)度串行調(diào)度(a) 串行化調(diào)度串行化調(diào)度, ,正確的調(diào)度正確的調(diào)度 t1t2 slock a x=r(a)=2 unlock a xlock b b=x+1=3 w(b) unlock b slock b y=r(b)=3 unlock b xlock a a=y+1=4 w(a) unlock a 串行調(diào)度串行調(diào)度(b) n 假設(shè)假設(shè)a、b的初值均為的初值均為2。 n t2t1次序執(zhí)行結(jié)果為次序執(zhí)行結(jié)果為 b=3,a=4 n 串行調(diào)度策略串行調(diào)度策略,正確的調(diào)度正確的調(diào)度 不可串行化調(diào)度,錯(cuò)誤的調(diào)度不可串行化調(diào)度,錯(cuò)誤的調(diào)度 t1t2 slock b y=r(b)=2 slock a x=
55、r(a)=2 unlock b unlock a xlock a a=y+1=3 w(a) xlock b b=x+1=3 w(b) unlock a unlock b 不可串行化的調(diào)度不可串行化的調(diào)度 n 執(zhí)行結(jié)果與執(zhí)行結(jié)果與(a)、(b)的結(jié)的結(jié) 果都不同果都不同 n 是錯(cuò)誤的調(diào)度是錯(cuò)誤的調(diào)度 可串行化調(diào)度,正確的調(diào)度可串行化調(diào)度,正確的調(diào)度 t1t2 slock b y=r(b)=2 unlock b xlock a slock a a=y+1=3等待 w(a)等待 unlock a等待 x=r(a)=3 unlock a xlock b b=x+1=4 w(b) unlock b 可串行化的調(diào)度可串行化的調(diào)度 n 執(zhí)行結(jié)果與串行調(diào)度執(zhí)行結(jié)果與串行調(diào)度 (a)的執(zhí)行結(jié)果相同的執(zhí)行結(jié)果相同 n 是正確的調(diào)度是正確的調(diào)度 9.2.6 兩段鎖協(xié)議兩段鎖協(xié)議 o兩段鎖協(xié)議是實(shí)現(xiàn)可串行化調(diào)度的兩段鎖協(xié)議是實(shí)現(xiàn)可串行化調(diào)度的充分條件充分條件。 o可以將每個(gè)事務(wù)分成兩個(gè)時(shí)期:可以將每個(gè)事務(wù)分成兩個(gè)時(shí)期:申請(qǐng)封鎖期申請(qǐng)封鎖期和和 釋放封鎖期釋放封鎖期,申請(qǐng)期申請(qǐng)要進(jìn)行的封鎖,釋放,申請(qǐng)期申請(qǐng)要進(jìn)行的封鎖,釋放 期釋放所占有的封鎖。期釋放所占有的封鎖。 o在申請(qǐng)期不允許釋放任何鎖,在釋放期不允許在申請(qǐng)期
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州城市職業(yè)學(xué)院《數(shù)字圖像處理及應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽(yáng)職業(yè)技術(shù)學(xué)院《中學(xué)英語教學(xué)研究方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025廣東省安全員《B證》考試題庫(kù)
- 2025年重慶市安全員-A證考試題庫(kù)附答案
- 廣州珠江職業(yè)技術(shù)學(xué)院《惡意代碼調(diào)查技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年江西省安全員B證(項(xiàng)目經(jīng)理)考試題庫(kù)
- 廣州應(yīng)用科技學(xué)院《手機(jī)多媒體開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025青海建筑安全員A證考試題庫(kù)
- 廣州衛(wèi)生職業(yè)技術(shù)學(xué)院《多媒體信息處理與傳輸》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州鐵路職業(yè)技術(shù)學(xué)院《動(dòng)畫設(shè)計(jì)原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 擦黑板(教案)勞動(dòng)二年級(jí)上冊(cè)
- 2024年安徽省高中語文學(xué)業(yè)水平合格考模擬試卷試題(含答案詳解)
- 空調(diào)水管道安裝施工方案
- 家族族譜資料收集表
- 2024年1月自考18960禮儀學(xué)試題及答案含解析
- Vue.js前端開發(fā)實(shí)戰(zhàn)(第2版)-教學(xué)課件 第1章 初識(shí)Vue
- 事業(yè)單位年度考核實(shí)施方案
- 2024-2029年中國(guó)中藥煎藥機(jī)行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告
- 竣工驗(yàn)收消防查驗(yàn)和消防驗(yàn)收
- 衛(wèi)生院崗位風(fēng)險(xiǎn)分級(jí)和監(jiān)管制度工作方案
- 2016-2023年大慶醫(yī)學(xué)高等??茖W(xué)校高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論