提供对事务概念的支持和事务的管理能力是DBS的重要特点之一,DBMS中的一个重要成分——事务管理器提供对事务管理的支持。故障恢复机制和并发控制机制是事务管理器的两个重要功能。

事务的概念和特性

事务
事务:访问并可能更新数据库中各种数据项的一个程序执行单元。换言之就是一个操作序列,要么全部执行,要么全部不执行。
事务是数据库恢复和并发控制的基本单位。
事务可以被显式或隐式地定义:
显式定义
SQL语句 功能 BEGIN TRANSACTION 事务开始 COMMIT TRANSACTION 事务提交 ROLLBACK TRANACTION 事务撤销 隐式定义
当不作显示定义时,每一条SQL语句即被当作一个事务执行。
事务的特性——ACID
原子性(Atomicity)
事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
一致性(Consistency)
事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
这里的一致性指的是语义层面上的,是由用户定义的。一致性和其他三个特性的关系类似于目的与手段的。
隔离性(Isolation)
一个事务的执行不能受其他事务的干扰。事务执行的中间结果不会对其他事务产生影响。
持续性(Durability)
若事务已提交,它对数据库中数据的改变应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。
事物特性遭到破坏的原因
多个事务并发执行,若控制不当,可能破坏隔离性。
事务执行过程被强行中止,可能破坏原子性与一致性。
数据库恢复

故障
故障分类
事务内部的故障
可预期的故障:由应用程序处理
不可预期的故障(如运算溢出、死锁)
问题:事务未到达终点,数据库处于不正常状态
系统故障
系统停止运转,所有活动事务都异常中止;系统需要重新启动
可能造成数据不一致
已完成的事务,尚未或部分写盘,
未完成的事务,部分写盘
介质故障
你盘坏了
病毒破坏
故障的前因后果
发生原因:硬件故障、软件错误、误操作、恶意破坏
后果:数据库被破坏或数据处于不一致状态
数据库恢复的实现技术
数据库恢复:DBMS把数据库从错误状态恢复到某一已知的正确状态的功能。
恢复原理:利用冗余
实现技术:数据转储、登记日志文件。
数据转储
定期将数据库复制到另一个存储设备。转储出来的文件称为后备副本或后援副本。
根据转储时数据库是否可以处理事务,分为动态转储和静态转储
根据是否转储全部文件,分为海量转储和增量转储
日志
日志文件是用来记录事务对数据库的更新操作的文件。
日志文件主要有两种格式:以记录为单位和以数据库为单位。
以记录为单位
日志内容:各个事务的开始、所有更新操作、结束
事务的开始、结束以及每个更新操作均以日志记录的形式保存在日志文件中。
日志记录的内容有:

以数据块为单位
日志内容:事务标识,更新前&后的数据块
日志的作用:
动态转储与恢复
各种故障恢复
登记日志的原则:
登记次序与并发事务执行的时间次序一致
先写日志原则:写完日志再写数据
日志文件需要更高频率的转储。
恢复的具体策略

事务故障的恢复
反向扫描日志文件,查找该事务的更新操作
对更新操作执行逆操作
继续逆向扫描,对所有的更新操作做同样处理
遇到该事务的开始标志,扫描结束
系统故障的恢复
内存缓冲区何时写盘
(数据或日志)缓冲区满,写盘
遇到COMMIT,往硬盘写日志
遇到CHECKPOINT(检查点),写日志和数据
基本恢复思路
撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。
以下两种恢复方法,差别在于重做事务的范围。
不带检查点的恢复方法
生成REDO和UNDO序列
正向(从头)扫描日志文件
故障发生前已提交的事务,将其事务标识放入REDO队列
故障发生前未提交的事务,将其事务标识放入UNDO队列
逆向撤销UNDO序列
正向重做REDO序列
检查点
检查点:数据库正常运行的一个时间标志
在检查点时刻,系统将强行将缓冲区内容写盘
重新开始文件用于记录检查点在日志文件中的位置
检查点可以自动或人工设置
检查点记录的内容
检查点时刻所有正在执行的事务清单
这些事务最近一个日志记录的地址
检查点执行的动作及其顺序
缓冲区中的日志写盘
在日志文件中,增加一个检查点记录
缓冲区中的数据写盘
重新开始文件新增一行,指示检查点在日志文件中的位置
带检查点的恢复方法
生成REDO和UNDO序列
在重新开始文件中,找最后一个检查点在日志中的位置
在日志中取最后一个检查点,得到活动事务清单放入UNDO_LIST
从检查点开始,正向扫描日志文件,遇到新开始事务加入UNDO_LIST,遇到结束的事务将其从UNDO_LIST移入REDO_LIST
逆向撤销UNDO序列
正向重做REDO序列
介质故障的恢复
恢复最新的数据库备份副本
恢复日志文件副本
重做已完成的所有事务
撤销未完成的事务。
数据库镜像
DBMS根据DBA的要求,自动把数据库中全部或关键数据复制到另一块磁盘,此副本即为数据库镜像(Mirror)。
DBMS会自动维持二者一致性。当主数据库更新时,镜像中的数据也会更新。
镜像可以提高系统的可靠性,还可以用于并发操作。
点击“阅读原文”,访问我的个人博客“于小江的百宝箱”,浏览更多数据库笔记!
下期预告:事务管理(二):并发控制
并发控制及其必要性
封锁和封锁协议
并发调度的可串行化
多粒度封锁




