【数据库系统概论】数据库恢复技术
目录
11.1 事务的基本概念
事务的定义
事务的开始与结束
事务的ACID特性
破坏ACID特性的因素
11.2 数据库恢复概述
11.3 故障的种类
1. 事务内部的故障
2. 系统故障
3. 介质故障
4. 计算机病毒
11.4 恢复的实现技术
如何建立冗余数据
数据转储
登记日志文件
11.5 恢复策略
事务故障的恢复
系统故障的恢复
介质故障的恢复
11.1 事务的基本概念
事务的定义
事务(Transaction)是用户定义的数据操作序列,这些操作被作为一个完整的、不可分割的工作单元来执行。在一个事务内的操作要么全部执行,要么全部不执行。
事务和程序是两个不同的概念:
事务:是数据库中用于实现数据操作的一种基本单元。在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句,甚至是整个程序中的部分操作。
程序:通常包含多个事务
事务是数据库系统中实现恢复和并发控制的基本单位
事务的开始与结束
事务的开始与结束可以由用户显式控制或由系统隐式划分:
1. 显式方式
通过以下语句明确标识事务的范围:
-
BEGIN TRANSACTION;
开始事务 -
COMMIT;
提交事务(事务成功完成) -
ROLLBACK;
回滚事务(事务中止并撤销其操作)
BEGIN TRANSACTION;SQL语句1;SQL语句2;
COMMIT;BEGIN TRANSACTION;SQL语句1;SQL语句2;
ROLLBACK;
2. 隐式方式
当用户没有显式定义事务时,数据库管理系统(DBMS)会按照默认规则自动划分事务。例如,在某些系统中,每条SQL语句会被视为一个事务
事务的ACID特性
事务具有以下4个基本特性,简称为ACID:
-
原子性(Atomicity)
-
一致性(Consistency)
-
隔离性(Isolation)
-
持续性(Durability)
1. 原子性
事务是数据库的逻辑工作单位,事务中包含的所有操作要么全部完成,要么全部不执行。如果事务中途因某种原因失败,则系统会撤销事务的所有已执行操作,数据库回到事务开始前的状态。
2. 一致性
事务的执行使数据库从一个一致性状态变到另一个一致性状态。
-
一致性状态:数据库中只包含已成功提交事务的结果。
-
不一致状态:事务中断或故障导致部分修改已写入数据库,数据库可能处于不正确状态。
3. 隔离性
事务的执行不被其他事务干扰
-
每个事务内部的操作及使用的数据对其他并发事务是隔离的。
-
并发执行的事务之间不能相互影响。
4. 持续性(永久性)
事务一旦提交,对数据库的修改应该是永久性的。
-
提交后的事务结果在数据库中得到保存,即使系统出现故障也不应该影响其结果
破坏ACID特性的因素
ACID特性可能被以下两类因素破坏:
1. 并发干扰
多个事务并行运行时,不同事务的操作可能交叉执行。
-
破坏特性:隔离性和一致性
2. 各种故障
事务在运行过程中被强行停止。
-
破坏特性:原子性、持久性和一致性
DBMS事务处理的任务就是分别采用恢复机制和并发控制解决以 上两类问题
11.2 数据库恢复概述
在数据库系统中,故障是不可避免的,主要包括以下几类:
- 计算机硬件故障:如磁盘损坏、电源故障等。
- 软件错误:如操作系统或数据库管理系统(DBMS)的漏洞、程序异常等。
- 操作员失误:如误删除数据、误操作等。
- 恶意破坏:如病毒攻击、未授权用户的恶意操作等。
故障会对数据库系统造成以下影响:
- 事务运行中断:导致正在运行的事务未正常完成,影响数据的正确性。
- 数据库损坏:可能导致数据部分或全部丢失,破坏数据库的完整性和一致性。
数据库恢复的目标是通过技术手段将数据库从错误状态恢复到某一已知的正确状态(即一致性状态或完整性状态)
数据库的恢复由DBMS的恢复子系统完成,主要任务包括:
- 检测故障:识别故障类型并判断影响的范围。
- 回滚未完成事务:撤销所有未提交事务的操作,恢复数据库一致性。
- 重做已提交事务:确保已提交事务的操作永久反映在数据库中。
11.3 故障的种类
1. 事务内部的故障
事务在运行过程中未正常终止即中断,可能由预期原因或非预期原因引发。
预期原因
-
业务规则要求终止:如违反了特定逻辑约束。
-
输入数据错误:导致无法完成事务的正确处理。
-
违反完整性约束:如违反主键、外键或唯一性限制。
非预期原因
事务内部的大多数故障是不可预测的,主要包括:
-
运算溢出:如除以零、数据溢出等。
-
并发事务死锁:系统检测到死锁,主动终止某些事务。
-
违反系统完整性限制:如违反系统级约束或逻辑条件。
故障结果
-
未到达终点:事务未能到达提交点(COMMIT)或显式回滚点(ROLLBACK)。
-
数据库状态不正确:可能存在未完成操作导致的不一致性。
恢复机制撤销事务(UNDO):强行回滚事务【撤销事务已作出的所有修改,确保数据库状态恢复至事务未启动前的状态】
2. 系统故障
定义
软故障,指因某种事件导致系统停止运行并需要重新启动,但数据库本身未被破坏。
-
系统正常运行突然中断,所有事务非正常终止。
-
数据库完整性未被直接破坏,但内存中数据库缓冲区数据丢失。
故障影响
-
未完成事务:可能部分修改已写入数据库,造成不一致性。
-
已完成事务:可能部分或全部修改尚未写入物理数据库,修改丢失。
恢复机制
-
回滚未完成事务:撤销所有非正常终止事务的操作(UNDO)。
-
重做已完成事务:将所有已提交事务的操作重新应用于数据库(REDO)。
3. 介质故障
硬故障,指外存设备损坏,导致数据库部分或全部被破坏。
常见原因:磁盘损坏,磁头碰撞,强磁场干扰
-
破坏性强,可能导致数据库部分或全部丢失
-
影响正在存取相关数据的所有事务
恢复机制
-
利用冗余数据重建被破坏的数据库部分
-
恢复过程依赖于定期备份和日志文件
4. 计算机病毒
人为故障,指恶意程序通过繁殖和传播对计算机系统(包括数据库)造成危害。
故障影响
-
数据库被破坏
-
数据不正确,可能由于事务非正常终止引发
恢复机制
-
通过冗余数据重建被破坏或不正确的数据
-
采用防病毒措施和安全机制避免进一步损害
如何恢复?
恢复操作的基本原理:冗余 利用存储在系统别处的冗余数据来重建数据库中已被破坏或不正确的那部分数据
恢复的实现技术:复杂 ,一个大型数据库产品,恢复子系统的代码要占全部代码的 10%以上
11.4 恢复的实现技术
如何建立冗余数据
冗余数据是数据库故障恢复的基础
主要通过以下两种方式建立:
(1)数据转储(Backup)
数据库管理员定期将整个数据库复制到磁带、磁盘或其他存储介质的过程,称为转储。
-
保存的副本称为后备副本(Backup)或后援副本
-
用于在发生故障时恢复数据库
-
静态转储:在无事务运行的情况下执行
-
动态转储:与用户事务并发运行
(2)登记日志文件(Logging)
在数据库运行过程中,将事务对数据库的所有修改记录到日志文件中。
作用:
-
通过日志文件跟踪事务的执行状态。
-
配合转储副本,恢复数据库到一致性状态
数据转储
(1)静态转储
-
在无运行事务时进行。
-
转储期间禁止对数据库进行任何操作。
-
转储数据保证一致性。
优点:实现简单。副本数据正确有效。
缺点:降低数据库的可用性:转储必须等待当前运行事务完成。新事务必须等转储操作结束。
(2)动态转储
-
转储操作与用户事务并发进行。
-
允许在转储期间对数据库进行访问和修改。
优点:提高数据库可用性:不用等待运行事务完成。不影响新事务运行。
缺点:可能导致副本数据不一致:在转储期间,某些事务可能修改数据,导致部分数据未更新至副本。
动态转储的故障恢复原理
问题:动态转储得到的副本可能存在数据不一致问题。
解决方法:
-
在动态转储期间,记录所有事务对数据库的修改操作到日志文件。
-
恢复过程:
-
使用动态转储副本作为基础。
-
重做日志文件中的修改操作,将数据库恢复到某一时刻的正确状态。
-
海量转储与增量转储
海量转储每次转储整个数据库的所有数据,无论数据是否更新。
转储的副本完整全面。恢复过程简单,直接利用后备副本即可。占用较多存储空间,转储时间较长。
适用场景:数据库规模较小,更新频率不高。恢复过程对效率要求较高。
增量转储仅转储上次转储后发生变更的数据(包括新增、修改、删除的部分)。
数据转储量小,时间短。占用存储空间少,效率高。恢复时需结合之前的转储副本,操作复杂。
适用场景:数据库规模大,更新频率高。存储和转储时间成本敏感的场合。
登记日志文件
(1)以记录为单位的日志文件
-
每条日志记录包含以下内容:
-
事务标识:标识哪个事务进行了操作
-
操作类型:标明是插入、删除还是更新
-
数据前值:更新前的数据值(旧值)
-
数据后值:更新后的数据值(新值)
-
(2)以数据块为单位的日志文件
-
每条日志记录包含以下内容:
-
事务标识:标识哪个事务进行了操作。
-
被更新的数据块:指明更新操作所涉及的存储块。
-
日志文件的主要用途包括:
-
事务故障恢复:当事务发生故障时,通过日志文件撤销(UNDO)或重做(REDO)事务的操作。
-
系统故障恢复:记录事务的修改情况,确保系统故障后能够回滚未完成的事务或重做已提交事务。
-
协助介质故障恢复:结合后备副本恢复已破坏的数据。
登记的次序严格按并发事务执行的时间次序:必须先写日志文件,后写数据库 (Write Ahead Logging,WAL)
11.5 恢复策略
事务故障的恢复
通过日志文件的内容,撤销(UNDO)事务已对数据库进行的修改。
-
特点:由系统自动完成,用户无需干预,对用户是透明的。
步骤
-
反向扫描日志文件
从最后向前扫描日志文件,查找该事务的更新操作。 -
执行逆操作
-
根据日志记录,将“更新前的值”写入数据库。
-
插入操作:若“更新前的值”为空,相当于删除操作。
-
删除操作:若“更新后的值”为空,相当于插入操作。
-
修改操作:用“修改前值”代替“修改后值”。
-
-
-
重复处理
持续反向扫描,查找并处理该事务的所有更新操作。 -
处理完成
当读到该事务的“开始标记”时,事务故障的恢复完成。
系统故障的恢复
数据库不一致状态的原因
-
未完成事务:未完成事务的更新操作可能已经写入数据库。
-
已提交事务:已提交事务的更新操作可能仅保存在缓冲区,未写入数据库。
恢复方法
-
撤销(UNDO)未完成的事务。
-
重做(REDO)已完成的事务。
步骤
系统重新启动时自动完成
-
正向扫描日志文件
-
建立两类队列:
-
撤销队列(UNDO):包括故障发生时尚未完成的事务,仅有“BEGIN TRANSACTION”记录,无对应的“COMMIT”记录。
-
重做队列(REDO):包括故障发生前已提交的事务,既有“BEGIN TRANSACTION”记录,也有“COMMIT”记录。
-
-
-
撤销未完成的事务
-
反向扫描撤销队列中的事务操作。
-
对每个撤销事务执行逆操作,将“更新前的值”写入数据库。
-
-
重做已完成的事务
-
正向扫描重做队列中的事务操作。
-
对每个重做事务执行重做操作,将“更新后的值”写入数据库。
-
介质故障的恢复
恢复方法
-
重装数据库
装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态:-
对于静态转储,数据库即处于一致性状态。
-
对于动态转储,需要同时装入转储时刻的日志文件副本,并利用系统故障恢复方法(REDO+UNDO)将数据库恢复到一致性状态。
-
-
重做已完成的事务
-
装入有关的日志文件副本(转储结束时的日志文件副本)。
-
首先扫描日志文件,找出故障发生时已提交的事务并记录到重做队列。
-
正向扫描日志文件,对重做队列中的事务进行重做操作,将“更新后的值”写入数据库。
-
介质故障的恢复需要数据库管理员的介入:重装最近转储的数据库副本和相关日志文件副本。执行数据库管理系统提供的恢复命令。具体恢复操作:由数据库管理系统自动完成
相关文章:
【数据库系统概论】数据库恢复技术
目录 11.1 事务的基本概念 事务的定义 事务的开始与结束 事务的ACID特性 破坏ACID特性的因素 11.2 数据库恢复概述 11.3 故障的种类 1. 事务内部的故障 2. 系统故障 3. 介质故障 4. 计算机病毒 11.4 恢复的实现技术 如何建立冗余数据 数据转储 登记日志文件 11…...
R 语言科研绘图 --- 折线图-汇总
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
基于 Python 和 OpenCV 的人脸识别上课考勤管理系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
工业 4G 路由器赋能远程医疗,守护生命线
在医疗领域,尤其是偏远地区的医疗救治场景中,工业 4G 路由器正发挥着无可替代的关键作用,宛如一条坚韧的 “生命线”,为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏,常常面临着专业医生短缺、诊疗设备有限等困境…...
Windows安装Ubuntu子系统图形化工具
Windows如何使用WSL方式安装Ubuntu,可以参考:https://blog.csdn.net/xiangzhihong8/article/details/145044370。接下来,我们说一下如何安装Ubuntu的图形化系统。 为了测试,这里介绍两种常见的图形化工具。第一种为VcXsrv Gnome…...
MiniMind - 从0训练语言模型
文章目录 一、关于 MiniMind 📌项目包含 二、📌 Environment三、📌 Quick Start Test四、📌 Quick Start Train0、克隆项目代码1、环境安装2、如果你需要自己训练3、测试模型推理效果 五、📌 Data sources1、分词器&am…...
sql正则表达
MySQL中的正则表达式使用REGEXP关键字来指定匹配模式。常见的正则表达式符号包括: .:匹配任意单个字符 ^:匹配字符串的开始位置 $:匹配字符串的结束位置 *:匹配前面的字符或字符集出现零次或多次 :匹配前面…...
基于华为Maas(大模型即服务)和开源的Agent三方框架构建AI聊天助手实践
引言 随着人工智能技术的快速发展,AI聊天助手已经成为企业与用户之间沟通的重要桥梁。为了构建一个高效、智能且易于扩展的AI聊天助手,我们可以利用华为云提供的Maas(Model-as-a-Service,大模型即服务)平台,结合开源的Agent三方框架来实现。本文将详细介绍这一实践过程,…...
微信小程序——创建滑动颜色条
在微信小程序中,你可以使用 slider 组件来创建一个颜色滑动条。以下是一个简单的示例,展示了如何实现一个颜色滑动条,该滑动条会根据滑动位置改变背景颜色。 步骤一:创建小程序项目 首先,使用微信开发者工具创建一个新…...
Qt官方下载地址
1. 最新版本 Qt官方最新版本下载地址:https://www.qt.io/download-qt-installer 当前最新版本Qt6.8.* 如下图: 2. 历史版本 如果你要下载历史版本安装工具或者源码编译方式安装,请转至此链接进行下载:https://download.qt.i…...
网络-ping包分析
-a:使 ping 在收到响应时发出声音(适用于某些操作系统)。-b:允许向广播地址发送 ping。-c count:指定发送的 ping 请求的数量。例如,ping -c 5 google.com 只发送 5 个请求。-i interval:指定两…...
SEO内容优化:如何通过用户需求赢得搜索引擎青睐?
在谷歌SEO优化中,内容一直是最重要的因素之一。但要想让内容真正发挥作用,关键在于满足用户需求,而不是简单地堆砌关键词。谷歌的算法越来越智能化,更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…...
ubuntu22.04 的录屏软件有哪些?
在Ubuntu 22.04上,有几款适合做视频直播和录屏的软件: 1. OBS Studio (Open Broadcaster Software) 功能:OBS Studio 是最常用的开源直播和录屏软件,支持视频录制、直播流式传输,并且有强大的插件支持,能…...
Opencv查找、绘制轮廓、圆形矩形轮廓和近似轮廓
查找、绘制轮廓、圆形矩形轮廓和近似轮廓 目录 查找、绘制轮廓、圆形矩形轮廓和近似轮廓1 轮廓查找和绘制1.1 轮廓查找1.1.1 函数和参数1.1.2 返回值 1.2 轮廓绘制1.2.1 函数和参数 1.3 步骤1.4 实际测试绘制轮廓 2 绘制近似轮廓2.1 函数和参数2.2 查找特定轮廓2.3 近似轮廓测试…...
深入解析 Python 2 与 Python 3 的差异与演进
Python 2 和 Python 3 是 Python 编程语言的两个主要版本。Python 3 于 2008 年发布,旨在解决 Python 2 中的一些设计缺陷,并引入了许多新特性。虽然 Python 2 在很长一段时间内仍然被广泛使用,但自 2020 年 1 月 1 日起,Python 2…...
后端:Spring(IOC、AOP)
文章目录 1. Spring2. IOC 控制反转2-1. 通过配置文件定义Bean2-1-1. 通过set方法来注入Bean2-1-2. 通过构造方法来注入Bean2-1-3. 自动装配2-1-4. 集合注入2-1-5. 数据源对象管理(第三方Bean)2-1-6. 在xml配置文件中加载properties文件的数据(context命名空间)2-1-7. 加载容器…...
排序:插入、选择、交换、归并排序
排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,…...
认识+安装ElasticSearch
1. 为什么要学习ElasticSearch? 一般的来说,项目中的搜索功能尤其是电商项目,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的,存在很多问题。 1.1 数据库搜索所存在的问题 1.1.1 查询效率较低 由于数据库模糊查询不走索引&…...
一个模块实现期货分钟 K 线计算、主连行情合成
由于不同期货品种的交易时间存在差异,且不同期货合约的活跃度各不相同,因此基于期货快照行情数据合成分钟K线的计算方法在时间对齐上需要进行不同的处理。 本教程旨在提升 DolphinDB 在具体业务场景中的应用效率,并降低其在实际业务中的开发…...
PyTorch:.max(1)和.max(0)的使用
目录 1).max(1)的使用: 2).max(0)的使用: 1).max(1)的使用: 假设有一个形状为 ( m , n ) 的 Tensor x ,其中m表示行数,n表示列数。 x.max(1) ,相当于x.max(dim1) 。作…...
ASP.NET Core 中使用 Cookie 身份验证
在 ASP.NET Core 中使用 Cookie 身份验证,通常是为了实现用户的登录和授权。以下是配置 Cookie 身份验证的步骤。 1. 安装必要的 NuGet 包 首先,确保项目中包含 Microsoft.AspNetCore.Authentication.Cookies 包。你可以通过 NuGet 包管理器或命令行安…...
Ollama私有化部署大语言模型LLM
目录 一、Ollama介绍 二、安装Ollama 1、标准安装 2、国内加速 三、升级Ollama版本 四、使用Ollama 1、启动ollama服务 systemctl start ollama.service ollama serve 2、使用ollama命令 ollama run 运行模型 ollama ps 查看正在运行的模型 ollama list 查看(本地)…...
安卓app抓包总结(精)
前言 这里简单记录一下相关抓包工具证书的安装 burp证书安装 安装证书到移动设备(安卓7以后必须上传到设备系统根证书上) 导出证书 openssl x509 -inform DER -in cacert.der -out cacert.pem 转换格式 openssl x509 -inform PEM -subject_hash_old -in cacert.pem …...
Three.js 性能优化:打造流畅高效的3D应用
文章目录 前言一、减少几何体复杂度(Reduce Geometry Complexity)二、合并几何体(Merge Geometries)三、使用缓冲区几何体(Use BufferGeometries)四、纹理压缩与管理(Texture Compression and M…...
PHP 在 2025 年的现状与展望
PHP 在 2025 年依然强劲,继续为超过 77% 使用已知服务器端编程语言的网站提供动力。这并非仅仅依靠遗留代码,像 WordPress、Shopify 和 Laravel 这样的主流平台持续推动 PHP 的发展,使其保持着 актуальность 并不断进化。 为什么…...
力扣经典二分题:4. 寻找两个正序数组的中位数
题目链接:4. 寻找两个正序数组的中位数 - 力扣(LeetCode) 一、题目分析 这道题目是让我们在 两个正序的数组中寻找中位数已知两个数组的大小分别是:int m nums1.size(),n nums2.size();中位数性质1:中位数左侧元素 …...
解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题
错误背景 WordPress版本:wordpress-6.6.2-zh_CN WooCommerce版本:woocommerce.9.5.1 WordPress在安装了WooCommerce插件后,安装的过程中没有问题,在安装完成后提示: 此站点遇到了致命错误,请查看您站点管理…...
Excel 技巧07 - 如何计算到两个日期之间的工作日数?(★)如何排除节假日计算两个日期之间的工作日数?
本文讲了如何在Excel中计算两个日期之间的工作日数,以及如何排除节假日计算两个日期之间的工作日数。 1,如何计算到两个日期之间的工作日数? 其实就是利用 NETWORKDAYS.INTL 函数 - weekend: 1 - 星期六,星期日 2,如…...
快速实现一个快递物流管理系统:实时更新与状态追踪
物流管理是电商、仓储和配送等行业的重要组成部分。随着电子商务的快速发展,快递物流的高效管理和实时状态更新变得尤为关键。本文将演示如何使用Node.js、Express、MongoDB等技术快速构建一个简单的快递物流管理系统,该系统支持快递订单的实时更新和追踪…...
kvm 解决 安装windows 虚拟机cpu 核数问题
通过lscpu命令查到我本机的cpu信息如下 CPU(s): 12 —— 系统的总逻辑处理单元数量(包括所有核心和逻辑处理器)。Thread(s) per core: 2 —— 每个物理核心支持 2 个线程(表示启用了超线程技术)。Core(s) per socket: 6 —— 每个…...
怎么在网站里做网页/武汉标兵seo
ControllerAdvice,是Spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。让我们先看看ControllerAdvice的实现: package org.springframework.web.bind.annotation;Target(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)Do…...
做个网站多少钱/百度关键词统计
更好的阅读体验点击原文链接 大家好,计算机视觉life经过几个月打磨,推出了激光SLAM逐行源码解析课程《Cartographer从入门到精通: 原理深剖源码逐行详解》,已经购买过我们的课程学员及知识星球用户均有优惠券(见文末)…...
贵州省城乡和建设厅网站/百度网页搜索
微软手机的信号显示...
大型网站建设公司沈阳/网站优化费用报价明细
本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spring Boot 配置 Spring Boot 配置,包括自…...
珠海医疗网站建设/百度代理推广
学了这么久的C语言,你是不是有很多会写的小玩意了呢?比如说简单的五角星,三角形,等腰三角形,心形之类的~笔者今天发现了个以前写的一个很好玩的小程序分享给大家~~画心的C语言:#include <stdio.h>int…...
衢州网站建设方案/个人主页网页设计模板
一.简介: 提供了比R语言的data.frame更丰富的功能 dataframe是带标签的大小可变的2维异构表格,由多个Series构成(在DataFrame中称为Column),但所有Series共用1组标签DataFrame unifies two or more Series into a single data structure.Each Series then represents a named…...