《数据库系统概论》第10章——数据库恢复技术

       虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!

目录

10.1事务的基本概念

①事务

②事务的ACID特性

1、原子性(Atomicity)

2、一致性(Consistency)

3、永久性 (Durability)

4、隔离性(Isolation)

10.2数据库恢复概述

10.3故障的种类

①事务内部的故障

②系统故障

③介质故障

④计算机病毒

10.4恢复的实现技术

10.4.1数据转储

①静态转储

②动态转储

10.4.2登记日志文件

1、日志文件的格式和内容

2、日志文件的作用

10.5恢复策略

①事务故障的恢复

②系统故障的恢复

③介质故障的恢复

10.6具有检查点的恢复技术

10.7数据库镜像


10.1事务的基本概念

①事务

事务的概念

         ·事务是对数据库的一个操作序列

         ·一个不可分割的工作单位

         ·恢复和并发控制的基本单位

 

事务的定义方式

         ·显式定义

         ·隐式定义:按照某种规则自动划分

 

事务和程序比较

         ·在关系数据库中,一个事务可以是一条或多条SQL语句,也可以包含一个或多个程序。

         ·一个程序通常包含多个事务

 

②事务的ACID特性

1、原子性(Atomicity)

逻辑单元要么全做或全不做在系统崩溃后,DBMS将恢复或撤销系统崩溃时处于活动状态的事务对数据库产生的影响,从而保证事务的原子性。

事务原子性由事务管理部件(Transaction-Management Component)处理。

 

2、一致性(Consistency)

数据正确性不被破坏

原子性与一致性与的对比

         ·原子性由系统保障

         ·一致性由用户和程序员保障

 

3、永久性 (Durability)

事务一旦提交,对数据库的改变永久地留在数据库中,发生了故障也不会丢失,除非其它事务改变它。

 

4、隔离性(Isolation)

一个事务的执行不能被其它干扰。

 

10.2数据库恢复概述

√故障是不可避免的

         ·系统故障:计算机软、硬件故障

         ·人为故障:操作员的失误、恶意的破坏等。

 

√数据库的恢复

         ·把数据库从错误状态恢复到某已知的正确状态(亦称为一致状态或完整状态)

 

10.3故障的种类

①事务内部的故障

有的是可以通过事务程序本身发现

更多的是非预期的。(事务故障仅指这类非预期的故障)

         ·运算溢出

         ·并发事务发生死锁而被选中撤销该事务

         ·违反了某些完整性限制等

 

通过事务程序本身发现:比如转账的时候,钱不够了,应用程序可以发现并让事务回滚(ROLLBACK),撤销已作的修改,恢复数据库到正确状态,这属于预期故障。

 

事务故障的恢复:撤消事务UNDO

 

②系统故障

√系统故障:  称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。

         ·整个系统的正常运行突然被破坏

         ·所有正在运行的事务都非正常终止

         ·不破坏数据库

         ·内存中数据库缓冲区的信息全部丢失

 

系统故障的常见原因

         ·特定类型的硬件错误(如CPU故障)

         ·操作系统故障

         ·DBMS代码错误

         ·系统断电

 

发生系统故障时,事务未提交。

         ·恢复策略:强行撤消(UNDO)所有未完成事务

√发生系统故障时,事务已提交,但缓冲区中的信息尚未完全写回到磁盘上:

         ·恢复策略:重做(REDO)所有已提交的事务

 

③介质故障

√介质故障:  称为硬故障,指外存故障

         ·磁盘损坏

         ·磁头碰撞

         ·操作系统的某种潜在错误

         ·瞬时强磁场干扰

 

恢复策略

装入数据库发生介质故障前某个时刻的数据副本

√重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库

 

④计算机病毒

√计算机病毒

         ·一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序

         ·可以繁殖和传播

√危害

         ·破坏、盗窃系统中的数据

         ·破坏系统文件

 

10.4恢复的实现技术

恢复操作的基本原理:冗余

         ·利用存储在系统其它地方的冗余数据重建数据库中已被破坏或不正确的那部分数据

         ·建立冗余数据最常用的技术是数据转储登记日志文件(logging)

 

10.4.1数据转储

√数据转储是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程,备用的数据称为后备副本后援副本

         ·数据库遭到破坏后可以将后备副本重新装入

         ·重装后备副本能将数据库恢复到转储时的状态。

 

①静态转储

在系统中无运行事务时进行的转储操作

         ·转储开始时数据库处于一致性状态

         ·转储期间不允许对数据库的任何存取、修改活动

         ·得到的一定是一个数据一致性的副本

 

√优点:实现简单

√缺点:降低了数据库的可用性

         ·转储必须等待正运行的用户事务结束

         ·新的事务必须等转储结束

 

②动态转储

转储操作与用户事务并发进行转储期间允许对数据库进行存取或修改

√优点

         ·不用等待正在运行的用户事务结束

         ·不会影响新事务的运行

√缺点:不能保证副本中的数据正确有效

 

利用动态转储得到的副本进行故障恢复

         ·需要把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件

         ·后备副本加上日志文件才能把数据库恢复到某一时刻的正确状态

 

√海量转储: 每次转储全部数据库

√增量转储: 只转储上次转储后更新过的数据

海量转储与增量转储比较

         ·从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便

         ·但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效

 

√转储方法分类

10.4.2登记日志文件

1、日志文件的格式和内容

日志文件(log)是用来记录事务对数据库的更新操作的文件。

格式

         ·以记录为单位的日志文件

         ·以数据块为单位的日志文件

 

√以记录为单位的日志文件内容

         ·各个事务的开始标记(BEGIN TRANSACTION)

         ·各个事务的结束标记(COMMIT或ROLLBACK)

         ·各个事务的所有更新操作

 

每个日志记录的内容包括

         ·事务标识(标明是哪个事务)

         ·操作类型(插入、删除或修改)

         ·操作对象(记录内部标识)

         ·更新前数据的旧值(对插入操作而言,此项为空值)

         ·更新后数据的新值(对删除操作而言, 此项为空值)

 

√以数据块为单位的日志文件,每条日志记录的内容

         ·事务标识(标明是那个事务)

         ·被更新的数据块

2、日志文件的作用

         ·进行事务故障恢复

         ·进行系统故障恢复

         ·协助后备副本进行介质故障恢复

 

√利用静态转储副本日志文件进行恢复

         ·系统在 时刻停止运行事务,进行数据库转储;

         ·在 时刻转储完毕,得到时刻的数据库一致性副本

         ·系统运行到时刻发生故障

         ·为恢复数据库,首先由DBA重装数据库后备副本,将数据库恢复至 时刻的状态

         ·重新运行自 时刻的所有更新事务,把数据库恢复到故障发生前的一致状态

 

基本原则

①登记的次序严格按事务执行的时间次序

②必须写日志文件,写数据库

         ·写日志文件操作:把表示这个修改的日志记录写到日志文件

         ·写数据库操作:把对数据的修改写到数据库中

 

√为什么要先写日志文件?

    ·写数据库和写日志文件是两个不同的操作在这两个操作之间可能发生故障

    ·如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了

    ·如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性

10.5恢复策略

①事务故障的恢复

√事务故障:事务在运行至正常终止点前被终止

√恢复方法

         ·由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改

         ·事务故障的恢复由系统自动完成,对用户是透明的,不需要用户干预。

1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作

2)对该事务的更新操作执行逆操作。即将日志记录中“更新前的值” 写入数据库

          插入操作: “更新前的值”为空,则相当于做删除操作

          删除操作:“更新后的值”为空,则相当于做插入操作

          修改操作:则相当于用修改前值代替修改后值

3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理

4)如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了。

 

②系统故障的恢复

√系统故障造成数据库不一致状态的原因

         ·未完成事务对数据库的更新已写入数据库

         ·已提交事务对数据库的更新还留在缓冲区没来得及写入数据库

 

√系统故障的恢复由系统在重新启动时自动完成,不需要用户干预

 

√恢复方法

         ·UNDO故障发生时未完成的事务(撤销)

         ·REDO已完成的事务(重做)

1)正向扫描日志文件(即从头扫描日志文件)

         ·重做(REDO) 队列: 在故障发生前已经提交的事务(既有BEGIN TRANSACTION记录,也有COMMIT记录)

         ·撤销 (Undo)队列:故障发生时尚未完成的事务(只有BEGIN TRANSACTION记录)

2)对撤销(Undo)队列事务进行撤销(UNDO)处理

         ·反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作(即将日志记录中“更新前的值”写入数据库)

3)对重做(Redo)队列事务进行重做(REDO)处理

         ·正向扫描日志文件,对每个REDO事务重新执行登记的操作(即将日志记录中“更新后的值”写入数据库)

③介质故障的恢复

√恢复方法重装数据库,然后重做已完成的事务。

√恢复步骤:
1)装入最新的后备数据库副本(离故障发生时刻最近的转储副本) ,使数据库恢复到最近一次转储时的一致性状态。

         ·对于静态转储的数据库副本,装入后数据库处于一致性状态

         ·对于动态转储的数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障的方法(即REDO+UNDO),才能将数据库恢复到一致性状态

2)装入有关的日志文件副本 (转储结束时刻的日志文件副本) ,重做已完成的事务。

         ·首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列。

         ·然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。即将日志记录中“更新后的值”写入数据库

 

√介质故障的恢复需要DBA介入(重装最近转储的数据库副本和有关的各日志文件副本,执行系统提供的恢复命令

√具体的恢复操作仍由DBMS完成

 

10.6具有检查点的恢复技术

√两个问题

         ·搜索整个日志将耗费大量的时间

         ·REDO处理:重新执行浪费了大量时间

 

具有检查点(checkpoint)的恢复技术

         ·在日志文件中增加检查点记录(checkpoint)

         ·增加重新开始文件

         ·恢复子系统在登录日志文件期间动态地维护日志

√检查点记录的内容

         1. 建立检查点时刻所有正在执行的事务清单

         2. 这些事务最近一个日志记录的地址

重新开始文件的内容: 记录各个检查点记录在日志文件中的地址

√使用检查点方法可以改善恢复效率:如果一个事务在检查点之前提交,则数据库恢复的时候,就没必要对这个事务进行REDO操作。

√动态维护日志文件的方法周期性地执行如下操作:建立检查点保存数据库状态

具体步骤

         1)将当前日志缓冲区中的所有日志记录写入磁盘的日志文件

         2)在日志文件中写入一个检查点记录

         3)将当前数据缓冲区的所有数据记录写入磁盘的数据库中

         4)把检查点记录在日志文件中的地址写入一个重新开始文件

 

建立检查点:恢复子系统可以定期不定期地建立检查点,保存数据库状态

 

√系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略

步骤

         1)从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录.

         2)由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST建立两个事务队列:

                  ·UNDO-LIST (撤销)

                  ·REDO-LIST  (重做)

                  ·把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空.

         3)从检查点开始正向扫描日志文件,直到日志文件结束

                   ·如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列

                   ·如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列

         4)对UNDO-LIST中的每个事务执行UNDO(撤销)操作,对REDO-LIST中的每个事务执行REDO(重做)操作

 

10.7数据库镜像

介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性

         ·介质故障恢复比较费时

         ·为预防介质故障,DBA必须周期性地转储数据库

√提高数据库可用性的解决方案:数据库镜像(Mirror)

数据库镜像

         ·DBMS自动整个数据库其中的关键数据复制到另一个磁盘

         ·DBMS自动保证镜像数据与主数据库的一致性 , 每当主数据库

                     更新时,DBMS自动把更新后的数据复制过去

         ·没有出现故障时,数据库镜像可用于并发操作,一个用户对数据加排他锁修改数据,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁

         ·出现介质故障时,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。

√频繁地复制数据自然会降低系统运行效率:在实际应用中用户往往只选择对关键数据日志文件镜像,而不是对整个数据库进行镜像

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值