【正文】
障恢復(fù): LOG FILE + 動(dòng)態(tài)轉(zhuǎn)儲(chǔ)后備副本 ? 動(dòng)態(tài)轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù):同時(shí)轉(zhuǎn)儲(chǔ)同一時(shí)點(diǎn)的日志文件 ? 后備副本與該日志文件結(jié)合起來才能將數(shù)據(jù)庫(kù)恢復(fù)到一致性狀態(tài)。 ? 利用這些日志文件副本進(jìn)一步恢復(fù)事務(wù),避免重新運(yùn)行事務(wù)程序。 An Introduction to Database System 三、登記日志文件 ?基本原則 ? 登記的次序嚴(yán)格按并行事務(wù)執(zhí)行的時(shí)間次序 ? 必須先寫日志文件,后寫數(shù)據(jù)庫(kù) ?寫日志文件操作:把表示這個(gè)修改的日志記錄 寫到日志文件 ?寫數(shù)據(jù)庫(kù)操作:把對(duì)數(shù)據(jù)的修改寫到數(shù)據(jù)庫(kù)中 An Introduction to Database System 登記日志文件(續(xù)) ?為什么要先寫日志文件 ? 寫數(shù)據(jù)庫(kù)和寫日志文件是兩個(gè)不同的操作 ? 在這兩個(gè)操作之間可能發(fā)生故障 ? 如果先寫了數(shù)據(jù)庫(kù)修改,而在日志文件中沒有登記下這個(gè)修改,則以后就無法恢復(fù)這個(gè)修改了 ? 如果先寫日志,但沒有修改數(shù)據(jù)庫(kù),按日志文件恢復(fù)時(shí)只不過是多執(zhí)行一次不必要的 UNDO操作,并不會(huì)影響數(shù)據(jù)庫(kù)的正確性 An Introduction to Database System 第十章 數(shù)據(jù)庫(kù)恢復(fù)技術(shù) 事務(wù)的基本概念 數(shù)據(jù)庫(kù)恢復(fù)概述 故障的種類 恢復(fù)的實(shí)現(xiàn)技術(shù) 恢復(fù)策略 具有檢查點(diǎn)的恢復(fù)技術(shù) 數(shù)據(jù)庫(kù)鏡像 小結(jié) An Introduction to Database System 恢復(fù)策略 事務(wù)故障的恢復(fù) 系統(tǒng)故障的恢復(fù) 介質(zhì)故障的恢復(fù) An Introduction to Database System 事務(wù)故障的恢復(fù) ?事務(wù)故障:事務(wù)在運(yùn)行至正常終止點(diǎn)前被終止 ?恢復(fù)方法 ? 由恢復(fù)子系統(tǒng)應(yīng)利用日志文件撤消( UNDO)此事務(wù)已對(duì)數(shù)據(jù)庫(kù)進(jìn)行的修改 ?事務(wù)故障的恢復(fù)由系統(tǒng)自動(dòng)完成,對(duì)用戶是透明的,不需要用戶干預(yù) An Introduction to Database System 事務(wù)故障的恢復(fù)步驟 1. 反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)的更新操作。 2. 對(duì)該事務(wù)的更新操作執(zhí)行逆操作。即將日志記錄中“更新前的值” 寫入數(shù)據(jù)庫(kù)。 ? 插入操作, “更新前的值”為空,則相當(dāng)于做刪除操作 ? 刪除操作,“更新后的值”為空,則相當(dāng)于做插入操作 ? 若是修改操作,則相當(dāng)于用修改前值代替修改后值 An Introduction to Database System 事務(wù)故障的恢復(fù)步驟 3. 繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做同樣處理。 4. 如此處理下去,直至讀到此事務(wù)的開始標(biāo)記,事務(wù)故障恢復(fù)就完成了。 An Introduction to Database System 恢復(fù)策略 事務(wù)故障的恢復(fù) 系統(tǒng)故障的恢復(fù) 介質(zhì)故障的恢復(fù) An Introduction to Database System 系統(tǒng)故障的恢復(fù) ?系統(tǒng)故障造成數(shù)據(jù)庫(kù)不一致狀態(tài)的原因 ? 未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新已寫入數(shù)據(jù)庫(kù) ? 已提交事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫(kù) ?恢復(fù)方法 ? 1. Undo 故障發(fā)生時(shí)未完成的事務(wù) ? 2. Redo 已完成的事務(wù) ?系統(tǒng)故障的恢復(fù)由系統(tǒng)在 重新啟動(dòng)時(shí) 自動(dòng)完成,不需要用戶干預(yù) An Introduction to Database System 系統(tǒng)故障的恢復(fù) 步驟 1. 正向掃描日志文件(即從頭掃描日志文件) ? 重做 (REDO) 隊(duì)列 : 在故障發(fā)生前已經(jīng)提交的事務(wù) ?這些事務(wù)既有 BEGIN TRANSACTION記錄,也有COMMIT記錄 ? 撤銷 (Undo)隊(duì)列 :故障發(fā)生時(shí)尚未完成的事務(wù) ? 這些事務(wù)只有 BEGIN TRANSACTION記錄,無相應(yīng)的COMMIT記錄 An Introduction to Database System 系統(tǒng)故障的恢復(fù)步驟 2. 對(duì)撤銷 (Undo)隊(duì)列事務(wù)進(jìn)行撤銷 (UNDO)處理 ? 反向掃描日志文件,對(duì)每個(gè) UNDO事務(wù)的更新操作執(zhí)行逆操作 ? 即將日志記錄中“更新前的值”寫入數(shù)據(jù)庫(kù) 3. 對(duì)重做 (Redo)隊(duì)列事務(wù)進(jìn)行重做 (REDO)處理 ? 正向掃描日志文件,對(duì)每個(gè) REDO事務(wù)重新執(zhí)行登記的操作 ? 即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫(kù) An Introduction to Database System 恢復(fù)策略 事務(wù)故障的恢復(fù) 系統(tǒng)故障的恢復(fù) 介質(zhì)故障的恢復(fù) An Introduction to Database System 介質(zhì)故障的恢復(fù) An Introduction to Database System 介質(zhì)故障的恢復(fù)(續(xù)) ?恢復(fù)步驟 1. 裝入最新的后備數(shù)據(jù)庫(kù)副本 (離故障發(fā)生時(shí)刻最近的轉(zhuǎn)儲(chǔ)副本 ) ,使數(shù)據(jù)庫(kù)恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的一致性狀態(tài)。 ? 對(duì)于靜態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本,裝入后數(shù)據(jù)庫(kù)即處于一致性狀態(tài) ? 對(duì)于動(dòng)態(tài)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本,還須同時(shí)裝入轉(zhuǎn)儲(chǔ)時(shí)刻的日志文件副本,利用與恢復(fù)系統(tǒng)故障的方法(即 REDO+UNDO),才能將數(shù)據(jù)庫(kù)恢復(fù)到一致性狀態(tài)。 An Introduction to Database System 介質(zhì)故障的恢復(fù)(續(xù)) 2. 裝入有關(guān)的日志文件副本 (轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的日志文件副本 ) ,重做已完成的事務(wù)。 ? 首先掃描日志文件,找出故障發(fā)生時(shí)已提交的事務(wù)的標(biāo)識(shí),將其記入重做隊(duì)列。 ? 然后正向掃描日志文件,對(duì)重做隊(duì)列中的所有事務(wù)進(jìn)行重做處理。即將日志記錄中“更新后的值”寫入數(shù)據(jù)庫(kù)。 An Introduction to Database System 介質(zhì)故障的恢復(fù)(續(xù)) 介質(zhì)故障的恢復(fù)需要 DBA介入 ? DBA的工作 ? 重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本和有關(guān)的各日志文件副本 ? 執(zhí)行系統(tǒng)提供的恢復(fù)命令 ?具體的恢復(fù)操作仍由 DBMS完成 An Introduction to Database System 第十章 數(shù)據(jù)庫(kù)恢復(fù)技術(shù) 事務(wù)的基本概念 數(shù)據(jù)庫(kù)恢復(fù)概述 故障的種類 恢復(fù)的實(shí)現(xiàn)技術(shù) 恢復(fù)策略 具有檢查點(diǎn)的恢復(fù)技術(shù) 數(shù)據(jù)庫(kù)鏡像 小結(jié) An Introduction to Database System 具有檢查點(diǎn)的恢復(fù)技術(shù) 一、問題的提出 二、檢查點(diǎn)技術(shù) 三、利用檢查點(diǎn)的恢復(fù)策略 An Introduction to Database System 一、問題的提出 ?兩個(gè)問題 ? 搜索整個(gè)日志將耗費(fèi)大量的時(shí)間 ? REDO處理:重新執(zhí)行,浪費(fèi)了大量時(shí)間 An Introduction to Database System 解決方案 ?具有檢查點(diǎn)( checkpoint)的恢復(fù)技術(shù) ? 在日志文件中增加檢查點(diǎn)記錄( checkpoint) ? 增加重新開始文件 ? 恢復(fù)子系統(tǒng)在登錄日志文件期間動(dòng)態(tài)地維護(hù)日志 An Introduction to Database System 二、檢查點(diǎn)技術(shù) ?檢查點(diǎn)記錄的內(nèi)容 ? 1. 建立檢查點(diǎn)時(shí)刻所有正在執(zhí)行的事務(wù)清單