【数据库】数据库恢复技术

数据库恢复技术

实现恢复的核心是使用冗余,也就是根据冗余数据重建不正确数据。

事务

事务是一个数据库操作序列,是一个不可分割的工作单位,是恢复和并发的基本单位。

在关系数据库中,一个事务是一条或多条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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…