第十章 数据库恢复技术

一、事务

定义

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

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并利用镜像进行自动恢复。

相关推荐
爱写代码的阿森32 分钟前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_1 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白2 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面2 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧2 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈2 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy2 小时前
log4net 数据库存日志正确配置
数据库
liuxiaowei33 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba
破碎的南瓜3 小时前
sqli--sql注入过关笔记(1,2,3,4,5,9)
数据库·笔记·sql