




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、讲义六:事务管理讲义六:事务管理主要内容主要内容 事务的概念事务的概念 恢复措施恢复措施 并发控制并发控制 小结小结6.1 事务的概念事务的概念事务:构成单一逻辑工作单元的操作的集合事务:构成单一逻辑工作单元的操作的集合事务是由一系列的对数据库的查询操作和更新操事务是由一系列的对数据库的查询操作和更新操作构成,这些操作是一个整体,不能分割。作构成,这些操作是一个整体,不能分割。事务要么所有的操作都顺利完成,要么一个操作事务要么所有的操作都顺利完成,要么一个操作也不要做,绝不能只完成了部分操作,而还有一些也不要做,绝不能只完成了部分操作,而还有一些操作没有完成。操作没有完成。DBMS中的事务管理
2、子系统负责事务的处理中的事务管理子系统负责事务的处理(1)原子性()原子性(Atomicity) 一个事务中的所有操作,是一个逻辑上不可分一个事务中的所有操作,是一个逻辑上不可分割的单位。割的单位。(2)一致性()一致性(Consistency) 数据库处于一个一致性状态是指数据库中的数数据库处于一个一致性状态是指数据库中的数据满足各种完整性约束。据满足各种完整性约束。1 事务的特性事务的特性(3)隔离性()隔离性(Isolation) 隔离性的含义是指无论同时有多少事务在执行,隔离性的含义是指无论同时有多少事务在执行,DBMS会保证事务之间互不干扰,就像只有一个事会保证事务之间互不干扰,就像
3、只有一个事务在运行一样。务在运行一样。(4)持久性()持久性(Durability) DBMS的恢复子系统采用日志和备份技术保证的恢复子系统采用日志和备份技术保证事务的持久性。事务的持久性。事务的这四个特性一般简称为事务的事务的这四个特性一般简称为事务的ACID特特性。性。1 事务的特性事务的特性(1)启动事务:启动事务: BEGIN TRANSACTION(2)提交事务提交事务 COMMIT TRANSACTION(3)回滚语句回滚语句 ROLLBACK TRANSACTION2 事务的语句事务的语句例例 在运输部门的订票数据库在运输部门的订票数据库一个完整事务:一个完整事务:-开始事务:开
4、始事务:(1)查询某趟车次查询某趟车次TrainNo的剩余车票的剩余车票(2)插入订票记录插入订票记录ReservedTicket(3)更新剩余票额更新剩余票额Ticket的数量的数量-提交事务提交事务3 事务举例事务举例Select TSum = TicketSum -取出剩余车票数量取出剩余车票数量From TrainTicketWhere TrainNo = D123;IF TSum = 0 -没有剩余车票没有剩余车票ROLLBACK TRANSACTION -回滚事务回滚事务ELSEBEGIN TRANSACTIONINSERT INTO ReservedTicket values(“
5、车次车次”,“发站发站”,“到站到站”,“座位号座位号”,“票价票价”,”日日期期”,););UPDATE TrainTicket SET TicketSum = TicketSum 1where TicketNo = D123;COMMIT TRANSACTION -提交事务提交事务 END3 事务举例事务举例4 4 事务状态事务状态 事务必须处于下列状态之一事务必须处于下列状态之一活动状态:活动状态: 初始状态;事务执行时处于这个状态初始状态;事务执行时处于这个状态部分提交状态:部分提交状态: 最后一条语句执行后最后一条语句执行后失败状态:失败状态: 发现正常的执行不能继续之后发现正常的执
6、行不能继续之后中止状态:中止状态: 事务回滚并且数据库已恢复到事务开始执行前的状态之后事务回滚并且数据库已恢复到事务开始执行前的状态之后提交状态:提交状态: 成功完成后成功完成后6.2 6.2 事务恢复事务恢复 DBMS中的数据如何流动的:中的数据如何流动的:DB系统缓冲区系统缓冲区T1工作区工作区T2工作区工作区内存内存图:图: 数据的流动数据的流动 标号和的流程分别标号和的流程分别是读操作和写操作的数是读操作和写操作的数据流动过程。据流动过程。 6.2 6.2 事务恢复事务恢复 恢复机制:恢复机制:1.数据库系统必不可少的组成部分,负责将数数据库系统必不可少的组成部分,负责将数据库恢复到故
7、障发生前的某个一致的状态。据库恢复到故障发生前的某个一致的状态。2.高可用性:尽快恢复数据库功能,使崩溃的高可用性:尽快恢复数据库功能,使崩溃的数据库不能使用的时间减少到最小。数据库不能使用的时间减少到最小。(1)事务故障)事务故障 事务在运行过程中,如果出现运算溢出,违反事务在运行过程中,如果出现运算溢出,违反了某些完整性规则,某些应用程序的错误,以及并了某些完整性规则,某些应用程序的错误,以及并发事务发生死锁等,使事务不能继续执行下去,这发事务发生死锁等,使事务不能继续执行下去,这种情况称为事务故障。种情况称为事务故障。非法输入;溢出或超出资源限制等非法输入;溢出或超出资源限制等1 1 故
8、障种类故障种类 (2)系统故障)系统故障 系统故障是指系统在运行过程中,由于某种原系统故障是指系统在运行过程中,由于某种原因,如操作系统或因,如操作系统或DBMS代码错误,操作员操作失代码错误,操作员操作失误、特定类型的硬件错误(如误、特定类型的硬件错误(如CPU故障)、突然停故障)、突然停电等造成系统停止运行,丢失了系统缓冲区中的数电等造成系统停止运行,丢失了系统缓冲区中的数据,而存储在磁盘中的数据未受到影响。据,而存储在磁盘中的数据未受到影响。1 1 故障种类故障种类 (3)介质故障)介质故障 系统在运行过程中,由于某种硬件故障,如磁系统在运行过程中,由于某种硬件故障,如磁盘坏损,磁头碰撞
9、、或由于操作系统的某种潜在的盘坏损,磁头碰撞、或由于操作系统的某种潜在的错误、瞬时强磁场干扰,使存储在外存上的数据部错误、瞬时强磁场干扰,使存储在外存上的数据部分损失或全部损失,称为介质故障。这类故障比前分损失或全部损失,称为介质故障。这类故障比前两类故障的可能性小的多,但破坏性最大,所有正两类故障的可能性小的多,但破坏性最大,所有正在运行的事务被中止,系统缓冲区中的数据无法写在运行的事务被中止,系统缓冲区中的数据无法写到磁盘,存储在磁盘上的数据全部丢失!到磁盘,存储在磁盘上的数据全部丢失!1 1 故障种类故障种类 2 2 恢复措施恢复措施 (1) 日志文件日志文件 事务由一系列对数据库的读写
10、操作组成,按照事务由一系列对数据库的读写操作组成,按照操作执行的先后次序,记录下事务所执行的所有对操作执行的先后次序,记录下事务所执行的所有对数据库的写操作(更新操作),就构成了事务的日数据库的写操作(更新操作),就构成了事务的日志文件。志文件。l日志文件的格式和内容日志文件的格式和内容 日志文件从逻辑上来看是由日志文件从逻辑上来看是由若干条记录构成若干条记录构成的,的,这些记录叫做日志记录,同一个事务的这些记录叫做日志记录,同一个事务的日志记录组日志记录组织成了一个链表织成了一个链表。l日志文件示意图日志文件示意图 T1UTrainTicket(TicketSum)8079(b)(a)Beg
11、inInsertRollbackBeginInsertCommitUpdate2 2 恢复措施恢复措施 l日志文件示意图日志文件示意图 图图(a)为向一个表中插入一条记录,出错了,为向一个表中插入一条记录,出错了,则终止事物执行。则终止事物执行。 图图(b)中给出中给出Update记录的内部结构,记录的内部结构,T1表示表示发出操作的是事务发出操作的是事务T1,U表示操作类型是修改表示操作类型是修改(Update),Ticket(TicketSum)表示修改的数据对表示修改的数据对象是象是TrainTicket表的表的TicketSum列,修改前的值是列,修改前的值是80,修改后的值是修改后的
12、值是79。2 2 恢复措施恢复措施 l日志文件记录日志文件记录日志文件由若干记录组成,记录有三种类型,日志文件由若干记录组成,记录有三种类型,一是记录事务的开始,用一是记录事务的开始,用Begin表示,主要记表示,主要记录事务的内部标识和开始时间;录事务的内部标识和开始时间;二是记录事务的结束,图中用二是记录事务的结束,图中用Rollback和和Commit表示,主要记录事务的内部标识和结束时表示,主要记录事务的内部标识和结束时间;间;三是记录事务的更新操作。三是记录事务的更新操作。2 2 恢复措施恢复措施 l日志文件记录信息日志文件记录信息 其中事务的更新操作用其中事务的更新操作用Updat
13、e表示,更新要记表示,更新要记录以下的信息:录以下的信息:1.事务标识(标明是哪个事务)事务标识(标明是哪个事务)2.操作的类型(插入、删除或修改)操作的类型(插入、删除或修改)3.操作对象操作对象(记录内部标识记录内部标识)4.更新前数据的旧值(对插入操作而言,此项为更新前数据的旧值(对插入操作而言,此项为空值)空值)5.更新后数据的新值(对删除操作而言,更新后数据的新值(对删除操作而言, 此项为此项为空值)空值)2 2 恢复措施恢复措施 (2)登记日志文件登记日志文件 日志文件为数据库的数据建立了副本(冗余),日志文件为数据库的数据建立了副本(冗余),为了保证数据库数据的可恢复性,必须坚持
14、先写日为了保证数据库数据的可恢复性,必须坚持先写日志,后写数据的原则。事务更新了某个数据后,把志,后写数据的原则。事务更新了某个数据后,把数据由工作区复制到系统缓冲区,同时形成了一条数据由工作区复制到系统缓冲区,同时形成了一条日志记录,该日志记录也被存放到系统缓冲区。日志记录,该日志记录也被存放到系统缓冲区。 DBMS保证,把更新后的数据由系统缓冲区移保证,把更新后的数据由系统缓冲区移动到数据库之前,要首先把相应的日志记录写到日动到数据库之前,要首先把相应的日志记录写到日志文件中,这叫做先写日志规则。志文件中,这叫做先写日志规则。2 2 恢复措施恢复措施 (3)登记日志文件步骤登记日志文件步骤
15、第一步,事务把更新后的数据和形成的日志记录写第一步,事务把更新后的数据和形成的日志记录写到系统缓冲区。到系统缓冲区。第二步,将日志记录写到磁盘上的日志文件。第二步,将日志记录写到磁盘上的日志文件。第三步,把更新后的数据写到数据库。第三步,把更新后的数据写到数据库。DB系统缓冲区T1工作区T2工作区内存Log2 2 恢复措施恢复措施 (4)数据库备份数据库备份 为了处理介质故障,需要由为了处理介质故障,需要由DBA定期地将数据定期地将数据库和日志文件复制到磁带或磁盘上,并将这些备用库和日志文件复制到磁带或磁盘上,并将这些备用的数据文本妥善地保存起来,当数据库遭到破坏时的数据文本妥善地保存起来,当
16、数据库遭到破坏时就可以将后备副本重新装入,恢复数据库。就可以将后备副本重新装入,恢复数据库。 2 2 恢复措施恢复措施 (4)数据库备份数据库备份 制做备份的过程称为转储制做备份的过程称为转储。转储是十分耗费时间和资源。转储是十分耗费时间和资源的,不能频繁进行。的,不能频繁进行。DBA应根据应用情况确定适当的转储应根据应用情况确定适当的转储时间和周期。时间和周期。 转储可以分为转储可以分为增量转储和海量转储增量转储和海量转储。海量转储是指每次。海量转储是指每次转储全部数据库,而增量转储是指每次转储上次转储后修转储全部数据库,而增量转储是指每次转储上次转储后修改过的数据。改过的数据。 转储还可分
17、为转储还可分为静态转储和动态转储静态转储和动态转储。静态转储是指系统。静态转储是指系统停止对外服务,不允许用户运行事务,只进行转储操作。停止对外服务,不允许用户运行事务,只进行转储操作。动态转储是指转储期间允许用户对数据库进行存取操作,动态转储是指转储期间允许用户对数据库进行存取操作,即转储和用户事务可以并发执行。即转储和用户事务可以并发执行。 2 2 恢复措施恢复措施 (5) 故障恢复故障恢复l事务故障恢复事务故障恢复 事务未运行至正常终止点前被事务未运行至正常终止点前被DBMS或用户撤消,这时或用户撤消,这时恢复子系统对此事务做恢复子系统对此事务做UNDO处理。处理。具体做法:具体做法:
18、反向阅读日志文件,找出该事务的所有更新操作,对反向阅读日志文件,找出该事务的所有更新操作,对每一个更新操作做它的逆操作。即若记录中是插入操作,则每一个更新操作做它的逆操作。即若记录中是插入操作,则做删除操作。若记录中是删除操作,则做插入操作,若是修做删除操作。若记录中是删除操作,则做插入操作,若是修改操作,则用修改前的值代替修改后的值。如此处理直至读改操作,则用修改前的值代替修改后的值。如此处理直至读到此事务的开始标签,事务故障恢复完成。到此事务的开始标签,事务故障恢复完成。2 2 恢复措施恢复措施 (5)故障恢复故障恢复l系统故障恢复:需要恢复两个方面内容系统故障恢复:需要恢复两个方面内容
19、1由于一些未完成事务对数据库的更新已写入数据库;由于一些未完成事务对数据库的更新已写入数据库; 2由于一些已提交事务对数据库的更新还留在缓冲区没由于一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库。来得及写入数据库。 系统故障恢复是在系统重新启动以后进行的,系统故障恢复是在系统重新启动以后进行的,基本的恢复步骤分为二步:基本的恢复步骤分为二步: 1.根据日志文件建立重作队列和撤消队列根据日志文件建立重作队列和撤消队列 2.对对UNDO队列中的事务进行队列中的事务进行UNDO处理,对处理,对REDO队列中事务的进行队列中事务的进行REDO处理。处理。 2 2 恢复措施恢复措施 (5)故
20、障恢复故障恢复l介质故障恢复介质故障恢复 在发生介质故障时,磁盘上的物理数据库被破坏,在发生介质故障时,磁盘上的物理数据库被破坏,因此,需要重装最后一次备份的数据库备份,但重因此,需要重装最后一次备份的数据库备份,但重装副本只能将数据库恢复到转储时的状态。从那以装副本只能将数据库恢复到转储时的状态。从那以后的所有更新事务必须重新运行才能恢复到故障时后的所有更新事务必须重新运行才能恢复到故障时的状态。的状态。2 2 恢复措施恢复措施 (6)恢复过程示例恢复过程示例举例:举例:系统在系统在t1时刻停止运行事务,进行数据库转储,时刻停止运行事务,进行数据库转储,在在t2时刻转储完毕,得到时刻转储完毕
21、,得到t2时刻的数据库的一致性副本。当时刻的数据库的一致性副本。当系统运行到系统运行到tn时刻发生故障。时刻发生故障。运行事务运行事务介质故障恢复过程介质故障恢复过程t1t2tn故障点故障点转储完毕转储完毕转储开始转储开始2 2 恢复措施恢复措施 (6)恢复过程示例恢复过程示例l 重装转储的数据库副本,使数据库恢复到转储时重装转储的数据库副本,使数据库恢复到转储时的一致状态。的一致状态。l 装入转储后备份的第一个日志文件装入转储后备份的第一个日志文件l 读日志文件,找出已提交的事务,按提交次序的读日志文件,找出已提交的事务,按提交次序的先后将其记入先后将其记入REDO队列。队列。l 重做重做R
22、EDO队列中每个事务的所有更新操作。队列中每个事务的所有更新操作。l 装入下一个日志文件重复上一步,直至处理完所装入下一个日志文件重复上一步,直至处理完所有的日志文件,这时数据库恢复至故障前一时刻的有的日志文件,这时数据库恢复至故障前一时刻的一致状态。一致状态。2 2 恢复措施恢复措施 6.3 6.3 并发控制并发控制方案:对并发的各种情况进行控制需求:数据库管理系统(DBMS)允许多个事务并发执行问题:并发执行产生的资源占用的冲突6.3 6.3 并发控制并发控制 为了防止并发执行产生的问题,为了防止并发执行产生的问题,DBMS需要具需要具备并发控制的功能。主要内容包括:备并发控制的功能。主要
23、内容包括:1 1 并发事务执行的各种情况:并发事务执行的各种情况:引起的异常引起的异常2 2 并发控制作用和方法:并发控制作用和方法:锁锁其它方法:时间戳、乐观控制法其它方法:时间戳、乐观控制法3 3 事务的隔离级别事务的隔离级别举例举例:假设假设有两个售票员同时运行售票的事务,分有两个售票员同时运行售票的事务,分别用别用T1T1和和T2T2表示。事务用底层操作可以表示为表示。事务用底层操作可以表示为:售票事务:售票事务:W(A)-R(B)-W(B)W(A)-R(B)-W(B)(1) W(A): (1) W(A): 表示表示向向ReservedTicketReservedTicket表表( (
24、记录购票信息记录购票信息表表) )插入一个元组插入一个元组(2) R(B): (2) R(B): 表示读表示读TicketTicket表表( (余票信息表余票信息表) )的的TicketSumTicketSum列列(3) W(B): (3) W(B): 表示写表示写TicketTicket表的表的TicketSumTicketSum列列1 1 并发的各种情况并发的各种情况(1 1)串行执行:)串行执行: 在在t1t1、t2t2和和t3t3时刻售时刻售票票1 1的事务的三个操作被送的事务的三个操作被送到到DBMSDBMS的存取层,并立刻的存取层,并立刻获得执行,在获得执行,在t4t4、t5t5和
25、和t6t6时刻执行售票时刻执行售票2 2的三个操作,的三个操作,执行的结果和我们预期的执行的结果和我们预期的结果完全相同,如右图所结果完全相同,如右图所示。两个事务的执行是实示。两个事务的执行是实际上是串行执行,先执行际上是串行执行,先执行完完T1T1,再执行,再执行T2T2。开始时ticketsum = 80 时时刻刻 T1 T2 t1 W(A) t2R(ticketsum=80)t3W(ticketsum=ticketsum -1)t4 W(A)t5R(ticketsum=79)t6W(ticketsum=ticketsum -2) 结束时结束时 ticketsum=77 1 1 并发产生
26、的问题并发产生的问题(2 2)并发执行)并发执行1 1: 如右图所示,如右图所示,T1T1和和T2T2的操作穿插执行,的操作穿插执行,结果是结果是T1T1的修改操作没的修改操作没有起到应有的作用,这有起到应有的作用,这种现象称为种现象称为“丢失修丢失修改改”。1 1 并发产生的问题并发产生的问题开始时ticketsum = 80 时时刻刻 T1 T2 t1 W(A) t2R(ticketsum=80)W(A)t3R(ticketsum=80)t4W(ticketsum=ticketsum -1) t5W(ticketsum=ticketsum -2) t6结束时结束时ticketsum=78
27、(3 3)并发执行)并发执行2 2: 售票售票1 1执行事务执行事务T1T1,但是在确认是否真正买票但是在确认是否真正买票时,他放弃了买票,事务时,他放弃了买票,事务被回滚。具体的执行过程被回滚。具体的执行过程如右图所示,如右图所示,T2T2的售票操的售票操作也没有获得成功,原因作也没有获得成功,原因是在是在T1T1没有结束时,就读没有结束时,就读了了ticketsumticketsum,这种现象,这种现象叫做叫做“读脏数据读脏数据”。开始时ticketsum = 1 时刻时刻 T1 T2 t1 W(A) t2R(ticketsum=1)t3W(ticketsum=0)W(A)t4R(tick
28、etsum=0)t5t6t7RollBack 结束时结束时ticketsum=0 1 1 并发产生的问题并发产生的问题(4 4)并发执行)并发执行3:3: T1 T1在执行过程中读了在执行过程中读了两次两次ticketsumticketsum,但是发现,但是发现ticketsumticketsum的两次余额不一的两次余额不一样,由于不知道发生了什样,由于不知道发生了什么情况而将么情况而将T1T1撤消了。原撤消了。原因是在两个读操作中间执因是在两个读操作中间执行了另外的事务行了另外的事务T2T2,这种,这种现象叫做现象叫做“不可重复读不可重复读”。开始时ticketsum = 1时刻时刻 T1
29、T2 t1 W(A) t2R(ticketsum=1)t3W(A)t4W(ticketsum=0)t5R(ticketsum=0)t6RollBackt7RollBack结束时结束时ticketsumticketsum=1 =1 1 1 并发产生的问题并发产生的问题l并发控制的作用:并发控制的作用:l实现可串行化调度实现可串行化调度l并发并发控制的方法:控制的方法:l封锁封锁法:根据事务申请到的锁和其类型控制事务执法:根据事务申请到的锁和其类型控制事务执行行l时间印时间印法:根据事务进入系统的时钟进行控制法:根据事务进入系统的时钟进行控制6.3 6.3 并发控制并发控制READ(X),WRIT
30、E(X)LOCK(X),READ(X),WRITE(X),UNLOCK(X)READ(X),WRITE(X),COMMIT(T),ABORT(T)事务管理器调度器 第一部分DB调度器 第二部分锁表6.3 6.3 并发控制并发控制并发控制示意图并发控制示意图2 2 锁锁l 类型:类型:S S锁和锁和X X锁锁 S S锁又被称为共享锁锁又被称为共享锁(Share Locks)(Share Locks),X X锁又被锁又被叫做排它锁叫做排它锁(eXclusive Locks)(eXclusive Locks)。 共享锁又称为读锁:若事务共享锁又称为读锁:若事务T T对数据对象对数据对象A A加加上上
31、S S锁,则事务锁,则事务T T可以读可以读A A但不能修改但不能修改A,A,其它事务只其它事务只能再对能再对A A加加S S锁,而不能加锁,而不能加X X锁,直到锁,直到T T释放释放A A上的上的S S锁。锁。这就保证了其它事务可以读这就保证了其它事务可以读A A,但在,但在T T释放释放A A上的上的S S锁锁之前不能对之前不能对A A做任何修改。做任何修改。(2)(2)排它锁排它锁 排它锁又称为写锁。若事务排它锁又称为写锁。若事务T T对数据对象对数据对象A A加加上上X X锁,则只允许锁,则只允许T T读取和修改读取和修改A A,其它任何事务都,其它任何事务都不能再对不能再对A A加
32、任何类型的锁,直到加任何类型的锁,直到T T释放释放A A上的锁。上的锁。这就保证了其它事务在这就保证了其它事务在T T释放释放A A上的锁之前不能读取上的锁之前不能读取和修改和修改A A。 T2 T1XS-XNNYSNYY-YYY封锁类型的相容矩阵封锁类型的相容矩阵 Y=Yes,相容的请求N=No,不相容的请求2 2 锁锁l封锁级别封锁级别l对数据对象加锁所采用的规则。对数据对象加锁所采用的规则。 一级封锁协议一级封锁协议:事务:事务T T在修改数据在修改数据R R之前必之前必须先对其加须先对其加X X锁,直到事务结束才释放。事务锁,直到事务结束才释放。事务结束包括正常结束结束包括正常结束(
33、COMMIT)(COMMIT)和非正常结束和非正常结束(ROLLBACK)(ROLLBACK)。1.1. 可防止:丢失修改可防止:丢失修改2.2. 不能防止:可重复读和不读不能防止:可重复读和不读“脏脏”数据。数据。2 2 锁锁l封锁级别封锁级别: 二级封锁协议二级封锁协议:实施一级封锁协议:实施一级封锁协议, ,并且并且事务事务T T在读取数据在读取数据R R之前必须先对其加之前必须先对其加S S锁,读完后锁,读完后即可释放即可释放S S锁。锁。 二级封锁协议除防止了丢失修改,还可进二级封锁协议除防止了丢失修改,还可进一步防止读一步防止读“脏脏”数据,由于读完数据后即可释放数据,由于读完数据
34、后即可释放S S锁,所以它不能保证可重复读。锁,所以它不能保证可重复读。2 2 锁锁l封锁级别封锁级别三级封锁协三级封锁协议:实施一级封锁协议,并且事议:实施一级封锁协议,并且事务务T T在读取数据在读取数据R R之前必须先对其加之前必须先对其加S S锁,直到事务锁,直到事务结束才释放。结束才释放。三级封锁协议除防止了丢失修改和不读三级封锁协议除防止了丢失修改和不读“脏脏”数据外,还进一步防止了不可重复读。数据外,还进一步防止了不可重复读。2 2 锁锁l两阶段封锁协议:加锁和解锁两阶段封锁协议:加锁和解锁l“两阶段两阶段”是获得锁的第一阶段和释放锁的第是获得锁的第一阶段和释放锁的第二阶段二阶段
35、l一个事务中一旦开始释放锁,就不能再申请新一个事务中一旦开始释放锁,就不能再申请新锁了。事务的加锁和解锁严格分为两个阶段,第锁了。事务的加锁和解锁严格分为两个阶段,第一阶段加锁,第二阶段解锁。一阶段加锁,第二阶段解锁。l可实现并发的串行化调度可实现并发的串行化调度2 2 锁锁l加锁内容包括加锁内容包括:l在事务在事务T T的的R(A)R(A)操作之前,先对操作之前,先对A A加加S S锁,如果锁,如果加锁成功,则执行操作加锁成功,则执行操作R(A)R(A),否则,将,否则,将R(A)R(A)加入加入A A的等待队列。的等待队列。l在事务在事务T T的的W(A)W(A)操作之前,先对操作之前,先
36、对A A加加X X锁,如果锁,如果加锁成功,则执行操作加锁成功,则执行操作W(A)W(A),否则,将,否则,将W(A)W(A)加入加入A A的等待队列。的等待队列。2 2 锁锁l解锁内容包括:解锁内容包括:l在收到事务的在收到事务的AbortAbort或或CommitCommit请求后,释放请求后,释放T T在在每个数据上所加的锁,如果在数据每个数据上所加的锁,如果在数据A A的等待队列的等待队列中不空,即有其它的事务等待对中不空,即有其它的事务等待对A A进行操作,则进行操作,则从队列中取出第一个操作,完成加锁,然后执行从队列中取出第一个操作,完成加锁,然后执行该操作。该操作。l执行执行Ab
37、ortAbort和和CommitCommit请求后,不再接收该事务请求后,不再接收该事务的读写操作的读写操作 。2 2 锁锁l两阶段封锁协议举例:两阶段封锁协议举例:事务1的封锁序列:Slock A . Slock B . Xlock C . Unlock C . Unlock B . Unlock A;事务2的封锁序列:Slock A . Unlock A . Slock B . Xlock C . Unlock C . Unlock B;2 2 锁锁三级封锁三级封锁协议:协议:是从锁的隔离程度来定义;两两阶段阶段锁协议:锁协议:从加锁、解锁顺序的角度来描述事务事务1 1遵守两段锁协议,而事
38、务事务2 2不遵守两段协议。l封锁粒度封锁粒度l封锁对象的大小称为封锁粒度。封锁对象的大小称为封锁粒度。l封锁对象可以是逻辑单位,这时的粒度可以是封锁对象可以是逻辑单位,这时的粒度可以是数据库、表、元组、属性。数据库、表、元组、属性。l封锁对象也可以是物理单位,这时的封锁对象封锁对象也可以是物理单位,这时的封锁对象可以是数据块、物理记录。不同的粒度会影响事可以是数据块、物理记录。不同的粒度会影响事务的并发度。务的并发度。2 2 锁锁两个事务造成的死锁问题两个事务造成的死锁问题T1ABT22 2 锁锁DBMSDBMS的并发控制子系统保证了事务的隔离性,的并发控制子系统保证了事务的隔离性,尽管同时
39、有很多事务在使用系统,但是它们互不干尽管同时有很多事务在使用系统,但是它们互不干扰,就像单独使用系统一样,不会出现丢失修改,扰,就像单独使用系统一样,不会出现丢失修改,读脏数据,不可重复读等问题。读脏数据,不可重复读等问题。对于一些只读事务,有时可以忍受读脏数据,对于一些只读事务,有时可以忍受读脏数据,不可重复读等问题,为了加快它的执行,不需要严不可重复读等问题,为了加快它的执行,不需要严格的按照两段锁协议运行。格的按照两段锁协议运行。SQLSQL提供的隔离级别设提供的隔离级别设置语句能满足这个要求。置语句能满足这个要求。3 3 隔离级别隔离级别隔离级别考虑隔离级别考虑因素:因素:l是否在读数
40、据的时候使用锁是否在读数据的时候使用锁l读锁持续多长时间读锁持续多长时间l在读数据的时候使用何种类型的锁在读数据的时候使用何种类型的锁SET TRANSACTION ISOLATION LEVELSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED READ UNCOMMITTED | READ COMMITTED | READ COMMITTED | REPEATABLE READ | REPEATABLE READ | SERIALIZABLE | SERIALIZABLE 3 3 隔离级别隔离级别( (1)READ UNCOMMITTED 1)
41、READ UNCOMMITTED (未提交读)(未提交读) 执行执行事务的读操作之前不对数据对象加事务的读操作之前不对数据对象加S S锁,可能会锁,可能会读到未完成事务的操作结果(脏数据),不能重复读。读到未完成事务的操作结果(脏数据),不能重复读。(2)READ (2)READ COMMITTEDCOMMITTED(已提交读)(已提交读) 执行执行事务的读操作之前对数据对象加事务的读操作之前对数据对象加S S锁,执行完读锁,执行完读操作之后立刻释放操作之后立刻释放S S锁。不会读到脏数据,但不能重复读。锁。不会读到脏数据,但不能重复读。(3)REPEATABLE (3)REPEATABLE
42、READREAD(可重复读)(可重复读) 执行执行事务的读操作之前对数据对象加事务的读操作之前对数据对象加S S锁,持有该锁锁,持有该锁直到事务结束,可以重复读直到事务结束,可以重复读。(4) (4) SERIALIZABLE ( SERIALIZABLE ( 可序列化可序列化 ) ) 严格严格按照两段封锁协议对数据按照两段封锁协议对数据加锁加锁,可防止幻象读。可防止幻象读。3 3 隔离级别隔离级别验证实验验证实验1 1:采用默认的隔离级别:采用默认的隔离级别3 3 隔离隔离级别级别序号序号事务事务1 1(默认)(默认)事务事务2 2(默认)(默认)显示结果显示结果1 1BEGIN TRANS
43、ACTIONBEGIN TRANSACTION2 2Select salarySelect salaryFrom From employeesemployees3 3BEGIN TRANSACTIONBEGIN TRANSACTION4 4Update Update employeesemployeesset salary= salary + set salary= salary + 1000;1000;5 5 Select salarySelect salaryFrom employeesFrom employees6 6COMMIT TRANSACTIONCOMMIT TRANSACTIO
44、N7 7COMMIT TRANSACTIONCOMMIT TRANSACTION验证实验验证实验1 1:采用默认的隔离级别:采用默认的隔离级别3 3 隔离隔离级别级别序号序号事务事务1 1(默认)(默认)事务事务2 2(默认)(默认)显示结果显示结果1 1BEGIN TRANSACTIONBEGIN TRANSACTION2 2Select salarySelect salaryFrom From employeesemployees3 3BEGIN TRANSACTIONBEGIN TRANSACTION4 4Update Update employeesemployeesset salary= salary + set salary= salary + 1000;1000;5 5 Select salarySelect salaryFrom employeesFrom employees6 6COMMIT TRANSACTIONCOMMIT TRANSACTION7 7COMMIT TRANSACTIONCOMMIT TRANSACTION更新成功更新成功查询不成功查询不成功查询成功查询成功验证实验验证实验2 2:事务:事务1 1采用采用隔离隔离级别级别repeatable repeatable readread后,结果后,结果会有什么不同?会有什么不同
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无缝墙布专业施工方案(3篇)
- 乡村扶贫慰问活动方案策划(3篇)
- 企业科技活动策划方案(3篇)
- 职场考试题库及答案解析
- 海事院校考试题库及答案
- 放射诊断考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期第一次月考道德与法制题目及答案
- 校长业务考试题目及答案
- 时间动态课件
- 100字的中秋作文(14篇)
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- (2025年标准)委托他人要账协议书
- 2025-2030中国青少年无人机教育课程体系构建与创新能力培养研究
- GB 11122-2025柴油机油
- 2025年广西中考语文试题卷(含答案)
- 联通技能竞赛考试题及答案(5G核心网知识部分)
- 初中七年级下册语文阅读理解十篇(含答案)
- 第2课 绘画作品中的劳动者 课件 五年级美术上册 岭南版(共15张PPT)
- 教学比武三测单的绘制课件
- 2022年江苏省基本公共卫生服务项目绩效考核指标表
评论
0/150
提交评论