事务故障恢复

简介: 事务故障恢复

为什么需要故障恢复技术

数据库运行过程中可能会出现故障, 这些故障包括事务故障和系统故障两大类

  1. 事务故障: 比如非法输入, 系统出现死锁, 导致事务无法继续执行。
  2. 系统故障: 比如由于软件漏洞或硬件错误导致系统崩溃或中止。


这些故障可能会对事务和数据库状态造成破坏, 因而必须提供一种技术来对各种故障进行恢复, 保证数据库一致性, 事务的原子性以及持久性。数据库通常以 日志的方式 记录数据库的操作从而在故障时进行恢复, 因而可以称之为 日志恢复技术


执行过程中可能产生的问题

事务的执行过程可以简化如下:

微信截图_20221208155911.png


由于数据库存在 立即修改延迟修改 , 所以在事务执行过程中可能存在以下情况:

  • 在事务提交前出现故障, 但是事务对数据库的部分修改已经写入磁盘数据库中。这导致了事务的 原子性 被破坏。
  • 在系统崩溃前事务已经提交, 但数据还在内存缓冲区中, 没有写入磁盘。系统恢复时将丢失此次已提交的修改。这是对事务 持久性 的破坏。


日志的种类和格式

  • <T,X,V1,V2>: 描述一次数据库写操作, T是执行写操作的事务的唯一标识, X是要写的数据项, V1是数据项的旧值, V2是数据项的新值。
  • <T,X,V1>: 对数据库写操作的撤销操作, 将事务T的X数据项恢复为旧值V1。在事务恢复阶段插入。
  • <T start>: 事务T开始
  • <T commit>: 事务T提交
  • <T abort>: 事务T中止


关于日志, 有以下两条 规则

  1. 系统在对数据库进行修改前会在日志文件末尾追加相应的日志记录。
  2. 当一个事务的commit日志记录写入到磁盘成功后, 称这个 事务已提交, 但事务所做的修改可能并未写入磁盘


日志恢复的核心思想

  • 撤销事务undo: 将事务更新的所有数据项恢复为日志中的旧值, 事务撤销完毕时将插入一条 <T abort> 记录。
  • 重做事务redo: 将事务更新的所有数据项恢复为日志中的新值。

事务正常回滚/因事务故障中止将进行redo 系统从崩溃中恢复时将先进行redo再进行undo。


事务故障中止/正常回滚的恢复流程

微信截图_20221208155928.png

事务故障中止或正常回滚的恢复流程.png


系统崩溃时的恢复过程(带检查点)

检查点是形如 <checkpoint L> 的特殊的日志记录, L是写入检查点记录时还未提交的事务的集合, 系统保证在检查点之前已经提交的事务对数据库的修改已经写入磁盘, 不需要进行redo。检查点可以加快恢复的过程。


系统奔溃时的恢复过程分为两个阶段: 重做阶段撤销阶段


重做阶段

微信截图_20221208155936.png


撤销阶段

微信截图_20221208155948.png


总结: 先将日志记录中所有事务的更新按顺序重做一遍, 在针对需要撤销的事务按相反的顺序执行其更新操作的撤销操作。


示例:

<T0 start>
<T0,B,2000,2050>
<T2 commit>
<T1 start>
<checkpoint {T0,T1}>   //之前T2已经commit,故不用重做
<T1,C,700,600>
<T1 commit>
<T2 start>
<T2,A,500,400>
<T0,B,2000>
<T0 abort>   //T0回滚完成,插入该记录后系统崩溃点击复制复制失败已复制


系统崩溃的恢复流程.png

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
安全 Linux 网络安全
组网神器WireGuard安装与配置教程(超详细)
组网神器WireGuard安装与配置教程(超详细)
61190 2
|
存储 Web App开发 缓存
清理C盘空间的6种方法,附详细操作步骤
释放C盘空间并不难。只要掌握合适的方法,哪怕你是电脑小白,也能轻松清理出几十GB空间。下面就为大家介绍6种实用、安全、细致的清理方法,并附上操作步骤。
|
11月前
|
监控 数据可视化 搜索推荐
商场智能导视系统:3D可视化技术逻辑拆解
本文解析3D可视化后台如何将用户行为数据转化为商场运营决策。通过数字孪生技术、用户画像与路径分析,、招商流程可视化协同,提升效率,推动商场从“经验决策”迈向“数据驱动”,实现智能高效运营。
367 0
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
859 2
|
XML 缓存 Java
Spring AOP原理详解-Spring官方原版
Spring AOP原理详解-Spring官方原版
523 0
|
安全 Linux
在Linux中,suid、sgid和sticky bit这几个术语意思?
在Linux中,suid、sgid和sticky bit这几个术语意思?
|
应用服务中间件 开发工具 nginx
vim 配置 nginx 语法高亮
使用 vim 编辑器编辑 nginx 配置文件时,无法实现”语法高亮”功能,也就是说,默认情况下,使用 vim 编辑 nginx 配置文件时,没有彩色的语法着色。
vim 配置 nginx 语法高亮
|
存储 SQL 关系型数据库
(四)MySQL之索引初识篇:索引机制、索引分类、索引使用与管理综述
本篇中就对MySQL的索引机制有了全面认知,从索引的由来,到索引概述、索引管理、索引分类、唯一/全文/联合/空间索引的创建与使用等内容,进行了全面概述。
840 0
|
测试技术 Shell Docker
给一个正在运行的Docker容器动态添加Volume
给一个正在运行的Docker容器动态添加Volume本文转自:http://dockone.io/article/149 【编者的话】之前有人问我Docker容器启动之后还能否再挂载卷,考虑到mnt命名空间的工作原理,我一开始认为这很难实现。
4465 0