第十章 数据库恢复技术

一、事务

定义

数据操作序列,不可分割的工作单位,恢复和并发的基本单位。

ACID特性

原子性

一致性

隔离性

持续性

二、数据库恢复概述

就是从错误的状态恢复到某一已知的正确状态。

三、故障的种类

事务内部的故障

非预期的故障:运算溢出、并发事务发生死锁、违反了某些完整性限制。

恢复:撤销事务。

系统故障

类型(软故障):

特定类型的硬件错误、操作系统故障、DBMS代码错误、系统断电

恢复:

故障时事务未提交:强行撤销所有未完成事务

故障时事务已提交但缓冲区信息尚未完全写回到磁盘上:重做所有已提交事务。

介质故障

硬故障

磁盘损坏、磁头碰撞、强磁场干扰

恢复

装入故障前的数据副本、重做自此始时的所有成功事务。

计算机病毒

四、恢复的实现技术

基本原理:冗余

利用存储在系统其他地方的冗余数据来重建数据库中已被破坏的数据。

如何建立冗余数据

数据转储

DBA将整个数据库复制到磁带或磁盘保存起来作为备用数据,当数据库遭到破坏时将备用数据重新装入。这个过程很耗时。

静态转储

条件:

1)无事务运行;

2)处于一致性状态;

3)转储期间不能存取修改;

4)优点:实现简单,能够保证一致性;缺点:降低可数据库的可用性。

动态存储

能够与用户事务并发进行、期间允许存取和修改。

优点:不用等待事务结束,不会影响新事务运行;

缺点:不能保证副本的数据正确有效。 只有通过后备副本加上日志文件才能恢复到某一时刻正确状态。

海量转储

每次转储全部数据库。

增量转储

只转储上次转储后更新过的数据。

日志文件

记录事务对数据库的更新操作的文件。

格式:记录为单位的日志文件;数据块为单位的日志文件。

当Tf发生故障时,通过将Tb时刻的后备副本装入数据库,然后根据日志文件中的内容重新执行Tb到Tf的事务来恢复数据库。

登记日志文件

必须先写日志文件,后写数据库操作。

恢复策略

事务故障的恢复

由子系统利用日志文件撤销事务。由系统自动完成,对用户透明,不需要用户干预。

过程:反向扫描日志文件,找到该事务后,执行逆操作。如原事务是插入,则逆操作是删除,原事务是删除,逆操作是插入。直到读到该事务的开始标记。

系统故障的恢复

正向扫描日志文件,也是由系统重新启动时自动完成,不需要用户参与。

重做队列:故障发生前已经提交的事务,既有begin,也有commit。 正向扫描日志文件,执行REDO操作。

撤销队列:故障发生时尚未提交的事务,只有begin,没有commit。 反向扫描日志文件,执行UNDO操作。

介质故障的恢复

重装数据库,重做已完成的事务。这个需要DBA的介入。

将后备数据装入数据库,先恢复到一致状态,再利用日志文件按照恢复系统故障的方法进行重做(REDO)和撤销(UNDO)操作。

具有检查点的恢复技术

从检查点开始,遇到一个新开始的事务先将它放到UNDO队列,若遇到已提交事务的则转入REDO队列,最后对UNDO队列执行撤销操作,对REDO队列执行重做操作。

数据库镜像

预防介质故障,DBMS自动将整个数据库或其中的关键数据复制到另一个磁盘上,且自动保证镜像和主数据库的一致性。

出现介质故障时可由镜像磁盘提供使用,DBMS并利用镜像进行自动恢复。

相关推荐
东风破_3 小时前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
橙子家4 小时前
OSS 文件上传的几个风险点和解决方案
数据库
2601_962066495 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
愤怒的苹果ext6 小时前
MySQL Shell备份恢复数据库
数据库·mysql·备份恢复·mysqlsh
数字新视界8 小时前
DCIM管理系统的技术架构与部署模式详解
数据库·物联网·数据中心·数据中心基础设施管理·dcim管理系统
何以解忧,唯有..8 小时前
Pydantic 介绍与使用:Python 数据校验的现代方案
数据库·python·microsoft
这个DBA有点耶9 小时前
数据库容灾进入“秒级时代”:同城双活架构原理、关键技术选型与落地实践
数据库·架构·dba
2601_9620748110 小时前
大数据-264 实时数仓 - Canal MySQL的binlog研究 存储目录 变动信息 配置MySQL
大数据·数据库·mysql
2601_9620738110 小时前
大数据-240 离线数仓 - 广告业务 测试 ADS层数据加载 DataX数据导出到 MySQL
大数据·数据库·mysql
Frank_refuel11 小时前
【MYSQL进阶】-> 索引理解
数据库