10.1事务的基本概念
-
事物
事务是用户定义的一个数据库操作序列,这些操作要么不做要么全做,是一个不可分割的工作单位
事务通常是以BGEIN TRANSACTION开始,以COMMIT或ROOLBACK结束,COMMIT表示提交,即提交事务的所有操作。将食物中所有对数据库的更新写回道磁盘上的物理数据库中去 ,ROOLBACK表示回滚,系统将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态。 -
事务的ACID特性
事务具有4个特性:原子性、一致性、隔离性、持续性,简称ACID特性
10.2 数据库恢复概述
略
10.3 故障的种类
10.3.1 事务内部的故障
事务内部的故障更多的是非预期的,是不能由应用程序处理的。事务故障仅指这类非预期的故障。撤销该事务对数据库作出的修改称为事务撤销
10.3.2 系统故障
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。
恢复子系统必须在系统重新启动时让所有非正常终止的事务回滚,强行撤销所有未完成的事务。
恢复子系统除需要撤销所有未完成的事务,还需要重做所有已提交的事务,保持数据库的一致性。
各类故障对数据库的影响有两种可能,一是数据库本身被破坏,二是数据库没有被破坏,但数据可能不正确
恢复的基本原理概括来说就是——冗余
10.4 恢复的实现技术
建立数据库最常用的技术是数据转储和登记日志文件
10.4.1 数据转储
数据转储就是数据库管理员定期将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程。称为后备副本,但重装后被副本只能将数据库恢复到转储时的状态。
静态转储:在系统中无事务时进行的转储操作,开始时数据库处于一致性状态,转储期间不允许对数据库的任何存取、修改活动,静态转储得到的一定是一个数据一致性的副本
动态转储:是指转储期间允许对数据库进行操作,,转储和用户事务可以并发执行,转储结束后不能保证数据的一致性。因此转储期间需要使用日志文件来记录操作,副本加日志文件就能把数据库的某一时刻状态记录下来
转储的4种方法:动态海量转储、动态增量转储、静态海量转储、静态增量转储
10.4.2 登记日志文件
- 日志文件的格式和内容
日志文件是用来记录事务对数据库的更新操作的问价,日志文件需要登记的内容有
- 事务的开始标记
- 事务的结束标记
- 事务的所有更新操作
每个日志记录的内容有:
- 事务标识
- 操作的类型
- 操作的对象
- 更新前的旧数值
- 更新后的新数值 - 日志文件的作用
- 事务故障恢复和系统故障恢复必须用日志问价
- 在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地回复数据库
- 在静态转储方式中也可以建立日志文件,当数据库毁坏后可重新装入后援副本吧数据库恢复到转储结束时刻的正确状态,然后利用日志文件把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理
- 登记日志文件
- 为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:
- 登记的次序严格按照并发事务执行的时间次序
- 必须先写日志文件,后写数据库
- 为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:
10.5 数据恢复策略
已提交的重做,未提交的回滚
10.5.1 事务故障的恢复
步骤:
- 反向扫描日志文件,查找该事物的更新操作
- 对该事务的更新操作执行逆操作,即当日志记录中“更新前的值“写入数据
- 继续反向扫描日志文件,查找该事物的其他更新操作,并做相同处理
- 如此处理,知道此事务的开始标记
10.5.2 系统故障的恢复
步骤:
- 正向扫描日志文件,找出在故障发生前已经提交的事务,将其标记计入重做队列,同时找出故障发生时尚未完成的事务,将其标记计入撤销队列
- 对撤销队列中的事务进行撤销
- 对重做队列中的事务进行重做
10.5.3 介质故障恢复
重装数据库,恢复到最后一次转储的一致性状态,根据最近一次的日志文件重做已完成的事务
10.6 具有检查点的恢复技术
在日志文件中增加一种新的记录——检查点记录,其中包括建立检查点时刻所有正在执行的事务和这些事物最近一个日志记录的地址
使用检查点方法可以改善恢复效率
10.7 数据库镜像
略