10.数据库恢复
事务的基本概念
- 
事务
- 
是用户定义的一个数据库操作序列, 要么全做, 要么全不做, 是一个不可分割的工作单位
 - 
是恢复和并发的基本单位
 - 
事务与程序
 - 
事务的定义
- 
显式定义方式
- 
事务正常终止
1
2
3BEGIN TRANSACTION;
SQL 语句;
COMMIT; # 提交 - 
事务异常终止
1
2
3BEGIN TRANSACTION;
SQL 语句;
ROLLBACK; # 回滚 
 - 
 
 - 
 - 
事务的特性(ACID特性)
- 原子性
 - 一致性
 - 隔离性
 - 持续性
 
 - 
破坏ACID特性的因素
- 多个事务并行运行, 不同事物的操作交叉执行
 - 事物在运行过程中被强行停止
 
 
 - 
 
数据库恢复概述
- 
故障是不可避免的
 - 
故障对数据库的影响的主要表现
 - 
数据库恢复的作用
 - 
恢复操作的基本原理是冗余
 
故障的种类
- 
事务内部的故障
- 非预期
 
 - 
系统故障
- 软故障
 
 - 
介质故障
- 硬故障
 
 - 
计算机病毒
 
恢复的实现技术
- 
数据转储
- DBA定期地将整个数据库复制到磁带, 磁盘或其他存储介质上保存起来的过程, 这些备用的数据文本称为后备副本或后援副本
 - 静态转储
- 在系统中无运行事务时进行的转储操作, 即转储期间不允许对数据库进行任何存取, 修改活动
 - 优点 : 实现简单
 - 缺点 : 降低了数据库的可用性
 
 - 动态转储
- 转储操作与用户事务并发进行, 转储期间允许对数据库进行存取或修改
 - 优点 : 不用等待正在运行的用户事务结束, 不会影响新事物的运行
 - 缺点 : 不能保证副本中的数据正确有效
 
 - 海量转储
- 每次转储全部数据库
 
 - 增量转储
- 只转储上次转储后更新过的数据
 
 
 - 
登记日志文件
- 
日志文件的格式
- 以记录为单位
- 事务标识
 - 操作类型
 - 操作对象
 - 更新前数据的旧值
 - 更新后数据的新值
 
 - 以数据块为单位
- 事务标识
 - 被更新的数据块
 
 
 - 以记录为单位
 - 
作用
- 
用于事务故障恢复和系统故障恢复, 并协助后备副本进行介质故障恢复
 
 - 
 - 
登记日志文件
- 登记的次序严格按并发事务执行的时间次序
 - 必须先写日志文件, 后写数据库
 
 
 - 
 
恢复策略
事务故障的恢复
- 
用日志文件撤销(UNDO)此事务对数据库进行的修改
 - 
恢复步骤
- 反向扫描日志, 查找事务的更新操作
 - 对该事务的更新操作执行逆操作
 - 继续反向扫描
 - 直到读到此事务的开始标记
 
 
系统故障的恢复
- 
未完成事务对数据库的更新可能已写入数据库
 - 
已提交事务对数据库的更新可能还留在缓冲区没来得及写入
 - 
恢复方法
- 
UNDO故障发生时未完成的事务
 - 
REDO已完成的事务
 
 - 
 - 
系统故障的恢复由系统在重启时自动恢复
 - 
恢复步骤
- 正向扫描日志文件
 - 对撤销队列事务进行撤销处理
 - 对重做队列事务进行重做处理
 
 
介质故障的恢复
- 
物理数据和日志文件被破坏
 - 
重装数据库, 然后重做已完成的事务
 - 
恢复步骤
- 装入最新的后备数据库副本
 - 装入有关的日志文件副本, 重做已完成的事务
 
 
具有检查点的恢复技术
- 
问题
- 搜索整个日志耗费大量的时间
 - 重做处理重新执行耗费了大量时间
 
 - 
检查点技术
- 
检查点记录内容
- 建立检查点时刻所有正在执行的事务清单
 - 这些事务最近一个日志记录的地址
 - 重新开始文件的内容
 - 记录各个检查点记录在日志文件中的地址
 
 - 
动态维护日志文件的方法
- 将当前日志缓冲区中的所有日志记录写入磁盘的日志文件
 - 在日志文件中写入一个检查点记录
 - 将当前数据库缓冲区的所有数据记录写入磁盘的数据库中
 - 把检查点记录在日志文件中的地址写入一个重新开始文件
 
 
 - 
 - 
利用检查点的恢复策略
- 
使用检查点方法可以改善恢复效率
 
 - 
 - 
利用检查点的恢复步骤
 
数据库镜像
- 
提高数据库可用性
 











