【正文】
r from failure: 1. First find inconsistent blocks: 1. Expensive solution: Compare the two copies of every disk block. 2. Better solution: ? Record inprogress disk writes on nonvolatile storage (Nonvolatile RAM or special area of disk). ? Use this information during recovery to find blocks that may be inconsistent, and only pare copies of these. ? Used in hardware RAID systems 2. If either copy of an inconsistent block is detected to have an error (bad checksum), overwrite it by the other copy. If both have no error, but are different, overwrite the second block by the first block. Data Access ? Physical blocks are those blocks residing on the disk. ? Buffer blocks are the blocks residing temporarily in main memory. ? Block movements between disk and main memory are initiated through the following two operations: ? input(B) transfers the physical block B to main memory. ? output(B) transfers the buffer block B to the disk, and replaces the appropriate physical block there. Data Access ? Each transaction Ti has its private workarea in which local copies of all data items accessed and updated by it are kept. ? Ti39。 ? All subsequent accesses are to the local copy. ? After last access, transaction executes write(X). ? output(BX) need not immediately follow write(X). System can perform the output operation when it deems fit. Example of Data Access x Y A B x1 y1 buffer Buffer Block A Buffer Block B input(A) output(B) read(X) write(Y) disk work area of T1 work area of T2 memory x2 恢復(fù)的實現(xiàn)技術(shù) 恢復(fù)操作的基本原理 ? 恢復(fù)操作的基本原理: 冗余 ? 利用 存儲在系統(tǒng)其它地方的 冗余數(shù)據(jù) 來 重建 數(shù)據(jù)庫中已被破壞或不正確的那部分?jǐn)?shù)據(jù) ? 恢復(fù)的實現(xiàn)技術(shù):復(fù)雜 ? 一個大型數(shù)據(jù)庫產(chǎn)品,恢復(fù)子系統(tǒng)的代碼要占全部代碼的 10%以上 4 恢復(fù)的實現(xiàn)技術(shù) 恢復(fù)機(jī)制涉及的關(guān)鍵問題 1. 如何建立冗余數(shù)據(jù) ?數(shù)據(jù)轉(zhuǎn)儲( backup) ?登錄日志文件( logging) 2. 如何利用這些冗余數(shù)據(jù)實施數(shù)據(jù)庫恢復(fù) 數(shù)據(jù)轉(zhuǎn)儲(備份) 一、什么是轉(zhuǎn)儲 二、轉(zhuǎn)儲的用途 三、轉(zhuǎn)儲方法 一、什么是轉(zhuǎn)儲 ? 轉(zhuǎn)儲是指 DBA將整個數(shù)據(jù)庫復(fù)制到磁帶或另一個磁盤上保存起來的過程。 二、轉(zhuǎn)儲方法 1.靜態(tài)轉(zhuǎn)儲與動態(tài)轉(zhuǎn)儲 2.海量轉(zhuǎn)儲與增量轉(zhuǎn)儲 3.轉(zhuǎn)儲方法小結(jié) 1.靜態(tài)轉(zhuǎn)儲 ? 在系統(tǒng)中無運(yùn)行事務(wù)時進(jìn)行轉(zhuǎn)儲 轉(zhuǎn)儲開始時數(shù)據(jù)庫處于一致性狀態(tài)。 2. 對該事務(wù)的更新操作執(zhí)行逆操作。 ? 插入操作, “更新前的值”為空,則相當(dāng)于做刪除操作 ? 刪除操作,“更新后的值”為空,則相當(dāng)于做插入操作 ? 若是修改操作,則用 BI 代替 AI( After Image) 3. 繼續(xù)反向掃描日志文件,查找該事務(wù)的其他更新操作,并做同樣處理。 事務(wù)故障恢復(fù) 反向撤銷事務(wù)操作 T0, A, 1000, 950 T0, A, 950, 900 A=900 故障發(fā)生點 T0, A, 1000, 950 undoT0, A, 950, 900 A=950 正向撤銷事務(wù)操作 undoT0, A, 1000, 950 T0, A, 950, 900 A=1000 undoT0, A, 1000, 950 T0, A, 950, 900 A=1000 T0, A, 1000, 950 undoT0, A, 950, 900 A=950 系統(tǒng)故障的恢復(fù) ? 系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因 ? 一些未完成事務(wù)對數(shù)據(jù)庫的更新已寫入數(shù)據(jù)庫 ? 一些已提交事務(wù)對數(shù)據(jù)庫的更新還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫 ? 恢復(fù)方法 ? 1. Undo 故障發(fā)生時未完成的事務(wù) ? 2. Redo 已完成的事務(wù) ? 系統(tǒng)故障的恢復(fù)由系統(tǒng)在 重新啟動時 自動完成,不需要用戶干預(yù) 系統(tǒng)故障的恢復(fù) 步驟 1. 正向掃描日志文件(即從頭掃描日志文件) ? Redo隊列 : 在故障發(fā)生前已經(jīng)提交的事務(wù) T1, T3, T8….. ? Undo隊列 :故障發(fā)生時尚未完成的事務(wù) T2, T4, T5, T6, T7, T9 …... 系統(tǒng)故障的恢復(fù)步驟 2. 對 Undo隊列事務(wù)進(jìn)行 UNDO處理 反向掃描日志文件,對每個 UNDO事務(wù)的更 新操作執(zhí)行逆操作 T2, T4, T5, T6, T7, T9 …… 3. 對 Redo隊列事務(wù)進(jìn)行 REDO處理 正向掃描日志文件,對每個 REDO事務(wù)重新 執(zhí)行登記的操作 T1, T3, T8….. 系統(tǒng)故障恢復(fù) T0 start T0, A, 1000, 950 T0, B, 2021, 2050 T0 mit T1 start T1, C, 700, 600 T0圓滿事務(wù), T1夭折事務(wù) undoT1, C, 700, 600 A=950,B=2050,C=700 redoT0, A, 1000, 950 redoT0, B, 2021, 2050 A=950,B=2021,C=700 介質(zhì)故障的恢復(fù) 1. 重裝數(shù)據(jù)庫, 使數(shù)據(jù)庫恢復(fù)到一致性狀態(tài) 2. 重做已完成的事務(wù) 介質(zhì)故障的恢復(fù) ?恢復(fù)步驟 1. 裝入最新的后備數(shù)據(jù)庫副本,使數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)儲時的一致性狀態(tài)。 介質(zhì)故障的恢復(fù)(續(xù)) 2. 裝入有關(guān)的日志文件副本,重做已完成的事務(wù)。 ? 然后正向掃描日志文件,對重做隊列中的所有事務(wù)進(jìn)行重做處理。 介質(zhì)故障的恢復(fù)(續(xù)) 介質(zhì)故障的恢復(fù)需要 DBA介入 ? DBA的工作 ? 重裝最近轉(zhuǎn)儲的數(shù)據(jù)庫副本和有關(guān)的各日志文件副本 ? 執(zhí)行系統(tǒng)提供的恢復(fù)命令 ? 具體的恢復(fù)操作仍由 DBMS完成 具有檢查點的恢復(fù)技術(shù) 6 具有檢查點的恢復(fù)技術(shù) 一、問題的提出 二、檢查點技術(shù) 三、利用檢查點的恢復(fù)策略 一、問題的提出 ? 兩個問題 ? 搜索整個日志將耗費大量的時間 ? REDO處理:重新執(zhí)行,浪費了大量時間 解決方案 ? 具有檢查點( checkpoint)的恢復(fù)技術(shù) ? 在日志文件中增加檢查點記錄 ( checkpoint) ? 增加重新開始文件 ? 恢復(fù)子系統(tǒng)在登錄日志文件期間動態(tài)地維護(hù)日志 二、檢查點技術(shù) ? 檢查點記錄的內(nèi)容 ? 1. 建立檢查點時刻所有正在執(zhí)行的事務(wù)清單 ? 2. 這些事務(wù)最近一個日志記錄的地址 ? 重新開始文件的內(nèi)容 ? 記錄各個檢查點記錄在日志文件中的地址 在檢查點 維護(hù)日志文件 1. 將當(dāng)前 日志 緩沖區(qū)中的所有日志記錄寫入磁盤的日志文件上。 3. 將當(dāng)前 數(shù)據(jù) 緩沖區(qū)的所有數(shù)據(jù)記錄寫入磁盤的數(shù)據(jù)庫中。 建立檢查點 ? 定期 ? 按照預(yù)定的一個時間間隔 ? 不定期 ? 按照某種規(guī)則,如日志文件已寫滿一半建立一個檢查點 三、利用檢查點的恢復(fù)策略 ? 當(dāng)事務(wù) T在一個檢查點之前提交 T對數(shù)據(jù)庫所做的修改已寫入數(shù)據(jù)庫 ? 在進(jìn)行恢復(fù)處理時,沒有必要對事務(wù) T執(zhí)行 REDO操作 利用檢查點的恢復(fù)策略(續(xù)) Tc (檢查點 ) Tf(系統(tǒng)故障 ) REDO UNDO UNDO REDO T2 T3 T4 T5 不要 REDO T1 利用檢查點的 恢復(fù)步驟 1. 從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址 2 由該地址在日志文件中找到最后一個檢查點記錄 利用檢查點的恢復(fù)策略(續(xù)) 務(wù)清單 ACTIVELIST ? 建立兩個事務(wù)隊列 ?UNDOLIST ?REDOLIST ? 把 ACTIVELIST暫時放入 UNDOLIST隊列, REDO隊列暫為空。因此實際應(yīng)用只針對關(guān)鍵數(shù)據(jù)和日志文件進(jìn)行鏡像,而不是整個數(shù)據(jù)庫 Advanced Recovery Algorithm