您的位置:首页 > 数据库

数据库恢复技术

2015-12-10 09:20 197 查看
数据库恢复技术

故障种类

1.事务故障:某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了

事务故障的恢复:

(1)对于可预见的错误,由事务程序来处理

(2)对于不可预见的错误,由DBMS强行回滚该事务

2.系统故障:整个系统的正常运行突然被破坏,所有正在运行的事务都非正常终止,内存中数据缓冲区的信息全

部丢失,外部存储设备上的数据未受影响

系统故障的恢复:

(1)清除尚未完成的事务对数据库的所有修改

(2)将缓冲区中已完成的事务提交的结果写入数据库

3.介质故障:介质故障是指存储数据库的设备发生故障,使存储在其上的数据部分丢失或全部丢失。介质故障又

称为硬件故障。

介质故障的恢复:

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

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

恢复的实现技术

恢复操作的基本原理是冗余,即利用存储在系统其他地方的冗余数据来重建数据库中已被破坏或不正确的那部分

数据。

1.建立冗余数据

(1)数据转储

是指DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程

a)静态转储

在系统无运行事务时进行转储

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

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

b)动态存储

转储操作与用户事务并发执行

转储期间允许对数据库进行存取或修改

c)海量转储

每次转储全部数据库

d)增量转储

只转储上次转储后更新过的数据

(2)登记日志文件(log)

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

其格式及内容

a)以记录为单位的日志文件

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

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

各个事务的所有更新操作

与事务有关的更新操作

与事务有关的内部更新操作

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

事务标识

操作类型

操作对象

更新前数据的旧值

更新后数据的新值

登记日志文件的原则

(1)登记的次序严格按并行事务的时间次序

(2)必须先写日志文件,后写数据库

事务故障的恢复

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

事务故障的恢复有系统自动完成,不需要用户干预。

系统故障的恢复:

Undo故障时未完成的事务

Redo已完成的事务

系统故障的恢复步骤:

1.正向扫描日志文件

Redo队列:在故障发生前已经提交的事务

Undo队列:故障发生时尚未完成的事务

2.对Undo队列事务进行UNDO处理

反向扫描日志文件,对每个UNDO事务更新操作进行逆操作

3.对Redo队列进行REDO处理

正向扫描日志文件,对每个REDO事务重新执行登记的操作

介质故障的恢复

1.重装数据库,使数据库恢复到一致性的状态

2.重做已经完成的事务

介质故障的恢复需要DBA介入

DBA的工作

重装最近转储的数据库副本和有关的个日志文件副本

执行系统提供的恢复命令。

具有检查点的恢复技术

问题的提出

(1) 搜索整个日志将耗费大量的时间

(2) REDO处理:重新执行,浪费了大量时间

解决方案

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

增加重新开始文件

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

利用检查点的恢复步骤

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操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: