第10章 數據庫恢復技術 | 數據庫知識點整理


第10章 數據庫恢復技術

了解

  • 數據庫的一致性狀態
  • 數據庫運行中可能產生的故障類型,它們如何影響事務的正常執行,如何破壞數據庫數據
  • 數據轉儲的概念及分類
  • 數據庫的鏡像功能

掌握

  • 事務的基本概念和事務的ACID性質
  • 數據庫恢復的實現技術
  • 日志文件的內容及作用
  • 登記日志文件所要遵循的原則
  • 具有檢查點的恢復技術
  • 恢復的基本原理
  • 針對不同故障的恢復策略和方法
  • 日志文件的使用

知識點

  • 事務的概念及事務的4個特性。恢復技術能保證事務的哪些特性
    • 事務是用戶定義的一個數據庫操作序列,這些操作要么全做、要么全不,是一個不可分割的工作單位事務具有4個特性(也稱ACID特性)
      • 原子性(Atomicity)
      • 一致性(Consistency)
      • 隔離性(Isolation)
      • 持續性(Durability)
    為什么事務非正常結束時會影響數據庫數據的正確性,舉例說明
    • 事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。如果數據庫系統運行中發生故障,有些事務尚未完成就被迫中斷,這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫,這時數據庫就處於一種不正確的狀態,或者說是不一致的狀態。
    • 例如某工廠的庫存管理系統中,要把數量為Q的某種零件從倉庫1移到倉庫2存放。則可以定義一個事務T,T包括兩個操作;Q1=Q1-Q,Q2=Q2+Q。如果T非正常終止時只做了第一個操作,則數據庫就處於不一致性狀態,庫存量無緣無故少了Q。
    登記日志文件時為什么必須先寫日志文件,后寫數據庫?
    • 把對數據的修改寫到數據庫中和把表示這個修改的日志記錄寫到日志文件中是兩個不同的操作。有可能在這兩個操作之間發生故障,即這兩個寫操作只完成了一個。
    • 如果先寫了數據庫修改,而在運行記錄中沒有登記這個修改,則以后就無法恢復這個修改了。如果先寫日志,但沒有修改數據庫,在恢復時只不過是多執行一次UNDO操作,並不會影響數據庫的正確性。所以一定要先寫日志文件,即首先把日志記錄寫到日志文件中,然后寫數據庫的修改。
  • 針對不同的故障,試給出恢復的策略和方法(事務故障恢復/系統故障恢復/介質故障恢復)
    • 事務故障的恢復步驟
      • 反向掃描文件日志,查找該事務的更新操作。
      • 對該事務的更新操作執行逆操作。即將日志記錄中“更新前的值”寫入數據庫。直至讀到此事務的開始標記,該事務故障的恢復就完成了。
      系統故障的恢復步驟
      • 正向掃描日志文件,找出在故障發生前已經提交的事務隊列(REDO隊列)和未完成的事務隊列(UNDO隊列)。
      • 對未完成的事務隊列中的各個事務進行UNDO處理。
      • 對已經提交的事務隊列中的各個事務進行REDO處理
      介質故障的恢復步驟
      • 裝入最新的數據庫后備副本(離故障發生時刻最近的轉儲副本),使數據庫恢復到轉儲時的一致性狀態。
      • 裝入轉儲結束時刻的日志文件副本
      • 啟動系統恢復命令,由DBMS完成恢復功能,即重做已完成的事務。
    什么是檢查點記錄,包括哪些內容
    • 檢查點記錄是一類新的日志紀錄。它的內容包括
      • 建立檢查點時刻所有正在執行的事務清單,如下圖中的T1、T2
      • 這些事務的最近一個日志記錄的地址,如下圖中的D1、D2
    具有檢查點的恢復技術有什么優點?舉例
    • 利用日志技術進行數據庫恢復時,恢復子系統必須搜索整個日志,這將耗費大量的時間。此外,需要REDO處理的事務實際上已經將它們的更新操作結果寫到數據庫中了,恢復子系統又重新執行了這些操作,浪費了大量時間。檢查點技術就是為了解決這些問題。
    • 例如
    使用檢查點方法進行恢復的步驟。
    • ① 從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄。② 由該檢查點記錄得到檢查點建立時刻所有正在執行的事務清單ACTIVE-LIST。
      • 這里建立兩個事務隊列:
        • UNDO-LIST: 需要執行undo操作的事務集合
        • REDO-LIST: 需要執行redo操作的事務集合
      • 把ACTIVE-LIST暫時放入UNDO-LIST隊列,REDO隊列暫為空。
      ③ 從檢查點開始正向掃描日志文件
      • 如有新開始的事務Ti,把Ti暫時放入UNDO-LIST隊列
      • 如有提交的事務Tj,把Tj從UNDO-LIST隊列移到REDO-LIST隊列,直到日志文件結束
    • ④ 對UNDO-LIST中的每個事務執行UNDO操作, 對REDO-LIST中的每個事務執行REDO操作
    什么是數據庫鏡像?它有什么用途?
    • 數據庫鏡像即根據DBA的要求,自動把整個數據庫或者其中的部分關鍵數據復制到另一個磁盤上。每當主數據庫更新時,DBMS自動把更新后的數據復制過去,即DBMS自動保證鏡像數據與主數據的一致性。數據庫鏡像的用途
      • 用於數據庫恢復。當出現介質故障時,鏡像磁盤可繼續使用,同時DBMS自動利用鏡像磁盤數據進行數據庫的恢復,不需要關閉系統和重裝數據庫副本。
      • 提高數據庫的可用性。在沒有出現故障時,當一個用戶對某個數據加排它鎖進行修改時,其他用戶可以讀鏡像數據庫上的數據,而不必等待該用戶釋放鎖。

補充

在系統故障的恢復策略中,為什么UNDO處理反向掃描日志文件,REDO處理正向掃描日志文件

      • 如果存在同一個數據的多個UNDO操作,需要將數據恢復到第一個失敗事務之前,如果正向掃描處理日志文件,無法實現這一目標,因此應該反向掃描日志文件。對於同一個數據的多個REDO操作,需要將數據恢復到最后一個成功事務之后,因此應該正向掃描日志文件
    • 說明恢復系統是否可以保證事務的原子性和持續性
      • 原子性是指操作要么都做,要么都不做,在恢復策略中UNDO可以保證將未成功提交的事務所有操作都取消,REDO可以保證將成功提交的事務所有操作都完成,因此需確保事務的原子性;
      • 持續性是指一旦事務提交,對數據庫中數據的改變是永久性的,REDO可以保證事務只要提交,改變一定被永久實現,因此要確保事務的持續性
    • 綜合題
    • 數據庫中為什么要有恢復子系統?它的功能是什么?
      • 答: 因為計算機系統中硬件的故障、軟件的錯誤、操作員的失誤以及惡意的破壞是不可避免的,這些故障輕則造成運行事務非正常中斷,影響數據庫中數據的正確性,重則破壞數據庫,使數據庫中全部或部分數據丟失,因此必須要有恢復子系統。
      • 恢復子系統的功能是:把數據庫從錯誤狀態恢復到某一已知的正確狀態(亦稱為一致狀態或完整狀態)。
    • 數據庫運行中可能產生的故障有哪幾類?哪些故障影響事務的正常執行?哪些故障破壞數據庫數據?
      • 事務內部的故障
      • 系統故障
      • 介質故障
      • 計算機病毒
        事務故障、系統故障和介質故障影響事務的正常執行;介質故障和計算機病毒破壞數據
    • 數據庫恢復的基本技術有哪些?
      • 數據轉儲和登錄日志文件是數據庫恢復的基本技術。
      • 當系統運行過程中發生故障,利用轉儲的數據庫后備副本和日志文件就可以將數據庫恢復到故障前的某個一致性狀態。
    • 數據庫轉儲的意義是什么? 試比較各種數據轉儲方法。
      • 數據轉儲是數據庫恢復中采用的基本技術。所謂轉儲即DBA定期地將數據庫復制到磁帶或另一個磁盤上保存起來的過程。當數據庫遭到破壞后可以將后備副本重新裝入,將數據庫恢復到轉儲時的狀態。
        • 靜態轉儲:在系統中無運行事務時進行的轉儲操作。靜態轉儲簡單,但必須等待正運行的用戶事務結束才能進行。同樣,新的事務必須等待轉儲結束才能執行。顯然,這會降低數據庫的可用性。
        • 動態轉儲:指轉儲期間允許對數據庫進行存取或修改。動態轉儲可克服靜態轉儲的缺點,它不用等待正在運行的用戶事務結束,也不會影響新事務的運行。但是,轉儲結束時后援副本上的數據並不能保證正確有效。因為轉儲期間運行的事務可能修改了某些數據,使得后援副本上的數據不是數據庫的一致版本。
        • 為此,必須把轉儲期間各事務對數據庫的修改活動登記下來,建立日志文件(log file)。這樣,后援副本加上日志文件就能得到數據庫某一時刻的正確狀態。
      • 轉儲還可以分為海量轉儲和增量轉儲兩種方式。
        • 海量轉儲是指每次轉儲全部數據庫。
        • 增量轉儲則指每次只轉儲上一次轉儲后更新過的數據。
        • 從恢復角度看,使用海量轉儲得到的后備副本進行恢復一般說來更簡單些。但如果數據庫很大,事務處理又十分頻繁,則增量轉儲方式更實用更有效。
    • 什么是日志文件?為什么要設立日志文件?
      • 日志文件是用來記錄事務對數據庫的更新操作的文件。
      • 設立日志文件的目的是: 進行事務故障恢復;進行系統故障恢復;協助后備副本進行介質故障恢復。
    • 登記日志文件時為什么必須先寫日志文件,后寫數據庫?
      • 把對數據的修改寫到數據庫中和把表示這個修改的日志記錄寫到日志文件中是兩個不同的操作。有可能在這兩個操作之間發生故障,即這兩個寫操作只完成了一個。
      • 如果先寫了數據庫修改,而在運行記錄中沒有登記這個修改,則以后就無法恢復這個修改了。如果先寫日志,但沒有修改數據庫,在恢復時只不過是多執行一次UNDO操作,並不會影響數據庫的正確性。所以一定要先寫日志文件,即首先把日志記錄寫到日志文件中,然后寫數據庫的修改。
    • 一個事務的執行,要么全部完成,要么全部不做,一個事務中對數據庫的所有操作都是一個不可分割的操作序列的屬性是【原子性】
    • 表示兩個或多個事務可以同時運行而不互相影響的是【獨立性】
    • 事務的持續性是指【事務一旦提交,對數據庫的改變是永久的】
    • SQL語言中的COMMIT語句的主要作用是【提交事務】
    • SQL語言中用【ROLLBACK】語句實現事務的回滾
    • 若系統在運行過程中,由於某種硬件故障,使存儲在外存上的數據部分損失或全部損失,這種情況稱為【介質故障】
    • 在DBMS中實現事務持久性的子系統是【恢復管理子系統】
    • 后援副本的作用是【故障后的恢復】
    • 事務日志用於保存【對數據的更新操作】
    • 數據庫恢復的基礎是利用轉儲的冗余數據。這些轉儲的冗余數據包括【日志文件、數據庫后備副本】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM