一、事务
事务在数据库管理系统对的运行管理功能中发挥着巨大的作用,是并发控制和故障恢复的重要基础理论。
1.1 什么是事务?
事务是指用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。在关系数据库系统中,一个事务可以是一条SQL语句,也可以是一组SQL语句。
我们要知道事务是恢复和并发控制中功能语句的基本单位。
1.2 事务的特性(ACID)
事务具有四个特性:
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持续性(Durability)
这四个特性也简称为ACID特性
1.2.1 原子性
事务是数据库的逻辑工作单位,事务中包括的各操作要么都做,要么都不做
1.2.2 一致性
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
因此当数据库中只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,系统将事务中对数据库的所有已完成的操作全部撤消,回退到事务开始时的一致状态。
一致性与原子性实例:
银行转帐:从帐号A中取出一万元,存入帐号B。
定义一个事务,该事务包括两个操作
A B
A=A-1
B=B+1
以上这两个操作要么全做,要么全不做
全做或者全不做,数据库都处于一致性状态。
如果只做一个操作,数据库就处于不一致性状态。
1.2.3 隔离性
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
A B
1 R(A)=16
2 R(A)=16
3 W(A)=A-1,A=15
4 W(A)=A-2,A=14
1.2.4 持续性
持续性指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
1.3 事务控制语句
根据事务的ACID特定,如Oracle提供了如下一组语句对事务进行控制
(1)SET TRANSACTION
设置事务的属性。
(2)SET CONSTRAINS
在当前事务中设置约束模式。约束模式是指在事务中修改数据时,数据库中的约束是立即应用于数据,还是将约束推迟到当前事务结束后应用。
(3)SAVEPOINT
在事务中建立一个存储点。当事务处理发生异常而回滚事务时,可指定事务回滚到某存储点,然后从该存储点重新执行。
(4)RELEASE SAVEPOINT
删除一个存储点。
(5)ROLLBACK
回滚事务,即取消对数据库所做的任何修改。
(6)COMMIT
提交事务,即把事务中对数据库的修改进行永久保存。
二、 数据库的恢复技术
2.1 故障的种类
数据库系统中可能发生各种各样的故障,破坏事务原子性和引起数据库错误的原因很多,大致可以分为以下4类。
事务内部的故障
它是指由于事务没有达到预期的终点,导致数据库可能处于一种不正确的状态。
系统故障
系统故障(通常称为软故障,Soft Crash)是指在造成系统停止运转的任何事件(如硬件故障、操作系统错误、DBMS代码错误、突然停电等)的影响下,使正在运行的事务都以非正常的方式终止,从而引起的内存信息丢失,但未破坏外存中的数据,致使系统需要重新启动。
介质故障
系统故障常称为软故障(Soft Crash),介质故障称为硬故障(Hard Crash)。硬故障指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。这类故障比前两类故障发生的可能性小得多,但破坏性最大。
这类故障的恢复需要装入数据库发生介质故障前某个时刻的数据副本,重做自此时开始的所有成功事务,将这些事务已提交的结果重新记入数据库中
计算机病毒
计算机病毒是一种人为的故障或破坏,是一些恶作剧者研制的一种计算机程序。这种程序与其他程序不同,它像微生物学所称的病毒一样可以繁殖和传播,并造成对计算机系统包括数据库的危害。数据库一旦被破坏,仍要求用恢复技术对数据库加以恢复。
总结各类故障,对数据库的影响有两种可能性。一是数据库本身被破坏。二是数据库没有破坏,但数据可能不正确,这是因为事务的运行被非正常终止造成的。
2.2 数据转储与恢复
数据库若要成功地进行恢复,备份的过程中必须涉及的一个关键问题即如何建立冗余数据。建立冗余数据最常用的技术是数据转储和日志文件。通常在一个数据库系统中,这两种方法是一起使用的。
2.2.1 数据转储
所谓转储即DBA(数据库管理员)定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。
2.2.2 转储方法
静态转储与动态转储
海量转储与增量转储
2.2.3 静态及动态转储
什么是静态转储?
在系统中无运行事务时进行转储,转储开始时数据库处于一致性状态,转储期间不允许对数据库的任何存取、修改活动。
优点: 实现简单。
缺点: 转储必须等用户事务结束;新的事务必须等转储结束;降低了数据库的可用性。
利用静态转储副本进行恢复:
什么是动态转储?
转储操作与用户事务并发进行,转储期间允许对数据库进行存取或修改。
优点: 不用等待正在运行的用户事务结束;不会影响新事务的运行。
缺点: 不能保证副本中的数据正确有效。
2.2.4 日志文件
日志文件是用来记录事务对数据库的更新操作的文件。不同数据库系统采用的日志文件格式并不完全一样,但是日志的功能是相同的。日志文件在数据库恢复中都起着非常重要的作用。可以用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。
当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤消处理。这样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态。