事务是一系列数据库操作,是数据库应用程序的基本逻辑单元。事务处理技术主要包括数据库恢复技术和并发控制技术。
一、事务的基本概念
1. 事务
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务和程序是两个概念。一般来讲一个程序中包含多个事务。事务的开始与结束可以由用户显式控制。如果用户没有显式定义事务,则由数据库管理系统按默认规定自动划分事务。
事务通常以BEGIN TRANSSACTION开始
COMMIT或ROLLBACK结束。COMMIT表示提交,即提交事务的所有操作,具体说是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。
2. 事务的ACID特性
- 原子性
事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。 - 一致性
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。一致性与原子性是密切相关的。 - 隔离性
一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的书籍对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 - 持续性
持续性也称为永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。事务是恢复和并发控制的基本单位。保证事务ACID特性是事务的重要任务。它的特性遭到破坏的因素有:
1)多个事务并行运行,不同事务的操作交叉执行。
解决:数据库管理系统必须保证多个事务的交叉运行不影响这些事务的原子性。
2)事务在运行过程中被强行停止。
解决:数据库管理系统必须保证被强行终止的事务对数据库和其他事务没有任何影响。
二、数据库恢复概述
数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(也称为一致状态或完整状态)的功能,这就是数据库的恢复。
恢复子系统是数据库管理系统的一个重要组成部分,而且相当庞大,常常占整个系统代码的10%以上。
数据库系统所采用的恢复技术是否行之有效,不仅对系统的可靠程度起着决定性作用,而且对系统的运行效率也有很大影响,是衡量系统性能优劣的重要指标。
三、故障的种类
1. 事务内部的故障
事务内部的故障有的是可以通过事务程序本身发现的。事务内部更多的故障是非预期的,是不能由应用程序处理的。如运算溢出、并发事务发生死锁而被选中撤销该事务,违反了某些完整性限制而被终止。
事务故障意味着事务没有达到预期的终点(COMMIT或显式的ROLLBACK),因此,数据库可能处于不正确状态。恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经作出的任何对数据库的修改,使得该事务好像根本没有启动一样。这类恢复操作称为事务撤销(UNDO)。
2. 系统故障
系统故障指造成系统停止运转的任何事件,使得系统要重新启动。例如CPU故障,操作系统故障,DBMS代码故障,系统断点等。这类故障影响正在运行的所有事务,所有运行事务都非正常终止,但是不破坏数据库,主存内容都被丢失。为保证数据一致性,需要清除这些事务对数据库的所有修改。
恢复子系统必须在系统重新启动时让所有非正常终止的事务回滚,强行撤销所有未完成的事务。另一方面,发生系统故障时,有些已完成的事务可能有一部分甚至全部留在缓冲区。尚未写到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失,这也会使数据库处于不一致状态,因此应将这些事务已提交的结果重新写入数据库,所有已提交的事务,以将数据库真正恢复到一致状态。
3. 介质故障
系统故障常为软故障。介质故障称为硬故障。硬故障指外存故障,如磁盘损坏等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务,这类故障发生的可能性比较小,但是破坏性最大。
4. 计算机病毒
计算机病毒是一种认为的故障或破坏,是一些恶作剧者研制的一种计算机程序,种程序与其他程序不同,它像微生物学所称的病毒一样可以繁殖和传播,并造成对计算机系统包括数据库的危害。
计算机病毒的种类很多,不同病毒有不同的特征。小的病毒只有20条指令,不到50B。大的病毒像一个操作系统,由上万条指令组成。
计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁。因此数据库一旦被破坏仍要用恢复技术把数据库加以恢复。
总结各类故障对数据库的影响有两种可能性,一是数据库本身被破坏,二是数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的。
恢复的基本原理可以用冗余来概括。就是说数据库中任何一部分被破坏或不正确的数据可以根据存储在系统别处的冗余数据来重建。