第10章事務(wù)管理與恢復(fù)—2_第1頁
第10章事務(wù)管理與恢復(fù)—2_第2頁
第10章事務(wù)管理與恢復(fù)—2_第3頁
第10章事務(wù)管理與恢復(fù)—2_第4頁
第10章事務(wù)管理與恢復(fù)—2_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第10章 事務(wù)管理與恢復(fù)目 錄事務(wù) 10.1并發(fā)控制 10.2恢復(fù)與備份 10.3并發(fā)控制概述 并發(fā)控制機(jī)制大體上可分為悲觀的和樂觀的兩種。 悲觀的并發(fā)控制方法認(rèn)為數(shù)據(jù)庫的一致性經(jīng)常會(huì)受到破壞,因此在事務(wù)訪問數(shù)據(jù)對(duì)象前須采取一定措施加以控制,只有得到訪問許可時(shí),才能訪問數(shù)據(jù)對(duì)象,如基于封鎖的并發(fā)控制方法。 樂觀的并發(fā)控制方法則認(rèn)為數(shù)據(jù)庫的一致性通常不會(huì)遭到破壞,故事務(wù)執(zhí)行時(shí)可直接訪問數(shù)據(jù)對(duì)象,只在事務(wù)結(jié)束時(shí)才驗(yàn)證數(shù)據(jù)庫的一致性是否會(huì)遭到破壞,如基于有效性驗(yàn)證方法。 本章介紹基于封鎖的并發(fā)控制方法。基于封鎖方法的基本思想 基本思想:當(dāng)事務(wù)T需訪問數(shù)據(jù)對(duì)象Q時(shí),先申請(qǐng)對(duì)Q的鎖。如批準(zhǔn)獲得,則事務(wù)T

2、繼續(xù)執(zhí)行,且此后不允許其他任何事務(wù)修改Q,直到事務(wù)T釋放Q上的鎖為止。 基本鎖類型: 共享鎖(shared lock, 記為S):如果事務(wù)T獲得了數(shù)據(jù)對(duì)象Q的共享鎖,則事務(wù)T可讀Q但不能寫Q。 排它鎖(eXclusive lock, 記為X):如果事務(wù)T獲得了數(shù)據(jù)對(duì)象Q上的排它鎖,則事務(wù)T既可讀Q又可寫Q。鎖相容性 “鎖相容”是指如果Ti已持有數(shù)據(jù)對(duì)象Q的某類型鎖后,事務(wù)Tj也申請(qǐng)對(duì)Q的封鎖。如果允許事務(wù)Tj獲得對(duì)Q的鎖,則稱事務(wù)Tj申請(qǐng)鎖類型與事務(wù)Ti的持有鎖類型相容;否則稱為不相容。 基本鎖類型的封鎖相容性原則: 共享鎖與共享鎖相容 排它鎖與共享鎖、排它鎖與排它鎖是不相容的。X+SXS T

3、iTj圖10-12 基本鎖類型的相容性矩陣“”表示相容“”表示不相容單個(gè)事務(wù)封鎖舉例 申請(qǐng)和釋放鎖操作: SL(Q)申請(qǐng)數(shù)據(jù)對(duì)象Q上的共享鎖; XL(Q)申請(qǐng)數(shù)據(jù)對(duì)象Q上的排它鎖; UL(Q)釋放數(shù)據(jù)對(duì)象Q上的鎖。 例10.6 假設(shè)事務(wù)在訪問完數(shù)據(jù)對(duì)象后立即釋放鎖,則添加了封鎖操作的事務(wù)T4操作序列如圖10-12所示。由于事務(wù)T4要對(duì)A、B進(jìn)行讀寫操作,因此訪問A和B之前都使用XL操作申請(qǐng)排它鎖。這樣事務(wù)T4在釋放A(或B)的封鎖之前,其他事務(wù)不能訪問A(或B)。 T4XL(A)R(A)A=A-2W(A)UL(A)XL(B)R(B)B=B-2W(B)UL(B)COMMIT圖10-13 增加了封

4、鎖的事務(wù)T4操作序列 封鎖能否保證并發(fā)執(zhí)行事務(wù)的沖突可串行化?其他事務(wù)在此期間不允許訪問數(shù)據(jù)對(duì)象A其他事務(wù)在此期間不允許訪問數(shù)據(jù)對(duì)象B 并發(fā)事務(wù)封鎖舉例 例10.7 考慮并發(fā)事務(wù)T1、T2和T3,它們申請(qǐng)鎖和釋放鎖的規(guī)則是: 訪問數(shù)據(jù)對(duì)象前根據(jù)操作類型申請(qǐng)鎖; 訪問完后立即釋放鎖; 當(dāng)一個(gè)事務(wù)釋放鎖后,由等待時(shí)間較長(zhǎng)的事務(wù)優(yōu)先獲得鎖。它們的一個(gè)可能的并發(fā)執(zhí)行過程如圖10-13所示。 T1XL(A)等待等待等待R(A)A=A-2W(A)UL(A)ROLLBACKT2XL(A)等待等待等待等待等待等待等待R(A)A=A-3W(A)UL(A)COMMITT3SL(A)R(A)UL(A)SL(A)等待

5、等待等待等待等待等待等待等待R(A)UL(A)COMMIT步驟123456789101112131415161718圖10-14 T1、T2和T3上鎖操作序列該調(diào)度存在什么問題?并發(fā)事務(wù)封鎖舉例n 該調(diào)度避免了丟失更新,即不會(huì)有多個(gè)寫事務(wù)讀取同一數(shù)據(jù)對(duì)象的相同值,因?yàn)橐粋€(gè)數(shù)據(jù)對(duì)象任何時(shí)候只能有一個(gè)排它鎖。 T1XL(A)等待等待等待R(A)A=A-2W(A)UL(A)ROLLBACKT2XL(A)等待等待等待等待等待等待等待R(A)A=A-3W(A)UL(A)COMMITT3SL(A)R(A)UL(A)SL(A)等待等待等待等待等待等待等待等待R(A)UL(A)COMMIT步驟12345678

6、9101112131415161718圖10-14 T1、T2和T3上鎖操作序列并發(fā)事務(wù)封鎖舉例n 但仍然存在以下問題:l讀臟數(shù)據(jù)。如T2在步驟11讀了T1修改后的數(shù)據(jù),而T1在步驟12需ROLLBACK。 T1XL(A)等待等待等待R(A)A=A-2W(A)UL(A)ROLLBACKT2XL(A)等待等待等待等待等待等待等待R(A)A=A-3W(A)UL(A)COMMITT3SL(A)R(A)UL(A)SL(A)等待等待等待等待等待等待等待等待R(A)UL(A)COMMIT步驟123456789101112131415161718圖10-14 T1、T2和T3上鎖操作序列并發(fā)事務(wù)封鎖舉例n

7、但仍然存在以下問題:l不可重復(fù)讀。如T3兩次讀到A的值不同。 T1XL(A)等待等待等待R(A)A=A-2W(A)UL(A)ROLLBACKT2XL(A)等待等待等待等待等待等待等待R(A)A=A-3W(A)UL(A)COMMITT3SL(A)R(A)UL(A)SL(A)等待等待等待等待等待等待等待等待R(A)UL(A)COMMIT步驟123456789101112131415161718圖10-14 T1、T2和T3上鎖操作序列并發(fā)事務(wù)封鎖舉例n 但仍然存在以下問題:l不可串行化。無論如何交換非沖突操作,上述調(diào)度都不能等價(jià)于T1、T2和T3的任何一個(gè)串行調(diào)度。出現(xiàn)上述問題的原因是事務(wù)過早釋放

8、了其持有的鎖! T1XL(A)等待等待等待R(A)A=A-2W(A)UL(A)ROLLBACKT2XL(A)等待等待等待等待等待等待等待R(A)A=A-3W(A)UL(A)COMMITT3SL(A)R(A)UL(A)SL(A)等待等待等待等待等待等待等待等待R(A)UL(A)COMMIT步驟123456789101112131415161718圖10-14 T1、T2和T3上鎖操作序列兩階段封鎖協(xié)議 兩階段封鎖協(xié)議要求每個(gè)事務(wù)分兩個(gè)階段完成封鎖操作:增長(zhǎng)(申請(qǐng)鎖)階段和縮減(釋放鎖)階段: 增長(zhǎng)階段:事務(wù)可以獲得鎖,但不能釋放鎖; 縮減階段:事務(wù)可以釋放鎖,但不能獲得新鎖。 兩階段封鎖協(xié)議能保

9、證沖突可串行化。對(duì)于任何事務(wù),調(diào)度中該事務(wù)獲得其最后加鎖的時(shí)刻(增長(zhǎng)階段結(jié)束點(diǎn))稱為事務(wù)的封鎖點(diǎn)。這樣,多個(gè)事務(wù)可以根據(jù)它們的封鎖點(diǎn)進(jìn)行排序,而這個(gè)順序就是并發(fā)事務(wù)的一個(gè)沖突可串行化順序。兩階段封鎖協(xié)議舉例 例10.8 圖10-15采用了兩階段封鎖,允許事務(wù)T4在獲得全部鎖后(A和B上的排它鎖)提前釋放部分鎖(如步驟7釋放了A上的排它鎖),事務(wù)T5得以提前執(zhí)行,從而提高了事務(wù)T4和T5的并發(fā)度。 T4XL(A)R(A)A=A-2W(A)XL(B)UL(A)R(B)B=B-2W(B)UL(B) T5XL(A)等待等待等待等待等待R(A)A=A-3W(A)XL(B)等待等待UL(A)R(B)B=B

10、-3W(B)UL(B)步驟1234567891011121314151617181920圖10-15 T4和T5的兩階段封鎖沖突可串行化,它等價(jià)于串行調(diào)度。兩階段封鎖協(xié)議存在的問題 問題一:可能導(dǎo)致死鎖 持有鎖事務(wù)出現(xiàn)相互等待都不能繼續(xù)執(zhí)行。 T4XL(A)R(A)A=A-2W(A)XL(B)(等待T6釋放B上的排它鎖) T6XL(B)R(B)B=B-3W(B)XL(A)(等待T4釋放A上的排它鎖)圖10-16 采用兩階段封鎖時(shí)T4和T6出現(xiàn)死鎖兩階段封鎖協(xié)議存在的問題 問題二:不能避免讀臟數(shù)據(jù)(T2讀取了T1的未提交更新結(jié)果) T1R(A)A=A-2W(A)ROLLBACKT2R(A)A=A

11、-3W(A) T7R(A)A=A-4W(A)圖10-17 由于讀臟數(shù)據(jù)引起的級(jí)聯(lián)回滾 導(dǎo)致的后果是“級(jí)聯(lián)回滾” !兩階段封鎖協(xié)議變體 對(duì)于級(jí)聯(lián)回滾可以通過將兩階段封鎖修改為嚴(yán)格兩階段封鎖協(xié)議加以避免。 嚴(yán)格兩階段封鎖協(xié)議除了要求封鎖是兩階段之外,還要求事務(wù)持有的所有排它鎖必須在事務(wù)提交后方可釋放。這個(gè)要求保證了未提交事務(wù)所寫的任何數(shù)據(jù)在該事務(wù)提交之前均以排它方式加鎖,防止了其他事務(wù)讀取這些數(shù)據(jù)。 另一個(gè)兩階段封鎖的變體是強(qiáng)兩階段封鎖協(xié)議,它要求事務(wù)提交之前不得釋放任何鎖(包括共享鎖和排它鎖)。目 錄事務(wù) 10.1并發(fā)控制 10.2恢復(fù)與備份 10.3故障分類、特征及恢復(fù)策略 事務(wù)故障 事務(wù)在運(yùn)

12、行過程中由于種種原因,如輸入數(shù)據(jù)的錯(cuò)誤、運(yùn)算溢出、違反了某些完整性限制、某些應(yīng)用程序的錯(cuò)誤以及并發(fā)事務(wù)發(fā)生死鎖等,使事務(wù)未運(yùn)行至正常終止點(diǎn)就夭折了,這種情況稱為事務(wù)故障。 特征:系統(tǒng)的軟件和硬件都能正常運(yùn)行,內(nèi)存和磁盤上的數(shù)據(jù)都未丟失和破壞。 恢復(fù)策略:強(qiáng)行回滾(ROLLBACK)夭折事務(wù),清除其對(duì)數(shù)據(jù)庫的所有修改,使得該事務(wù)好象根本沒有啟動(dòng)過一樣,稱這類恢復(fù)操作稱為事務(wù)撤銷(UNDO)。 故障分類、特征及恢復(fù)策略 系統(tǒng)故障 該類故障是指系統(tǒng)在運(yùn)行過程中,由于某種原因,如操作系統(tǒng)或DBMS代碼錯(cuò)誤、操作員操作失誤、特定類型的硬件錯(cuò)誤(如CPU故障)、突然停電等造成系統(tǒng)停止運(yùn)行,致使所有正在運(yùn)行

13、的事務(wù)都以非正常方式終止。 特征:數(shù)據(jù)庫緩沖區(qū)的信息全部丟失,但存儲(chǔ)在外部存儲(chǔ)設(shè)備上的數(shù)據(jù)未被破壞。 恢復(fù)策略 UNDO所有未完成事務(wù)原子性的要求。 重做(REDO)所有已提交的事務(wù)持久性的要求。 故障分類、特征及恢復(fù)策略 介質(zhì)故障 該類故障是指系統(tǒng)在運(yùn)行過程中,由于某種硬件故障,如磁盤損壞、磁頭碰撞,或操作系統(tǒng)的某種潛在錯(cuò)誤,瞬時(shí)強(qiáng)磁場(chǎng)干擾等,致使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或全部丟失。這類故障比前兩類故障的可能性小得多,但破壞了磁盤上的數(shù)據(jù),危害性最大。 特征:存儲(chǔ)在外部存儲(chǔ)設(shè)備上的數(shù)據(jù)被破壞。 恢復(fù)策略:需要裝入發(fā)生介質(zhì)故障前某個(gè)時(shí)刻的數(shù)據(jù)庫數(shù)據(jù)副本,并重做(REDO)自備份相應(yīng)副本數(shù)據(jù)庫

14、之后的所有成功事務(wù),將這些事務(wù)已提交的更新結(jié)果重新反映到數(shù)據(jù)庫中去。 故障分類、特征及恢復(fù)策略 其它故障 黑客入侵、病毒、惡意流氓軟件等引起的事務(wù)異常結(jié)束、篡改數(shù)據(jù)等不一致性。 特征:惡意破環(huán)。 恢復(fù)策略:通過數(shù)據(jù)庫的安全機(jī)制、審計(jì)機(jī)制等實(shí)現(xiàn)對(duì)數(shù)據(jù)的授權(quán)訪問和保護(hù) 。小 結(jié) 對(duì)于不同類型的故障在恢復(fù)時(shí)應(yīng)做不同的恢復(fù)處理。 恢復(fù)的本質(zhì)是利用存儲(chǔ)的冗余數(shù)據(jù)(如日志、影子、備份副本等)來重建數(shù)據(jù)庫中已經(jīng)被破壞或已經(jīng)不正確的那部分?jǐn)?shù)據(jù)。 DBMS中的恢復(fù)管理模塊由兩部分組成: 正常事務(wù)處理過程中:系統(tǒng)需記錄冗余的恢復(fù)信息,以保證故障發(fā)生后有足夠的信息進(jìn)行數(shù)據(jù)庫恢復(fù); 故障發(fā)生后:利用冗余信息進(jìn)行UND

15、O或REDO等操作,將數(shù)據(jù)庫恢復(fù)到一致性狀態(tài)。 事務(wù)訪問數(shù)據(jù)方式 對(duì)于一個(gè)事務(wù)而言,它是通過三個(gè)地址空間同數(shù)據(jù)庫進(jìn)行交互: 保存數(shù)據(jù)庫記錄的磁盤塊空間物理數(shù)據(jù)庫; 緩沖區(qū)管理器所管理內(nèi)存地址空間數(shù)據(jù)緩沖區(qū); 事務(wù)的局部地址空間事務(wù)工作區(qū)。 數(shù)據(jù)元素A在不同地址空間之間移動(dòng)的操作原語包括: INPUT(X):將包含數(shù)據(jù)庫記錄A的磁盤塊X拷貝到數(shù)據(jù)緩沖區(qū)。 READ(A):將數(shù)據(jù)記錄A從緩沖區(qū)拷貝到事務(wù)工作區(qū)。如果包含A的磁盤塊X不在緩沖區(qū)中,則首先執(zhí)行INPUT(X)操作。 WRITE(A):將A的修改值從事務(wù)工作區(qū)拷貝到緩沖區(qū)X塊中以替換A的值。如果此時(shí)X塊不在內(nèi)存緩沖區(qū)中,則應(yīng)先執(zhí)行INPU

16、T(X)后再替換。 OUTPUT(X):將更新后的X塊寫回磁盤。事務(wù)訪問數(shù)據(jù)方式 更新磁盤塊X中的數(shù)據(jù)記錄A和讀磁盤塊Y的數(shù)據(jù)記錄B的原語操作過程如圖10-18所示。n 注意的是發(fā)出這些命令的對(duì)象是不同的:READ和WRITE由事務(wù)發(fā)出,而INPUT和OUTPUT由緩沖區(qū)管理器發(fā)出。 物理數(shù)據(jù)庫(磁盤)數(shù)據(jù)緩沖區(qū)(主存)事務(wù)工作區(qū)(主存)XYXYAREAD(A)WRITE(A)OUTPUT(X)INPUT(X)INPUT(Y)READ(B)B圖10-18 事務(wù)訪問數(shù)據(jù)方式 事務(wù)訪問數(shù)據(jù)方式 例10.9 考慮機(jī)票訂票服務(wù),假設(shè)某售票點(diǎn)某航班的已售出票數(shù)A為0,且該航班剩余票數(shù)B為10,則出售2張

17、機(jī)票的事務(wù)T的邏輯步驟為:A=A+2; B=B-2。數(shù)據(jù)庫的一致性約束為:AB10。假設(shè)包含A和B的記錄開始分別位于在X和Y磁盤塊中,且都不在數(shù)據(jù)緩沖區(qū)中。T的一個(gè)可能操作序列為:(1) INPUT(X);(2) READ(A);(3) A=A2;(4) WRITE(A);(5) INPUT(Y);(6) READ(B);(7) B=B-2(8) WRITE(B);(9) OUPUT(X);(10) OUTPUT(Y)1. 執(zhí)行完步驟10后 ,A=?B=?A+B=? 2. 執(zhí)行完步驟9之前發(fā)生故障,A=?B=? A+B=?3. 執(zhí)行完步驟9之后,步驟10之前發(fā)生故障,A=? B=? A+B=?

18、 將磁盤塊X從外存讀入數(shù)據(jù)緩沖區(qū)X從數(shù)據(jù)緩沖區(qū)X讀入記錄(數(shù)據(jù)項(xiàng))A到事務(wù)工作區(qū)將事務(wù)工作區(qū)的記錄(數(shù)據(jù)項(xiàng))A寫回?cái)?shù)據(jù)緩沖區(qū)X將磁盤塊Y從外存讀入數(shù)據(jù)緩沖區(qū)Y從數(shù)據(jù)緩沖區(qū)Y讀入記錄(數(shù)據(jù)項(xiàng))B到事務(wù)工作區(qū)將事務(wù)工作區(qū)的記錄(數(shù)據(jù)項(xiàng))B寫回?cái)?shù)據(jù)緩沖區(qū)Y將數(shù)據(jù)緩沖區(qū)X的數(shù)據(jù)寫回磁盤塊X將數(shù)據(jù)緩沖區(qū)Y的數(shù)據(jù)寫回磁盤塊Y在事務(wù)工作區(qū)進(jìn)行數(shù)據(jù)更新在事務(wù)工作區(qū)進(jìn)行數(shù)據(jù)更新 A=2 B=8 A+B=10 A=0 B=10 A+B=10 A=2 B=10 A+B=12 日志及特點(diǎn) 日志是DBMS記錄數(shù)據(jù)庫全部更新操作的序列文件。 主要特點(diǎn)有: 日志文件記錄了數(shù)據(jù)庫的全部更新順序。 日志文件是一個(gè)追加(appe

19、nd-only)文件。 DBMS允許事務(wù)的并發(fā)執(zhí)行導(dǎo)致日志文件是“交錯(cuò)的”。 屬于單個(gè)事務(wù)的日志順序與該事務(wù)更新操作的執(zhí)行順序是一致的。 日志記錄通常是先寫到日志緩沖區(qū)中,然后寫到穩(wěn)固存儲(chǔ)器(如磁盤陣列)中。在不影響討論的情況下,本章假設(shè)日志記錄在生成時(shí)是直接寫到穩(wěn)固磁盤中。 日志記錄類型 數(shù)據(jù)庫中的日志記錄有兩種類型: 記錄數(shù)據(jù)更新操作的日志記錄,包括UPDATE、INSERT和DELETE操作; 記錄事務(wù)操作的日志記錄, 包括START、COMMIT和ABORT操作。日志記錄格式 表示事務(wù)Ti對(duì)數(shù)據(jù)元素A執(zhí)行了更新操作,V1表示A更新前的值(前映像), V2表示A更新后的值(后映像)。對(duì)于

20、插入操作,V1為空;對(duì)于刪除操作,V2為空。 表示事務(wù)Ti已經(jīng)開始。此時(shí)DBMS完成對(duì)事務(wù)的初始化工作,如分配事務(wù)工作區(qū)等。 表示事務(wù)Ti已經(jīng)提交,即事務(wù)Ti已經(jīng)執(zhí)行成功(該事務(wù)對(duì)數(shù)據(jù)庫的修改必須永久化)。事務(wù)提交時(shí)其更新的數(shù)據(jù)都寫到了數(shù)據(jù)緩沖區(qū)中,但是由于不能控制緩沖區(qū)管理器何時(shí)將緩沖塊從內(nèi)存寫到磁盤。因此當(dāng)看到該日志記錄時(shí),通常不能確定更新是否已經(jīng)寫到磁盤上。 表示事務(wù)已經(jīng)中止,即事務(wù)執(zhí)行失敗。此時(shí),如果Ti所做的更新已反映到磁盤上,DBMS必須消除Ti對(duì)磁盤數(shù)據(jù)庫的影響。先寫日志規(guī)則 為了保證數(shù)據(jù)庫能運(yùn)用日志進(jìn)行恢復(fù),要求日志文件必須放到穩(wěn)固存儲(chǔ)器(如磁盤陣列)上,并且要求每條日志記錄必

21、須在其所包含數(shù)據(jù)記錄的更新值寫到外存儲(chǔ)器之前先寫到穩(wěn)固存儲(chǔ)器上,即先寫(write-ahead)日志規(guī)則。 UNDO操作 對(duì)于要UNDO的事務(wù)T,日志中記錄有以及T對(duì)數(shù)據(jù)庫的所有更新操作的日志記錄。 UNDO過程為:從T的最后一條更新日志記錄開始,從日志尾向日志頭(反向)依次將T更新的數(shù)據(jù)元素值恢復(fù)為舊值(V1)。 如果增加一條規(guī)則:T對(duì)數(shù)據(jù)庫的所有更新值在日志寫到磁盤前不能寫到磁盤。這樣,如果沒有看到事務(wù)T 的日志記錄,就可以確定T的更新值一定沒有寫到磁盤,從而可避免UNDO操作。REDO操作 與UNDO相反,REDO操作是對(duì)已提交事務(wù)進(jìn)行重做,將數(shù)據(jù)庫狀態(tài)恢復(fù)到事務(wù)結(jié)束后的狀態(tài)。 對(duì)于要R

22、EDO的事務(wù)T,日志中已經(jīng)記錄了、T的所有更新操作日志以及。 REDO過程為:從T的第一條更新日志記錄開始,從日志頭向日志尾(順向)依次將T更新的數(shù)據(jù)元素值恢復(fù)為新值(V2)。 如果增加一條規(guī)則:事務(wù)對(duì)數(shù)據(jù)庫的所有更新值必須在提交日志寫到磁盤之前寫到磁盤,就可以避免REDO操作。基于日志恢復(fù)策略舉例 例10.10 考慮訂票事務(wù)T1和T2,除更新航班的剩余票數(shù)A外,還分別需更新售票點(diǎn)的售出票數(shù)X和Y。假設(shè)先執(zhí)行T1,再執(zhí)行T2,幾種可能的日志記錄如圖10-19所示。(a)(b)(c)圖10-19 T1和T2串行執(zhí)行的三種日志情形基于日志恢復(fù)策略舉例 情形(a): T1完成WRITE(A)后系統(tǒng)發(fā)

23、生崩潰。當(dāng)系統(tǒng)重啟動(dòng)時(shí),檢查到有,但沒有。因此恢復(fù)時(shí)執(zhí)行UNDO(T1),將X和A的值分別恢復(fù)為0和10。(a)(b)(c)圖10-19 T1和T2串行執(zhí)行的三種日志情形基于日志恢復(fù)策略舉例情形(b) :T2完成WRITE(A)后系統(tǒng)發(fā)生崩潰。這時(shí)需分別執(zhí)行兩個(gè)恢復(fù)操作UNDO(T2)和REDO(T1),因?yàn)門1既有,又有日志,而T2只有日志?;謴?fù)完成后X、Y和A的值分別為2、0和8。(a)(b)(c)圖10-19 T1和T2串行執(zhí)行的三種日志情形基于日志恢復(fù)策略舉例 情形(c):T2完成提交后系統(tǒng)發(fā)生崩潰。這時(shí)也需執(zhí)行兩個(gè)恢復(fù)操作REDO(T1)和REDO(T2),因?yàn)門1和T2都有STAR

24、T和COMMIT日志?;謴?fù)完成后X、Y和A的值分別為2、3和5。(a)(b)(c)圖10-19 T1和T2串行執(zhí)行的三種日志情形并發(fā)執(zhí)行事務(wù)的基本恢復(fù)過程 三個(gè)階段: 分析階段:從日志頭開始順向掃描日志,確定重做事務(wù)集(REDO-set)和撤銷事務(wù)集(UNDO-set)。將既有又有日志記錄的事務(wù)T加入REDO-set;將只有沒有日志記錄的事務(wù)T加入U(xiǎn)NDO-set。 撤銷階段:從日志尾反向掃描日志,對(duì)每一條屬于UNDO-set中事務(wù)的更新操作日志依次執(zhí)行UNDO操作。 重做階段:從日志頭順向掃描日志,對(duì)每一條屬于REDO-set中事務(wù)的更新操作日志依次執(zhí)行REDO操作。 UNDO與REDO必須

25、是冪等的,即重復(fù)執(zhí)行任意次的結(jié)果與執(zhí)行一次的結(jié)果是一樣的。引入檢查點(diǎn)目的 利用日志文件恢復(fù)主要有兩個(gè)問題: 日志掃描過程太耗時(shí)。因?yàn)槿罩疚募仨毐4嬖诖疟P中,而且隨著時(shí)間的不斷推進(jìn),日志文件在不斷擴(kuò)大,掃描的時(shí)間也就變得越來越長(zhǎng)。 許多要求REDO事務(wù)的更新實(shí)際上在恢復(fù)時(shí)都寫入了磁盤的物理數(shù)據(jù)庫中。盡管對(duì)它們做REDO操作不會(huì)造成不良后果,但會(huì)使恢復(fù)過程變得更長(zhǎng),導(dǎo)致數(shù)據(jù)庫系統(tǒng)停止服務(wù)延長(zhǎng),從而降低了數(shù)據(jù)庫的可用性。 為了減少掃描開銷和提高恢復(fù)效率,引入了檢查點(diǎn)技術(shù)。 檢查點(diǎn)技術(shù) 檢查點(diǎn)是周期性地向日志中寫一條檢查點(diǎn)記錄并記錄所有當(dāng)前活躍的事務(wù),為恢復(fù)管理器提供信息,以決定從日志的何處開始恢復(fù)

26、。 檢查點(diǎn)工作主要包括: 將當(dāng)前位于日志緩沖區(qū)的所有日志記錄輸出到磁盤上; 將當(dāng)前位于數(shù)據(jù)緩沖區(qū)的所有更新數(shù)據(jù)塊輸出到磁盤上; 記錄日志記錄并輸出到磁盤上,其中L是做檢查點(diǎn)時(shí)活躍事務(wù)的列表。靜態(tài)檢查點(diǎn)技術(shù) 在檢查點(diǎn)執(zhí)行過程中,不允許事務(wù)執(zhí)行任何更新動(dòng)作,如寫緩沖塊或?qū)懭罩居涗?,稱其為靜態(tài)檢查點(diǎn)技術(shù)。 如果事務(wù)T在做檢查點(diǎn)之前就已提交,那么它的記錄一定出現(xiàn)在記錄前,并且其更新在做Checkpoint時(shí)都已寫到磁盤中,因此不需要對(duì)T做任何恢復(fù)操作,這樣可大大減少恢復(fù)工作量。 如果數(shù)據(jù)緩沖區(qū)及日志緩沖區(qū)中緩存的更新數(shù)據(jù)很多時(shí),就會(huì)導(dǎo)致系統(tǒng)長(zhǎng)時(shí)間不能接受事務(wù)處理,這對(duì)響應(yīng)時(shí)間要求較嚴(yán)格的系統(tǒng)來說是不可

27、忍受的。為避免這種中斷,可使用模糊檢查點(diǎn)(fuzzy checkpoint)技術(shù),允許在做檢查點(diǎn)的同時(shí)接受數(shù)據(jù)庫更新操作。 基于檢驗(yàn)點(diǎn)恢復(fù)方法 圖10-20是系統(tǒng)崩潰時(shí)的不同事務(wù)狀態(tài)類型,其中tc為完成最近檢查點(diǎn)時(shí)刻,tf為故障發(fā)生時(shí)刻。ttctfT1T5UNDOT4REDOT3UNDOT2REDO圖10-20 系統(tǒng)崩潰時(shí)不同狀態(tài)事務(wù)的不同恢復(fù)處理基于檢驗(yàn)點(diǎn)恢復(fù)方法 T1類事務(wù)的更新在做檢查點(diǎn)之前已經(jīng)寫到磁盤上,故不用做任何恢復(fù)操作。ttctfT1T5UNDOT4REDOT3UNDOT2REDO圖10-20 系統(tǒng)崩潰時(shí)不同狀態(tài)事務(wù)的不同恢復(fù)處理基于檢驗(yàn)點(diǎn)恢復(fù)方法 T2類事務(wù)在tc前的更新已寫到

28、磁盤,故重做時(shí)只需根據(jù)tc之后的日志記錄進(jìn)行REDO即可。ttctfT1T5UNDOT4REDOT3UNDOT2REDO圖10-20 系統(tǒng)崩潰時(shí)不同狀態(tài)事務(wù)的不同恢復(fù)處理基于檢驗(yàn)點(diǎn)恢復(fù)方法 T3類事務(wù)為在tc之前開始且在tf之前仍未結(jié)束的事務(wù),這類事務(wù)需要全部撤銷。ttctfT1T5UNDOT4REDOT3UNDOT2REDO圖10-20 系統(tǒng)崩潰時(shí)不同狀態(tài)事務(wù)的不同恢復(fù)處理基于檢驗(yàn)點(diǎn)恢復(fù)方法 T4類事務(wù)為在tc之后開始且在tf之前已完成的事務(wù),這類事務(wù)需要全部重做。ttctfT1T5UNDOT4REDOT3UNDOT2REDO圖10-20 系統(tǒng)崩潰時(shí)不同狀態(tài)事務(wù)的不同恢復(fù)處理基于檢驗(yàn)點(diǎn)恢復(fù)方

29、法 T5類事務(wù)為在tc之后開始且在tf之前仍未完成的事務(wù),這類事務(wù)應(yīng)全部撤銷。ttctfT1T5UNDOT4REDOT3UNDOT2REDO圖10-20 系統(tǒng)崩潰時(shí)不同狀態(tài)事務(wù)的不同恢復(fù)處理檢查點(diǎn)技術(shù)例10.11 系統(tǒng)崩潰時(shí)日志文件記錄內(nèi)容如圖10-21所示,試寫出系統(tǒng)重啟后恢復(fù)處理的步驟及恢復(fù)操作(指UNDO, REDO操作),并指明A, B, C, D恢復(fù)后的值分別是多少? 分析階段:從最后一次檢查點(diǎn)開始順向掃描日志,確定重做事務(wù)集REDO-set和撤銷事務(wù)集UNDO-set。 將既有又有日志記錄的事務(wù)T加入REDO-set; 將只有沒有日志記錄的事務(wù)T加入U(xiǎn)NDO-set。 圖10-21

30、 日志文件n 分析過程如下: UNDO-set REDO-set T1, T2 T1, T2, T3 T2, T3 T1 T2, T3, T4 T1 T2, T4 T1, T3檢查點(diǎn)技術(shù)例10.11 系統(tǒng)崩潰時(shí)日志文件記錄內(nèi)容如圖10-21所示,試寫出系統(tǒng)重啟后恢復(fù)處理的步驟及恢復(fù)操作(指UNDO, REDO操作),并指明A, B, C, D恢復(fù)后的值分別是多少? 撤銷階段:首先,從日志尾反向掃描日志文件至遇到最后一次檢查點(diǎn)止,對(duì)每一條屬于UNDO-set=T2, T4中事務(wù)的更新操作日志依次執(zhí)行UNDO操作。其次,對(duì)于同時(shí)出現(xiàn)在UNDO-set=T2, T4與列表中的事務(wù)集T2,從最后一次檢查點(diǎn)開始繼續(xù)反向掃描日志至遇到這些事務(wù)的START止,對(duì)屬于T2中事務(wù)的更新操作日志依次執(zhí)行UNDO操作。 圖10-21 日志文件n 分析過程如下: UNDO-set REDO-set T1, T2 T1, T2, T3 T2, T3 T1 T2, T3, T4 T1 T2, T4 T1, T3n撤銷過程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論