第七章——数据恢复技术

7.1,事务

事务的概念

事务是一系列数据库操作序列,不可分割(即要么全部不做要么全做,不存在一部分做了一部分没做)。

在sql语句中,用BRGIN TRASACTION来开启一个事务,用COMMIT来提交一个事务,用ROLLBACK来表示回滚(即中途错误后撤销全部操作滚回去)。

事务的特性

四个特性:原子性、一致性(即数据库保持一致性状态)、隔离性(事务之间不干扰)、持续性(也称永久性)。


7.2,数据库恢复概述

强调了恢复是多么的重要。


7.3,故障的种类

事务内部故障

分为可以预期的和不可以预期的(银行转账的例子),通过事务撤销UNDO的方式来恢复。

系统错误(又称软故障,soft crash)

cpu故障、操作系统故障或断电等等。除了让未完成的事务撤销UNDO,还需要把已完成但是还未写入数据库的事务重做REDO。

介质故障(又称硬故障,hard crash)

就是外存故障,直接影响数据库本身以及事务,发生几率小,破坏性大。

计算机病毒

你懂的。


7.4,恢复的实现技术

建立冗余

1,通过数据转储建立后备副本,在发生故障时载入后备副本,然后重做事务,使数据库恢复到一致性状态。转储分为两种状态(两态),静态转储和动态转储,静态转储是事务和转储串行进行互不干扰打断,动态转储是事务和转储并行进行。由于动态转储可能会导致过时数据,所以配合记录事务操作的登录日志才可以完全达到一致性的状态。

2,转储还可以分为两种方式(两式),海量转储和增量转储,即使转储全部数据库信息还是部分修改的信息。对于那些数据库本身极其庞大且事务操作频繁的数据库来说,显然增量存储是更好的选择。

3,由于两式两态,所以组合起来有四种转储方式。

登录日志文件

1,两类,以记录为单位的日志文件和以数据块为单位的日志文件。

2,记录型日志的内容包括:事务标识、操作类型(增删改)、操作对象、旧值、新值。数据块型日志只包括:事务标识和被更新的数据块(新旧都有)。

3,动态转储必须用日志,静态也可以用。

4,登记日志文件两大原则:1,严格按事务的执行时间次序;2,先写日志,再写数据库。


7.5,恢复策略

对于事务内部故障

四步走:1,反向扫描日志文件,找到更新操作;2,对更新操作进行逆向操作,恢复旧值;3,继续逆向找下一个更新操作,按照2处理;4,直到事务开始标记,该事物恢复搞定。

对于系统故障

三步走:1,正向扫描日志,对于已完成事务,丢入REDO队列,对于未完成事务,丢入UNDO队列;2,对于UNDO队列的事务,按照事物内部故障的逆向更新操作的方式进行恢复;3,对于REDO队列,进行正向更新曹组,将新值重新写入数据库。

对于介质故障

两步走:1,重载数据库后备副本;2,重载日志文件,正向扫描进行REDO。为什么不需要UNDO?因为你重载后备副本的时候就相当于是UNDO了。


7.6,具有检查点的恢复技术

1,前面所说的恢复记录非常好,但是日志文件带来两个问题:1,扫描日志文件耗时;2,有些REDO操作可能还不需要进行的,因为已经写入数据库了。

2,所以就发明了检查点恢复技术。它的核心思路是这样的:在以往的日志文件中加入(检查点,日志记录),再增加一个重新开始文件,通过重新开始文件,可以找到日志文件中的(检查点,日志记录)这样的二元组,然后只需要针对这个二元组中的日志记录进行REDO和UNDO操作即可。

3,按照什么步骤建立(检查点,日志记录)二元组呢?1,日志缓冲写入磁盘日志;2,记录检查点;3,当前数据缓冲写入磁盘;4,在重新开始文件中写入(检查点,日志记录)二元组的地址。

4,四步恢复策略:1,找到检查点;2,通过检查点得到当前全部事务ACTIVE-LIST,将ACTIVE-LIST放入UNDO-LIST,REDO-LIST暂空;3,正向扫描UNDO-LIST,若已提交,则丢入REDO-LIST,若未提交,则不动;4,正扫REDO-LIST,重做,逆扫UNDO-LIST,撤销。

7.7,数据库镜像

针对介质故障的破坏性以及恢复的耗时性,开发了镜像技术,也就是双磁盘技术。DBMS会自动的将主数据库的全部数据或关键数据复制到镜像数据库中去,一旦主库出现介质故障,镜像库可以马上顶替上来。在没有出现故障的时候,还可以用于并发操作。

你可能感兴趣的:(第七章——数据恢复技术)