第十章 数据库恢复技术

一、事务

定义

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

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

相关推荐
Watink Cpper25 分钟前
[MySQL初阶]MySQL(1)MySQL的理解、库的操作、表的操作
linux·运维·服务器·数据库·c++·后端·mysql
尘世壹俗人30 分钟前
spark写数据库用连接池找不到driver类
大数据·数据库·spark
计算机学长大白1 小时前
Redis是什么?如何使用Redis进行缓存操作?
数据库·redis·缓存
焱焱枫1 小时前
PostgreSQL全页写机制深度解析:如何平衡WAL性能与数据可靠性
数据库·postgresql·wal性能
nicepainkiller3 小时前
go 分布式redis锁的实现方式
数据库·redis·redis分布式锁
007php0073 小时前
企微审批中MySQL字段TEXT类型被截断的排查与修复实践
大数据·开发语言·数据库·后端·mysql·重构·golang
Elastic 中国社区官方博客3 小时前
使用 Elasticsearch 进行集成测试初始化数据时的注意事项
大数据·数据库·elasticsearch·搜索引擎·集成测试·可用性测试
V+zmm101343 小时前
美食推荐系统的微信小程序+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计
SelectDB技术团队4 小时前
Apache Doris 3.0.4 版本正式发布
大数据·数据库·数据分析·doris·存算分离
自不量力的A同学4 小时前
GreptimeDB v0.12 发布,开源 Rust 时序数据库
数据库·开源·时序数据库