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