數(shù)據(jù)庫(kù)應(yīng)用技術(shù)教程 課件 第10、11章 事務(wù)管理、SQL2022數(shù)據(jù)庫(kù)日常維護(hù)_第1頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)教程 課件 第10、11章 事務(wù)管理、SQL2022數(shù)據(jù)庫(kù)日常維護(hù)_第2頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)教程 課件 第10、11章 事務(wù)管理、SQL2022數(shù)據(jù)庫(kù)日常維護(hù)_第3頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)教程 課件 第10、11章 事務(wù)管理、SQL2022數(shù)據(jù)庫(kù)日常維護(hù)_第4頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)教程 課件 第10、11章 事務(wù)管理、SQL2022數(shù)據(jù)庫(kù)日常維護(hù)_第5頁(yè)
已閱讀5頁(yè),還剩86頁(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)介

事務(wù)管理目錄CONTENTS10.1事務(wù)的基本概念0110.2SQLServer2022中的事務(wù)控制語(yǔ)句0210.3事務(wù)管理示例0310.4事務(wù)的隔離級(jí)別0410.5事務(wù)與并發(fā)控制0510.1事務(wù)的基本概念一、什么是事務(wù)事務(wù)(Transaction)是用戶(hù)定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,這些操作要么全做,要么全不做,是一個(gè)不可分割的工作單位事務(wù)和程序是兩個(gè)概念在關(guān)系數(shù)據(jù)庫(kù)中,一個(gè)事務(wù)可以是一條SQL語(yǔ)句,一組SQL語(yǔ)句或整個(gè)程序一個(gè)應(yīng)用程序通常包含多個(gè)事務(wù)事務(wù)是恢復(fù)和并發(fā)控制的基本單位二、如何定義事務(wù)顯式定義方式

BEGINTRANSACTIONBEGINTRANSACTIONSQL語(yǔ)句1SQL語(yǔ)句1

SQL語(yǔ)句2SQL語(yǔ)句2

。。。。。。。。。。

COMMITROLLBACK隱式方式當(dāng)用戶(hù)沒(méi)有顯式地定義事務(wù)時(shí),DBMS按缺省規(guī)定自動(dòng)劃分事務(wù)begintransactionselect*fromcourseupdatecoursesetcredit=4wherecname='數(shù)據(jù)庫(kù)'rollback事務(wù)結(jié)束COMMIT事務(wù)正常結(jié)束提交事務(wù)的所有操作(讀+更新)事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新永久生效ROLLBACK事務(wù)異常終止事務(wù)運(yùn)行的過(guò)程中發(fā)生了故障,不能繼續(xù)執(zhí)行回滾事務(wù)的所有更新操作事務(wù)滾回到開(kāi)始時(shí)的狀態(tài)三、事務(wù)的特性(ACID特性)事務(wù)的ACID特性:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續(xù)性(Durability)保證事務(wù)ACID特性是事務(wù)處理的任務(wù)。破壞事務(wù)ACID特性的因素:多個(gè)事務(wù)并行運(yùn)行時(shí),不同事務(wù)的操作交叉執(zhí)行事務(wù)在運(yùn)行過(guò)程中被強(qiáng)行停止1.原子性事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位事務(wù)中包括的諸操作要么都做,要么都不做2.一致性事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)一致性狀態(tài): 數(shù)據(jù)庫(kù)中只包含成功事務(wù)提交的結(jié)果不一致?tīng)顟B(tài): 數(shù)據(jù)庫(kù)中包含失敗事務(wù)的結(jié)果一致性與原子性銀行轉(zhuǎn)帳:從帳號(hào)A中取出一萬(wàn)元,存入帳號(hào)B。定義一個(gè)事務(wù),該事務(wù)包括兩個(gè)操作這兩個(gè)操作要么全做,要么全不做全做或者全不做,數(shù)據(jù)庫(kù)都處于一致性狀態(tài)。如果只做一個(gè)操作,數(shù)據(jù)庫(kù)就處于不一致性狀態(tài)。

B=B+1

A=A-1BA3.隔離性對(duì)并發(fā)執(zhí)行而言一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其他并發(fā)事務(wù)是隔離的并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾

讀A=16

A←A-3寫(xiě)回A=13①讀A=16

③A←A-1

寫(xiě)回A=15

④T2T1T1的修改被T2覆蓋了!4.持續(xù)性持續(xù)性也稱(chēng)永久性(Permanence)一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來(lái)的其他操作或故障不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。10.2SQLServer事務(wù)控制語(yǔ)句開(kāi)始事務(wù)語(yǔ)法為`BEGINTRANSACTION[事務(wù)名/變量]`,如`BEGINTRANSACTIONTransferMoney`,用于初始化事務(wù)。開(kāi)始事務(wù)提交事務(wù)語(yǔ)法為`COMMITTRANSACTION[事務(wù)名/變量]`,作用是使修改永久生效,如`COMMITTRANSACTIONTransferMoney`,確保操作成功保存。提交事務(wù)回滾事務(wù)語(yǔ)法為`ROLLBACKTRANSACTION[事務(wù)名/變量/保存點(diǎn)]`,作用是撤銷(xiāo)操作,恢復(fù)到事務(wù)開(kāi)始前狀態(tài),如`ROLLBACKTRANSACTIONTransferMoney`,用于處理錯(cuò)誤?;貪L事務(wù)保存點(diǎn)語(yǔ)法為`SAVETRANSACTION保存點(diǎn)名`,作用是回滾到事務(wù)中的特定位置,而非整個(gè)事務(wù),如`SAVETRANSACTIONUpdateInventory`后可單獨(dú)回滾此部分。保存點(diǎn)事務(wù)控制語(yǔ)句使用場(chǎng)景01提交場(chǎng)景提交事務(wù)適用于所有操作成功完成時(shí),如轉(zhuǎn)賬雙方金額修改正確,通過(guò)`COMMITTRANSACTION`確保操作永久生效。02回滾場(chǎng)景回滾事務(wù)用于操作出錯(cuò)時(shí),如余額不足或數(shù)據(jù)沖突,通過(guò)`ROLLBACKTRANSACTION`撤銷(xiāo)操作,恢復(fù)到事務(wù)開(kāi)始前狀態(tài)。03保存點(diǎn)場(chǎng)景保存點(diǎn)適用于復(fù)雜事務(wù)中部分操作需單獨(dú)回滾時(shí),如訂單處理中僅回滾庫(kù)存修改,保留用戶(hù)信息插入,通過(guò)`SAVETRANSACTION`和`ROLLBACKTRANSACTION`實(shí)現(xiàn)。10.3事務(wù)管理示例21銀行轉(zhuǎn)賬事務(wù)演示多表操作事務(wù)演示10.4事務(wù)的隔離級(jí)別隔離級(jí)別定義隔離級(jí)別定義為并發(fā)環(huán)境下,事務(wù)之間的隔離程度,決定了事務(wù)對(duì)其他事務(wù)的可見(jiàn)性,作用是平衡數(shù)據(jù)一致性與并發(fā)性能。支持的隔離級(jí)別SQLServer2022支持的隔離級(jí)別包括讀未提交、讀已提交(默認(rèn))、可重復(fù)讀、可串行化、快照隔離、讀已提交快照,各有不同特點(diǎn)和適用場(chǎng)景。隔離級(jí)別對(duì)比隔離級(jí)別防止臟讀?防止不可重復(fù)讀?防止幻讀?并發(fā)性能適用場(chǎng)景讀未提交(READUNCOMMITTED)???最高低一致性要求(如統(tǒng)計(jì)分析)讀已提交(READCOMMITTED)???較高常規(guī)應(yīng)用(默認(rèn)級(jí)別)可重復(fù)讀(REPEATABLEREAD)???中等需多次讀一致(復(fù)雜業(yè)務(wù))可串行化(SERIALIZABLE)???最低高一致性(金融交易)快照隔離(SNAPSHOT)???較高高并發(fā)(電商、在線(xiàn)交易)讀已提交快照???較高提升讀已提交的并發(fā)性能10.5事務(wù)與并發(fā)控制10.5.1并發(fā)控制概述10.5.2封鎖10.5.3活鎖和死鎖10.5.4并發(fā)調(diào)度的可串行性10.5.5兩段鎖協(xié)議10.5.6封鎖粒度問(wèn)題的產(chǎn)生多用戶(hù)數(shù)據(jù)庫(kù)系統(tǒng)的存在允許多個(gè)用戶(hù)同時(shí)使用的數(shù)據(jù)庫(kù)系統(tǒng)飛機(jī)定票數(shù)據(jù)庫(kù)系統(tǒng)銀行數(shù)據(jù)庫(kù)系統(tǒng)特點(diǎn):在同一時(shí)刻并發(fā)運(yùn)行的事務(wù)數(shù)可達(dá)數(shù)百個(gè)問(wèn)題的產(chǎn)生(續(xù))不同的多事務(wù)執(zhí)行方式

(1)事務(wù)串行執(zhí)行每個(gè)時(shí)刻只有一個(gè)事務(wù)運(yùn)行,其他事務(wù)必須等到這個(gè)事務(wù)結(jié)束以后方能運(yùn)行不能充分利用系統(tǒng)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn)T1T2T3事務(wù)的串行執(zhí)行方式問(wèn)題的產(chǎn)生(續(xù))(2)交叉并發(fā)方式(InterleavedConcurrency)在單處理機(jī)系統(tǒng)中,事務(wù)的并行執(zhí)行是這些并行事務(wù)的并行操作輪流交叉運(yùn)行單處理機(jī)系統(tǒng)中的并行事務(wù)并沒(méi)有真正地并行運(yùn)行,但能夠減少處理機(jī)的空閑時(shí)間,提高系統(tǒng)的效率問(wèn)題的產(chǎn)生(續(xù))事務(wù)的交叉并發(fā)執(zhí)行方式問(wèn)題的產(chǎn)生(續(xù))(3)同時(shí)并發(fā)方式(simultaneousconcurrency)多處理機(jī)系統(tǒng)中,每個(gè)處理機(jī)可以運(yùn)行一個(gè)事務(wù),多個(gè)處理機(jī)可以同時(shí)運(yùn)行多個(gè)事務(wù),實(shí)現(xiàn)多個(gè)事務(wù)真正的并行運(yùn)行事務(wù)并發(fā)執(zhí)行帶來(lái)的問(wèn)題會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞事務(wù)一致性和數(shù)據(jù)庫(kù)的一致性10.5.1并發(fā)控制概述★并發(fā)控制機(jī)制的任務(wù)對(duì)并發(fā)操作進(jìn)行正確調(diào)度保證事務(wù)的隔離性保證數(shù)據(jù)庫(kù)的一致性并發(fā)控制概述(續(xù))并發(fā)操作帶來(lái)數(shù)據(jù)的不一致性實(shí)例[例1]飛機(jī)訂票系統(tǒng)中的一個(gè)活動(dòng)序列①甲售票點(diǎn)(甲事務(wù))讀出某航班的機(jī)票余額A,設(shè)A=16;T1②乙售票點(diǎn)(乙事務(wù))讀出同一航班的機(jī)票余額A,也為16;T2③甲售票點(diǎn)賣(mài)出一張機(jī)票,修改余額A←A-1,所以A為15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù);④乙售票點(diǎn)也賣(mài)出一張機(jī)票,修改余額A←A-1,所以A為15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù)結(jié)果明明賣(mài)出兩張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少1T1的修改被T2覆蓋了!并發(fā)控制概述(續(xù))這種情況稱(chēng)為數(shù)據(jù)庫(kù)的不一致性,是由并發(fā)操作引起的。在并發(fā)操作情況下,對(duì)甲、乙兩個(gè)事務(wù)的操作序列的調(diào)度是隨機(jī)的。若按上面的調(diào)度序列執(zhí)行,甲事務(wù)的修改就被丟失。原因:第4步中乙事務(wù)修改A并寫(xiě)回后覆蓋了甲事務(wù)的修改并發(fā)控制概述(續(xù))★并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性:丟失修改(LostUpdate)不可重復(fù)讀(Non-repeatableRead)讀“臟”數(shù)據(jù)(DirtyRead)記號(hào)R(x):讀數(shù)據(jù)xW(x):寫(xiě)數(shù)據(jù)x

1.丟失修改兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2的提交結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改被丟失。上面飛機(jī)訂票例子就屬此類(lèi)。T1T2①R(A)=16②R(A)=16③A←A-1W(A)=15W④A←A-1W(A)=152.不可重復(fù)讀不可重復(fù)讀是指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2

執(zhí)行更新操作,使T1無(wú)法再現(xiàn)前一次讀取結(jié)果。不可重復(fù)讀包括三種情況:(1)事務(wù)T1讀取某一數(shù)據(jù)后,事務(wù)T2對(duì)其做了修改,當(dāng)事務(wù)T1再次讀該數(shù)據(jù)時(shí),得到與前一次不同的值不可重復(fù)讀(續(xù))T1讀取B=100進(jìn)行運(yùn)算T2讀取同一數(shù)據(jù)B,對(duì)其進(jìn)行修改后將B=200寫(xiě)回?cái)?shù)據(jù)庫(kù)。T1為了對(duì)讀取值校對(duì)重讀B,B已為200,與第一次讀取值不一致T1T2①R(A)=50R(B)=100求和=150②R(B)=100B←B*2(B)=200③R(A)=50R(B)=200和=250(驗(yàn)算不對(duì))不可重復(fù)讀(續(xù))(2)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中部分記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)某些記錄消失了(3)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取某些數(shù)據(jù)記錄后,事務(wù)T2插入了一些記錄,當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)多了一些記錄。后兩種不可重復(fù)讀有時(shí)也稱(chēng)為幻影現(xiàn)象(PhantomRow)3.讀“臟”數(shù)據(jù)

讀“臟”數(shù)據(jù)是指:事務(wù)T1修改某一數(shù)據(jù),并將其寫(xiě)回磁盤(pán)事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤銷(xiāo)這時(shí)T1已修改過(guò)的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)讀“臟”數(shù)據(jù)(續(xù))T1T2①R(C)=100C←C*2W(C)=200②R(C)=200③ROLLBACKC恢復(fù)為100T1將C值修改為200,T2讀到C為200T1由于某種原因撤銷(xiāo),其修改作廢,C恢復(fù)原值100這時(shí)T2讀到的C為200,與數(shù)據(jù)庫(kù)內(nèi)容不一致,就是“臟”數(shù)據(jù)并發(fā)控制概述(續(xù))★數(shù)據(jù)不一致性:由于并發(fā)操作破壞了事務(wù)的隔離性并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,使一個(gè)用戶(hù)事務(wù)的執(zhí)行不受其他事務(wù)的干擾,從而避免造成數(shù)據(jù)的不一致性10.5.2封鎖封鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)T就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象?;痉怄i類(lèi)型一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么樣的控制由封鎖的類(lèi)型決定。★基本封鎖類(lèi)型排它鎖(ExclusiveLocks,簡(jiǎn)記為X鎖)共享鎖(ShareLocks,簡(jiǎn)記為S鎖)排它鎖排它鎖又稱(chēng)為寫(xiě)鎖若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對(duì)A加任何類(lèi)型的鎖,直到T釋放A上的鎖保證其他事務(wù)在T釋放A上的鎖之前不能再讀取和修改A共享鎖共享鎖又稱(chēng)為讀鎖若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則其它事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放A上的S鎖保證其他事務(wù)可以讀A,但在T釋放A上的S鎖之前不能對(duì)A做任何修改

★鎖的相容矩陣Y=Yes,相容的請(qǐng)求N=No,不相容的請(qǐng)求

T1T2XS-XNNYSNYY-YYY1.一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。正常結(jié)束(COMMIT)非正常結(jié)束(ROLLBACK)一級(jí)封鎖協(xié)議可防止丟失修改,并保證事務(wù)T是可恢復(fù)的。在一級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì)其進(jìn)行修改,是不需要加鎖的:所以它不能保證可重復(fù)讀和不讀“臟”數(shù)據(jù)。使用封鎖機(jī)制解決丟失修改問(wèn)題T1T2①XlockA②R(A)=16XlockA③A←A-1等待W(A)=15等待Commit等待UnlockA等待④獲得XlockAR(A)=15A←A-1⑤W(A)=14CommitUnlockA例:事務(wù)T1在讀A進(jìn)行修改之前先對(duì)A加X(jué)鎖當(dāng)T2再請(qǐng)求對(duì)A加X(jué)鎖時(shí)被拒絕T2只能等待T1釋放A上的鎖后獲得對(duì)A的X鎖這時(shí)T2讀到的A已經(jīng)是T1更新過(guò)的值15T2按此新的A值進(jìn)行運(yùn)算,并將結(jié)果值A(chǔ)=14寫(xiě)回到磁盤(pán)。避免了丟失T1的更新。沒(méi)有丟失修改2.二級(jí)封鎖協(xié)議二級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其

加S鎖,讀完后即可釋放S鎖。二級(jí)封鎖協(xié)議可以防止丟失修改和讀“臟”數(shù)據(jù)。在二級(jí)封鎖協(xié)議中,由于讀完數(shù)據(jù)后即可釋放S鎖,所以它不能保證可重復(fù)讀。使用封鎖機(jī)制解決讀“臟”數(shù)據(jù)問(wèn)題T1T2①XlockCR(C)=100C←C*2W(C)=200②SlockC等待③ROLLBACK等待(C恢復(fù)為100)等待UnlockC等待④獲得SlockCR(C)=100⑤CommitCUnlockC例事務(wù)T1在對(duì)C進(jìn)行修改之前,先對(duì)C加X(jué)鎖,修改其值后寫(xiě)回磁盤(pán)T2請(qǐng)求在C上加S鎖,因T1已在C上加了X鎖,T2只能等待T1因某種原因被撤銷(xiāo),C恢復(fù)為原值100T1釋放C上的X鎖后T2獲得C上的S鎖,讀C=100。避免了T2讀“臟”數(shù)據(jù)不讀“臟”數(shù)據(jù)

3.三級(jí)封鎖協(xié)議三級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。三級(jí)封鎖協(xié)議可防止丟失修改、讀臟數(shù)據(jù)和不可重復(fù)讀。使用封鎖機(jī)制解決不可重復(fù)讀問(wèn)題T1T2①SlockASlockBR(A)=50R(B)=100

求和=150②XlockB等待③R(A)=50等待R(B)=100等待

求和=150等待Commit等待UnlockA等待UnlockB等待④獲得XlockBR(B)=100B←B*2⑤W(B)=200CommitUnlockB事務(wù)T1在讀A,B之前,先對(duì)A,B加S鎖其他事務(wù)只能再對(duì)A,B加S鎖,而不能加X(jué)鎖,即其他事務(wù)只能讀A,B,而不能修改當(dāng)T2為修改B而申請(qǐng)對(duì)B的X鎖時(shí)被拒絕只能等待T1釋放B上的鎖T1為驗(yàn)算再讀A,B,這時(shí)讀出的B仍是100,求和結(jié)果仍為150,即可重復(fù)讀T1結(jié)束才釋放A,B上的S鎖。T2才獲得對(duì)B的X鎖可重復(fù)讀4.封鎖協(xié)議小結(jié)三級(jí)協(xié)議的主要區(qū)別什么操作需要申請(qǐng)封鎖以及何時(shí)釋放鎖(即持鎖時(shí)間)不同的封鎖協(xié)議使事務(wù)達(dá)到的一致性級(jí)別不同封鎖協(xié)議級(jí)別越高,一致性程度越高

X鎖S鎖一致性保證

操作結(jié)束釋放事務(wù)結(jié)束釋放操作結(jié)束釋放事務(wù)結(jié)束釋放不丟失修改不讀“臟”數(shù)據(jù)可重復(fù)讀一級(jí)封鎖協(xié)議

二級(jí)封鎖協(xié)議

√√

√√

三級(jí)封鎖協(xié)議

√√√√表11.1不同級(jí)別的封鎖協(xié)議和一致性保證10.5.3活鎖和死鎖活鎖:事務(wù)T1封鎖了數(shù)據(jù)R事務(wù)T2又請(qǐng)求封鎖R,于是T2等待。T3也請(qǐng)求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2仍然等待。T4又請(qǐng)求封鎖R,當(dāng)T3釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求……T2有可能永遠(yuǎn)等待,這就是活鎖的情形活鎖(續(xù))活鎖(續(xù))避免活鎖:采用先來(lái)先服務(wù)的策略當(dāng)多個(gè)事務(wù)請(qǐng)求封鎖同一數(shù)據(jù)對(duì)象時(shí)按請(qǐng)求封鎖的先后次序?qū)@些事務(wù)排隊(duì)該數(shù)據(jù)對(duì)象上的鎖一旦釋放,首先批準(zhǔn)申請(qǐng)隊(duì)列中第一個(gè)事務(wù)獲得鎖10.5.3.2死鎖事務(wù)T1封鎖了數(shù)據(jù)R1T2封鎖了數(shù)據(jù)R2T1又請(qǐng)求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖接著T2又申請(qǐng)封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖這樣T1在等待T2,而T2又在等待T1,T1和T2兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖。死鎖(續(xù))T1T2lockR1??LockR2??LockR2.?等待?等待LockR1等待等待等待等待?死鎖解決死鎖的方法兩類(lèi)方法1.預(yù)防死鎖2.死鎖的診斷與解除——DBMS常用做法1.死鎖的預(yù)防產(chǎn)生死鎖的原因是兩個(gè)或多個(gè)事務(wù)都已封鎖了一些數(shù)據(jù)對(duì)象,然后又都請(qǐng)求對(duì)已為其他事務(wù)封鎖的數(shù)據(jù)對(duì)象加鎖,從而出現(xiàn)死等待?!镱A(yù)防死鎖的發(fā)生就是要破壞產(chǎn)生死鎖的條件預(yù)防死鎖的方法

★一次封鎖法順序封鎖法2.死鎖的診斷與解除死鎖的診斷超時(shí)法事務(wù)等待圖法解除死鎖選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤消釋放此事務(wù)持有的所有的鎖,使其它事務(wù)能繼續(xù)運(yùn)行下去

10.5.4并發(fā)調(diào)度的可串行性DBMS對(duì)并發(fā)事務(wù)不同的調(diào)度可能會(huì)產(chǎn)生不同的結(jié)果什么樣的調(diào)度是正確的?

10.5.4可串行化調(diào)度可串行化(Serializable)調(diào)度多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一秩序串行地執(zhí)行這些事務(wù)時(shí)的結(jié)果相同★可串行性(Serializability)是并發(fā)事務(wù)正確調(diào)度的準(zhǔn)則一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度10.5.5兩段鎖協(xié)議封鎖協(xié)議運(yùn)用封鎖方法時(shí),對(duì)數(shù)據(jù)對(duì)象加鎖時(shí)需要約定一些規(guī)則何時(shí)申請(qǐng)封鎖持鎖時(shí)間何時(shí)釋放封鎖等兩段封鎖協(xié)議(Two-PhaseLocking,簡(jiǎn)稱(chēng)2PL)是最常用的一種封鎖協(xié)議,理論上證明使用兩段封鎖協(xié)議產(chǎn)生的是可串行化調(diào)度10.5.5兩段鎖協(xié)議所謂兩段鎖協(xié)議是指所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖(擴(kuò)展階段)和解鎖(收縮階段)。在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫(xiě)操作之前,首先要申請(qǐng)并獲得對(duì)該數(shù)據(jù)的封鎖;在釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他封鎖。例如:

SlockASlockBSlockC

UnlockBUnlockAUnlockC擴(kuò)展階段收縮階段事務(wù)T1事務(wù)T2SlockAR(A)=260SlockCR(C)=300XlockAW(A)=160XlockCW(C)=250SlockASlockBR(B)=1000XlockBW(B)=1100UnlockAR(A)=160XlockAUlockBW(A)=210UnlockCT1T2SlockBR(B)=2SlockAR(A)=2XlockA等待XlockA等待等待遵守兩段鎖協(xié)議的事務(wù)可能發(fā)生死鎖遵守兩段鎖協(xié)議可串行化10.5.6封鎖粒度★封鎖對(duì)象的大小稱(chēng)為封鎖粒度(Granularity)封鎖的對(duì)象:邏輯單元,物理單元例:在關(guān)系數(shù)據(jù)庫(kù)中,封鎖對(duì)象:邏輯單元:屬性值、屬性值集合、元組、關(guān)系、索引項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù)等物理單元:頁(yè)(數(shù)據(jù)頁(yè)或索引頁(yè))、物理記錄等選擇封鎖粒度原則★封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開(kāi)銷(xiāo)密切相關(guān)。封鎖的粒度越大,數(shù)據(jù)庫(kù)所能夠封鎖的數(shù)據(jù)單元就越少,并發(fā)度就越小,系統(tǒng)開(kāi)銷(xiāo)也越小;封鎖的粒度越小,并發(fā)度較高,但系統(tǒng)開(kāi)銷(xiāo)也就越大

小結(jié)數(shù)據(jù)共享與數(shù)據(jù)一致性是一對(duì)矛盾數(shù)據(jù)并發(fā)程度又取決于數(shù)據(jù)庫(kù)中的并發(fā)控制機(jī)制;數(shù)據(jù)的一致性也取決于并發(fā)控制的程度。施加的并發(fā)控制愈多,數(shù)據(jù)的一致性往往愈好數(shù)據(jù)庫(kù)的并發(fā)控制以事務(wù)為單位數(shù)據(jù)庫(kù)的并發(fā)控制通常使用封鎖機(jī)制兩類(lèi)最常用的封鎖并發(fā)控制機(jī)制調(diào)度并發(fā)事務(wù)操作是否正確的判別準(zhǔn)則是可串行性并發(fā)操作的正確性則通常由兩段鎖協(xié)議來(lái)保證。兩段鎖協(xié)議是可串行化調(diào)度的充分條件,但不是必要條件上節(jié)回顧提問(wèn):事務(wù)的ACID屬性是?如何避免死鎖?第11章SQL2022數(shù)據(jù)庫(kù)日常維護(hù)11.1備份和恢復(fù)數(shù)據(jù)庫(kù)11.2數(shù)據(jù)的導(dǎo)入導(dǎo)出2026/8/913:426111.1備份數(shù)據(jù)庫(kù)11.1.1備份內(nèi)容及備份時(shí)間11.1.2備份設(shè)備11.1.3SQLServer支持的備份類(lèi)型11.1.4備份策略11.1.5實(shí)現(xiàn)備份2026/8/913:426211.1.1備份內(nèi)容及備份時(shí)間備份內(nèi)容系統(tǒng)數(shù)據(jù)庫(kù)用戶(hù)數(shù)據(jù)庫(kù)備份時(shí)間系統(tǒng)數(shù)據(jù)庫(kù):修改之后備份用戶(hù)數(shù)據(jù)庫(kù):周期性備份2026/8/913:426311.1.2備份設(shè)備永久備份設(shè)備在備份之前需要預(yù)先建立臨時(shí)備份設(shè)備不需要預(yù)先建立,在備份時(shí)直接使用2026/8/913:4264用SSMS創(chuàng)建備份設(shè)備展開(kāi)“服務(wù)器對(duì)象”。在“備份設(shè)備”上右擊鼠標(biāo),在彈出的菜單中單擊“新建備份設(shè)備”命令,打開(kāi)“備份設(shè)備”窗口。在此窗口中進(jìn)行相應(yīng)設(shè)置。用T-SQL創(chuàng)建備份設(shè)備sp_addumpdevice[@devtype=]'device_type',[@logicalname=]'logical_name',[@physicalname=]‘physical_name’[@devtype=]'device_type':備份設(shè)備的類(lèi)型:Disk:備份文件建立在磁盤(pán)上。Type:備份文件建立磁帶設(shè)備上。[@logicalname=]‘logical_name’:備份設(shè)備邏輯名[@physicalname=]‘physical_name’:備份設(shè)備物理文件名。物理文件名必須遵從操作系統(tǒng)文件名規(guī)則或網(wǎng)絡(luò)設(shè)備的通用命名約定,并且必須包含完整路徑。2026/8/913:4266示例例1.建立一個(gè)名為bmm的磁盤(pán)備份設(shè)備,其物理存儲(chǔ)位置及文件名為D:\dump\bmm.bak。EXECsp_addumpdevice'disk','bmm','D:\dump\bmm.bak'2026/8/913:426711.1.3SQLServer支持的備份類(lèi)型完整備份差異備份事務(wù)日志備份2026/8/913:4268完整備份恢復(fù)的基線(xiàn)。在備份時(shí)不影響用戶(hù)對(duì)數(shù)據(jù)庫(kù)的操作備份數(shù)據(jù)文件、數(shù)據(jù)庫(kù)對(duì)象和數(shù)據(jù)的信息。備份備份過(guò)程中發(fā)生的活動(dòng)。2026/8/913:4269差異備份備份從上次完整備份之后改變的內(nèi)容備份差異備份過(guò)程中發(fā)生的活動(dòng)比完整備份節(jié)約時(shí)間2026/8/913:4270事務(wù)日志備份備份從上次備份之后的日志記錄。備份完成后要截?cái)嗳罩?。?duì)故障恢復(fù)模式的要求:不能是“簡(jiǎn)單”的2026/8/913:4271設(shè)置恢復(fù)模式在要設(shè)置恢復(fù)模式的數(shù)據(jù)庫(kù)名上右擊鼠標(biāo);在彈出的菜單中選擇“屬性”命令;在彈出的屬性窗口中,單擊左邊“選擇頁(yè)”中的“選項(xiàng)”選項(xiàng)。2026/8/913:427211.1.4備份策略完整備份完整備份+日志備份完整備份+差異備份+日志備份2026/8/913:4273完整備份適合于數(shù)據(jù)庫(kù)數(shù)據(jù)不是很大,而且數(shù)據(jù)更改不是很頻繁的情況。SundayMonday

Tuesday

DataLogDataLogDataLog2026/8/913:4274完整備份+日志備份如果不允許丟失太多的數(shù)據(jù),而且又不希望經(jīng)常地進(jìn)行完整備份,則可以在完整備份中間加一些日志備份。SundayMonday

完整備份LogLogLogLogDataLogDataLog2026/8/913:4275完整備份+差異備份+日志備份MondayTuesday完整備份差異備份差異備份...LogDataLogLogLogLogLogLog

LogData

2026/8/913:427611.1.5實(shí)現(xiàn)備份用SSMS工具實(shí)現(xiàn):展開(kāi)“數(shù)據(jù)庫(kù)”節(jié)點(diǎn);在要備份的數(shù)據(jù)庫(kù)上右擊鼠標(biāo),在彈出的菜單中選擇“任務(wù)”

“備份”命令;或在要備份數(shù)據(jù)庫(kù)的備份設(shè)備上右擊鼠標(biāo),在彈出的菜單中選擇“備份數(shù)據(jù)庫(kù)”命令;打開(kāi)備份數(shù)據(jù)庫(kù)窗口。用T-SQL備份數(shù)據(jù)庫(kù)BACKUPDATABASE數(shù)據(jù)庫(kù)名TO{<備份設(shè)備名>}|{DISK|TAPE}={'物理備份文件名'}[WITH[DIFFERENTIAL][[,]{INIT|NOINIT}]]DIFFERENTIAL:進(jìn)行差異備份;INIT:本次備份數(shù)據(jù)庫(kù)將重寫(xiě)備份設(shè)備;NOINIT:本次備份數(shù)據(jù)庫(kù)將追加到備份設(shè)備上;2026/8/913:4278用T-SQL備份日志BACKUPLOG數(shù)據(jù)庫(kù)名TO{<備份設(shè)備名>}|{DISK|TAPE}={'物理備份文件名'}[WITH[{INIT|NOINIT}][{[,]NO_LOG|TRUNCATE_ONLY|NO_TRUNCATE}]]NO_LOG和TRUNCATE_ONLY:備份日志后截?cái)嗖换顒?dòng)的日志。NO_TRUNCATE:備份日志后不截?cái)嗖换顒?dòng)日志。2026/8/913:4279示例例1.對(duì)“學(xué)生選課”數(shù)據(jù)庫(kù)進(jìn)行一次完整備份,備份到bpp備份設(shè)備上(假設(shè)此備份設(shè)備已創(chuàng)建好),并覆蓋掉該備份設(shè)備上已有的內(nèi)容。BACKUPDATABASE學(xué)生選課TObppWITHINIT2026/8/913:4280示例例2.對(duì)“學(xué)生選課”數(shù)據(jù)庫(kù)進(jìn)行一次差異備份,也備份到bpp備份設(shè)備上,并保留該備份設(shè)備上已有的內(nèi)容。BACKUPDATABASE學(xué)生選課TObppWITHDIFFERENTIAL,NOINIT2026/8/913:4281示例例3.對(duì)“學(xué)生選課”進(jìn)行一次事務(wù)日志備份,直接備份到D:\LogData文件夾下(假設(shè)此文件夾已存在)下的學(xué)生選課_log.bak文件上。BACKUPLOG學(xué)生選課TODISK='D:\LogData\學(xué)生選課_log.bak'2026/8/913:428211.2恢復(fù)數(shù)據(jù)庫(kù)11.2.1恢復(fù)的順序11.2.2實(shí)現(xiàn)恢復(fù)2026/8/913:428311.2.1恢復(fù)的順序

1.恢復(fù)最近的完整備份;

2.恢復(fù)最近的差異備份(如果有);

3.恢復(fù)自差異備份之后的所有日志備份(按備份的先后順序)。2026/8/913:428411.2.2實(shí)現(xiàn)恢復(fù)恢復(fù)數(shù)據(jù)庫(kù)有兩種情況:數(shù)據(jù)庫(kù)還存在,但其中的數(shù)據(jù)或其他內(nèi)容出現(xiàn)了損壞,即在服務(wù)器上還存在該數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)已經(jīng)完全被損壞或者被刪除

溫馨提示

  • 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)論