【數據庫】數據庫恢復技術

數據庫恢復技術

實現恢復的核心是使用冗余,也就是根據冗余數據重建不正確數據。

事務

事務是一個數據庫操作序列,是一個不可分割的工作單位,是恢復和并發的基本單位。

在關系數據庫中,一個事務是一條或多條SQL語句,也可以包含一個或多個程序。一個程序通常包含多個事務。

可以顯式的定義一個事務:

BEGIN TRANSACTION SQL 語句1SQL 語句2……
COMMIT|ROLLBACK

COMMIT是提交事務,ROLLBACK是回滾。

事務具有四個非常重要的特性,即ACID特性:

  • 原子性(Atomicity) 原子性是指,事務要不全部完成,要不全部取消。如果事務失敗,會回滾到事務之前。
  • 一致性(Consistency) 一致性是指,只有合法的數據才能寫入數據庫。
  • 隔離性(Isolation) 隔離性是指,如果兩個事務同時執行,那么執行順序不影響執行結果。
  • 持續性(Durability) 持久性是指,一旦事務提交,數據必須保存在數據庫之中。

事務一般有五種狀態,其狀態圖如下:

image-20210429165424587

故障和恢復

常見的故障有四種:事務內部的故障、系統故障、介質故障、計算機病毒。

事務內部的故障有些是通過事務程序本身發現的,有些是非預期的。比如,有一個事務,從A轉賬給B。有下面的事務程序:

BEGIN TRANSACTIONBALANCE = BALANCE - 100IF (BALANCE < 0) THEN {ROLLBACK} ELSE {讀取用戶乙的余額BALANCE1BALANCE1 = BALANCE + AMOUNT寫回BALANCE1COMMIT}

如果出現了余額不足,就可以回滾,保證數據庫狀態正常,而不是只減了甲的錢卻不影響乙的錢。

有的時候事務故障是非預期的,比如運算溢出、死鎖、違反完整性限制。這類故障一般使用撤銷事務(UNDO)。

系統故障是造成系統停止運轉的任何事件,使得系統要重新啟動。這個時候,系統運行被破壞,事務非正常終止,不破壞數據庫,緩存區信息丟失。

這種系統故障可能是硬件錯誤或操作系統故障引起的。如果發生故障的時候事務未提交,那么直接UNDO未完成事務;如果已提交但緩沖區未寫入磁盤,那么進行REDO。

介質故障是外存故障,比如磁盤損壞、磁頭碰撞、操作系統潛在錯誤、瞬時強磁場干擾。一般需要裝入介質故障前某個時刻的數據副本,重做所有成功事務。

計算機病毒是人為故障或破壞。

數據轉儲

一、靜態轉儲和動態轉儲

在沒有運行事務的時候,進行的就是靜態轉儲。轉儲開始前數據庫一致,并且期間不能對數據庫進行存取和修改。這種方法實現簡單,但是降低了數據庫的可用性,因為新的事務必須等轉儲結束。

如果將轉出操作和用戶事務并發執行,進行的就是動態轉儲。轉儲期間可以進行存取修改,這種方法無需等待正在運行的用戶事務,也不會影響新事務運行。但是動態轉儲不能保證副本中數據的正確性。

因此,做動態轉儲需要把各事務的修改活動記下來,建立日志,用后備副本加上日志使得數據庫恢復。

二、海量轉儲與增量轉儲

海量轉儲是每次轉儲所有數據庫,增量轉儲是只轉儲上次轉儲后的數據。

從恢復角度來看,海量轉儲更方便,但是數據庫很大的時候增量轉儲更有效。

日志

日志是記錄事務對數據庫更新操作的文件。

一、日志文件的格式和內容

一般來說,日志有記錄為單位,也有以數據塊為單位。

以記錄為單位的日志內容包含:

  • 事務開始標記
  • 事務結束標記
  • 事務所有更新操作

這樣的稱為一個日志記錄。每條日志記錄又分成

  • 事務標識(表明事務種類)
  • 操作類型(插入、刪除、修改)
  • 操作對象(記錄內部標識)
  • 更新前數據的舊值(對插入操作來說是空)
  • 更新后數據的新值(對刪除操作來說是空)

以數據塊為單位的日志文件,每條日志記錄內容是

  • 事務標識
  • 被更新的數據塊

二、日志文件的作用

日志文件可以進行事務故障恢復、系統故障恢復、協助后備副本進行介質故障恢復。

下面是一個用靜態轉儲副本和日志文件進行恢復的例子。

image-20210429172520094

在靜態轉儲的基礎上,得到一個一致性副本,然后發生故障。那么重新運行所有事務,就可以把數據庫恢復到一致狀態。

三、登記日志文件

登記日志的次序需要嚴格按照并行事務執行的時間次序。必須先寫日志文件,后寫數據庫

這是因為,如果在二者之間故障發生了,先寫數據庫,這個記錄就無法恢復;如果先寫日志,只需要做一次UNDO。

四、故障的恢復

(1)事務故障

恢復事務故障,首先反向掃描文件日志,然后查找事務的更新操作。接下來,對事務更新操作進行逆操作,把更新前的值重新寫入。

繼續掃描文件日志,查找事務其它操作,直到讀到事務開始標記。

(2)系統故障

首先正向掃描日志,然后建立兩個隊列。第一個叫做REDO隊列,第二個叫做UNDO隊列。REDO隊列存放故障發生前的已經COMMIT的事務,UNDO隊列存放尚未發生的隊列。

對UNDO隊列的事務統一進行UNDO處理,也就是在數據庫中儲存更新前的值;對REDO隊列的事務統一做REDO處理,把更新后的值寫入數據庫。

(3)介質故障

介質故障一般先重裝數據庫,然后重做已完成的事務。

一般來說,可以裝入最新的后備數據庫副本。靜態副本可以直接裝入,動態副本還需要裝入轉儲時的日志文件副本。

介質故障恢復往往需要DBA的介入,重裝最近轉儲的副本和各日志文件副本,執行系統提供的恢復命令。

檢查點

之前的日志恢復技術,搜索日志需要大量時間,同時REDO也大量耗費了時間。因此,具有檢查點的恢復技術是常見的技術。

建立檢查點一般有兩種,可以是按固定時間間隔定期建立,也可以按照某種規則,比如日志文件寫滿一半建立一個檢查點。檢查點實際上就是一個標記,事務 T T T在檢查點之前提交,那么 T T T已經寫入了數據庫,無需進行REDO。

image-20210506151433296

T3、T5在故障發生時未完成,所以撤銷;T2、T4在檢查點之后提交,需要REDO;T1則無需REDO。

用檢查點的恢復步驟如下:

  • 找到最后一個檢查點記錄的地址
  • 由檢查點記錄得到正在執行的事務ACTIVE-LIST,建立UNDO和REDO LIST,并把ACTIVE LIST放入UNDO LIST
  • 正向掃描日志文件,新開始的事務放入UNDO LIST,提交事務放到REDO LIST
  • UNDO LIST進行UNDO,REDO LIST進行REDO

數據庫鏡像

DBMS自動把整個數據庫或其中關鍵數據復制到另一個磁盤上,由DBMS保證鏡像數據和主數據庫的一致性。在出現介質故障的時候,可以由鏡像磁盤繼續使用,同時DBMS利用磁盤數據進行恢復,而無需重裝數據庫副本。

image-20210506152148987

同時,在沒有出現故障的時候,數據庫鏡像也可以用于并發操作,如果一個用戶對數據加排他鎖,其他用戶可以讀鏡像數據庫的數據。

頻繁的復制數據會降低效率,所以一般只對關鍵數據和日志進行鏡像。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83132.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

switch-case判斷

switch-case判斷 #include <stdio.h> int main() {int type;printf("請輸入你的選擇&#xff1a;\n");scanf("%d",&type);getchar();switch (type){case 1:printf("你好&#xff01;");break;case 2:printf("早上好&#xff01;…

從監控到告警:Prometheus+Grafana+Alertmanager+告警通知服務全鏈路落地實踐

文章目錄 一、引言1.1 監控告警的必要性1.2 監控告警的基本原理1.2.1 指標采集與存儲1.2.2 告警規則與觸發機制1.2.3 多渠道通知與閉環 二、技術選型與架構設計2.1 為什么選擇 Prometheus 及其生態2.1.1 Prometheus 優勢分析2.1.2 Grafana 可視化能力2.1.3 Alertmanager 靈活告…

STM32 UART通信實戰指南:從原理到項目落地

STM32串口通信實戰指南&#xff1a;從零開始手把手教你 前言&#xff1a;為什么串口這么重要&#xff1f; 在嵌入式開發中&#xff0c;串口就像設備的"嘴巴"和"耳朵"。無論是給單片機下達指令、讀取傳感器數據&#xff0c;還是讓兩個模塊"對話"…

Jmeter requests

1.Jemter元件和組件 1.1 元件和組件的概念 元件&#xff1a;多個功能相似的的組件的容器&#xff0c;類似于一個工具箱。 組件&#xff1a;實現某個特定功能的實例&#xff0c;類似于工具箱中的螺絲刀&#xff0c;十字扳手... 1.2 作用域和執行順序 1.2.1 作用域 例子&#…

計算機視覺---GT(ground truth)

在計算機視覺&#xff08;Computer Vision, CV&#xff09;領域&#xff0c;Ground Truth&#xff08;GT&#xff0c;中文常譯為“真值”或“ ground truth”&#xff09; 是指關于數據的真實標簽或客觀事實&#xff0c;是模型訓練、評估和驗證的基準。它是連接算法與現實世界的…

1-Wire 一線式總線:從原理到實戰,玩轉 DS18B20 溫度采集

引言 在嵌入式系統中&#xff0c;通信總線是連接 CPU 與外設的橋梁。從 I2C、SPI 到 UART&#xff0c;每種總線都有其獨特的應用場景。而本文要介紹的1-Wire 一線式總線&#xff0c;以其極簡的硬件設計和獨特的通信協議&#xff0c;在溫度采集、身份識別等領域大放異彩。本文將…

基于開源AI大模型AI智能名片S2B2C商城小程序源碼的銷售環節數字化實現路徑研究

摘要&#xff1a;在數字化浪潮下&#xff0c;企業銷售環節的轉型升級已成為提升競爭力的核心命題。本文基于清華大學全球產業研究院《中國企業數字化轉型研究報告&#xff08;2020&#xff09;》提出的“提升銷售率與利潤率、打通客戶數據、強化營銷協同、構建全景用戶畫像、助…

Linux淺談

Linux淺談 一、什么是 Linux&#xff1f;先拋開 “內核”&#xff0c;看整體 可以把 Linux 系統 想象成一臺 “組裝電腦”&#xff1a; 最核心的零件是 “主板”—— 這就是 Linux 內核&#xff08;Kernel&#xff09;&#xff0c;負責管理電腦里的所有硬件&#xff08;比如 …

PostgreSQL ERROR: out of shared memory處理

使用pg_dump命令導出一個庫的時候&#xff0c;報 pg_dump: error: query failed: ERROR: out of shared memory HINT: You might need to increase "max_locks_per_transaction". 從錯誤字面上看是超出內存大小了&#xff0c;建議增加max_locks_per_transaction參…

IoT/基于NB28-A/BC28-CNV通信模組使用AT指令連接華為云IoTDA平臺(HCIP-IoT實驗2)

文章目錄 概述檢查通信環境通信模組固件信號強度CGATT指令參數 / 啥是PS域&#xff1f;PS附著狀態&#xff1a;ATCGATTPLMN 選擇&#xff1a;ATCOPSCEREG指令參數 / 啥是EPS與EPC?CEREG指令參數 / 啥是URC?網絡注冊狀態&#xff1a;ATCEREG網絡附著和網絡注冊 AT指令接入IoTD…

紅外遙控(外部中斷)

目錄 1.紅外遙控簡介 通信方式&#xff1a; 紅外LED波長&#xff1a; 通信協議標準&#xff1a; 2.硬件電路 發送部分1&#xff1a; 內部元件介紹&#xff1a; 工作原理&#xff1a; 為什么要以38KHZ亮滅&#xff1f; 電路圖&#xff1a; 發送部分2&#xff1a; 電…

【C#】一個簡單的http服務器項目開發過程詳解

這跟安裝NoteJs程序運行腳本文件搭建一個簡單Http服務器一樣&#xff0c;相比起來&#xff0c;它的優點是可以開發的應用是免安裝&#xff0c;跨平臺的&#xff0c;放在移動盤上便捷的&#xff0c;這里著重講http服務器實現的過程&#xff0c;以便自主實現特定的功能和服務。 …

WPF【11_4】WPF實戰-重構與美化(MVVM 架構)

11-9 【理論】MVVM 架構 在 WPF 項目中&#xff0c;我們主要采用的是一種類似 MVC 的架構&#xff0c;叫做 MVVM。 MVVM 繼承了 MVC 的理念&#xff0c;是 Model-View-ViewModel 的縮寫&#xff0c;中文意思是模型、視圖、視圖模型。這三個詞分開看我們都能看懂&#xff0c;不…

使用PowerBI個人網關定時刷新數據

使用PowerBI個人網關定時刷新數據 PowerBI desktop連接mysql&#xff0c;可以設置定時刷新數據或在PowerBI服務中手動刷新數據,步驟如下&#xff1a; 第一步&#xff1a; 下載網關。以個人網關為例&#xff0c;如圖 第二步&#xff1a; 雙擊網關&#xff0c;點擊下一步&…

深度學習驅動的超高清圖修復技術——綜述

Deep Learning-Driven Ultra-High-Definition Image Restoration: A Survey Liyan Wang, Weixiang Zhou, Cong Wang, Kin-Man Lam, Zhixun Su, Jinshan Pan Abstract Ultra-high-definition (UHD) image restoration?? aims to specifically solve the problem of ??quali…

3 分鐘學會使用 Puppeteer 將 HTML 轉 PDF

需求背景 1、網頁存檔與文檔管理 需要將網頁內容長期保存或歸檔為PDF,確保內容不被篡改或丟失,適用于法律文檔、合同、技術文檔等場景。PDF格式便于存儲和檢索。 2、電子報告生成 動態生成的HTML內容(如數據分析報告、儀表盤)需導出為PDF供下載或打印。PDF保留排版和樣…

電子郵箱設置SSL:構建郵件傳輸的加密護城河

在數字化通信高度依賴的今天&#xff0c;電子郵件作為企業協作與個人隱私的核心載體&#xff0c;其安全性直接關系到數據主權與商業利益。SSL&#xff08;Secure Sockets Layer&#xff09;作為網絡通信加密的基石技術&#xff0c;通過為郵件傳輸建立加密隧道&#xff0c;有效抵…

Qt -使用OpenCV得到SDF

博客主頁&#xff1a;【夜泉_ly】 本文專欄&#xff1a;【暫無】 歡迎點贊&#x1f44d;收藏?關注?? 目錄 cv::MatdistanceTransform獲得SDF 本文的目標&#xff0c; 是簡單學習并使用OpenCV的相關函數&#xff0c; 并獲得QImage的SDF(Signed Distance Field 有向距離場) 至…

Compose仿微信底部導航欄NavigationBar :底部導航控制滑動并移動

文章目錄 1、準備工作1.1 參考1.2 依賴添加&#xff1a;1.3 主要控件NavigationBarHorizontalPager、VerticalPager 2、功能描述&#xff1a;3、實現過程3.1 創建一個數據類3.2 創建一個list變量3.3 具體實現3.3.1 創建共享的Pager狀態3.3.2 將頁面索引與頁面標題同步3.3.3 創建…

WindowServer2022下docker方式安裝dify步驟

WindowServer2022下docker方式安裝dify步驟&#xff08;穩定后考慮部署至linux中&#xff09; 教程&#xff1a;https://blog.csdn.net/qq_49035156/article/details/143264534 0、資源要求 ---windows&#xff1a;8核CPU、16G內存、200G500G存儲 ---10.21.31.122/administra…