版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
觸發(fā)器事務(wù)并發(fā)控制第1頁(yè),共75頁(yè),2023年,2月20日,星期四6.1系統(tǒng)目錄6.2觸發(fā)器6.3事務(wù)6.4并發(fā)控制6.5數(shù)據(jù)庫(kù)的恢復(fù)主要內(nèi)容2第2頁(yè),共75頁(yè),2023年,2月20日,星期四重、難點(diǎn)重點(diǎn)觸發(fā)器事務(wù)難點(diǎn)觸發(fā)器3第3頁(yè),共75頁(yè),2023年,2月20日,星期四6.1系統(tǒng)目錄SQLServer系統(tǒng)目錄的核心是一個(gè)視圖集,這些視圖顯示了描述SQLServer實(shí)例中的對(duì)象的元數(shù)據(jù)。元數(shù)據(jù)是描述系統(tǒng)中對(duì)象屬性的數(shù)據(jù)。比如:數(shù)據(jù)庫(kù)中表和視圖的數(shù)目和名稱。表或視圖中的列數(shù)以及每一列的名稱、數(shù)據(jù)類型、小數(shù)位數(shù)和精度。表中定義的約束。為表定義的索引和鍵。等4第4頁(yè),共75頁(yè),2023年,2月20日,星期四查詢SQLServer系統(tǒng)目錄基于SQLServer的應(yīng)用程序可以使用以下方式訪問(wèn)系統(tǒng)目錄中的信息:目錄視圖。建議使用這種訪問(wèn)方法。Select*fromsys.tables信息架構(gòu)視圖。select*fromINFORMATION_SCHEMA.TABLESOLEDB架構(gòu)行集。ODBC目錄函數(shù)。系統(tǒng)存儲(chǔ)過(guò)程和函數(shù)。5第5頁(yè),共75頁(yè),2023年,2月20日,星期四系統(tǒng)存儲(chǔ)過(guò)程定義了返回目錄信息的服務(wù)器系統(tǒng)存儲(chǔ)過(guò)程sp_databasessp_tablessp_helpdb報(bào)告有關(guān)指定數(shù)據(jù)庫(kù)或所有數(shù)據(jù)庫(kù)的信息。6第6頁(yè),共75頁(yè),2023年,2月20日,星期四系統(tǒng)函數(shù)系統(tǒng)函數(shù)可以訪問(wèn)SQLServer系統(tǒng)表中的信息,而不必直接訪問(wèn)系統(tǒng)表。DB_ID()和DB_NAME()
SUSER_ID和SUSER_NAME(或SUSER_SID和SUSER_SNAME)檢索使用SQLServer身份驗(yàn)證登錄的當(dāng)前用戶的用戶名:SELECTSUSER_NAME();7第7頁(yè),共75頁(yè),2023年,2月20日,星期四6.2觸發(fā)器SQLServer提供兩種主要機(jī)制來(lái)強(qiáng)制使用業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性:約束和觸發(fā)器。觸發(fā)器為特殊類型的存儲(chǔ)過(guò)程,可在執(zhí)行語(yǔ)言事件時(shí)自動(dòng)生效。SQLServer包括三種常規(guī)類型的觸發(fā)器:DML觸發(fā)器DDL觸發(fā)器登錄觸發(fā)器。8第8頁(yè),共75頁(yè),2023年,2月20日,星期四DML觸發(fā)器種類AFTER觸發(fā)器:要求只有執(zhí)行某一操作INSERT、UPDATE、DELETE之后,觸發(fā)器才被觸發(fā)且只能在表上定義。INSTEADOF觸發(fā)器:表示并不執(zhí)行其所定義的操作INSERT、UPDATE、DELETE,而僅是執(zhí)行觸發(fā)器本身。對(duì)同一操作只能定義一個(gè)INSTEADOF觸發(fā)器。9第9頁(yè),共75頁(yè),2023年,2月20日,星期四CREATETRIGGER
trigger_name
ON{table|view}
[WITHENCRYPTION]
{
{
{FOR|AFTER|INSTEADOF}{[INSERT][,][UPDATE]}
AS
sql_statement[...n]
}
}創(chuàng)建觸發(fā)器時(shí)需指定:名稱。定義觸發(fā)器的表。觸發(fā)器何時(shí)激發(fā)。激活觸發(fā)器的數(shù)據(jù)修改語(yǔ)句。INSERT、UPDATE或DELETE。執(zhí)行觸發(fā)操作的編程語(yǔ)句。如果僅指定FOR關(guān)鍵字,則AFTER是默認(rèn)設(shè)置。CREATETRIGGER必須是批處理中的第一條語(yǔ)句,并且只能應(yīng)用到一個(gè)表中。10第10頁(yè),共75頁(yè),2023年,2月20日,星期四觸發(fā)器語(yǔ)句自動(dòng)創(chuàng)建和管理兩種特殊的表:臨時(shí)表deleted
表和inserted
表:測(cè)試數(shù)據(jù)修改的效果及設(shè)置觸發(fā)器操作的條件;不能直接對(duì)表中的數(shù)據(jù)進(jìn)行更改。Deleted
表:存儲(chǔ)DELETE和UPDATE語(yǔ)句所影響的行的復(fù)本。在執(zhí)行DELETE或UPDATE語(yǔ)句時(shí),行從觸發(fā)器表中刪除,并傳輸?shù)絛eleted
表中。Inserted
表:存儲(chǔ)INSERT和UPDATE語(yǔ)句所影響的行的副本。在一個(gè)插入或更新事務(wù)處理中,新建行被同時(shí)添加到inserted
表和觸發(fā)器表中。Inserted
表中的行是觸發(fā)器表中新行的副本。11第11頁(yè),共75頁(yè),2023年,2月20日,星期四例:建立一個(gè)觸發(fā)器,當(dāng)向orders表中插入一個(gè)新訂單時(shí)被觸發(fā),自動(dòng)更新products表的quantity列,即把在orders表中指定的qty從products表相應(yīng)行的quantity中減去。useSalesgocreatetriggerortrionordersforinsertasdeclare@new_qtyfloat,@new_pidchar(4)select@new_qty=qty,@new_pid=pidfrominsertedupdateproductssetquantity=quantity-@new_qtywherepid=@new_pid12第12頁(yè),共75頁(yè),2023年,2月20日,星期四insertorders(ordno,aid,cid,pid,qty)values('1100','a01','c001','p01',2000)13第13頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)事務(wù)(TRANSACTION)是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。這些操作作為一個(gè)整體一起向系統(tǒng)提交,要么都執(zhí)行、要么都不執(zhí)行。事務(wù)是一個(gè)不可分割的工作邏輯單元。
14第14頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)為什么需要事務(wù)?例如,銀行轉(zhuǎn)帳問(wèn)題:假定資金從帳戶A轉(zhuǎn)到帳戶B,至少需要兩步:帳戶A的資金減少然后帳戶B的資金相應(yīng)增加銀行轉(zhuǎn)帳帳戶A帳戶B15第15頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)CREATETABLEbank--創(chuàng)建帳戶表,存放用戶的帳戶信息(customerNameCHAR(10),--顧客姓名
currentMoneyMONEYCHECK(currentMoney>=1)--根據(jù)銀行規(guī)定,帳戶余額不能少于1元,否則視為銷戶)GOINSERTINTObank(customerName,currentMoney)VALUES('張三',1000)INSERTINTObank(customerName,currentMoney)VALUES('李四',1)16第16頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)目前兩個(gè)帳戶的余額總和為:1000+1=1001元SELECT*FROMbank17第17頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)模擬實(shí)現(xiàn)轉(zhuǎn)帳:從張三的帳戶轉(zhuǎn)帳1000元到李四的帳戶--我們可能會(huì)這樣編寫語(yǔ)句UPDATEbankSETcurrentMoney=currentMoney-1000WHEREcustomerName='張三'UPDATEbankSETcurrentMoney=currentMoney+1000WHEREcustomerName='李四'GO--再次查看轉(zhuǎn)帳后的結(jié)果。SELECT*FROMbank18第18頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)張三的帳戶沒有減少但李四的帳戶卻多了1000元1000+1001=2001元
總額多出了1000元!如何解決這種問(wèn)題?使用事務(wù)!19第19頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)T-SQL使用下列語(yǔ)句來(lái)管理事務(wù):開始事務(wù):BEGINTRANSACTION提交事務(wù):COMMITTRANSACTION回滾(撤銷)事務(wù):ROLLBACKTRANSACTION一旦事務(wù)提交或回滾,則事務(wù)結(jié)束。判斷某條語(yǔ)句執(zhí)行是否出錯(cuò):使用全局變量@@ERROR;如果前一個(gè)Transact-SQL語(yǔ)句執(zhí)行沒有錯(cuò)誤,則返回0。如果前一個(gè)語(yǔ)句遇到錯(cuò)誤,則返回錯(cuò)誤號(hào)。20第20頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)使用事務(wù)解決銀行轉(zhuǎn)帳問(wèn)題BEGINTRANSACTION
/*--定義變量,用于累計(jì)事務(wù)執(zhí)行過(guò)程中的錯(cuò)誤--*/DECLARE@errorSumINTSET@errorSum=0--初始化為0,即無(wú)錯(cuò)誤/*--轉(zhuǎn)帳:張三的帳戶少1000元,李四的帳戶多1000元*/UPDATEbankSETcurrentMoney=currentMoney-1000WHEREcustomerName='張三'SET@errorSum=@errorSum+@@errorUPDATEbankSETcurrentMoney=currentMoney+1000WHEREcustomerName='李四'SET@errorSum=@errorSum+@@error--累計(jì)是否有錯(cuò)誤21第21頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)IF@errorSum<>0--如果有錯(cuò)誤
BEGINprint'交易失敗,回滾事務(wù)'ROLLBACKTRANSACTIONENDELSEBEGINprint'交易成功,提交事務(wù),寫入硬盤,永久的保存'
COMMITTRANSACTION
ENDGOprint'查看轉(zhuǎn)帳事務(wù)后的余額'SELECT*FROMbankGO22第22頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)轉(zhuǎn)賬1000的結(jié)果:23第23頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)轉(zhuǎn)賬800的結(jié)果:24第24頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)--判斷某條語(yǔ)句執(zhí)行是否出錯(cuò)的另一種方法Begintry--捕獲事務(wù)執(zhí)行過(guò)程中的錯(cuò)誤,一旦有語(yǔ)句出錯(cuò)就轉(zhuǎn)到catch中處理BEGINTRANSACTIONUPDATEbankSETcurrentMoney=currentMoney-1000WHEREcustomerName='張三'UPDATEbankSETcurrentMoney=currentMoney+1000WHEREcustomerName='李四'committransaction--上面的語(yǔ)句都沒有出錯(cuò),則提交事務(wù)endtrybegincatchprint'有錯(cuò)誤發(fā)生,回滾事務(wù)'rollbacktransactionendcatchselect*frombank25第25頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)事務(wù)的分類:顯式事務(wù):用BEGINTRANSACTION明確指定事務(wù)的開始,這是最常用的事務(wù)類型隱性事務(wù):通過(guò)SETIMPLICIT_TRANSACTIONSON語(yǔ)句,將隱性事務(wù)模式設(shè)置為打開,在發(fā)出COMMIT或ROLLBACK語(yǔ)句之前,該事務(wù)將一直保持有效。自動(dòng)提交事務(wù):這是SQLServer的默認(rèn)模式,它將每條單獨(dú)的T-SQL語(yǔ)句視為一個(gè)事務(wù),如果成功執(zhí)行,則自動(dòng)提交;如果錯(cuò)誤,則自動(dòng)回滾26第26頁(yè),共75頁(yè),2023年,2月20日,星期四6.3事務(wù)事務(wù)的ACID特性原子性(Atomicity):事務(wù)是一個(gè)完整的操作。事務(wù)的各步操作是不可分的(原子的);要么都執(zhí)行,要么都不執(zhí)行。一致性(Consistency):當(dāng)事務(wù)完成時(shí),數(shù)據(jù)必須處于一致狀態(tài)。隔離性(Isolation):對(duì)數(shù)據(jù)進(jìn)行修改的所有并發(fā)事務(wù)是彼此隔離的,這表明事務(wù)必須是獨(dú)立的,它不應(yīng)以任何方式依賴于或影響其他事務(wù)。永久性(Durability):事務(wù)完成后,它對(duì)數(shù)據(jù)庫(kù)的修改被永久保持。27第27頁(yè),共75頁(yè),2023年,2月20日,星期四6.4并發(fā)控制6.4.1并發(fā)操作引起的異常丟失更新(LostUpdate)未提交讀(Uncommittedread),也稱為“臟讀”
不可重復(fù)讀(Nonrepeatableread)幻象讀(Phantomread)28第28頁(yè),共75頁(yè),2023年,2月20日,星期四丟失更新(LostUpdate)T1讀A=16A=A-1寫回A=15T2讀A=16A=A-2寫回A=1429第29頁(yè),共75頁(yè),2023年,2月20日,星期四未提交讀(臟讀)事務(wù)T1修改了某數(shù)據(jù)并寫回,事務(wù)T2讀取了同一數(shù)據(jù)后,T1由于某種原因被撤銷,被修改的值復(fù)原,此時(shí)T2讀到的數(shù)據(jù)與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致T1讀C=1C=C*2寫回C=2ROLLBACKC恢復(fù)為1T2讀C=230第30頁(yè),共75頁(yè),2023年,2月20日,星期四不可重復(fù)讀事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對(duì)其做了修改,當(dāng)T1按同樣條件再讀時(shí)得到不同的值。T1讀A=1,B=2求A+B=3讀A=1,B=4求A+B=5T2讀B=2B=B*2寫回B=431第31頁(yè),共75頁(yè),2023年,2月20日,星期四幻象讀事務(wù)T1讀取某些數(shù)據(jù)后,事務(wù)T2插入了一些記錄,當(dāng)T1按同樣條件再讀時(shí)發(fā)現(xiàn)多了一些記錄。32第32頁(yè),共75頁(yè),2023年,2月20日,星期四6.4并發(fā)控制6.4.2并發(fā)控制機(jī)制:是衡量DBMS系統(tǒng)性能的指標(biāo)之一并發(fā)控制機(jī)制的任務(wù)對(duì)并發(fā)操作進(jìn)行正確調(diào)度保證事務(wù)的隔離性保證數(shù)據(jù)庫(kù)的一致性封鎖技術(shù)(Locking)是并發(fā)控制的主要技術(shù)33第33頁(yè),共75頁(yè),2023年,2月20日,星期四6.4.3封鎖事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(如數(shù)據(jù)庫(kù)、表、記錄等)操作之前,首先向系統(tǒng)發(fā)出加鎖請(qǐng)求以便獲得對(duì)數(shù)據(jù)對(duì)象相應(yīng)的控制;在事務(wù)T釋放它所獲得的鎖之前,其他事務(wù)不能更新此數(shù)據(jù)對(duì)象。34第34頁(yè),共75頁(yè),2023年,2月20日,星期四鎖的類型排它鎖(eXclusivelock):寫鎖若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對(duì)A加任何類型的鎖,直到T釋放A上的鎖共享鎖(Sharelock):讀鎖若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則事務(wù)T可以讀A但不能修改A,其它事務(wù)只能再對(duì)A加S鎖,而不能加X鎖,直到T釋放A上的S鎖35第35頁(yè),共75頁(yè),2023年,2月20日,星期四鎖的相容矩陣Y:相容的請(qǐng)求N:不相容的請(qǐng)求
T2T1XS-XNNYSNYY-YYY36第36頁(yè),共75頁(yè),2023年,2月20日,星期四封鎖協(xié)議有了兩種基本封鎖,還需要什么約定?封鎖協(xié)議的概念何時(shí)申請(qǐng)加鎖、持鎖時(shí)間、何時(shí)釋放等規(guī)則不同的封鎖協(xié)議所達(dá)到的系統(tǒng)一致性不同37第37頁(yè),共75頁(yè),2023年,2月20日,星期四三個(gè)級(jí)別的封鎖協(xié)議一級(jí)封鎖協(xié)議內(nèi)容:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X鎖,直至事務(wù)結(jié)束事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正常結(jié)束(ROLLBACK)評(píng)價(jià):是否可解決丟失修改?可重復(fù)讀?讀臟數(shù)據(jù)?在協(xié)議中,如果是讀數(shù)據(jù),不需要加鎖,所以不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)??煞乐埂敛荒鼙WC×不能防止38第38頁(yè),共75頁(yè),2023年,2月20日,星期四一級(jí)封鎖協(xié)議
XlockA等待等待等待等待獲得XlockA讀A=15A←A-1寫回A=14CommitUnlockA
①
XlockA
獲得②
讀A=16
③A←A-1
寫回A=15CommitUnlockA④
⑤
T2T1沒有丟失修改39第39頁(yè),共75頁(yè),2023年,2月20日,星期四一級(jí)封鎖協(xié)議
讀A=15①
XlockA
獲得②
讀A=16
A←A-1
寫回A=15③
④RollbackUnlockA
T2T1讀“臟”數(shù)據(jù)40第40頁(yè),共75頁(yè),2023年,2月20日,星期四
XlockB
獲得
讀B=100B←B*2
寫回B=200CommitUnlockB①讀A=50
讀B=100
求和=150②③讀A=50
讀B=200
求和=250(驗(yàn)算不對(duì))T2T1不可重復(fù)讀一級(jí)封鎖協(xié)議41第41頁(yè),共75頁(yè),2023年,2月20日,星期四三個(gè)級(jí)別的封鎖協(xié)議二級(jí)封鎖協(xié)議內(nèi)容:讀數(shù)據(jù)前加S鎖,讀完即釋放寫數(shù)據(jù)前加X鎖直至事務(wù)結(jié)束評(píng)價(jià):是否可解決丟失修改?可重復(fù)讀?讀臟數(shù)據(jù)?可防止×不能保證可防止42第42頁(yè),共75頁(yè),2023年,2月20日,星期四二級(jí)封鎖協(xié)議不可重復(fù)讀①
SclockA
獲得讀A=50UnlockA②SclockB
獲得讀B=100UnlockB③求和=150
XlockB等待等待獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockBT2T1④SclockA
獲得讀A=50UnlockASclockB
獲得讀B=200UnlockB
求和=250(驗(yàn)算不對(duì))
T2T1(續(xù))43第43頁(yè),共75頁(yè),2023年,2月20日,星期四三個(gè)級(jí)別的封鎖協(xié)議三級(jí)封鎖協(xié)議內(nèi)容:讀數(shù)據(jù)前加S鎖直至事務(wù)結(jié)束寫數(shù)據(jù)前加X鎖直至事務(wù)結(jié)束評(píng)價(jià):是否可解決丟失修改?可重復(fù)讀?讀臟數(shù)據(jù)?可防止能保證可保證44第44頁(yè),共75頁(yè),2023年,2月20日,星期四三級(jí)封鎖協(xié)議
XlockB等待等待等待等待等待等待等待等待獲得XlockB讀B=100B←B*2寫回B=200CommitUnlockB
①
SlockA
讀A=50SlockB
讀B=100
求和=150②
③讀A=50
讀B=100
求和=150CommitUnlockAUnlockB④
⑤
T2T1可重復(fù)讀45第45頁(yè),共75頁(yè),2023年,2月20日,星期四三級(jí)封鎖協(xié)議
SlockC等待等待等待等待獲得SlockC讀C=100CommitCUnlockC①
XlockC
讀C=100C←C*2
寫回C=200②
③ROLLBACK(C恢復(fù)為100)UnlockC④
⑤
T2T1不讀“臟”數(shù)據(jù)46第46頁(yè),共75頁(yè),2023年,2月20日,星期四不同級(jí)別的封鎖協(xié)議X鎖S鎖一致性保證操作結(jié)束釋放事務(wù)結(jié)束釋放操作結(jié)束釋放事務(wù)結(jié)束釋放不丟失修改不讀臟數(shù)據(jù)可重復(fù)性一級(jí)二級(jí)三級(jí)47第47頁(yè),共75頁(yè),2023年,2月20日,星期四死鎖事務(wù)T1和T2各自封鎖了數(shù)據(jù)R1和R2后,又各自請(qǐng)求封鎖R2和R1,因都無(wú)法獲得而等待對(duì)方釋放的現(xiàn)象解決的兩類方法預(yù)防死鎖死鎖的診斷與解除6.4.4死鎖48第48頁(yè),共75頁(yè),2023年,2月20日,星期四死鎖的預(yù)防一次封鎖法辦法:每個(gè)事務(wù)一次將所有要使用的數(shù)據(jù)全部加鎖存在問(wèn)題?降低并發(fā)度順序封鎖法辦法:預(yù)先規(guī)定數(shù)據(jù)對(duì)象的封鎖順序,所有事務(wù)均按此順序存在問(wèn)題?維護(hù)成本高因此DBMS普遍采用診斷并解除死鎖的辦法49第49頁(yè),共75頁(yè),2023年,2月20日,星期四死鎖的診斷與解決死鎖的診斷超時(shí)法辦法:等待時(shí)間超過(guò)規(guī)定的時(shí)限優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單缺點(diǎn)有可能誤判死鎖時(shí)限若設(shè)置得太長(zhǎng),死鎖發(fā)生后不能及時(shí)發(fā)現(xiàn)等待圖法辦法:畫等待圖,發(fā)現(xiàn)回路50第50頁(yè),共75頁(yè),2023年,2月20日,星期四等待圖法用事務(wù)等待圖動(dòng)態(tài)反映所有事務(wù)的等待情況事務(wù)等待圖是一個(gè)有向圖G=(T,U)T為結(jié)點(diǎn)的集合,每個(gè)結(jié)點(diǎn)表示正運(yùn)行的事務(wù)U為邊的集合,每條邊表示事務(wù)等待的情況若T1等待T2,則T1,T2之間劃一條有向邊,從T1指向T2并發(fā)控制子系統(tǒng)周期性地(比如每隔1min)檢測(cè)事務(wù)等待圖,如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。51第51頁(yè),共75頁(yè),2023年,2月20日,星期四死鎖的解決檢測(cè)到死鎖,選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),強(qiáng)行撤銷,使其它事務(wù)可以繼續(xù)下去恢復(fù)撤銷事務(wù)所執(zhí)行的數(shù)據(jù)修改操作52第52頁(yè),共75頁(yè),2023年,2月20日,星期四6.4.5事務(wù)調(diào)度的可串行性DBMS需對(duì)多個(gè)并發(fā)事務(wù)進(jìn)行運(yùn)行調(diào)度能將所有事務(wù)串行起來(lái)的調(diào)度策略不會(huì)破壞數(shù)據(jù)庫(kù)的不一致性,故而總是正確的可串行化(Serializable)的調(diào)度:多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同53第53頁(yè),共75頁(yè),2023年,2月20日,星期四6.4.5事務(wù)調(diào)度的可串行性可串行性是并發(fā)事務(wù)操作是否正確的判別準(zhǔn)則。例:現(xiàn)在有兩個(gè)事務(wù),分別包含下列操作:事務(wù)1:讀B;A=B+1;寫回A;事務(wù)2:讀A;B=A+1;寫回B;假設(shè)A的初值為2,B的初值為2。54第54頁(yè),共75頁(yè),2023年,2月20日,星期四6.4.5事務(wù)調(diào)度的可串行性對(duì)這兩個(gè)事務(wù)的不同調(diào)度策略串行執(zhí)行串行調(diào)度策略1串行調(diào)度策略2交錯(cuò)執(zhí)行不可串行化的調(diào)度可串行化的調(diào)度55第55頁(yè),共75頁(yè),2023年,2月20日,星期四(a)串行調(diào)度策略,正確的調(diào)度SlockBY=B=2UnlockBXlockAA=Y+1寫回A(=3)UnlockA
SlockAX=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockB
T1T256第56頁(yè),共75頁(yè),2023年,2月20日,星期四(b)串行調(diào)度策略,正確的調(diào)度
SlockBY=B=3UnlockBXlockAA=Y+1寫回A(=4)UnlockA
SlockAX=A=2UnlockAXlockBB=X+1寫回B(=3)UnlockB
T1T257第57頁(yè),共75頁(yè),2023年,2月20日,星期四(c)不可串行化的調(diào)度SlockBY=B=2
UnlockB
XlockAA=Y+1寫回A(=3)
UnlockA
SlockAX=A=2
UnlockA
XlockBB=X+1寫回B(=3)
UnlockBT1T2由于其執(zhí)行結(jié)果與(a)、(b)的結(jié)果都不同,所以是錯(cuò)誤的調(diào)度。58第58頁(yè),共75頁(yè),2023年,2月20日,星期四(d)可串行化的調(diào)度SlockBY=B=2UnlockBXlockA
A=Y+1寫回A(=3)UnlockA
SlockA
等待等待等待X=A=3UnlockAXlockBB=X+1寫回B(=4)UnlockBT1T2由于其執(zhí)行結(jié)果與串行調(diào)度(a)的執(zhí)行結(jié)果相同,所以是正確的調(diào)度。59第59頁(yè),共75頁(yè),2023年,2月20日,星期四為了保證并發(fā)操作的正確性,DBMS的并發(fā)控制機(jī)制必須提供一定的手段來(lái)保證調(diào)度是可串行化的保證事務(wù)調(diào)度可串行性的策略兩段鎖(Two-PhaseLocking,2PL)協(xié)議★6.4.5事務(wù)調(diào)度的可串行性60第60頁(yè),共75頁(yè),2023年,2月20日,星期四兩段鎖協(xié)議兩段鎖協(xié)議的內(nèi)容1.在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖2.在釋放一個(gè)封鎖之后,事務(wù)不再獲得任何其他封鎖事務(wù)對(duì)數(shù)據(jù)項(xiàng)的加鎖和解鎖分為兩個(gè)階段完成獲得封鎖:在對(duì)數(shù)據(jù)讀寫之前首先申請(qǐng)并獲得封鎖;釋放封鎖:在釋放一個(gè)封鎖后不再申請(qǐng)和獲得任何其他封鎖61第61頁(yè),共75頁(yè),2023年,2月20日,星期四兩段鎖協(xié)議例:事務(wù)1的封鎖序列:SlockA...SlockB...XlockC...UnlockB...UnlockA...UnlockC;事務(wù)2的封鎖序列:SlockA...UnlockA...SlockB...XlockC...UnlockC...UnlockB;事務(wù)1遵守兩段鎖協(xié)議,而事務(wù)2不遵守兩段協(xié)議。62第62頁(yè),共75頁(yè),2023年,2月20日,星期四兩段鎖協(xié)議的性質(zhì)兩段鎖協(xié)議是可串行化調(diào)度的充分條件,但不是必要條件若并發(fā)事務(wù)都遵守兩段鎖協(xié)議,則對(duì)這些事務(wù)的任何并發(fā)調(diào)度策略都是可串行化的;若對(duì)并發(fā)事務(wù)的一個(gè)調(diào)度是可串行化的,不一定所有事務(wù)都符合兩段鎖協(xié)議兩段鎖協(xié)議可以保證并發(fā)事務(wù)的正確性,但可能發(fā)生死鎖63第63頁(yè),共75頁(yè),2023年,2月20日,星期四兩段鎖協(xié)議T1SlockB讀B=2Y=BXlockA
A=Y+1寫回A=3UnlockBUnlockA
T2
SlockA
等待等待等待等待等待SlockA讀A=3Y=AXlockBB=Y+1寫回B=4UnlockBUnlockA
T1SlockB讀B=2Y=BUnlockBXlockA
A=Y+1寫回A=3UnlockA
T2
SlockA等待等待等待等待SlockA讀A=3X=AUnlockAXlockBB=X+1寫回B=4UnlockB
(a)遵守兩段鎖協(xié)議
(b)不遵守兩段鎖協(xié)議T1SlockB讀B=2Y=BUnlockBXlockAA=Y+1寫回A=3UnlockAT2
SlockA讀A=2X=AUnlockAXlockB等待XlockBB=X+1寫回B=3UnlockB
(c)不遵守兩段鎖協(xié)議64第64頁(yè),共75頁(yè),2023年,2月20日,星期四6.4.6封鎖的粒度封鎖的粒度即封鎖對(duì)象的大小,如邏輯單元:屬性、元組、關(guān)系、索引、數(shù)據(jù)庫(kù)等物理單元:頁(yè)、塊等封鎖粒度對(duì)并發(fā)控制的影響封鎖粒度越大,并發(fā)度越小,系統(tǒng)封鎖開銷越??;封鎖粒度越小,并發(fā)度越高,系統(tǒng)封鎖開銷越大;65第65頁(yè),共75頁(yè),2023年,2月20日,星期四6.4.7隔離級(jí)別隔離級(jí)別:定義一個(gè)事務(wù)必須與其他事務(wù)所進(jìn)行的資源或數(shù)據(jù)更改相隔離的程度。較低的隔離級(jí)別可以增加并發(fā),但代價(jià)是降低數(shù)據(jù)的正確性。相反,較高的隔離級(jí)別可以確保數(shù)據(jù)的正確性,但可能對(duì)并發(fā)產(chǎn)生負(fù)面影響。應(yīng)用程序要求的隔離級(jí)別確定了數(shù)據(jù)庫(kù)使用的鎖定行為。SETTRANSACTIONISOLATIONLEVEL
{READCOMMITTED
|READUNCOMMITTED
|REPEATABLEREAD
|SERIALIZABLE
}66第66頁(yè),共75頁(yè),2023年,2月20日,星期四READCOMMITTED指定在讀取數(shù)據(jù)時(shí)控制共享鎖以避免臟讀。READUNCOMMITTED執(zhí)行臟讀,表示不發(fā)出共享鎖,也不接受排它鎖。REPEATABLEREAD鎖定查詢中使用的所有數(shù)據(jù)以防止其他用戶更新數(shù)據(jù)。對(duì)事務(wù)中的每個(gè)語(yǔ)句所讀取的全部數(shù)據(jù)都設(shè)置了共享鎖,并且該共享鎖一直保持到事務(wù)完成為止。SERIALIZABLE在數(shù)據(jù)集上放置一個(gè)范圍鎖,以防止其他用戶在事務(wù)完成之前更新數(shù)據(jù)集或?qū)⑿胁迦霐?shù)據(jù)集內(nèi)。6.4.7隔離級(jí)別67第67頁(yè),共75頁(yè),2023年,2月20日,星期四隔離級(jí)別臟讀不可重復(fù)讀取幻像未提交讀是是是提交讀否是是可重復(fù)讀否否是可串行讀否否否68第68頁(yè),共75頁(yè),2023年,2月20日,星期四6.5數(shù)據(jù)庫(kù)的恢復(fù)6.5.1故障的種類事務(wù)故障(1)邏輯錯(cuò)誤。事務(wù)由于某些內(nèi)部條件而無(wú)法繼續(xù)正常執(zhí)行,如非法輸入、找不到數(shù)據(jù)、運(yùn)算溢出或超出資源限制。(2)系統(tǒng)錯(cuò)誤。系統(tǒng)進(jìn)入一種不良狀態(tài)(如死鎖),結(jié)果事務(wù)無(wú)法繼續(xù)正常執(zhí)行。系統(tǒng)故障引起系統(tǒng)停止運(yùn)轉(zhuǎn)隨之要求重新啟動(dòng)的事件稱為“系統(tǒng)故障”。介質(zhì)故障介質(zhì)故障指外存故障,系統(tǒng)在運(yùn)行過(guò)程中,由于某種硬件故障,如磁盤損壞、磁頭碰撞或由于操作系統(tǒng)的某種潛在的錯(cuò)誤、瞬時(shí)磁場(chǎng)干擾,使存儲(chǔ)在外存上的數(shù)據(jù)部分損失或全部損失。計(jì)算機(jī)病毒69第69頁(yè),共75頁(yè),2023年,2月20日,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度財(cái)務(wù)目標(biāo)達(dá)成計(jì)劃
- 廣告行業(yè)前臺(tái)工作總結(jié)
- IT行業(yè)安全管理工作總結(jié)
- 礦產(chǎn)資源行業(yè)會(huì)計(jì)的關(guān)鍵職責(zé)
- 醫(yī)學(xué)美容護(hù)士工作心得
- 2024年認(rèn)識(shí)小熊教案
- 2024年牧場(chǎng)之國(guó)教案
- 2024年計(jì)算機(jī)教室管理制度
- 分銷合同范本(2篇)
- 辦公室合同范本(2篇)
- 足球教練員素質(zhì)和角色
- 初中八年級(jí)語(yǔ)文課件 桃花源記【省一等獎(jiǎng)】
- 名校長(zhǎng)工作總結(jié)匯報(bào)
- 商務(wù)接待禮儀流程
- 護(hù)理不良事件用藥錯(cuò)誤講課
- 新教材人教版高中英語(yǔ)選擇性必修第一冊(cè)全冊(cè)教學(xué)設(shè)計(jì)
- 2024北京大興區(qū)初三(上)期末化學(xué)試卷及答案
- 媒體與新聞法律法規(guī)法律意識(shí)與職業(yè)素養(yǎng)
- 推土機(jī)-推土機(jī)構(gòu)造與原理
- 九年級(jí)化學(xué)課程綱要
-
評(píng)論
0/150
提交評(píng)論