第十章-資料庫恢復技術

来源:https://www.cnblogs.com/Mr-shne/archive/2022/11/29/16905843.html
-Advertisement-
Play Games

10.1 事務的基本概念: 什麼是事務?事務是用戶定義的一個資料庫操作序列,該操作要麼全做,要麼全不做,是一個不可分割的工作單位,是恢復(知識點)和併發控制(知識點)的基本單位 事務和程式的區別: 在關係資料庫中,一個事務可以是一條SQL語句,或多條SQL語句,或整個程式 一個程式可以有多個事務 事 ...


10.1 事務的基本概念:

  • 什麼是事務?事務是用戶定義的一個資料庫操作序列,該操作要麼全做,要麼全不做,是一個不可分割的工作單位,是恢復(知識點)和併發控制(知識點)的基本單位
  • 事務和程式的區別
    • 在關係資料庫中,一個事務可以是一條SQL語句,或多條SQL語句,或整個程式
    • 一個程式可以有多個事務
  • 事務定義:- 正常結束和異常結束
    • 正常結束: -- 正常執行後,SQL的操作就寫回到磁碟中
      • BEGIN TRANSCTION; -- 事務開始
            SQL 語句; 
        COMMIT; -- 事務提交
    • 異常結束:--異常結束,SQL的所以操作都撤銷,回到事務開始前

      • BEGIN TRANSCTION; -- 事務開始
            SQL 語句; 
        ROLLBACK; -- 事務回滾
  • 事務的特性: -- 考試考

    • 特征:原子性、一致性、隔離性、持續性
    • 原子性:
      • 事務是資料庫的邏輯工作單位,事務中包括的諸操作要麼不做,要麼全做
    • 一致性:
      • 先理解什麼是一致性?就是用戶A讀學生表數據為99,用戶B讀取就不能是100,必須是99一致的
      • 事務的執行結果必須是使資料庫從一個一致性狀態到另一個一致性狀態
      • 一致狀態:資料庫中只包含成功事務提交結果
      • 不一致狀態:資料庫系統運行在發生故障,有些事務被迫中斷過(如斷了),這些未完成的事務對資料庫做了一部分修改,寫入了物理資料庫,這時候資料庫就處於不正確的狀態 -- 解決辦法事務回滾,數據恢復           
    • 原子性和一致性的舉例:
      • 銀行轉賬,那些就必須定義為一個事務,兩個操作全做,如用戶A給用戶B轉1萬,用戶A減少一萬,突然斷電,那麼用戶減少1萬,用戶B要沒有加上1萬,這就是不一致狀態,如果成功就是一致狀態      
    • 隔離性:
      • 一個事務執行不能被其它事務干擾(如交叉執行事務),即一個事務的內部操作及使用的數據對其他併發事務是隔離的,併發執行的各個事務之間都不能相互干擾
    • 持久性:-- 也叫永久性
      • 一個事務一旦提交,對資料庫中數據的改本就是永久性的,接下來的操作或故障對其執行結果沒有影響
    • 事務是恢復和併發控制的基本單位,保證事務ACID特征是事務管理的重要任務
    • 事務ACID日誌可能遭到破壞的因素有:
      • 多個事務併發運行,不同事務的操作交叉執行
        • 資料庫管理系統必須保證多個事務的交叉運行不影響這些事務的隔離性  
      • 事務在運行過程中被強行停止  
        • 資料庫管理系統必須保證被強行終止的事務對資料庫和其他事務沒有任何影響 

10.2 資料庫的恢復概述:

  • 故障是不可避免的,故障主要包括:電腦硬碟故障、軟體的錯誤、操作員的失誤、惡意的破壞等
  • 故障對數據的影響主要表現為:運行事務非正常中斷,影響資料庫中的數據正確性、資料庫全部或部分丟失數據等
  • 資料庫恢復作用:把資料庫從錯誤狀態恢復到某一已知的正確狀態的功能
  • 資料庫恢復子系統是資料庫管理系統的一個重要組成部分,而且還相當龐大,常常占整個資料庫系統代碼的10%以上。恢復技術是衡量系統的性能優劣的重要指標,以為對系統的可靠程度起到決定因素                            

10.3 故障的種類:

  • 故障的種類大致分為四類: 事務內部的故障、系統故障、介質故障(介質==硬體)、電腦病毒
  • 1.事務內部的故障:
    • 事務內部的故障有的是可以通過事務程式本身發現的(如轉賬的例子)有的是非預期的,不能由事務程式處理的 
    • 細節1:事務的內部更多的故障的是非預期的,是不能由應用程式處理的。如演算法溢出、死鎖
    • 細節2:事務的故障意味著事務沒有達到預期的終點,資料庫可能處於不正確狀態。撤銷該事務已經作出任何對資料庫的修改,使得該事務好像根本沒有啟動一樣,這類恢復操作稱為:事務撤銷 
  • 2.系統故障:
    • 系統故障又稱軟故障,是指系統正常運行突然被破壞,記憶體在的緩衝區信息全部丟失去,所有正在運行的事務都非正確終止
      • 常見原因:CPU故障,操作系統故障、資料庫系統代碼錯誤、系統斷電
    • 系統故障的恢復:
      • 常見問題1:系統發生故障,一些未完成的事務結果已經寫入到物理資料庫(磁碟),造成資料庫處於不正確狀態
        • 恢復辦法:系統重新啟動,恢復程式重新讓所有的非正常終止的事務回滾,強行撤銷所有未完成事務
      • 常見問題2:系統發生故障,某些已經完成的事務可能還留在緩衝區,沒有寫到物理資料庫中,因為沒有寫入,導致執行事務的操作(如:增刪改查),全部丟失,導致資料庫數據不一致
        • 恢復辦法:系統重新啟動,撤銷所有未完成的事務,還需要重做,所有提交的事務,將資料庫恢復到一致狀態 
  • 3.介質故障:
    • 介質故障又硬故障,是指外存故障,如磁碟損壞、磁頭碰撞,強磁干擾等
    • 故障表現:破壞資料庫或部分資料庫 
  • 4.電腦病毒:
    • 電腦病毒是一種可繁殖、傳播並對電腦造成破壞
    • 電腦病毒特點:隱蔽性、潛伏性、傳染性、破壞性、寄生性
    • 資料庫本病毒破壞時,仍要用恢復技術來恢復
  • 小結:
    • 1.故障對資料庫的影響主要是資料庫本身被破壞和,數據沒有被破壞,但數據不正確
    • 2.恢復操作的基本原理就是冗餘(就是備份),符合子系統的代碼一般要占到全部代碼的10%以上 

10.4 恢復的實現實現技術:

  • 恢複數據的關鍵就是創建冗餘(備份)數據,然後利用執行冗餘數據進行資料庫恢復

  • 建立冗餘數據的常見方法:
      數據轉儲:就是把數據建立一個備份,然後存儲在另外一臺設備上
      日誌文件:就是事務對資料庫進行了什麼操作都記錄下來

  • 通過數據轉存和日誌文件就可以把資料庫符合到某一個正確的結點
          如:7月15號到9月20號,9月20號發生錯誤,7月15號進行了數據轉儲,在通過日誌文件把資料庫恢復到9月20號沒有發生故障的狀態                            

10.4.1 數據轉儲:

  • 什麼是數據轉儲?就是把數據建立一個備份,然後存儲在另外一臺設備上,這些備份的數據文本稱為後備副本或後援副本
  • 註意:後備副本只是把資料庫恢復到轉儲的狀態,要想符合到故障發生的狀態,還需要進行轉儲後的所有更新事務
  • 轉儲狀態:靜態轉儲與動態轉儲
    • 靜態轉儲:需要中系統無任何事務進行時進行轉儲操作,轉儲期間不允許對資料庫進行增刪改查
      例子:如游戲伺服器正在維護,玩家都不能進入,就沒有新的事務發生,那麼就可以進行靜態轉儲
      優點:實現方便
      缺點:降低了資料庫的可用性,以為需要等轉儲結束,新的事務才能開始
    • 動態轉儲:事務和轉儲併發進行,轉儲期間允許對資料庫進行增刪改查
      例子:轉儲期間,剛把事務A的100記錄到磁碟上,某一事務就將A改成了200,後備副本上的A數據就過時了
      優點:不用等正在運行的用戶事務結束,不會影響新事務的運行
      缺點:不能保證副本中的數據真時有效(看上面例子就知道為什麼了)
  • 細節1:利用動態轉儲得到副本,還需要把各事務(就是併發的事務)對資料庫的修改記錄下來,建立成日誌文件。通跟後備副本和日誌文件就能把資料庫恢復到某人正確的結點
  • 細節2:利用靜態轉儲得到副本,就不需要把事務記錄下來,以為靜態記錄的就是正確的,而且它轉儲也不可能有事務進行
  • 轉儲方式:

    • 海量轉儲:每次轉儲全部資料庫
      增量轉儲:轉儲上一次轉儲後更新過的數據
      海量和增量比較:
        從恢復角度看,使用海量轉儲得到的後備副本進行恢復更加方便,因為轉儲的是全部資料庫,
        如果資料庫較大,事務處理頻繁,增量就更實用更有效,因為事務多數據老是在變化,就不可能每次都海量轉儲

  • 轉儲分類:

    • 通過轉儲狀態和轉儲方式可以分為4類:動態海量轉儲、靜態海量轉儲、動態增量轉儲、靜態增量轉儲  

 

10.4.2 登記日誌文件:

  • 日誌的主要目的:記錄事務等資料庫的更新操作的文件(註意是更新操作,因為查詢沒有影響)
  • 記錄日誌的兩種格式,單位的日誌文件和數據塊單位的日誌文件:(這些操作都是由於資料庫自動來完成)
  • 單位的日誌文件需要登記的內容:
    • 1.各事務開始的標簽
      2.個事務結束的標準(正確結束,的還是非正常結束的標簽)
      3.各事務的所有更新操作
      以上3條記錄的操作記錄為一個日誌記錄

  • 每條日誌記錄的內容:

    • 事務標識(標明是哪各事務)
      操作類型(插入、刪除或修改)
      操作對象(如操作是哪個表,哪條數據)
      更新前數據的舊值(如果是插入,該項就是空值)
      更新後數據的新值(如果是刪除,該項就是空值)

  • 數據塊為單位的日誌文件需要登記的內容:

    • 1.事務標識
      2.被更新的數據塊 - 就是以一整個事務為一個單位

  • 日誌文件的作用:

    • 1.事務故障恢復
      2.系統故障恢復
      3.配合後備副本進行介質故障恢復

 

 

  • 登錄日誌文件要遵循兩條原則:
    • 1.登錄的次序嚴格按併發事務執行的時間次序
      2.必須先寫日誌文件,後寫資料庫(如果先寫資料庫,如果突然斷電,資料庫寫了日誌沒寫,恢復時就會有影響)

10.5 恢復策略:

  • 同的故障需要不同的恢復策略

10.5.1 事務故障的恢復:

  • 事務的故障是指事務在正常運行至正常終點前被終止
  • 事務故障的恢復是由系統自動完成的,系統的恢復步驟是:
    • 1.反向掃描,查找事務的更新操作
      2.對事務進行撤銷
      3.繼續反向掃描,查找該事務其它的更新查找,並做同樣的處理
      4.直到事務讀到事務開始標識,事務故障符合就完成
      10.5.2 系統的故障

10.5.2 系統的故障:

  • 系統的故障會造成資料庫不一致狀態,原因:
    • 1.未完成的事務的更新操作可能已經寫入資料庫 -- 解決辦法撤銷未完成的事務
      2.已提交的事務可能還停留在緩衝區,沒有寫到資料庫 -- 解決辦法重做已完成的事務

  • 系統故障的恢復由系統在重新啟動時自動完成

10.5.3 介質故障:

  • 介質故障指的是物理數據和日誌文件被破壞
  • 恢復辦法是重裝資料庫,然重做已完成的事務
  • 介質的恢復需要資料庫管理員的介入,資料庫管理員只需要重裝最近轉儲的資料庫副本和有關的日誌文件,然後執行系統提供的恢覆命令即可

10.6 具有檢查點的恢復技術:

  • 為什麼需要檢查點技術:
    • 在利用日誌恢複數據庫恢復時,恢復子系統的時候必須搜索日誌,確定哪些事務需要重新做,哪些事務要撤銷
      • 問題1:搜索整個日誌需要大量時間
        問題2:重做處理、重新執行,浪費大量時間

  • 解決方案:

    • 1.在日誌文件中增加檢查點記錄
      2.增加重新開始的文件 - 和日誌文件是併列的,不在日誌文件裡面
      3.恢復子系統在登錄日誌文件期間動態地維護日誌

  • 檢查點記錄的內容:

    • 1.所有正在執行的事務清單
      2.這些事務最近一個日誌記錄地址

  • 重新開始文件內容:

    • 1.檢查點記錄地址

  • 動態維護日誌文件的方法:

    • 周期性地執行如下操作:建立檢查點、保持資料庫狀態

    • 具體步驟:

      • 1.將當前日誌緩衝區的所有日誌寫入磁碟的日誌文件
        2.在日誌文件中寫入一個檢查點記錄
        3.將當前的數據緩衝區的所有數據記錄寫入磁碟的資料庫中
        4.把檢查點記錄在日誌文件中的地址寫入重新開始文件

    • 說明:

      • 恢復子系統可以定期或不定期地建立檢查點,保存資料庫狀態
        檢查點可以按照預定的一個時間來間隔來建立,如一個小時記錄一個檢查點
        也可以按照某種規則建立檢查點。如日誌文件寫到一半建立

  • 利用檢查點恢復策略:

    • 所有檢查點方法可以改善恢復效率
      1.T1在檢查點之前提交,對資料庫的修改已經寫到資料庫
      2.T2在檢查點之後,故障之前,所有需要重做
      3.T3在故障之後需要撤銷
      4.T4在故障點之前提交,需要重做
      5.T5在檢查點之後,故障之前,需要撤銷

  • 系統使用檢查點的恢復步驟:

    • 1.從重新開始文件找到最後一個檢測點,在日誌文件中的地址,由該地址在日誌文件中找到最後一個檢測點記錄

    • 2.檢查建立後得到所有正在執行的事務清單ACTIVE-LIST(活躍的),分成兩個事務對列:

      • 1.UNNDO-LIST:需要執行撤銷操作的的事務集合

      • 2.REDO-LIST:需要執行重做操作的事務集合
        ACTIVE-LIST暫時放入UNNDO-LIST,只是暫時(要看該事務是在說明時候提交的,如T4就先放程式隊列,但發現它是在故障發前提交就放到重做隊列)

      • 3.從檢查點掃描日誌文件

        • 1.有新的事務就暫時放到UNNDO-LIST
          2.有提交就從UNNDO-LIST放到REDO-LIST - T4案例

      • 4.UNNDO-LIST的每個事務要執行UNNDO操作,REDO-LIST的每個事務要執行REDO操作

10.7 資料庫鏡像:

  • 目的:預防介質故障,提高資料庫可能性
  • 什麼是資料庫鏡像:
    • 資料庫管理系統自動把整個數據或其中關鍵數據複雜到另一個磁碟,主資料庫數據更新,資料庫管理系統把更新後的數據複製過去,保證鏡像資料庫與主數據的一致
  • 如果介質出現故障怎麼辦:

    • 所有應用去訪問鏡像資料庫,鏡像資料庫有去恢復主資料庫,如果沒有發生故障可以併發操作  

10.8 總結:

  • 1.保證資料庫的一致性是對資料庫的基本要求
    2.事務是資料庫的邏輯工作單位
    3.事務的ACID特征:一致性、隔離性、原子性、持久性
    4.保證了事務ACID特征就是保證了,資料庫的一致性
    5.故障的恢復是,保證事務的,一致性、隔離性、原子性
    6.恢復的基本原理就是利用後備副本、日誌文件、資料庫鏡像中的冗餘數據來重構資料庫
    7.事務不僅是恢復的基本單位,也是併發控制的單位
    8.保證事務的一致性、隔離性,資料庫隔離系統需要對併發操作操作進行控制

 

 

   

       

  

      

    

    

  

 

 

      

  

      

  

          

      

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題:是不是虛函數的調用就一定是動態綁定?不是的 1:在類的構造函數當中,調用虛函數,也是靜態綁定(構造函數中對虛函數的調用不發生動態綁定) 2:如果不是通過指針或者引用變數來調用虛函數,那就是靜態綁定 代碼1 class Base { public: Base(int data=10):ma(da ...
  • 使用Apache PDFBox實現拆分、合併PDF 問題背景 如何拆分PDF? 如何合併PDF? 如何拆分併合並PDF實現去除PDF的某些頁? Apache PDFBox介紹 Apache PDFBox 1.8.10官方文檔 Apache PDFBox 庫是一個開源的 Java 工具,用於處理 PD ...
  • 作者:小牛呼嚕嚕 | https://xiaoniuhululu.com 電腦內功、JAVA源碼、職業成長、項目實戰、面試相關資料等更多精彩文章在公眾號「小牛呼嚕嚕」 前言 讀過筆者之前的一篇文章Java記憶體模型(JMM)詳解, 我們知道了由於電腦為了充分利用CPU的高性能,以及各個硬體 存取速 ...
  • public static void GetRegistData() { string name = "huishuangzhu"; //搜索到註冊表根目錄 RegistryKey hkml = Registry.ClassesRoot; //搜索到註冊表根目錄下的XXX文件夾。 RegistryK ...
  • 溫馨提示,請使用ctrl+F進行快速查找 ws2_32.lib error LNK2001: 無法解析的外部符號 __imp_htons error LNK2001: 無法解析的外部符號 __imp_ntohl error LNK2001: 無法解析的外部符號 __imp_ntohs error L ...
  • 1、什麼是MQTT? MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基於發佈/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建於TCP/IP協議上,由IBM在1999年發佈。MQTT最大優點在於,可以以極 ...
  • 1.玻利維亞 MOPSV 為 5G 移動服務分配 3.3-3.6 GHz 頻段 https://www.oopp.gob.bo/wp-content/uploads/2022/10/2022-RM-174-Modificacion-al-Plan-Nacional-de-Frecuencia.pdf ...
  • 視圖 create view ... as ps:SQL文件在上一篇博客末尾 視圖就是通過查詢得到一張虛擬表,然後保存下來,下次直接使用 create view teacher_course as select * from teacher inner join course on teacher. ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...