《系统实现技术课件》由会员分享,可在线阅读,更多相关《系统实现技术课件(79页珍藏版)》请在金锄头文库上搜索。
1、系统实现技术系统实现技术第七章第七章系统实现技术本章内容本章内容本章主要涉及实现本章主要涉及实现DBMS时的具体技术。时的具体技术。系统目录系统目录:存放数据库结构的描述。:存放数据库结构的描述。事务:所有对数据库的操作,都要以事务作为一个整体单事务:所有对数据库的操作,都要以事务作为一个整体单位来执行位来执行或撤销。或撤销。在在DBS运行时,运行时,DBMS要对要对DB进行监控,以保证整个系统的正常进行监控,以保证整个系统的正常运转,防止数据意外丢失和不一致数据的产生。运转,防止数据意外丢失和不一致数据的产生。DBMS对对DB的监控,的监控,称为数据库的管理,有时也称为数据库的保护。对数据库
2、的管理主要称为数据库的管理,有时也称为数据库的保护。对数据库的管理主要通过四个方面实现:通过四个方面实现:数据库的恢复数据库的恢复并发控制并发控制完整性控制完整性控制安全性控制安全性控制每一方面构成了每一方面构成了DBMS的一个子系统。的一个子系统。系统实现技术71系统目录系统目录系统目录系统目录(SystemCatalog)是任何通用)是任何通用DBMS的的核心。核心。系统目录本身就是一个系统目录本身就是一个“微型数据库微型数据库”,其主,其主要功能是存储要功能是存储DBMS管理的数据库的定义或描述。管理的数据库的定义或描述。这类信息被称为这类信息被称为元数据(元数据(Metadata),主
3、要包括),主要包括数据库三级结构、两级映象的定义。数据库三级结构、两级映象的定义。系统实现技术 图1-15 访问数据库的主要步骤 数据字典数据字典系统实现技术71关系关系DBMS的目录的目录关系关系DBMS的系统目录存储下列信息:的系统目录存储下列信息:(1)关系名,属性名,属性域(数据类型);)关系名,属性名,属性域(数据类型);(2)各种约束,主键,辅助键,外键,空值)各种约束,主键,辅助键,外键,空值非空值;非空值;(3)视图的外部级描述,存储结构和索引的内部)视图的外部级描述,存储结构和索引的内部级描述;级描述;(4)安全性和授权规则;)安全性和授权规则;(5)数据完整性规则。)数据完
4、整性规则。系统实现技术在关系在关系DBMS中,中,系统目录被组织成关系系统目录被组织成关系(表格),(表格),例如例如Oracle系统中,系统目录由系统中,系统目录由42个关系组个关系组成成。DBMS可以对目录执行查询、修改和维护操作可以对目录执行查询、修改和维护操作;而用户一般只能执行查询操作不能进行修改或;而用户一般只能执行查询操作不能进行修改或维护。维护。系统实现技术图图7.1所示的是教学数据库三个关系的定义存储在所示的是教学数据库三个关系的定义存储在目录中的形式。系统目录中的关系名为目录中的形式。系统目录中的关系名为REL_AND_ATTR_CATALOG,存储用户关系中属性的性质,存
5、储用户关系中属性的性质,包括数据类型、主键、外键等。这个关系的主键包括数据类型、主键、外键等。这个关系的主键为(为(REL_NAME,ATTR_NAME)系统实现技术图图7.1示的是教学数据库三个关系的定义存储在目示的是教学数据库三个关系的定义存储在目录中的形式。系统目录中的关系名为录中的形式。系统目录中的关系名为REL_ANDATTR_CATALOG,存储用户关系中属性的性质,存储用户关系中属性的性质,包括数据类型、主键、外键等。这个关系的主键包括数据类型、主键、外键等。这个关系的主键为(为(REL_NAME,ATTR_NAME)系统实现技术索引信息可用目录关系索引信息可用目录关系RELAT
6、ION_INDEXES表表示,如图示,如图72(b)所示,主键为)所示,主键为(INDEX_NAME,MEMBER_ATTR)。)。视图的定义可用两个目录关系实现,如图视图的定义可用两个目录关系实现,如图72(C)所示。)所示。系统实现技术至此,我们介绍了系统目录中的一些基本的信息存储方式。至此,我们介绍了系统目录中的一些基本的信息存储方式。日前,在大多数日前,在大多数DBMS的系统日录中,还存储了数据库运的系统日录中,还存储了数据库运行的信息行的信息,例如每个基本关系中元组的数目和各个属性的,例如每个基本关系中元组的数目和各个属性的平均访问次数,索引的层次数等。这些信息必须由平均访问次数,索
7、引的层次数等。这些信息必须由DBMS经常更新,以反映数据库的使用状况。经常更新,以反映数据库的使用状况。因此,系统目录对因此,系统目录对任何一个任何一个DBMS而言,都是十分重要的组成部分。而言,都是十分重要的组成部分。有的系统,甚至把系统目录数据字典系统从有的系统,甚至把系统目录数据字典系统从DBMS中分中分离出来,成为一个独立的数据字典系统,并使之成为一个离出来,成为一个独立的数据字典系统,并使之成为一个比比DBMS还要高级的用户与系统之间的接口,用户对数据还要高级的用户与系统之间的接口,用户对数据库的所有操作都要通过数据字典实现,而不直接与库的所有操作都要通过数据字典实现,而不直接与DB
8、MS接触。接触。系统实现技术7.2事务事务7.2事务举例事务举例从用户观点看,对数据库的某些操作应是一个整从用户观点看,对数据库的某些操作应是一个整体,也就是一个独立的工作单元,不能分割。体,也就是一个独立的工作单元,不能分割。例如,客户认为电子资金转账(从账目例如,客户认为电子资金转账(从账目A转一笔款转一笔款到账号到账号B)是一个独立的操作,而在)是一个独立的操作,而在DBS中这是由中这是由几个操作组成的。显然,这些操作要么全都发生,几个操作组成的。显然,这些操作要么全都发生,要么由于出错(可能账号要么由于出错(可能账号A二透支)而全不发生。二透支)而全不发生。保证这一点非常重要,我们决不
9、允许发生下面的保证这一点非常重要,我们决不允许发生下面的事情:在账号事情:在账号A透支情况下继续转账;或者从账号透支情况下继续转账;或者从账号A转出了一笔钱,而不知去向未能转人账号转出了一笔钱,而不知去向未能转人账号B中中.这这样就引出了事务的概念。样就引出了事务的概念。系统实现技术7.2.1 7.2.1 事务的概念事务的概念事务事务是一个是一个操作序列操作序列。这些操作要么什么都做,这些操作要么什么都做, 要么都不做,是一个不可分割的工作单位。要么都不做,是一个不可分割的工作单位。是构成单一逻辑工作单元的操作集合是构成单一逻辑工作单元的操作集合;DBS的主要意图是执行的主要意图是执行“事务事
10、务”;相当于操作系统环境中的相当于操作系统环境中的“进程进程”概念。概念。一个程序的执行可通过若干事务的执行序列来完成。一个程序的执行可通过若干事务的执行序列来完成。事务是不能嵌套的,可恢复的操作必须在一个事务事务是不能嵌套的,可恢复的操作必须在一个事务的界限内才能执行的界限内才能执行.系统实现技术事务的开始与结束可以由用户显式控制。如果用户没事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由有显式地定义事务,则由DBMS按缺省规定自动划分按缺省规定自动划分事务。事务。在在SQL语言中,定义事务的语句有三条:语言中,定义事务的语句有三条:BEGINTRANSACTION:事务
11、开始事务开始COMMIT:提交事务的所有操作提交事务的所有操作,即将事务中所有即将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束事务正常结束ROLLBACK:回滚,即在事务运行的过程中因发回滚,即在事务运行的过程中因发生某种故障而不能继续执行,通过生某种故障而不能继续执行,通过ROLLBACK对对数据库的所有已完成的操作全部撤消,滚回到事数据库的所有已完成的操作全部撤消,滚回到事务开始时的状态务开始时的状态ROLLBACK语句保证数据库处于正确的状态语句保证数据库处于正确的状态系统实现技术事务举例的代码事务举例的代码T:BEGIN
12、TRANSACTION;Read(A););A:=A-50;write(A););if(A0)ROLLBACK;elseread(B););B:=B+50;write(B););COMMITE;系统实现技术1原子性原子性(Atomicity):事务是数据库的逻辑工作事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。单位,事务中包括的诸操作要么都做,要么都不做。由由DBMS的事务管理子系统来实现。的事务管理子系统来实现。 2一致性一致性(Consistency):事务执行的结果必须是事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。使数据库从一个一致性状态变到另
13、一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,系统将事务中对数据库的所有已完成就被迫中断,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始时的一致状态。成的操作全部撤消,滚回到事务开始时的一致状态。由由DBMS的完整性子系统执行测试任务。的完整性子系统执行测试任务。7.2.2事务的特性事务的特性(ACID)系统实现技术3隔离性隔离性(Isolation):一个事务的执行不能被一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,的数据
14、对其他并发事务是隔离的,并发执行并发执行的的各个事务之间不能互相干扰。各个事务之间不能互相干扰。隔离性是由隔离性是由DBMS的并发控制子系统实现的。的并发控制子系统实现的。 4持续性持续性(Durability):事务完成之后,它对事务完成之后,它对于系统的影响是永久性的。该修改即使出现系于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。统故障也将一直保持。事务的持久性由事务的持久性由DBMS的恢复管理子系统实现的。的恢复管理子系统实现的。系统实现技术T:BEGINTRANSACTION;Read(A););A:=A-50;write(A););if(A0)ROLLBACK;else
15、read(B););B:=B+50;write(B););COMMITE;原子性原子性一致性一致性隔离性隔离性持久性持久性一旦事务成功完成,该事务对数据库施加的所有更新都是永久的。也就是计算机系统一旦事务成功完成,该事务对数据库施加的所有更新都是永久的。也就是计算机系统的故障将会导致内存的数据丢失,但已写人磁盘的数据决不会丢失。的故障将会导致内存的数据丢失,但已写人磁盘的数据决不会丢失。系统实现技术为了精确地描述事务的工作,我们建立一个抽象为了精确地描述事务的工作,我们建立一个抽象的事务模型,事务的状态变迁图如图的事务模型,事务的状态变迁图如图74所示。所示。系统实现技术事务是恢复和并发控制的
16、基本单位。保证事务事务是恢复和并发控制的基本单位。保证事务ACID特性是事务处理的重要任务。事务特性是事务处理的重要任务。事务ACID特性可能遭特性可能遭到破坏的因素有:到破坏的因素有:1.多个事务并行运行时,不同事务的操作交叉执行。多个事务并行运行时,不同事务的操作交叉执行。要求数据库管理系统必须保证多个事务的交叉运行要求数据库管理系统必须保证多个事务的交叉运行不影响这些事务的原子性不影响这些事务的原子性.(并发控制机制并发控制机制)2.事务在运行过程中被强行停止事务在运行过程中被强行停止:要求数据库管理系统必须保证被强行终止的事务对要求数据库管理系统必须保证被强行终止的事务对数据库和其它事
17、务没有任何影响。数据库和其它事务没有任何影响。(恢复机制恢复机制) 对事务的进一步研究对事务的进一步研究系统实现技术尽管数据库系统中采取了各种保护措施来防止数据库的安尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行,但全性和完整性被破坏,保证并发事务的正确执行,但: :计算机系统中硬件的故障计算机系统中硬件的故障软件的错误软件的错误操作员的失误以及恶意的破坏操作员的失误以及恶意的破坏 这些故障时有发生这些故障时有发生, ,轻则造成运行事务非正常中断,影轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中响数据库中数据的正确
18、性,重则破坏数据库,使数据库中全部或部分数据丢失,因此全部或部分数据丢失,因此数据库管理系统(恢复子系统)数据库管理系统(恢复子系统)必须具有把数据库从错误状态恢复到某一已知的正确状态必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能(亦称为一致状态或完整状态)的功能. .这就是数据库的恢复。这就是数据库的恢复。7.3数据库恢复概述数据库恢复概述系统实现技术7.3.1 7.3.1 故障类型故障类型事务故障事务故障系统故障系统故障介质故障介质故障计算机病毒计算机病毒系统实现技术一、事务内部的故障一、事务内部的故障预期故障预期故障(即可通过事务程序本身发现即可通过
19、事务程序本身发现,如下面转帐事务的例子如下面转帐事务的例子.例如:银行转帐事务把一笔金额从一个帐户甲转给另一个帐户例如:银行转帐事务把一笔金额从一个帐户甲转给另一个帐户乙。乙。BEGINTRANSACTION;Read(A););A:=A-50;write(A););if(A0)ROLLBACK;elseread(B););B:=B+50;write(B););COMMITE;故障的种类故障的种类系统实现技术非预期故障非预期故障事务内部更多的故障是非预期的,不能由应用程序事务内部更多的故障是非预期的,不能由应用程序处理。如运算溢出、并发事务发生死锁而被选中撤处理。如运算溢出、并发事务发生死锁而
20、被选中撤消该事务、违反了某些完整性限制等。消该事务、违反了某些完整性限制等。后面所提到后面所提到的事务故障仅指这类非预期的故障。的事务故障仅指这类非预期的故障。事务故障意味着事务没有达到预期的终点事务故障意味着事务没有达到预期的终点,因此,因此,数据库可能处于不正确状态。恢复程序要在不影响数据库可能处于不正确状态。恢复程序要在不影响其它事务运行的情况下,强行回滚该事务,撤消该其它事务运行的情况下,强行回滚该事务,撤消该事务已经作出的任何对数据库的修改事务已经作出的任何对数据库的修改,此类恢复操此类恢复操作称为事务撤消作称为事务撤消(UNDO)。)。故障的种类故障的种类系统实现技术二、系统故障二
21、、系统故障(软故障(软故障(SoftCrash)) 系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。如如:特定类型的硬件错误(特定类型的硬件错误(CPU故障)故障)操作系统故障操作系统故障DBMS代码错误代码错误突然停电突然停电出现此类故障出现此类故障,主存内容主存内容(尤其是内存中的数据库缓冲区的内容都被丢尤其是内存中的数据库缓冲区的内容都被丢失,所有运行事务都非正常终止。可能会有失,所有运行事务都非正常终止。可能会有:一些尚未完成的事务的结果已送入物理数据库一些尚未完成的事务的结果已送入物理数据库有些已完成的事务可能有
22、一部分甚至全部留在缓冲区,尚未写回到有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中磁盘上的物理数据库中从而破坏了数据库的一致性,恢复子系统在系统重新启动时将会针对从而破坏了数据库的一致性,恢复子系统在系统重新启动时将会针对所有非正常终止的事务回滚所有非正常终止的事务回滚:强行撤消(强行撤消(UNDO)所有未完成事务所有未完成事务重做(重做(Redo)所有已提交的事务所有已提交的事务故障的种类故障的种类影响正在运行的所有事影响正在运行的所有事务,但不破坏数据库务,但不破坏数据库系统实现技术三、介质故障三、介质故障(硬故障(硬故障(HardCrash))硬故障指外存
23、故障,如磁盘损坏、磁头碰撞,瞬时硬故障指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。这类故障将破坏数据库或部分数据强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。库,并影响正在存取这部分数据的所有事务。这类这类故障比前两类故障发生的可能性小得多,但破坏性故障比前两类故障发生的可能性小得多,但破坏性最大最大。四、计算机病毒四、计算机病毒计算机病毒是具有破坏性、可以自我复制的计算机计算机病毒是具有破坏性、可以自我复制的计算机程序。计算机病毒已成为计算机系统的主要威胁,程序。计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁。自然也是数据库系
24、统的主要威胁。因此数据库一旦因此数据库一旦被破坏仍要用恢复技术把数据库加以恢复。被破坏仍要用恢复技术把数据库加以恢复。故障的种类故障的种类系统实现技术总结各类故障,对数据库的影响有两种可能性:总结各类故障,对数据库的影响有两种可能性:一是数据库本身被破坏。一是数据库本身被破坏。二是数据库没有破坏,但数据可能不正确,这是因为二是数据库没有破坏,但数据可能不正确,这是因为事务的运行被非正常终止造成的事务的运行被非正常终止造成的。恢复的基本原理:恢复的基本原理:冗余冗余。即根据存储在系统别处的冗余数据来重建或恢复数据即根据存储在系统别处的冗余数据来重建或恢复数据库中任何一部分被破坏的或不正确的数据。
25、库中任何一部分被破坏的或不正确的数据。故障的种类故障的种类系统实现技术恢复机制涉及的两个关键问题是:恢复机制涉及的两个关键问题是:(1)如何建立冗余数据;如何建立冗余数据;(2)如何利用这些冗余数据实施数据库恢复。如何利用这些冗余数据实施数据库恢复。建立冗余数据最常用的技术建立冗余数据最常用的技术:(1)定期对数据库进行定期对数据库进行复制或转储复制或转储(dump)(2)建立建立“日志日志”文件文件(3)恢复恢复通常在恢复时通常在恢复时,两种方法一起使用。两种方法一起使用。7.3.2恢复的实现技术恢复的实现技术系统实现技术一、含义一、含义转储转储:DBA定期地将整个数据库复制到磁带或另定期地
26、将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。本称为后备副本或后援副本。当数据库遭到破坏后当数据库遭到破坏后:1.将后备副本重新装入将后备副本重新装入,数据库恢复到转储时的状态,数据库恢复到转储时的状态2.重新运行自转储以后的所有更新事务重新运行自转储以后的所有更新事务,恢复到故障发生恢复到故障发生时的状态时的状态1.数据转储数据转储系统实现技术1.Ta:系统停止运行事务,进行数据库转储;系统停止运行事务,进行数据库转储;2.Tb:转储完毕,得到转储完毕,得到Tb时刻的数据库一致性副本时刻的数据库一致性副
27、本3.Tf:系统发生故障。系统发生故障。恢复数据库的过程恢复数据库的过程:1.由由DBA重装数据库后备副本,将数据库恢复至重装数据库后备副本,将数据库恢复至Tb时刻时刻的状态的状态2.重新运行自重新运行自Tb时刻至时刻至Tf时刻的所有更新事务,这样就时刻的所有更新事务,这样就把数据库恢复到故障发生前的一致状态。把数据库恢复到故障发生前的一致状态。问题:问题:1.转储是十分转储是十分耗费时间耗费时间和资源的,不能频繁进行。和资源的,不能频繁进行。DBA应该根据数据库使用情况确定一个适当的转储周期。应该根据数据库使用情况确定一个适当的转储周期。2.系统需要系统需要停止运行事务停止运行事务1.数据转
28、储数据转储系统实现技术1.数据转储数据转储分类分类*静态转储静态转储*动态转储动态转储*海量转储海量转储*增量转储增量转储按转储方式分按转储方式分按转储量分按转储量分系统实现技术1.数据转储数据转储静态转储静态转储静态转储是在系统中静态转储是在系统中无运行事务无运行事务时进行的转储操作。时进行的转储操作。即转储操作开始的时刻,数据库处于一致性状态,即转储操作开始的时刻,数据库处于一致性状态,而转储期间不允许(或不存在)对数据库的任何存而转储期间不允许(或不存在)对数据库的任何存取、修改活动。取、修改活动。静态转储得到的静态转储得到的一定是一个数据一致性的副本一定是一个数据一致性的副本。静态转储
29、简单,但必须等待正运行的用户事务结束静态转储简单,但必须等待正运行的用户事务结束才能进行,而且新的事务也必须等待转储结束才能才能进行,而且新的事务也必须等待转储结束才能执行。这会执行。这会降低数据库的可用性降低数据库的可用性。系统实现技术1.数据转储数据转储动态转储动态转储动态转储是指转储期间允许对数据库进行存取或修改。即动态转储是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。转储和用户事务可以并发执行。动态转储不用等待正在运行的用户事务结束,也动态转储不用等待正在运行的用户事务结束,也不会影响不会影响新事务的运行。但是,转储结束时后援副本上的数据新事务的运行。但是,转储
30、结束时后援副本上的数据并不并不能保证正确有效能保证正确有效。如,在转储期间的某个时刻如,在转储期间的某个时刻Tc,系统把数据系统把数据A=100转储到磁带上,转储到磁带上,而在下一时刻而在下一时刻Td,某一事务将某一事务将A改为改为200。转储结束后,后备副本上。转储结束后,后备副本上的的A已是过时的数据了。已是过时的数据了。因此采用动态转储,必须把转储期间各事务对数据库的修改活动因此采用动态转储,必须把转储期间各事务对数据库的修改活动登记下来,登记下来,建立日志文件建立日志文件(logfile)。)。这样,后援副本加上日志文件这样,后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。就
31、能把数据库恢复到某一时刻的正确状态。系统实现技术1.数据转储数据转储转储还可以分为海量转储和增量转储两种方式:转储还可以分为海量转储和增量转储两种方式:海量转储海量转储:每次转储全部数据库每次转储全部数据库增量转储增量转储:每次只转储上一次转储后更新过的数据。每次只转储上一次转储后更新过的数据。分析分析:从恢复角度看,使用海量转储得到的后备副从恢复角度看,使用海量转储得到的后备副本进行恢复一般说来会更方便些。但如果数据库很大,本进行恢复一般说来会更方便些。但如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效。事务处理又十分频繁,则增量转储方式更实用更有效。系统实现技术2.日志文件日
32、志文件一一.日志文件的内容日志文件的内容记录事务对数据库的更新操作的文件。记录事务对数据库的更新操作的文件。以记录为单位的日志文件,需要登记的内容包括:以记录为单位的日志文件,需要登记的内容包括:每个事务的开始每个事务的开始(BEGINTRANSACTION)标记标记每个事务的结束每个事务的结束(COMMIT或或ROLLBACK)标记标记每个事务的所有更新操作每个事务的所有更新操作一个事务开始的标记、结束标记及所有的更新操作即一个事务开始的标记、结束标记及所有的更新操作即构成了日志文件中的一个日志记录。构成了日志文件中的一个日志记录。系统实现技术2.日志文件日志文件更具体一点更具体一点,每个日
33、志记录的内容主要包括:每个日志记录的内容主要包括:事务标识(标明是哪个事务)事务标识(标明是哪个事务)操作的类型(插入、删除或修改)操作的类型(插入、删除或修改)操作对象操作对象(记录内部标识记录内部标识)更新前数据的旧值(对插入操作而言,此项为空值)更新前数据的旧值(对插入操作而言,此项为空值)更新后数据的新值(对删除操作而言更新后数据的新值(对删除操作而言,此项为空值)此项为空值)系统实现技术2.日志文件日志文件二、日志文件的作用二、日志文件的作用用于进行事务故障恢复和系统故障恢复,并协助后备副本进用于进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。行介质故障恢复。具体如下
34、:具体如下:事务故障恢复和系统故障必须用日志文件事务故障恢复和系统故障必须用日志文件在动态转储方式中必须建立日志文件,后援副本和日志在动态转储方式中必须建立日志文件,后援副本和日志文件的综合才能有效地恢复数据库。文件的综合才能有效地恢复数据库。静态转储方式中,也可建立日志文件。当数据库毁坏后静态转储方式中,也可建立日志文件。当数据库毁坏后可重新装入后援副本把数据库恢复到转储结束时刻的正可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤消处理。这处理,对故障发生时尚
35、未完成的事务进行撤消处理。这样不必重新运行那些已完成的事务程序就可把数据库恢样不必重新运行那些已完成的事务程序就可把数据库恢复到故障前某一时刻的正确状态复到故障前某一时刻的正确状态,如图如图7.2所示。所示。系统实现技术2.日志文件日志文件系统实现技术2.日志文件日志文件三、登记日志文件(三、登记日志文件(logging)p 为保证数据库可恢复,登记日志文件时必须遵循:为保证数据库可恢复,登记日志文件时必须遵循:1.登记的次序严格按并发事务执行的时间次序。登记的次序严格按并发事务执行的时间次序。2.必须先写日志文件,后写数据库。必须先写日志文件,后写数据库。把对数据的修改写到数据库中和把表示这
36、个修改的日志记录写到日志文把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。故障可能发生在两个操作之间,即这两个写操件中是两个不同的操作。故障可能发生在两个操作之间,即这两个写操作只完成了一个作只完成了一个:若先写数据库修改,而在运行记录中没有登记下这个修改,则以后若先写数据库修改,而在运行记录中没有登记下这个修改,则以后就无法恢复这个修改。就无法恢复这个修改。如果先写日志,但没有修改数据库,则可以根据日志文件进行如果先写日志,但没有修改数据库,则可以根据日志文件进行REDO或者或者UNDO,不会影响数据库的正确性不会影响数据库的正确性。因此因此,要先把日志记
37、录写到日志文件中,然后再写数据库的要先把日志记录写到日志文件中,然后再写数据库的修改。这就是修改。这就是“先写日志文件先写日志文件”的原则。的原则。系统实现技术3.系统故障恢复策略系统故障恢复策略系统故障造成数据库不一致状态的原因:系统故障造成数据库不一致状态的原因:未完成事务对数据库的更新可能已写入数据未完成事务对数据库的更新可能已写入数据库库已提交事务对数据库的更新可能还留在缓冲已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。区没来得及写入数据库。系统实现技术3.系统故障恢复策略系统故障恢复策略系统的恢复步骤是:系统的恢复步骤是:1.对未完成事务进行对未完成事务进行(UNDO)
38、处理,即将日志记处理,即将日志记录中录中“更新前的值更新前的值”写入数据库。写入数据库。2.对重做队列中的各个事务进行重做对重做队列中的各个事务进行重做(REDO)处处理。即将日志记录中理。即将日志记录中“更新后的值更新后的值”写入数据写入数据库库系统故障的恢复是由系统在重新启动时自动完成系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。的,不需要用户干预。系统实现技术3.事务故障的恢复策略事务故障的恢复策略事务故障的恢复事务故障的恢复事务故障的恢复由系统自动完成,对用户透明。事务故障的恢复由系统自动完成,对用户透明。恢复过程如下恢复过程如下:1.反向扫描文件日志(即从最后向前扫描
39、日志反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。文件),查找该事务的更新操作。系统实现技术3.事务故障的恢复策略事务故障的恢复策略2.对该事务的更新操作执行逆操作。即将日志记录中对该事务的更新操作执行逆操作。即将日志记录中“更更新前的值新前的值”写入数据库写入数据库:1)若日志记录中是插入操作,则相当于做删除操作若日志记录中是插入操作,则相当于做删除操作(此时(此时“更新前的值更新前的值”为空)为空)2)若是删除操作,则做插入操作若是删除操作,则做插入操作3)若是修改操作,则用修改前值代替修改后值。若是修改操作,则用修改前值代替修改后值。3.继续反向扫描日志文件,查找该
40、事务的其他更新操作,继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。并做同样处理。4.如此处理下去,直至读到此事务的开始标记,事务故障如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。恢复完成。系统实现技术3.介质故障的恢复介质故障的恢复介质故障会导致磁盘上的物理数据和日志文件被破坏,这是介质故障会导致磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障。最严重的一种故障。恢复方法是重装数据库,然后重做已完成的事务。恢复方法是重装数据库,然后重做已完成的事务。具体操作:具体操作:1.装入最新的数据库后备副本(离故障发生时刻最近的转储副装入最新的数据库后备副本(离故障发生
41、时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态。本),使数据库恢复到最近一次转储时的一致性状态。2.装入相应的日志文件副本(转储结束时刻的日志文件副本)装入相应的日志文件副本(转储结束时刻的日志文件副本),重做已完成的事务。,重做已完成的事务。系统实现技术4.具有检查点的恢复技术具有检查点的恢复技术系统实现技术4.具有检查点的恢复技术具有检查点的恢复技术利用日志技术进行数据库恢复时,恢复子系统必须搜索日利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要志,确定哪些事务需要REDO,哪些事务需要哪些事务需要UNDO。一一般需要检查所有日志记录。这样做有两个问题
42、:般需要检查所有日志记录。这样做有两个问题:搜索整个日志将耗费大量的时间搜索整个日志将耗费大量的时间很多需要很多需要REDO处理的事务实际上已经将它们的更新操处理的事务实际上已经将它们的更新操作结果写到数据库中了,然而恢复子系统又重新执行了作结果写到数据库中了,然而恢复子系统又重新执行了这些操作,浪费时间。这些操作,浪费时间。为了解决这些问题,又发展了具有检查点的恢复技术。这为了解决这些问题,又发展了具有检查点的恢复技术。这种技术在日志文件中增加一类新的记录种技术在日志文件中增加一类新的记录-检查点记录检查点记录(checkpoint),),增加一个增加一个重新开始文件重新开始文件,并让恢复子
43、系,并让恢复子系统在登录日志文件期间统在登录日志文件期间动态地维护日志动态地维护日志。系统实现技术4.具有检查点的恢复技术具有检查点的恢复技术动态维护日志文件的方法是:动态维护日志文件的方法是:建立检查点,保存数据库状态建立检查点,保存数据库状态,这个操作反复执行。具体步骤是:这个操作反复执行。具体步骤是:将当前日志缓冲中的所有日志记录写入磁盘的日志文将当前日志缓冲中的所有日志记录写入磁盘的日志文件上。件上。在日志文件中写入一个检查点记录。在日志文件中写入一个检查点记录。将当前数据缓冲的所有数据记录写入磁盘的数据库中。将当前数据缓冲的所有数据记录写入磁盘的数据库中。把检查点记录在日志文件中的地
44、址写入一个重新开始把检查点记录在日志文件中的地址写入一个重新开始文件。文件。系统实现技术4.具有检查点的恢复技术具有检查点的恢复技术恢复子系统可以定期或不定期地建立检查点保存数据库状恢复子系统可以定期或不定期地建立检查点保存数据库状态:态:按照预定的一个时间间隔建立检查点,如每隔一小时建按照预定的一个时间间隔建立检查点,如每隔一小时建立一个检查点;立一个检查点;按照某种规则建立检查点,如日志文件已写满一半建立按照某种规则建立检查点,如日志文件已写满一半建立一个检查点。一个检查点。使用检查点可以改善恢复效率。当事务使用检查点可以改善恢复效率。当事务T在一个检查点之前在一个检查点之前提交,提交,T
45、对数据库所做的修改一定都已写入数据库,写入时对数据库所做的修改一定都已写入数据库,写入时间是在这个检查点建立之前或在这个检查点建立之时。这间是在这个检查点建立之前或在这个检查点建立之时。这样,在进行恢复处理时,没有必要对事务样,在进行恢复处理时,没有必要对事务T执行执行REDO操作。操作。系统出现故障时恢复子系统将根据事务的不同状态采取不系统出现故障时恢复子系统将根据事务的不同状态采取不同的恢复策略。如图同的恢复策略。如图7.4中:中:系统实现技术T1:在检查点之前提交,不必执行在检查点之前提交,不必执行REDO操作。操作。T2:在检查点前开始执行,检查点之后故障点之前提交。在检查点前开始执行
46、,检查点之后故障点之前提交。T4:在检查点之后开始执行,在故障点之前提交。在检查点之后开始执行,在故障点之前提交。T3:在检查点之前开始执行,在故障点时还未完成。在检查点之前开始执行,在故障点时还未完成。T5:在检查点之后开始执行,在故障点时还未完成。在检查点之后开始执行,在故障点时还未完成。检查点后提交,对数据检查点后提交,对数据库的修改可能还在缓冲库的修改可能还在缓冲区中,尚未写入数据库,区中,尚未写入数据库,需需REDO;故障发生时还未完成,故障发生时还未完成,需撤消需撤消(UNDO)系统实现技术7.4数据库的并发控制数据库的并发控制并发现象并发现象多用户数据库系统多用户数据库系统允许多
47、个用户同时使用数据库系统称多用户数据库允许多个用户同时使用数据库系统称多用户数据库系统系统,如银行数据库系统如银行数据库系统,飞机订票系统。在多用户飞机订票系统。在多用户系统中,同一时刻并行运行的事务数可达数百个。系统中,同一时刻并行运行的事务数可达数百个。并发目的并发目的串行执行事务串行执行事务事务可以串行执行,即每一时刻只有一个事务运行,事务可以串行执行,即每一时刻只有一个事务运行,其它事务必须等到该事务结束后才能运行。事务执其它事务必须等到该事务结束后才能运行。事务执行过程中可能用到的资源有:行过程中可能用到的资源有:CPU、存取物理数据存取物理数据库、库、I/O、通信道。如事务串行执行
48、,会使许多系统通信道。如事务串行执行,会使许多系统资源处于空闲状态。因此为了充分利用系统资源,资源处于空闲状态。因此为了充分利用系统资源,发挥数据库共享的特点,应允许多个事务并行的执发挥数据库共享的特点,应允许多个事务并行的执行。行。系统实现技术单处理机系统的事务并行执行单处理机系统的事务并行执行在单处理机中,事务的并行执行实际是这些并行事务在单处理机中,事务的并行执行实际是这些并行事务的并行操作轮流交叉运行(称为的并行操作轮流交叉运行(称为交叉并发交叉并发方式方式),实),实际并没有真正地并行运行,但际并没有真正地并行运行,但减少了处理机的空闲时减少了处理机的空闲时间,提高了系统效率间,提高
49、了系统效率。多处理机系统的事务并行执行多处理机系统的事务并行执行在多处理机中,每个处理机可以运行一个事务,多个在多处理机中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的处理机可以同时运行多个事务,实现多个事务真正的并发运行(称为并发运行(称为同时并发同时并发方式方式)当多个用户并发存取数据库即会产生多个事务同时存当多个用户并发存取数据库即会产生多个事务同时存取同一数据库的情况。若对并发操作不加控制可能会存取取同一数据库的情况。若对并发操作不加控制可能会存取和存储不正确数据,破坏数据库的一致性。所以和存储不正确数据,破坏数据库的一致性。所以DBMS必必须提供并发
50、控制机制。并发控制机制是衡量一个须提供并发控制机制。并发控制机制是衡量一个DBMS的的主要标志之一。主要标志之一。系统实现技术7.4.1并发控制概述并发控制概述事务是并发控制的基本单位,保证事务事务是并发控制的基本单位,保证事务ACID的的特性是事务处理的重要任务,而并发操作有可特性是事务处理的重要任务,而并发操作有可能会破坏其能会破坏其ACID特性。特性。DBMS并发控制机制的责任:并发控制机制的责任:对并发操作进行正确调度,保证事务的隔离对并发操作进行正确调度,保证事务的隔离性更一般,确保数据库的一致性。性更一般,确保数据库的一致性。以下的实例说明并发操作带来的数据不一致的以下的实例说明并
51、发操作带来的数据不一致的问题。问题。系统实现技术考虑飞机订票系统中的一个活动序列考虑飞机订票系统中的一个活动序列(同一时刻读取)(同一时刻读取)甲售票点(甲事务)读取某航班的机票余额甲售票点(甲事务)读取某航班的机票余额A,A=16乙售票点(乙事务)读取同一航班机票余额乙售票点(乙事务)读取同一航班机票余额A,A=16甲售票点卖出一张机票,修改甲售票点卖出一张机票,修改A=A-1,即即A=15,写写入数据库入数据库乙售票点也卖出一张机票,修改乙售票点也卖出一张机票,修改A=A-1,即即A=15,入加数据库入加数据库结果结果:卖出两张票,数据库中机票余额只减少:卖出两张票,数据库中机票余额只减少
52、1。造成数据库的造成数据库的不一致性是由并发操作引起的不一致性是由并发操作引起的。在并发操。在并发操作情况下,对甲、乙事务的操作序列是随机的。若按上作情况下,对甲、乙事务的操作序列是随机的。若按上面的调度序列执行,甲事务的修改被丢失,因为第面的调度序列执行,甲事务的修改被丢失,因为第4步步中乙事务修改中乙事务修改A并写回后覆盖了甲事务的修改。并写回后覆盖了甲事务的修改。系统实现技术如果没有锁定且多个用户同时访问一个数据库,则当他们如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。由于并发的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不
53、一致性包括:操作带来的数据不一致性包括:1.丢失更新丢失更新当两个或多个事务选择同一行,然后基于最初选定当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。它事务所做的更新,这将导致数据丢失。如上例。如上例。再例如,两个编辑人员制作了同一文档的电子复本。再例如,两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改其复本,然后保存更改后每个编辑人员独立地更改其复本,然后保存更改后的复本,
54、这样就覆盖了原始文档。最后保存其更改的复本,这样就覆盖了原始文档。最后保存其更改复本的编辑人员覆盖了第一个编辑人员所做的更改。复本的编辑人员覆盖了第一个编辑人员所做的更改。如果在第一个编辑人员完成之后第二个编辑人员才如果在第一个编辑人员完成之后第二个编辑人员才能进行更改,则可以避免该问题。能进行更改,则可以避免该问题。系统实现技术2.不可重复读不可重复读指事务指事务T1读取数据后,事务读取数据后,事务T2执行更新操作,使执行更新操作,使T1无无法读取前一次结果。不可重复读包括三种情况:法读取前一次结果。不可重复读包括三种情况:o事务事务T1读取某一数据后,读取某一数据后,T2对其做了修改,当对
55、其做了修改,当T1再再次读该数据后,得到与前一不同的值。次读该数据后,得到与前一不同的值。oT1按一定条件从数据库中读取了某些记录后,按一定条件从数据库中读取了某些记录后,T2删删除了其中部分记录,当除了其中部分记录,当T1再次按相同条件读取数据再次按相同条件读取数据时,发现某些记录消失时,发现某些记录消失oT1按一定条件从数据库中读取某些数据记录后,按一定条件从数据库中读取某些数据记录后,T2插入了一些记录,当插入了一些记录,当T1再次按相同条件读取数据时,再次按相同条件读取数据时,发现多了一些记录。发现多了一些记录。例如,一个编辑人员两次读取同一文档,但在两次读取例如,一个编辑人员两次读取
56、同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免全部完成编写后编辑人员才可以读取文档,则可以避免该问题。该问题。幻像读系统实现技术3.读读“脏脏”数据(脏读)数据(脏读)读读“脏脏”数据是指事务数据是指事务T1修改某一数据,并将其写修改某一数据,并将其写回磁盘,事务回磁盘,事务T2读取同一数据后,读取同一数据后,T1由于某种原由于某种原因被撤消,而此时因被撤消,而此时T1把已修改过的
57、数据又恢复原值,把已修改过的数据又恢复原值,T2读到的数据与数据库的数据不一致,则读到的数据与数据库的数据不一致,则T2读到读到的数据就为的数据就为“脏脏”数据,即不正确的数据。数据,即不正确的数据。例如,一个编辑人员正在更改电子文档。在更改过程中,例如,一个编辑人员正在更改电子文档。在更改过程中,另一个编辑人员复制了该文档(该复本包含到目前为止所另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用户。此后,第一个做的全部更改)并将其分发给预期的用户。此后,第一个编辑人员认为目前所做的更改是错误的,于是删除了所做编辑人员认为目前所做的更改是错误的,于是删除了所做
58、的编辑并保存了文档。分发给用户的文档包含不再存在的的编辑并保存了文档。分发给用户的文档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在过。如果在编辑内容,并且这些编辑内容应认为从未存在过。如果在第一个编辑人员确定最终更改前任何人都不能读取更改的第一个编辑人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题。文档,则可以避免该问题。产生这些数据的不一致性的主要原因是并发产生这些数据的不一致性的主要原因是并发操作破坏了事务的隔离性操作破坏了事务的隔离性。系统实现技术图8.1 三种数据不一致性系统实现技术7.4.2封锁封锁(locking).并发控制:用正确的方式调度并发操作,使一并
59、发控制:用正确的方式调度并发操作,使一个用户事务的执行不受其它事务的干扰,从而个用户事务的执行不受其它事务的干扰,从而避免造成数据的不一致性。避免造成数据的不一致性。并发控制的主要技术是封锁并发控制的主要技术是封锁(locking).如在飞如在飞机订票例子中机订票例子中,甲事务要修改甲事务要修改A,若在读出若在读出A前先前先锁住锁住A,其它事务不能再读取和修改其它事务不能再读取和修改A,直到甲修直到甲修改并写回改并写回A后解除了对后解除了对A的封锁为止。这样甲就的封锁为止。这样甲就不会丢失修改。不会丢失修改。系统实现技术1. 含义事务事务T在对某个数据对象如表、记录等操作之前,向在对某个数据对
60、象如表、记录等操作之前,向系统发出请求,对其加锁。加锁后系统发出请求,对其加锁。加锁后T对对数据对象有数据对象有一定的控制(具体的控制由封锁类型决定),在事一定的控制(具体的控制由封锁类型决定),在事务务T释放前,其它事务不能更新此数据对象。释放前,其它事务不能更新此数据对象。系统实现技术2. 锁类型排它锁(排它锁(X锁、写锁)锁、写锁)若事务若事务T对数据对象对数据对象A加上加上X锁,则只锁,则只允许允许T读取和修改读取和修改A,其它任何事务不能对其它任何事务不能对A加任加任何类型的锁,直到何类型的锁,直到T释放释放A上的锁。从而保上的锁。从而保证证其它事务在其它事务在T释放释放A上的锁前不
61、能再读取上的锁前不能再读取和修改和修改A。共享锁(共享锁(S锁、读锁)锁、读锁)T对数据对象对数据对象A加上加上S锁,则锁,则T可以读可以读A但不能但不能修改修改A,其它事务只能再对其它事务只能再对A加加S锁,而不能锁,而不能加加X锁,直到锁,直到T释放释放A上的上的S锁。保证了在锁。保证了在T对对A加加S锁过程中锁过程中其它事务对其它事务对A只能读,不能修只能读,不能修改。改。系统实现技术3.封锁协议(封锁协议(LockingProtocol)封锁协议封锁协议:在运用在运用X锁和锁和S锁对数据对象加锁时,锁对数据对象加锁时,需要遵循的规则(如需要遵循的规则(如何时申请何时申请X锁或锁或S锁、
62、持锁锁、持锁时间、何时释放等),这些规则即为封锁协议。时间、何时释放等),这些规则即为封锁协议。对封锁方式规定不同的规则即形成了各种不同对封锁方式规定不同的规则即形成了各种不同的封锁协议,不同级别的封锁协议分别在不同的封锁协议,不同级别的封锁协议分别在不同程度上解决一定程度的一致性问题。程度上解决一定程度的一致性问题。系统实现技术3.封锁协议(封锁协议(LockingProtocol)一、一级封锁协议一、一级封锁协议事务事务T在修改数据在修改数据R之前必须先对其加之前必须先对其加X锁,直到事锁,直到事务结束务结束(即通过即通过commit和和rollback结束结束)才释放。才释放。作用:防止
63、丢失修改,保证事务作用:防止丢失修改,保证事务T可恢复。可恢复。二、二级封锁协议二、二级封锁协议一级封锁协议加上事务一级封锁协议加上事务T在读取数据在读取数据R之前必须先之前必须先对其加对其加S锁,读完后即可释放锁,读完后即可释放S锁。锁。作用:防止丢失修改及读作用:防止丢失修改及读“脏脏”数据数据三、三级封锁协议三、三级封锁协议一级封锁协议加上事务一级封锁协议加上事务T在读取数据在读取数据R之前必须先之前必须先对其加对其加S锁,直到事务结束才释放。锁,直到事务结束才释放。作用:防止丢失修改,防止读作用:防止丢失修改,防止读“脏脏”数据以及防止数据以及防止不可重复读。不可重复读。系统实现技术三
64、个级别的封锁协议的主要区别在于什三个级别的封锁协议的主要区别在于什么操作需要申请封锁,以及何时释放锁(即么操作需要申请封锁,以及何时释放锁(即持锁时间)。持锁时间)。系统实现技术1)T1读A,在修改之前先对A加X锁2)当T2再请求对A加X锁时被拒绝,T2等待T1释放A上的锁3)T2获得对A的X锁,此时T2读到A是T1更新过的值154)T2按A的新值进行运算,并将结果值A=14送回磁盘5)可避免丢失T1的更新。6)一级封锁协议不能保证可重复读和不读“脏数据”一级封锁协议系统实现技术1)T1在对C进行修改之前,先对C加X锁,修改其值后写磁盘2)此时,T2请求在C上中S锁,因T1已在C上加了X锁,T
65、2只能等待3)T1因某种原因被撤消,C恢复原值100,T1释放C上的X锁,T2获C上的S锁,读C=100。4)可避免T2读“脏”数据。5)二级封锁协议不能保证可重复读。二级封锁协议系统实现技术1)T1在读A,B之前先对A,B加S锁,即其它事务只能再对A,B加S锁,不能加X锁。2)当T2修改B而申请B的X锁时被拒绝,等待T1释放B上的锁3)T1为验算,再读A,B,读出的B仍是100,求和结果仍是150,即可重复读。4)T1释放A,B上的S锁后,T2获得对B的X锁。5)三级封锁协议防止丢失修改,防止读“脏”数据以及防止不可重复读。三级封锁协议系统实现技术4.活锁和死锁活锁和死锁封锁可能导致活锁和死
66、锁。封锁可能导致活锁和死锁。一、一、活锁活锁指某个事务永远处于等待状态,得不到执行的指某个事务永远处于等待状态,得不到执行的现象。现象。二、二、死锁死锁两个或以上的事务均处于等待状态,每个事务两个或以上的事务均处于等待状态,每个事务都在等待另一个事务解除封锁,都在等待另一个事务解除封锁,以便继续执行以便继续执行下去,结果任何一个事务都无法执行,这种现下去,结果任何一个事务都无法执行,这种现象就是死锁。象就是死锁。系统实现技术活锁的情况:1)T1封锁了数据R,T2也请求封锁R,于是T2等待。2)T3也请求封锁R,当T1释放R上的封锁,系统首先批准了T3的请求,T2仍然等待。3)T4请求封锁R,当
67、T3释放了R上的封锁,系统批准了T4的请求。4)T2有可能永远等待。活锁与死锁系统实现技术死锁的情况:1)T1封锁了数据R1, T2封锁了数据R2 2)T1又请求封锁R2,因 T2已封锁了R2 ,因此T1等待T2释放R2的锁3)T2又请求封锁R1,因 T1已封锁了R1 ,因此T2等待T1释放R1的锁4)T1在等待T2,T2等待T1,导致T1和T2两个事务永远不能结束。死锁系统实现技术三、活锁的解决方案三、活锁的解决方案避免活锁的方法是采用避免活锁的方法是采用“先来先服务先来先服务”策略。当多策略。当多个事务请求封锁同一个数据对象时,封锁子系统按个事务请求封锁同一个数据对象时,封锁子系统按请求封
68、锁的先后次序对事务排队,数据对象上的锁请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中的第一个事务获得锁。一旦释放就批准申请队列中的第一个事务获得锁。四、死锁的解决方案四、死锁的解决方案两种方法:两种方法:1)采取一定的措施来采取一定的措施来预防死锁预防死锁的发生的发生2)允许发生死锁,采用的一定手段诊断系统中有无死允许发生死锁,采用的一定手段诊断系统中有无死锁,若有则锁,若有则解除解除。解锁?解锁?系统实现技术死锁的预防死锁的预防防止死锁的发生即是要破坏死锁的条件,有两种方法:防止死锁的发生即是要破坏死锁的条件,有两种方法:1)一次封锁法:一次封锁法:要求每个事务必须一次
69、将所有要使用的数据全部加锁,要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。否则就不能继续执行。如上图如上图(b)中可以使中可以使T1对对R1和和R2一次加锁,一次加锁,T1可以可以执行下去,而执行下去,而T2等待。等待。T1执行完后释放执行完后释放R1,R2的的锁,锁,T2继续执行。继续执行。一次封锁存在的问题:一次封锁存在的问题:一次将所有将要用到的数据加锁,扩大了封锁的范一次将所有将要用到的数据加锁,扩大了封锁的范围,降低了系统的并发度;围,降低了系统的并发度;数据库中数据不断变化,原来不要求封锁的数据在数据库中数据不断变化,原来不要求封锁的数据在执行过程中可能变成封
70、锁对象,所以很难事先精确执行过程中可能变成封锁对象,所以很难事先精确确定每个事务所要封锁的数据对象,为此只能扩大确定每个事务所要封锁的数据对象,为此只能扩大封锁范围,将事务在执行过程中可能要封锁的数据封锁范围,将事务在执行过程中可能要封锁的数据对象全部加锁,这进一步降低了并发度。对象全部加锁,这进一步降低了并发度。系统实现技术2)顺序封锁法:顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务按照这个顺预先对数据对象规定一个封锁顺序,所有事务按照这个顺序实行封锁。序实行封锁。如如B树结构的索引中,可规定封锁的顺序必须是从根结树结构的索引中,可规定封锁的顺序必须是从根结点开始,然后是下一级的子女
71、结点,逐级封锁。点开始,然后是下一级的子女结点,逐级封锁。顺序封锁存在的问题:顺序封锁存在的问题:DBMS中封锁的数据对象极多,并且随着数据的插入、中封锁的数据对象极多,并且随着数据的插入、删除等操作不断变化,要维护这样的资源的封锁顺序删除等操作不断变化,要维护这样的资源的封锁顺序非常困难,成本高。非常困难,成本高。事务的封锁请求可以随着事务的执行而动态地决定,事务的封锁请求可以随着事务的执行而动态地决定,很难事先确每一个事务要封锁哪些对象,因此很难按很难事先确每一个事务要封锁哪些对象,因此很难按规定的顺序去施加封锁。规定的顺序去施加封锁。可见预防死锁的策略不可行,一般可见预防死锁的策略不可行
72、,一般DBMS在解决在解决死锁的问题上普遍采用诊断并解除死锁的方法。死锁的问题上普遍采用诊断并解除死锁的方法。系统实现技术5.并发调度的可串行性并发调度的可串行性可串行化可串行化调度:调度:多个事务的并发执行是正确的,当且仅多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。当其结果与按某一次序串行地执行它们时的结果相同。这种调度策略即为可串行化的调度。这种调度策略即为可串行化的调度。可串行性:可串行性:并发事务正确性的准则。按这个准则规定,并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化,才认为一个给定的并发调度,当且仅当它是可串行
73、化,才认为是正确调度。是正确调度。例例有两个事务,分别包含下列操作:有两个事务,分别包含下列操作:事务事务T1:读读B;A=B+1;写回写回A;事务事务T2:读读A;B=A+1;写回写回B;假设假设A,B的初值均为的初值均为2。按。按T1T2次序执行结果为次序执行结果为A=3,B=4;按按T2T1次序执行结果为次序执行结果为B=3,A=4。下图下图给出这两个事务的三种不同的调度策略。给出这两个事务的三种不同的调度策略。系统实现技术(a)和(b)为两种不同的串行调度策略,但均正确的调度;(c)中T1,T2交错执行,执行结果与(a),(b)的结果不同,为错误的调度;(d)中T1,T2交错执行,执行
74、结果与(a)的结果相同,为正确的调度;系统实现技术为为保证并发操作的正确性,保证并发操作的正确性,DBMS的并发控制的并发控制机制必须提供一定的手段来保证调度可串行化。机制必须提供一定的手段来保证调度可串行化。理论上,某一事务执行时禁止其它事务执行的理论上,某一事务执行时禁止其它事务执行的调度策略一定是可串行批的调度,但这使用户调度策略一定是可串行批的调度,但这使用户不能充分共享数据库资源。目前不能充分共享数据库资源。目前BDMS普遍采普遍采用封锁方法实现并发操作调度的可串行性,从用封锁方法实现并发操作调度的可串行性,从而保证调度的正确性。而保证调度的正确性。两段锁(两段锁(Two-Phase
75、Locking,简称简称2PL)协议是协议是保证并发调度可串行性的封锁协议。保证并发调度可串行性的封锁协议。系统实现技术6.两段锁协议两段锁协议两段封锁协议规定所有事务必须分以下两个阶段对数两段封锁协议规定所有事务必须分以下两个阶段对数据项加锁和解锁:据项加锁和解锁:(1)在对任何数据进行读写操作之前,事务首先要获在对任何数据进行读写操作之前,事务首先要获得对该数据的封锁;得对该数据的封锁;-封锁阶段(扩展阶段)封锁阶段(扩展阶段)封锁阶段,事务可以申请获取任何数据项上的任何封锁阶段,事务可以申请获取任何数据项上的任何类型的锁,但不能释放任何锁。类型的锁,但不能释放任何锁。(2)在释放一个封锁
76、之后,事务不再获得任何其他封在释放一个封锁之后,事务不再获得任何其他封锁。锁。-释放封锁阶段(收缩阶段)释放封锁阶段(收缩阶段)释放封锁阶段可以释放任何数据项上的任何类型的释放封锁阶段可以释放任何数据项上的任何类型的锁,但不能申请任何锁。锁,但不能申请任何锁。系统实现技术6.两段锁协议两段锁协议T1 遵守2PL:Slock A Slock B Xlock C Unlock B Unlock A Unlock C T2 不遵守2PL:Slock A Unlock A Slock B Xlock C Unlock C Unlock B若并发事务遵守2PL,则这些事务的任何并发调度策略都是可串行化的
77、;但一个可串行化的调度中,不一定所有事务都符合2PL。如下图所示:扩展阶段收缩阶段系统实现技术a,b均为可串行化调度,但b中T2不遵守2PL。系统实现技术由于两段封锁不要求事务必须一次将所有要使由于两段封锁不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段协议的事务用的数据全部加锁,因此遵守两段协议的事务可能发生死锁。如图所示:可能发生死锁。如图所示:系统实现技术7.封锁的粒度封锁的粒度封锁粒度:封锁对象的大小。封锁粒度:封锁对象的大小。封锁对象(针对关系数据库):封锁对象(针对关系数据库):逻辑单元:属性值、属性值的集合、元组、逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引、整个数据库关系、索引项、整个索引、整个数据库物理单元:页(数据页和索引页)、块等物理单元:页(数据页和索引页)、块等封锁粒度与并发控制的开销的关系:封锁粒度与并发控制的开销的关系:封锁粒度越大,数据库能够封锁的数据单元封锁粒度越大,数据库能够封锁的数据单元越少,并发度也越小,系统开销也越小;越少,并发度也越小,系统开销也越小;封锁粒度越小,并发度较高,系统开销也就封锁粒度越小,并发度较高,系统开销也就越大越大;系统实现技术