当前课程知识点:数据库概论 >  第八章 事务处理 >  8.6 事务恢复 >  事务恢复

返回《数据库概论》慕课在线视频课程列表

事务恢复在线视频

事务恢复

下一节:数据库使用介绍

返回《数据库概论》慕课在线视频列表

事务恢复课程教案、知识点、字幕

同学们好

我们是来自云南大学软件学院的

包崇明

下面为大家介绍事务恢复

前面我们学习事务的ACID保证时

学习到即使在电源故障或者系统崩溃时

原子性和持久性依然能够得到保证

这主要是依靠我们今天所要学习的

事务恢复技术来完成的

我们知道相对访问内存而言

访问磁盘的速度是很慢的

我们需要将磁盘中的数据页面

读到内存缓冲区中

以便为计算机指令提供高速的随机访问

这就是缓存技术

假定我们突然遇到电源故障

或者系统崩溃

这时更新的结果还在缓存中

还没有写回磁盘

这样看上去所有的更新都将丢失

我们将如何处理这个问题呢

我们通过日志来解决这个问题

每执行一次更新操作

系统给自己做一个记录

称为日志项

该记录保存在一个称为日志缓冲区的

内存区域中

日志项包含相应更新操作的足够信息

在恢复的时候

系统能够根据这些信息

重做更新操作或者撤销更新操作

每隔一段时间

日志缓冲区将被写回到磁盘上

一个称为日志文件的顺序文件中

该文件包括了在过去某个时间段中

所有的日志项

通过这种方式

在某一时刻一旦内存中的内容丢失

数据库恢复进程就能够通过日志文件

对磁盘的相应数据进行

重新更新或者撤销更新操作

现在我们来看一下更新的日志项

应包括哪些内容才能保证

使用这些信息能够进行恢复操作

我们应该在日志项中

记下更新前的数据的值和更新后数据的值

更新前的数据值我们称为前像

更新后的数据值我们称为后像

由于缓存区的存在

恢复的时候我们会遇到两种情形

第一种情形是当一个事务还没有提交

崩溃就发生了

那这个事务在崩溃前的更新数据

可能由于缓存策略已写入磁盘中

我们需要用到这个日志项中更新前的值

也就是前像

来重写磁盘中相应数据的值

这种恢复操作称为UNDO操作

也就是撤销未提交事务的更新

对磁盘可能造成的影响

第二种情形是当一个事务提交后

崩溃发生

那这个事务对数据的更新

可能都在缓存区中还没有来得及写入磁盘

我们需要用日志项中更新后的值

也就是后像

来重写磁盘中相应数据的值

这种恢复操作称为REDO操作

也就是确保

已提交事务的更新已写入磁盘

下面我们来看一下一个经历执行过程中

日志记录的内容

图上每一行包含一个操作

操作的日志和相应的解释

我们看到操作一是T1读取A得到50

相应的日志项中记录了T1启动信息

对于读操作

除了事务启动

或者结束需要在事务中标识

其他的不需要记录日志项

操作二是T1将20写入A

对应的日志项中记录了T1的事务号

A的前像50和后像20

操作三是T2读取C得到100

对应的日志项中记录了T2启动信息

操作四是T2将50写入C

对应的日志项中记录了T2的事务号

C的前像100和后像50

操作五是T2提交

对应的日志项中记录了T2提交标记

把前面的日志项

都写入磁盘上的日志文件

操作六是T1读取B得到50

读操作无需写日志项

操作七是T1将80写入B

对应的日志项中记录了T1的事务号

B的前像50和后像80

这时系统崩溃

后续操作终止

系统崩溃后

我们的日志文件存入硬盘的

只有操作一到操作五五条日志记录

我们将根据这五条日志来进行恢复

恢复过程可以分为

后滚和前滚两个阶段

后滚对应扫描日志文件中的日志项时

从最后一条开始向前扫描

直到第一条

前滚指的是扫描日志文件

是从第一条日志文件项开始向后扫描

我们先执行后滚阶段

再执行前滚阶段

后滚阶段

恢复过程从日志文件的

最后一项往前扫描

执行UNDO操作

撤销没有提交的事务的更新

同时生成一张已提交事务的列表

在前滚阶段

恢复程序从日志文件的第一条向后扫描

执行REDO操作

确保已提交事务的更新写入磁盘

下面我们来看一下

前面崩溃的经历

如何根据日志文件来进行恢复

我们先执行后滚阶段

撤销未提交事务的更新

我们知道这时日志文件中

只有操作一到操作五的日志项

从后往前

我们最先扫描操作五的日志项

这是T2提交的标记

我们把T2放入已提交列表中

往前扫描

得到操作四的日志项

我们从日志项中看到是T2的更新操作

T2已经在提交列表中

不需要进行处理

继续往前扫描

得到操作三的日志项

是T2启动的表记

可以不做处理

继续往前

得到操作二的日志项

这是一个T1的更新日志

T1不在已提交列表中

所以T1是未提交事务

我们应撤销该操作的更新

对数据A写入前像50

继续往前

到了第一条记录

是T1的启动标记

不需要处理

后滚阶段结束

下一步

开始前滚阶段

重做已提交事务的更新

从第一条日志开始

也就是操作一的日志项

是T1的启动标记

不需要处理

扫描到操作二的日志项

这是一个T1的更新日志

但T1不在已提交日志列表中

所以不需要处理

现在扫描到操作三的日志项

是T2启动的标记

不需要进行处理

扫描到操作四的日志项

这是一个T2的更新日志

T2在已提交日志列表中

我们进行REDO操作

对数据C写入后项50

最后扫描到操作五的日志项

这是T2提交的标记

不需要处理

前滚阶段结束

至此我们完成了恢复操作

更新事务这张一章的主要内容

已经介绍完毕

现在我对本章内容做一个总结

我们首先介绍了

事务的概念及其ACID保证

学习了判定一个给定经历

是否可串行化的方法

介绍了调度器

用来保证得到可串行化经历的

两阶段锁协议

和用来提高事务处理性能的隔离级别

最后我们学习了事务恢复的方法

今天的学习到这里就结束了

同学们再见

数据库概论课程列表:

导论

-数据库概述

--Video

-导论--数据库概述

第一章 数据库基础

-1.1 数据库基础

--Video

-第一章 数据库基础--1.1 数据库基础

第二章 关系运算

-2.1 CAP数据库

--CAP数据库

-第二章 关系运算--2.1 CAP数据库

-2.2 自然关系运算1

-- 自然关系运算1

-第二章 关系运算--2.2 自然关系运算1

-2.3 自然关系运算2

--自然关系运算2

-第二章 关系运算--2.3 自然关系运算2

第三章 结构化查询语言SQL

-3.1 SQL概述

-- SQL概述

-3.1 SQL概述--作业

-3.2 数据定义DDL

--数据定义DDL

-3.2 数据定义DDL--作业

-3.3 SQL数据更新DML

--SQL数据更新DML

-3.3 SQL数据更新DML--作业

-3.4 复杂SQL查询操作1

--复杂SQL查询操作1

-第三章 结构化查询语言SQL--3.4 复杂SQL查询操作1

-3.5 复杂SQL查询操作2

--复杂SQL查询操作2

-第三章 结构化查询语言SQL--3.5 复杂SQL查询操作2

第四章 数据库完整性、视图与安全性

-4.1 数据完整性

--4.1 数据完整性

-4.1 数据完整性--作业

-4.2 完整性约束

--完整性约束

-4.2 完整性约束--作业

-4.3 外键约束

--外键约束

-4.3 外键约束--作业

-4.4 触发器

--触发器

-4.4 触发器--作业

-4.5 视图

--视图

-4.5 视图--作业

-4.6 安全性

--安全性

-4.6 安全性--作业

第五章 索引

-5.1 索引

--Video

-5.2 B+树索引

--Video

第六章 规范化理论

-6.1 函数依赖

--Video

-6.2 Armstrong公理

--Video

-6.3 无损分解

--Video

-6.4 范式举例

--Video

-6.5 三种范式

--Video

-6.5 三种范式--作业

第七章 实体关系模型

-7.1-E-R模型概述

--E-R模型概述

-7.2 E-R模型详解

--Video

-7.3 E-R模型的拓展

--Video

-7.4 E-R模型实例分析

--Video

第八章 事务处理

-8.1 事务的ACID性质介绍

--ACID介绍

-8.1 事务的ACID性质介绍--作业

-8.2 事务经历

--事务经历

-8.2 事务经历--作业

-8.3 可串行化调度和前趋图

--可串行化调度和前趋图

-8.3 可串行化调度和前趋图--作业

-8.4 两阶段封锁

--两段锁协议

-8.4 两阶段封锁--作业

-8.5 隔离级别

--隔离级别

-8.5 隔离级别--作业

-8.6 事务恢复

--事务恢复

-8.6 事务恢复--作业

第九章 数据库应用与开发

-9.1 数据库使用介绍

--数据库使用介绍

-9.2 Java访问数据库

--Java访问数据库

-9.2 Java访问数据库--作业

第十章 其他数据库技术概述

-10.1 数据库新技术概述

--Video

事务恢复笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。