本章以及下一章的并发控制都是关于事务处理技术的。
事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元。
事务处理技术主要包括
- 数据库恢复技术
- 并发控制技术(下一章)
一、事务的基本概念
1. 事务
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
一个程序包含多个事务。
事务最经典也经常被拿出来说例子就是转账了。
假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。
万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。
事务的开始和结束可以由用户显示控制,在SQL中,定义事务的语句有3条
BEGIN TRANSACTION;
: 事务以此语句开始COMMIT;
: 提交事务的所有操作RLLBACK;
:回滚事务一般以 commit 或者 rollback 结束
2. 事务的ACID特性
原子性(Atomicity)
事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。一致性(Consistency)
数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。
例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的.隔离性(Isolation)
一个事务的执行不能被其他事务干扰,即一个事务的内部操作即使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰持久性(Durability)
一旦事务提交,则其所做的修改将会永远保存到数据库中。接下来的操作和故障不应该对其执行结果有任何影响
3. 事务的ACID特性遭到破坏的因素
事务时恢复和并发控制的基本单位,保证事务ACID特性是事务管理的重要任务,事务ACID特性可能遭到破坏的因素有:
- 多个事务并发执行,相互干扰
- 事务在运行过程中被强行终止
二、数据库恢复技术作用
数据库恢复技术就是把数据库从错误状态恢复到某一已知的正确状态。
数据恢复技术是衡量系统性能优劣的重要指标
三、故障的种类
1. 事务内部的故障
事务内部的故障更多是非预期的、不能由应用程序处理的故障。一般我们所说的事务故障都是指这类非预期故障。
事务故障意味着事务没有到达预期的终点(commit 或者 rollback)因此,数据库可能处于不正确的状态。
恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何对数据库的修改。这类恢复操作称为 事务撤销 UNDO
2. 系统故障
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。
例如,特定类型的硬件错误(CPU故障) 、操作系统故障、DBMS代码错误、系统断电等。这类故障影响正在运行的所有事务,但不破坏数据库。此时主存内容,尤其是数据库缓冲区 中的内容都被丢失,所有运行事务都非正常终止。发生系统故障时,一些 尚未完成的事务的结果可能已送入物理数据库,从而造成数据库可能处于不正确的状态。为保证数据库的一致性,需要清除这些事务对数据库的所有修改。
所以系统重新启动后, 恢复子系统除需要撤销所有未完成的事务外, 还需要重做(REDO)
所有已提交的事务,以将数据库真正恢复到一致状态
3. 介质故障
系统故障称为软故障,介质故障称为硬故障。
硬故障指外存损坏,比如磁盘损坏等
4. 计算机病毒
四、恢复的实现技术
恢复的基本原理十分简单。可以用一个词来概括,冗余。就是说数据库中任何一部分被破坏或者不正确的数据都可以根据存储在系统别处的冗余数据来重建。
恢复机制涉及的两个关键问题就是:
- 如何建立冗余数据(数据转储 + 登记日志文件 logging)
- 如何利用冗余数据实现数据库恢复
1. 数据转储
数据转储就是管理员定期的将整个数据库复制到磁带、磁盘或其他存储介质上。这些备用的数据称为后备副本 backup
重装后备副本只能将数据库恢复到转储时的状态,其之后的事务操作都必须重新执行一遍才能恢复到故障发生时的状态。
转储十分耗时,不能频繁进行。
2. 登记日志文件
日志文件中需要登记的内容包括:
- 各个事务的开始标记
- 各个事务的结束标记
- 各个事务的更新操作
登记日志文件时必须遵循两条原则
- 登记的次序必须严格按照并发事务执行的时间次序
- 必须先写日志文件,后进行数据库操作