1.事务:
是用户定义的一个数据库操作序列,是一个不可分割的工作单位(原子性) 一般的,一个程序中被包含多个事务。
2.事务的特性:(ACID)
- 原子性:事务中的操作要么都做,要么都不做
- 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态
- 隔离性:一个事物的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰
- 持续性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的
3.破环ACID的可能:
- 多个事务并发运行时,不同事务的操作交叉执行
- 事务在运行过程中被强行停止
4.数据库恢复:
把数据库从错误状态恢复到某一已知的正确状态。
5.故障的分类:
- 事物内部的故障:只影响这个事物本身,一般是非预期的,如运算溢出、因为死锁被撤销等,解决方法是强行回滚。
- 称为事务撤销系统故障(软故障):造成系统停止运转的任何事件,使得系统重新启动。影响正在运行的所有事务,但不破坏数据库。
- 介质故障(硬故障):指外存故障,如磁盘损坏
- 计算机病毒
6.数据库恢复技术的实现:
建立冗余文件(后援副本)、登记日志文件。
7.数据转储:
- 静态转储:系统中无运行事务时进行的转储,转储期间不允许任何事务执行。 优点:得到的一定是一个数据一致性的副本 缺点:降低了数据库的可用性
- 动态转储:转储和用户事务可以并发执行 优点:系统可用性较好 缺点:转储得到的副本不一定一致,因此必须建立日志文件等级转储期间各事务对数据库的修改活动
- 海量转储:每次转储整个数据库,恢复更方便
- 增量转储:每次只转储上一次转储后更新过的数据,恢复较复杂
7.登记日志文件:
用来记录事务对数据库操作的文件。
8.登记日志文件主要记录啥?
- 事务的开始。
- 事务的结束。
- 事务的操作。
- 事务的标识。
- 事务的操作对象。
- 事务的操作类型。
- 操作对象之前的值。
- 操作对象之后的值。
9.登记日志文件原则:
- 按事务的执行的时间顺序记录
- 先记录在执行
10.恢复策略:
事务内部故障:
- 1.反向扫描日志文件
- 2.对所有操作进行逆操作。
- 3.如此反复直到读到事务开始标记。
系统故障:
- 1.正向扫描日志文件。
- 2.对所有在故障发生前已经commit的事务加入REDO-LIST(重做队列)
- 3.对所有没有commit标记的事务加入UNDO-LIST(撤销队列)
介质故障:
- 1.引入最新的登记日志文件以及最新的数据库后援副本
- 2.重复系统故障的操作(重做已完成,撤销未完成)
11.检查点技术: 我们知道数据库恢复子系统在恢复数据库时。需要扫描日志文件以及对事务进行重做或者撤销。因此,如果每次都要重新操作,每次都要扫描全部的日志文件。很浪费时间。为了解决这个文件,检查点技术应运而生。
12.检查点技术记录的内容:
- 1.建立检查点时所有正在执行的事务。
- 2.记录的事务中最近的日志文件地址。
13.动态维护日志文件的方法:
周期的执行、建立检查点,保存数据库状态的操作。
14.动态维护日志文件的具体步骤:
- 1.将日志缓冲区的所有日志记录写入磁盘的日志文件。
- 2.在日志文件中写入检查点。
- 3.将数据缓冲区的数据写入磁盘。
- 4.将检查点记录在日志文件的地址写入一个重新开始文件。
15.具有检查点记录的数据库恢复步骤:
- 1.在重新开始文件中找到最后一个检查点记录的文件地址。由该地址在日志文件中找到最后一个检查点。
- 2.获取最后一个检查点的全部事务记录。
- 3.建立UNDO-LIST以及REDO-LIST队列。
- 4.由检查点开始正向扫描日志文件。(将所有事务放入UNDO-LIST,如果存在事务提交,则从把该事务从UNDO-LIST移入REDO-LIST)
- 5.REDO-LIST的所有事务操作重做。UNDO-LIST的所有事务操作撤销。
16.数据库镜像:
由数据库自动COPY数据保存在另外的磁盘中。一旦出现介质故障则用数据库镜像继续使用。