版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章
事務(wù)管理
事
務(wù)
并發(fā)控制
恢
復(fù)
事
務(wù)
事務(wù)的概念
事務(wù)的性質(zhì)
可串行性和隔離級(jí)別
SQL對(duì)事務(wù)的支持
事務(wù)的概念事務(wù)是構(gòu)成單一邏輯工作單元的操作集合。
為什么需要事務(wù)的概念呢?
恢復(fù)的需要并發(fā)操作的需要事務(wù)的性質(zhì)
原子性(Atomicity)
一致性(Consistency)隔離性(Isolation)
持久性(Durability)
事務(wù)的這些性質(zhì)通常稱為ACID特性原子性
事務(wù)的原子性強(qiáng)調(diào)了一個(gè)事務(wù)是一個(gè)邏輯工作單元,是一個(gè)整體,是不可分割的。一個(gè)事務(wù)所包含的操作要么全部做,要么全部不做。
一致性
一個(gè)事務(wù)執(zhí)行一項(xiàng)數(shù)據(jù)庫(kù)操作,事務(wù)將使數(shù)據(jù)庫(kù)從一種一致性的狀態(tài)變換成另一種一致性狀態(tài)。
在事務(wù)執(zhí)行前,總是假設(shè)數(shù)據(jù)庫(kù)是一致的,那么當(dāng)事務(wù)成功執(zhí)行后,數(shù)據(jù)庫(kù)肯定仍然是一致的。
隔離性
如果每個(gè)事務(wù)單獨(dú)執(zhí)行能保持原子性和一致性,這些事務(wù)并發(fā)執(zhí)行也能保持原子性和一致性,則是事務(wù)的隔離性。持久性
事務(wù)的持久性是指一旦事務(wù)成功完成,該事務(wù)對(duì)數(shù)據(jù)庫(kù)所施加的所有更新都是永久的。
可串行性可串行性通??醋魇嵌鄠€(gè)事務(wù)并發(fā)執(zhí)行的正確性準(zhǔn)則。具體判定方法如下:各單個(gè)事務(wù)如能將數(shù)據(jù)庫(kù)從一個(gè)正確狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€(gè)正確狀態(tài),則認(rèn)為該事務(wù)是正確的;
按任何一個(gè)串行順序依次執(zhí)行多個(gè)事務(wù)也是正確的(這里的串行順序假定各個(gè)事務(wù)間彼此獨(dú)立、不交叉);
事務(wù)的交叉執(zhí)行過程是正確的,當(dāng)且僅當(dāng)其與串行執(zhí)行過程等價(jià),則事務(wù)是可串行化的。
SQL對(duì)事務(wù)的支持
開始事務(wù)
結(jié)束事務(wù)
事務(wù)保存點(diǎn)
隱含事務(wù)與自動(dòng)提交
開始事務(wù)
使用BEGINTRANSACTION命令顯式說明一個(gè)事務(wù)開始,它說明了對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的一個(gè)單元的起始點(diǎn)。在事務(wù)完成之前出現(xiàn)任何操作錯(cuò)誤和故障,都可以撤銷事務(wù),使事務(wù)回退到這個(gè)起始點(diǎn)。
結(jié)束事務(wù)
成功結(jié)束事務(wù)的命令是COMMITTRANSACTION,它的作用是提交或確認(rèn)事務(wù)已經(jīng)完成,所以該命令也稱作事務(wù)提交。
撤消事務(wù)的命令是ROLLBACKTRANSACTION,即撤消在該事務(wù)中對(duì)數(shù)據(jù)庫(kù)所做的更新操作,使數(shù)據(jù)庫(kù)回退到事務(wù)的起始點(diǎn)。
事務(wù)保存點(diǎn)
SQL標(biāo)準(zhǔn)還支持“事務(wù)保存點(diǎn)”技術(shù),所謂事務(wù)保存點(diǎn)就是在事務(wù)的過程中插入若干標(biāo)記,這樣當(dāng)發(fā)現(xiàn)事務(wù)中有操作錯(cuò)誤時(shí),可以不撤消整個(gè)事務(wù),只撤消部分事務(wù),即將事務(wù)回退到某個(gè)事務(wù)保存點(diǎn)。
并發(fā)控制
干擾問題
解決干擾——封鎖
封鎖不當(dāng)——死鎖
封鎖與隔離級(jí)別
干擾問題
丟失更新問題
未提交依賴問題
不一致分析問題
幻象讀問題
丟失更新問題
例:旅客A來到A售票處,要買一張15日北京到上海的13次直達(dá)快速列車的軟臥車票,售票員A(下稱用戶A)在終端A查看剩余票信息;
幾乎在同時(shí),旅客B來到B售票處,也要買一張15日北京到上海的13次直達(dá)快速列車的軟臥車票,售票員B(下稱用戶B)從終端B查到了同樣的剩余票信息;
旅客A買了一張15日13次7車廂5號(hào)下鋪的軟臥票,用戶A更新剩余票信息并將它存入數(shù)據(jù)庫(kù);
這時(shí)用戶B不知道用戶A已經(jīng)將15日13次7車廂5號(hào)下鋪的軟臥票賣出,使旅客B也買了一張15日13次7車廂5號(hào)下鋪的軟臥票,用戶B更新剩余票信息并將它存入數(shù)據(jù)庫(kù)(重復(fù)了用戶A已經(jīng)做過的更新)。
總的效果:15日13次7車廂5號(hào)下鋪的軟臥票賣了兩次。其原因是:允許了用戶B在過時(shí)的信息基礎(chǔ)上去更新數(shù)據(jù)庫(kù),而沒有迫使他去看最新的信息。丟失更新問題
用SQL術(shù)語(yǔ)描述丟失更新問題未提交依賴問題
未提交依賴問題也稱為讀“臟”(DirtyRead)數(shù)據(jù)問題,查詢一個(gè)已經(jīng)被其他事務(wù)更新、但尚未提交的元組,將會(huì)引起未提交依賴問題。
不一致分析問題
不一致分析問題也稱為不可重復(fù)讀問題,很多應(yīng)用可能需要校驗(yàn)功能,這時(shí)往往需要連續(xù)兩次或多次讀數(shù)據(jù)進(jìn)行校驗(yàn)和分析,結(jié)果由于其他事務(wù)的干擾,使得前后結(jié)果不一致,從而產(chǎn)生校驗(yàn)錯(cuò)誤(即不一致的分析)。
幻象讀問題
幻象讀問題與不一致分析問題有關(guān),當(dāng)事務(wù)A讀數(shù)據(jù)時(shí),事務(wù)B在對(duì)同一個(gè)關(guān)系進(jìn)行插入或刪除操作,這時(shí)事務(wù)A再讀同一條件的元組時(shí),會(huì)發(fā)現(xiàn)神秘地多出了一些元組或丟失了一些元組,把這種現(xiàn)象稱作幻象讀。
封鎖
封鎖的基本技術(shù)
封鎖機(jī)制
SQLServer中與封鎖有關(guān)的命令
封鎖粒度
意向鎖
封鎖的基本技術(shù)當(dāng)需要查詢或更新數(shù)據(jù)時(shí),先對(duì)數(shù)據(jù)進(jìn)行封鎖,以避免來自其他事務(wù)的干擾。針對(duì)不同的干擾問題可以有不同的封鎖機(jī)制。
以丟失更新問題為例,實(shí)施封鎖的基本思想是:當(dāng)一個(gè)用戶對(duì)一個(gè)表或記錄進(jìn)行更新時(shí),封鎖該表或記錄,使其他用戶不能在同一時(shí)刻更新相同的表或記錄,迫使其他用戶在更新后的基礎(chǔ)上(而不是在更新前的基礎(chǔ)上)再實(shí)施另外的更新操作。
封鎖的基本技術(shù)實(shí)施封鎖以后的時(shí)間序列封鎖機(jī)制
共享封鎖
獨(dú)占封鎖
更新封鎖
有些封鎖在執(zhí)行完相應(yīng)操作后就自動(dòng)釋放封鎖,有些封鎖則保持到事務(wù)結(jié)束(提交或撤消)時(shí)才釋放(無論如何,所有的封鎖都會(huì)在事務(wù)結(jié)束時(shí)自動(dòng)釋放)。共享封鎖
共享封鎖是為讀操作設(shè)置的一種封鎖,所以也稱作讀封鎖,或簡(jiǎn)稱S鎖,目的是想讀到一組不變的數(shù)據(jù),也就是在讀數(shù)據(jù)的過程中,不允許其他用戶對(duì)該數(shù)據(jù)進(jìn)行任何修改操作。這種封鎖可以保證最大的并發(fā)性,任何數(shù)量的用戶都可以同時(shí)對(duì)同樣的數(shù)據(jù)施加這種共享鎖。已經(jīng)實(shí)施共享鎖的表拒絕來自其他事務(wù)的獨(dú)占封鎖和更新封鎖。
獨(dú)占封鎖
獨(dú)占封鎖也叫排他封鎖,它是為修改操作設(shè)置的一種封鎖,也稱為寫封鎖,或簡(jiǎn)稱為X鎖,這是最嚴(yán)格的一類封鎖。當(dāng)需要對(duì)表實(shí)施插入、刪除或修改操作時(shí),應(yīng)該使用獨(dú)占封鎖。已經(jīng)實(shí)施獨(dú)占封鎖的表,拒絕來自其他用戶的任何封鎖,但不拒絕一般的查詢操作。
更新封鎖
當(dāng)需要對(duì)一個(gè)記錄或一組記錄進(jìn)行更新時(shí)(只是修改,不包括插入和刪除)使用更新封鎖,該封鎖的目的是防止其他用戶在同一時(shí)刻修改同一記錄。已經(jīng)實(shí)施更新封鎖的記錄,拒絕來自其他用戶的任何封鎖,但不拒絕一般的查詢操作。
封鎖粒度
封鎖的對(duì)象可以是表、也可以是元組等,我們把封鎖對(duì)象的大小稱為封鎖粒度(Granularity)。封鎖的對(duì)象可以是邏輯單元(如表和元組等),也可以是物理單元(如數(shù)據(jù)頁(yè)和數(shù)據(jù)塊等)。數(shù)據(jù)庫(kù)管理系統(tǒng)一般都具有多粒度鎖定功能,允許一個(gè)事務(wù)鎖定不同類型的資源。
意向鎖
為了降低封鎖的成本,提高并發(fā)的性能,數(shù)據(jù)庫(kù)管理系統(tǒng)還支持一種意向鎖(IntentionLock)。
意向鎖表示一種封鎖意向,當(dāng)需要在某些底層資源上(如元組)獲取封鎖時(shí),可以先對(duì)高層資源(如表)實(shí)施意向鎖。意向鎖意向共享(IS)
意向排它(IX)
共享意向排它(SIX)
死鎖
產(chǎn)生死鎖的原因
避免死鎖
發(fā)現(xiàn)死鎖解決死鎖
產(chǎn)生死鎖的原因右圖示意了兩個(gè)并發(fā)事務(wù)所發(fā)生事件的序列,假設(shè)程序A為了完成某個(gè)事務(wù)需要封鎖倉(cāng)庫(kù)和職工兩個(gè)關(guān)系,而幾乎在同一時(shí)刻并發(fā)執(zhí)行的程序B為完成另一個(gè)事務(wù)也需要封鎖職工和倉(cāng)庫(kù)關(guān)系,這兩個(gè)程序正好按照如圖所示的交錯(cuò)序列執(zhí)行命令,結(jié)果兩個(gè)程序都為了等待對(duì)方釋放數(shù)據(jù)資源而產(chǎn)生死鎖。
避免死鎖
相同順序法
所有的用戶程序約定都按相同的順序來封鎖表
一次封鎖法
為了完成一個(gè)事務(wù),一次性封鎖所需要的全部表
兩階段封鎖協(xié)議
所有事務(wù)都必須將對(duì)數(shù)據(jù)的封鎖分為封鎖和釋放兩個(gè)階段
避免死鎖的封鎖
兩階段封鎖協(xié)議
第一階段稱為擴(kuò)展階段,這一階段獲得各種類型的封鎖,但是不能釋放任何封鎖。第二階段稱為收縮階段,這一階段釋放各種類型的封鎖,一旦開始釋放封鎖,則不能再申請(qǐng)任何類型的封鎖。
注意,兩階段封鎖協(xié)議和一次封鎖法的異同之處。一次封鎖法遵守兩階段封鎖協(xié)議;但是兩階段封鎖協(xié)議并不要求一次封鎖所有需要封鎖的數(shù)據(jù)。兩階段封鎖協(xié)議仍有可能發(fā)生死鎖。
發(fā)現(xiàn)死鎖超時(shí)法
即一個(gè)事務(wù)在等待的時(shí)間超過了規(guī)定的時(shí)限后就認(rèn)為發(fā)生了死鎖。
這種方法非常不可靠,如果設(shè)置的等待時(shí)限長(zhǎng),則不能及時(shí)發(fā)現(xiàn)死鎖;如果設(shè)置的等待時(shí)限短,則可能會(huì)將沒有發(fā)生死鎖的事務(wù)誤判為死鎖。
發(fā)現(xiàn)死鎖等待圖法
即通過有向圖判定事務(wù)是否是可串行化的,如果是則說明沒有發(fā)生死鎖,否則說明發(fā)生了死鎖。具體思路是:用節(jié)點(diǎn)來表示正在運(yùn)行的事務(wù),用有向邊來表示事務(wù)之間的等待關(guān)系,如右圖所示,如果有向圖中發(fā)現(xiàn)回路,則說明發(fā)生了死鎖。
解決死鎖發(fā)現(xiàn)死鎖后解決死鎖的一般策略是:自動(dòng)使“年輕”的事務(wù)(即完成工作量少的事務(wù))先退回去,然后讓“年老”的事務(wù)(即完成工作量多的事務(wù))先執(zhí)行,等“年老”的事務(wù)完成并釋放封鎖后,“年輕”的事務(wù)再重新執(zhí)行。
恢
復(fù)
故障類型
備份類型
日志的概念
恢復(fù)模型
備份或轉(zhuǎn)儲(chǔ)
恢復(fù)或還原
故障類型造成事務(wù)中斷的故障
突然掉電引起的事務(wù)中斷
硬件故障引起的事務(wù)中斷
客戶應(yīng)用程序出錯(cuò)引起的事務(wù)中斷
系統(tǒng)程序故障引起的事務(wù)中斷
磁盤介質(zhì)故障
備份類型
雙機(jī)熱備份
雙工備份
磁盤鏡像
數(shù)據(jù)庫(kù)備份技術(shù)
日志的概念
日志則是對(duì)備份的補(bǔ)充,它可以看作是一個(gè)值班日記,它將記錄下所有對(duì)數(shù)據(jù)庫(kù)的更新操作。這樣就可以在備份完成時(shí)立刻刷新并啟用一個(gè)數(shù)據(jù)庫(kù)日志,數(shù)據(jù)庫(kù)日志是實(shí)時(shí)的,它將忠實(shí)地記錄下所有對(duì)數(shù)據(jù)庫(kù)的更新操作。當(dāng)磁盤出現(xiàn)故障造成數(shù)據(jù)庫(kù)損壞時(shí),就可以首先利用備份恢復(fù)數(shù)據(jù)庫(kù)(恢復(fù)大部分?jǐn)?shù)據(jù)),然后再運(yùn)行數(shù)據(jù)庫(kù)日志,即將備份后所做的更新操作再重新做一遍,從而將數(shù)據(jù)庫(kù)完全恢復(fù)?;謴?fù)模型
簡(jiǎn)單恢復(fù)模型允許將數(shù)據(jù)庫(kù)恢復(fù)到最新的備份,即使用簡(jiǎn)單恢復(fù)模型可以將數(shù)據(jù)庫(kù)恢復(fù)到上次備份的即時(shí)點(diǎn),而無法將數(shù)據(jù)庫(kù)恢復(fù)到故障點(diǎn)或特定的即時(shí)點(diǎn)。使用簡(jiǎn)單恢復(fù)模型,日志實(shí)際失去了作用。使用簡(jiǎn)單恢復(fù)模型的數(shù)據(jù)庫(kù)只能做數(shù)據(jù)庫(kù)備份,不能做日志備份。完全恢復(fù)模型允許將數(shù)據(jù)庫(kù)恢復(fù)到故障點(diǎn)狀態(tài),即完全恢復(fù)模型使用數(shù)據(jù)庫(kù)備份和事務(wù)日志備份提供對(duì)介質(zhì)故障的完全防范。備份或轉(zhuǎn)儲(chǔ)
備份的類型
備份整個(gè)數(shù)據(jù)庫(kù)
增量備份
事務(wù)日志備份
文件和文件組備份
系統(tǒng)數(shù)據(jù)庫(kù)的備份
數(shù)據(jù)庫(kù)備份的類型
全備份:即完整的備份整個(gè)數(shù)據(jù)庫(kù);增量備份:增量數(shù)據(jù)庫(kù)備份只備份自上次數(shù)據(jù)庫(kù)備份后發(fā)生更改的數(shù)據(jù);文件和文件組備份:備份數(shù)據(jù)庫(kù)文件或文件組,而不是備份數(shù)據(jù)庫(kù);事務(wù)日志備份:只備份事務(wù)日志?;謴?fù)或還原
恢復(fù)整個(gè)數(shù)據(jù)庫(kù)
恢復(fù)數(shù)據(jù)庫(kù)的部分內(nèi)容
恢復(fù)特定的文件或文件組
恢復(fù)事務(wù)
可以將數(shù)據(jù)庫(kù)恢復(fù)到做備份的即時(shí)點(diǎn)、發(fā)生故障的即時(shí)點(diǎn)或特定的事務(wù)即時(shí)點(diǎn)。恢復(fù)或還原根據(jù)數(shù)據(jù)庫(kù)全備份進(jìn)行恢復(fù)
根據(jù)增量備份進(jìn)行恢復(fù)
根據(jù)事務(wù)日志進(jìn)行恢復(fù)
根據(jù)文件或文件組備份進(jìn)行恢復(fù)
恢復(fù)系統(tǒng)數(shù)據(jù)庫(kù)
根據(jù)數(shù)據(jù)庫(kù)全備份進(jìn)行恢復(fù)RESTOREDATABASEdatabase_nameFROM{DISK|TAPE}
='physical_backup_device_name'[WITH[[,]{NORECOVERY|RECOVERY}][[,]REPLACE]]根據(jù)增量備份進(jìn)行恢復(fù)
在簡(jiǎn)單恢復(fù)模型和完全恢復(fù)模型中都可以選擇增量備份,如果存在增量備份,則一般需要進(jìn)行相應(yīng)的恢復(fù)操作。
增量恢復(fù)數(shù)據(jù)庫(kù)的命令也是RESTOREDATABASE,但是在根據(jù)增量備份繼續(xù)恢復(fù)之前應(yīng)該:已經(jīng)使用RESTOREDATABASE命令完成了全備份的恢復(fù),同時(shí)指定了NORECOVERY子句。
根據(jù)事務(wù)日志進(jìn)行恢復(fù)
利用日志可以將數(shù)據(jù)庫(kù)恢復(fù)到最新的一致狀態(tài)或任意的事務(wù)點(diǎn)。
首先恢復(fù)事務(wù)日志備份之前的數(shù)據(jù)庫(kù)備份或增量數(shù)據(jù)庫(kù)備份。
如果有多個(gè)日志備份,則按先后順序進(jìn)行恢復(fù)。
根據(jù)事務(wù)日志進(jìn)行恢復(fù)RESTORELOGdatabase_nameFROM{DISK|TAPE}='physical_backup_device_name'[WITH[[,]{NORECOVERY|RECOVERY
}][[,]STOPAT=
date_time|[,]STOPATMARK='mark_name'[AFTERdatetime]|[,]STOPBEFOREMARK='mark_name'
[AFTERdatetime]]]根據(jù)文件或文件組備份進(jìn)行恢復(fù)
如果數(shù)據(jù)庫(kù)的某個(gè)文件損壞了,并且按文件或文件組做了備份,則可以考慮根據(jù)文件或文件組備份進(jìn)行恢復(fù)。
當(dāng)使用文件或文件組備份進(jìn)行恢復(fù)時(shí),最后一個(gè)文件或文件組恢復(fù)操作完成后,必須將事務(wù)日志應(yīng)用于數(shù)據(jù)庫(kù)文件,以便使之與數(shù)據(jù)庫(kù)的其余部分保持一致。如果被恢復(fù)的文件自上次備份后沒有做過任何修改操作,則不必應(yīng)用事務(wù)日志,RESTORE語(yǔ)句會(huì)報(bào)告這一情況。
根據(jù)文件或文件組備份進(jìn)行恢復(fù)RESTOREDATABASEdatabase_name{FILE=
logical_file_name
|FILEGROUP=
logical_filegroup_name}F
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動(dòng)仲裁調(diào)解協(xié)議書7篇
- 商業(yè)合伙人的協(xié)議書
- 傳統(tǒng)民間工藝品-捏面人簡(jiǎn)介
- (參考模板)三通項(xiàng)目立項(xiàng)報(bào)告
- 第三次月考試卷-A4
- 重慶2020-2024年中考英語(yǔ)5年真題回-教師版-專題08 閱讀理解之記敘文
- 電能表安06課件講解
- 2023年抗甲狀腺藥項(xiàng)目融資計(jì)劃書
- 國(guó)華電力危險(xiǎn)化學(xué)品安全管理培訓(xùn)課件
- PLC控制技術(shù)試題庫(kù)(附參考答案)
- 早期復(fù)極綜合征的再認(rèn)識(shí)課件
- 李商隱詩(shī)歌《錦瑟》課件
- 世界文化遺產(chǎn)-樂山大佛課件
- 2022小學(xué)一年級(jí)數(shù)學(xué)活用從不同角度解決問題測(cè)試卷(一)含答案
- 博爾赫斯簡(jiǎn)介課件
- 2021年山東交投礦業(yè)有限公司招聘筆試試題及答案解析
- 施工單位資料檢查內(nèi)容
- 大氣課設(shè)-酸洗廢氣凈化系統(tǒng)
- 學(xué)校校慶等大型活動(dòng)安全應(yīng)急預(yù)案
- 檢測(cè)公司檢驗(yàn)檢測(cè)工作控制程序
- 高血壓病例優(yōu)秀PPT課件
評(píng)論
0/150
提交評(píng)論