1、第第4章章 数据库管理数据库管理 东华大学 数学02 数据库系统原理2主要内容主要内容n4.1 事务事务 n4.2 数据库的恢复数据库的恢复 n4.3 数据库的并发控制数据库的并发控制n4.4 数据库的完整性数据库的完整性n4.5 数据库的安全性数据库的安全性n4.6 小结小结 东华大学 数学02 数据库系统原理34.1 事务事务n在在DBS运行时,运行时,DBMS负责对负责对DB进行监控,以保证系进行监控,以保证系统正常运行,防止数据意外丢失和不一致数据的产生。统正常运行,防止数据意外丢失和不一致数据的产生。nDBMS对对DB的监控,称为数据库的管理或数据库的保的监控,称为数据库的管理或数据
2、库的保护。主要有四个方面:护。主要有四个方面:数据库的恢复、并发控制、完数据库的恢复、并发控制、完整性控制和安全性控制整性控制和安全性控制。每一方面构成了。每一方面构成了DBMS的一的一个子系统。个子系统。n事务事务是是DBS运行的最小逻辑工作单位。所有对数据库运行的最小逻辑工作单位。所有对数据库的操作,都要以事务作为一个整体单位来执行或撤销。的操作,都要以事务作为一个整体单位来执行或撤销。东华大学 数学02 数据库系统原理44.1.1 事务的定义事务的定义(1)定义定义4.14.1 事务事务(transaction)是构成单一逻辑工作单元是构成单一逻辑工作单元的操作集合的操作集合。不论发生任
3、何情况,。不论发生任何情况,DBS必须保证事必须保证事务能正确、完整地执行。务能正确、完整地执行。v一个事务由应用程序中的一组操作序列组成。事务一个事务由应用程序中的一组操作序列组成。事务以以BEGIN TRANSACTION开始,以开始,以COMMIT(提交提交)或或ROLLBACK(回滚回滚)结束。结束。东华大学 数学02 数据库系统原理54.1.1 事务的定义事务的定义(2)vCOMMIT:当事务所引用的所有数据的逻辑都正确:当事务所引用的所有数据的逻辑都正确时,时,COMMIT使得自从事务开始以来所执行的所有使得自从事务开始以来所执行的所有数据修改成为数据库的永久部分,并释放连接占用数
4、据修改成为数据库的永久部分,并释放连接占用的资源。的资源。v如果所提交的事务涉及到多个服务器或一个服务器如果所提交的事务涉及到多个服务器或一个服务器上的多个数据库,则使用两阶段提交协议,以便提上的多个数据库,则使用两阶段提交协议,以便提交所有涉及该事务的服务器或数据库。交所有涉及该事务的服务器或数据库。东华大学 数学02 数据库系统原理64.1.1 事务的定义事务的定义(3)v当在嵌套事务中使用时,内部事务的提交并不释放当在嵌套事务中使用时,内部事务的提交并不释放资源或使其修改成为永久修改。只有在提交了外部资源或使其修改成为永久修改。只有在提交了外部事务时,数据修改才具有永久性,而且资源才会被
5、事务时,数据修改才具有永久性,而且资源才会被释放。释放。vROLLBACK:将事务回滚到事务的起点或事务内的:将事务回滚到事务的起点或事务内的某个保存点。某个保存点。东华大学 数学02 数据库系统原理74.1.1 例子:事务及其性质例子:事务及其性质v例例4.1 设银行数据库中设银行数据库中有一转账事务有一转账事务T,从账,从账号号A转一笔款子转一笔款子($50)到到账号账号B。q相应的事务相应的事务T:BEGIN TRANSACTIONread(A);A:=A50;write(A);if(A0)ROLLBACK;else read(B);B:=B+50;write(B);COMMIT;东华大
6、学 数学02 数据库系统原理8例例:更新学生更新学生S1的成绩,若有空成绩,回滚。的成绩,若有空成绩,回滚。nselect*from sc where s#=s1 order by c#;nbegin transaction n update sc n set score=score*0.9+10 n where s#=s1;n select*from sc where s#=s1 order by c#;n if(exists(select*from sc where s#=s1 n and score is null)n rollback transactionn elsen commit
7、 transactionn select*from sc where s#=s1 order by c#;错:score=null东华大学 数学02 数据库系统原理94.1.2 事务的事务的ACID性质性质n原子性原子性(Atomicity):事务事务是一个不可分割的工作单元是一个不可分割的工作单元;n一致性一致性(Consistency):数据不会因事务的执行而遭数据不会因事务的执行而遭受破坏;受破坏;n隔离性隔离性(Isolation):在多个事务并发执行时,系统应保在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样;证与这些事务先后单独执行时的结果一样;n持久性持久性(D
8、urability):一个事务一旦完成全部操作后,一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中它对数据库的所有更新应永久地反映在数据库中;东华大学 数学02 数据库系统原理104.1.2 事务提交和事务撤销事务提交和事务撤销n事务的所有操作都完成了,则事务提交事务的所有操作都完成了,则事务提交(COMMIT),否则事务撤销否则事务撤销(ROLLBACK)nBEGIN TRANSACTION标志事务开始执行标志事务开始执行nBEGIN TRANSACTION和和COMMIT或或ROLLBACK一起保证了事务的四个性质一起保证了事务的四个性质n对数据库访问的两个基本操作:
9、读和写,但完成写对数据库访问的两个基本操作:读和写,但完成写操作后,数据可能暂时放在内存中,而非直接写进操作后,数据可能暂时放在内存中,而非直接写进数据库。数据库。东华大学 数学02 数据库系统原理114.2 数据库的恢复数据库的恢复nDBMS的恢复管理子系统采取一系列措施保证的恢复管理子系统采取一系列措施保证在任何情况下保持事务的原子性和持久性,确在任何情况下保持事务的原子性和持久性,确保数据不丢失、不破坏。保数据不丢失、不破坏。n定义定义4.2 系统能把数据库从被破坏、不正确的系统能把数据库从被破坏、不正确的状态恢复到最近一个正确的状态,状态恢复到最近一个正确的状态,DBMS的这的这种能力
10、称为种能力称为数据库的可恢复性数据库的可恢复性(Recovery)。东华大学 数学02 数据库系统原理124.2 恢复和原子性的联系恢复和原子性的联系银行转账系统银行转账系统A=2000 B=1000事务事务A=A-100B=B+100output(A)Output(B)断电或其断电或其他故障他故障若没有事务若没有事务的原子性,的原子性,那么重新启那么重新启动事务时要动事务时要么么A因为再执因为再执行一遍而为行一遍而为1800,要么,要么B因从未执行因从未执行而保持原值而保持原值东华大学 数学02 数据库系统原理134.2.1 典型的恢复策略典型的恢复策略(1)n基本原则:基本原则:“冗余冗余
11、”,即数据库重复存储,即数据库重复存储n典型的恢复策略:典型的恢复策略:(1)平时做好两件事:转储和建立日志平时做好两件事:转储和建立日志 n周期地周期地(比如一天一次比如一天一次)对整个数据库进行拷贝对整个数据库进行拷贝,转储到另一个磁盘或磁带一类存储介质中。转储到另一个磁盘或磁带一类存储介质中。n建立日志数据库建立日志数据库。记录事务的开始、结束及数。记录事务的开始、结束及数据每一次插入、删除和修改前后的值,并写到据每一次插入、删除和修改前后的值,并写到“日志日志”库中,以便有案可查。库中,以便有案可查。东华大学 数学02 数据库系统原理144.2.1 典型的恢复典型的恢复策略策略(2)(
12、2)一旦发生数据库故障,分两种情况进行处理:一旦发生数据库故障,分两种情况进行处理:n如果数据库遇到灾难性故障,如果数据库遇到灾难性故障,遭到物理性破坏遭到物理性破坏,则装,则装入最近一次数据库备份,再利用日志库入最近一次数据库备份,再利用日志库重做重做(REDO)已提交的事务,把数据库恢复到故障前的状态。已提交的事务,把数据库恢复到故障前的状态。n如果数据库如果数据库未遭到物理性破坏未遭到物理性破坏,但破坏了数据库的一,但破坏了数据库的一致性致性(某些数据已不正确某些数据已不正确),则利用日志库,则利用日志库撤消撤消(UNDO)所有不可靠的修改,再利用日志库所有不可靠的修改,再利用日志库重做
13、重做(REDO)已提交的、但对数据库的更新尚留在内存缓已提交的、但对数据库的更新尚留在内存缓冲区的事务,把数据库恢复到正确的状态。冲区的事务,把数据库恢复到正确的状态。东华大学 数学02 数据库系统原理154.2.2 故障类型和恢复方法故障类型和恢复方法(1)n事务故障事务故障n可以预期的事务故障:如存款余额透支等,可以预期的事务故障:如存款余额透支等,在程序中进行判断和处理,当事务执行到在程序中进行判断和处理,当事务执行到ROLLBACK时,系统对事务执行时,系统对事务执行UNDO;n非预期事务故障:如运算溢出、数据错误、非预期事务故障:如运算溢出、数据错误、死锁等,由系统直接执行死锁等,由
14、系统直接执行UNDO;东华大学 数学02 数据库系统原理164.2.2 故障类型和恢复方法故障类型和恢复方法(2)n系统故障系统故障(软故障软故障)n使系统停止运行并要求重启的故障,如硬件故障、使系统停止运行并要求重启的故障,如硬件故障、软件错误或掉电等等。系统故障使所有正在运行软件错误或掉电等等。系统故障使所有正在运行的事务非正常终止,破坏了数据的完整性或一致的事务非正常终止,破坏了数据的完整性或一致性,但不会造成数据库的物理性破坏。性,但不会造成数据库的物理性破坏。n重启时,恢复数据库:重启时,恢复数据库:对未完成的事务进行对未完成的事务进行UNDO处理;处理;对已提交但更新仍留在缓冲区的
15、事务进行对已提交但更新仍留在缓冲区的事务进行REDO处理。处理。东华大学 数学02 数据库系统原理174.2.2 故障类型和恢复方法故障类型和恢复方法(3)n介质故障介质故障(硬故障硬故障)磁盘物理故障或遭受病毒破坏,使硬盘上的物理磁盘物理故障或遭受病毒破坏,使硬盘上的物理数据库遭到毁灭性破坏。此时,恢复过程如下:数据库遭到毁灭性破坏。此时,恢复过程如下:(1)重装转储的后备副本到新的磁盘,使数据库恢复重装转储的后备副本到新的磁盘,使数据库恢复到转储时的一致状态。到转储时的一致状态。(2)在日志中找出转储以后所有已提交的事务。在日志中找出转储以后所有已提交的事务。(3)对这些已提交的事务进行对
16、这些已提交的事务进行REDO处理,将数据库处理,将数据库恢复到故障前某一时刻的一致状态。恢复到故障前某一时刻的一致状态。东华大学 数学02 数据库系统原理184.2.2 故障类型和恢复方法故障类型和恢复方法(4)n事务故障和系统故障的恢复由系统自动进行,事务故障和系统故障的恢复由系统自动进行,而介质故障的恢复需要而介质故障的恢复需要DBA配合执行。配合执行。东华大学 数学02 数据库系统原理194.2.3 检查点方法检查点方法(1)n什么是什么是检查点方法检查点方法在在DBS运行时,运行时,DBMS定时设置检查点,在检查定时设置检查点,在检查点时刻把对点时刻把对DB的修改真正写入磁盘,并在日志
17、的修改真正写入磁盘,并在日志文件中写入一条检查点记录文件中写入一条检查点记录(该过程无需人工干该过程无需人工干预预)。当。当DB恢复时,只需恢复检查点后面的事务。恢复时,只需恢复检查点后面的事务。东华大学 数学02 数据库系统原理204.2.3 检查点方法检查点方法(2)-T1T2T3T4T5事务事务检查点检查点t2故障点故障点时间时间t检查点检查点t1数据库恢复时:事务数据库恢复时:事务T1T1不必恢复不必恢复;事务事务T2T2和事务和事务T4T4必须重做必须重做(REDO);REDO);事务事务T3T3和事务和事务T5T5必须撤消必须撤消(UNDO);UNDO);东华大学 数学02 数据库
18、系统原理214.2.3 检查点方法检查点方法(3)n检查点方法的恢复算法检查点方法的恢复算法(1)根据日志文件建立事务重做队列和事务撤销队列根据日志文件建立事务重做队列和事务撤销队列;方法:正向扫描日志文件,将最近一次检查点之后方法:正向扫描日志文件,将最近一次检查点之后故障发生之前已经提交的事务,列入故障发生之前已经提交的事务,列入REDO队列;队列;将故障发生之前尚未提交的事务,列入将故障发生之前尚未提交的事务,列入UNDO队队列;列;东华大学 数学02 数据库系统原理224.2.3 检查点方法检查点方法(4)(2)对重做队列中的事务进行对重做队列中的事务进行REDO处理,对撤消队处理,对
19、撤消队列中的事务进行列中的事务进行UNDO处理处理;方法:正向扫描日志文件,对方法:正向扫描日志文件,对REDO队列中的每个队列中的每个事务重新执行对数据库的更新;反向扫描日志文事务重新执行对数据库的更新;反向扫描日志文件,对件,对UNDO队列中的每个事务执行逆操作。队列中的每个事务执行逆操作。东华大学 数学02 数据库系统原理234.2.4 SQL对事务的支持对事务的支持nSQL支持支持Commit和和Rollback来提交或回滚事务;来提交或回滚事务;执行执行rollback时,强制关闭所有游标。而执行时,强制关闭所有游标。而执行commit时游标是否关闭,可以通过时游标是否关闭,可以通过
20、SET CURSOR_ CLOSE_ON_COMMITON|OFF控制。控制。n由由begin transaction定义显式事务,它可以显式地定义显式事务,它可以显式地在其中定义事务的启动和结束。在其中定义事务的启动和结束。n若无若无begin transaction,则隐含着程序开始,则事,则隐含着程序开始,则事务开始;遇到务开始;遇到commit/rollback或程序结束,则事或程序结束,则事务结束。务结束。东华大学 数学02 数据库系统原理244.3 数据库的并发控制数据库的并发控制n4.3.1 并发操作带来的并发操作带来的4个问题个问题n4.3.2 封锁技术封锁技术n4.3.3 封
21、锁带来的问题封锁带来的问题n4.3.4 并发操作的调度并发操作的调度n4.3.5 SQL对并发处理的支持对并发处理的支持东华大学 数学02 数据库系统原理254.3.1 并发操作带来的问题并发操作带来的问题n1、丢失更新问题丢失更新问题:当两个或多个事务选择同一行,:当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数的更新将重写由其它事务所做的更新,这将导致数据丢失。据丢失。n2、读脏数据问题读脏数
22、据问题:当第二个事务选择其它事务正:当第二个事务选择其它事务正在更新的行时,第二个事务正在读取的数据还没有在更新的行时,第二个事务正在读取的数据还没有确认并且可能被其它事务所更改或回滚已做的修改。确认并且可能被其它事务所更改或回滚已做的修改。东华大学 数学02 数据库系统原理264.3.1 并发操作带来的问题并发操作带来的问题n3、错误求和问题错误求和问题:n4、不可重复读问题不可重复读问题:当第二个事务多次访问同一行当第二个事务多次访问同一行,而且,每次读取的数据都是由已更改了该数据的事而且,每次读取的数据都是由已更改了该数据的事务提交的,造成多次读取的数据不一致。务提交的,造成多次读取的数
23、据不一致。n5、幻像读问题幻像读问题:当对某行执行插入或删除操作,而:当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生该行属于某个事务正在读取的行的范围时,会发生幻像读问题。幻像读问题。东华大学 数学02 数据库系统原理274.3.1 问题问题1-丢失更新丢失更新时间时间更新事务更新事务T1数据库中数据库中A的值的值更新事务更新事务T2 t0100 t1FIND A t2FIND A t3A:=A-30 t4A:=A*2 t5UPD A t670UPD A t7200表表4.1 在时间在时间t7丢失了事务丢失了事务T1的更新的更新串行执行结果:应该为串行执行结果:应该
24、为140(T1先先T2后后)或或170(T2先先T1后后)东华大学 数学02 数据库系统原理284.3.1 问题问题2-读脏数据读脏数据(1)时间时间更新事务更新事务T1数据库中数据库中A的值的值读事务读事务T2 t0100 t1FIND A t2A:=A-30 t3UPD A t470FIND A t5*ROLLBACK*t6100表表4.2 事务事务T2在时间在时间t4读了未提交的读了未提交的A值值(70)脏数据:未提交的随后被撤销的数据。脏数据:未提交的随后被撤销的数据。T2只是读了只是读了脏数据,而未破坏数据库的完整性。脏数据,而未破坏数据库的完整性。备注备注东华大学 数学02 数据库
25、系统原理294.3.1 问题问题2-读脏数据读脏数据(2)时间时间更新事务更新事务T1数据库中数据库中A的值的值 读事务读事务T2 t0100 t1FIND A t2A:=A-30 t3UPD A t470FIND A t5A:=A*2 t6140UPD A t7 t8*ROLLBACK*t9100表表4.3事务事务T2在时间在时间t4读 了读 了未提交未提交的的A值,值,并在时并在时间间 t8丢丢失了自失了自己的更己的更新新东华大学 数学02 数据库系统原理304.3.1 问题问题3-错误求和错误求和时间时间读事务读事务T1数据库中数据库中A、B、C的值的值更新事务更新事务T2 t040,5
26、0,30 t1FIND A t2SUM:=A t3FIND B t4SUM:=SUM+B t5FIND C t6C:=C-10 t7UPD Ct840,50,20FIND At9A:=A+10t10UPD At1150,50,20COMMITt12FIND Ct13SUM:=SUM+C表表4.44.4事事务务T1T1进进行行了了不不一一致致的的分分析析40+50+20 40+50+30东华大学 数学02 数据库系统原理314.3.1 问题问题4-不可重复读不可重复读时间时间读事务读事务T1数据库中数据库中A的值的值更新事务更新事务T2 t0100 t1FIND A t2XFIND A t3A:
27、=A*2 t4UPD A t5200COMMIT t6FIND A表表4.5 事务事务T1两次读取两次读取A的值,却得到了不同的结果的值,却得到了不同的结果东华大学 数学02 数据库系统原理324.3.2 封锁技术封锁技术定义定义4.3 锁锁(lock)是一个与数据项相关的变量,对是一个与数据项相关的变量,对可能应用于该数据项上的操作而言,锁描述了该可能应用于该数据项上的操作而言,锁描述了该数据项的状态。数据项的状态。n封锁技术封锁技术1、排他型封锁、排他型封锁(X锁锁)2、共享型封锁、共享型封锁(S锁锁)东华大学 数学02 数据库系统原理334.3.2 封锁技术封锁技术 X锁1、排他型封锁排
28、他型封锁(X锁、写锁锁、写锁)n定义定义4.4 如果事务如果事务T对某个数据对某个数据R(可以是数据项、可以是数据项、记录、数据集或整个数据库记录、数据集或整个数据库)实现了实现了X锁,那么在锁,那么在T对数据对数据R解除锁之前,不允许其它事务对该数据解除锁之前,不允许其它事务对该数据添加添加任何类型的锁任何类型的锁,这种锁称为,这种锁称为“X锁锁”。东华大学 数学02 数据库系统原理344.3.2 封锁技术封锁技术 X锁n使用使用X锁的操作有两个:锁的操作有两个:(1)申请申请X锁操作锁操作“XFIND R”:对数据对数据R申请申请X锁,锁,若申请成功,则可以读写数据若申请成功,则可以读写数
29、据R;若申请不成功,;若申请不成功,则进入等待队列,一直到获准则进入等待队列,一直到获准X锁,事务才能继锁,事务才能继续。续。(2)解除解除X锁操作锁操作“XRELEASE R”:解除对数据解除对数据R的的X锁。锁。东华大学 数学02 数据库系统原理354.3.2 封锁技术封锁技术 X锁nPX协议协议:任何企图更新记录任何企图更新记录R的事务必须先执行的事务必须先执行“XFIND R”操作,以获得对操作,以获得对R的的X锁,才能读或写记录锁,才能读或写记录R;如果;如果未获准未获准X锁,那么这个事务进入等待队列,一直到获锁,那么这个事务进入等待队列,一直到获准准X锁,事务才能继续做下去。锁,事
30、务才能继续做下去。nPXC协议协议X锁的解除操作应该合并到事务的结束锁的解除操作应该合并到事务的结束(COMMIT或或ROLLBACK)操作中,在操作中,在COMMIT和和ROLLBACK中中隐含了释放隐含了释放X锁的操作。锁的操作。东华大学 数学02 数据库系统原理36例例4.7:使用:使用X锁封锁解决数据丢失锁封锁解决数据丢失(表表4.1表表4.6)时间时间更新事务更新事务T1数据库中数据库中A的值的值更新事务更新事务T2 t0100 t1XFIND A t2XFIND A(失败失败)wait(等待等待)t3A:=A-30wait t4wait t5UPD Await t670wait t
31、7COMMIT(解锁解锁)waitt8XFIND At9A:=A*2t10UPD At11140COMMIT(解锁解锁)表表4.6等等T1更更新新完完成成后后再再执执行行T2东华大学 数学02 数据库系统原理374.3.2 封锁技术封锁技术 S锁2、共享型封锁共享型封锁(S锁、读锁锁、读锁)可以并发的读可以并发的读定义定义4.5 如果事务如果事务T对某数据加上对某数据加上S锁后,仍允许其锁后,仍允许其它事务再对该数据加它事务再对该数据加S锁,但在对该数据的所有锁,但在对该数据的所有S锁锁都解除之前不允许任何事务对该数据加都解除之前不允许任何事务对该数据加X锁。锁。n使用使用S锁的操作有三个:锁
32、的操作有三个:(1)申请申请S锁操作锁操作“SFIND R”:对数据:对数据R申请申请S锁,若锁,若成功,则可以读成功,则可以读R但不可以写但不可以写R;若不成功,则进;若不成功,则进入等待队列,一直到获准入等待队列,一直到获准S锁,事务才能继续;锁,事务才能继续;东华大学 数学02 数据库系统原理384.3.2 封锁技术封锁技术 S锁(2)升级和写操作升级和写操作“UPDX R”:对数据对数据R的的S锁升级为锁升级为X锁,若成功,则可写锁,若成功,则可写R;否则进入等待队列;否则进入等待队列;(3)解除解除S锁操作锁操作“SRELEASE R”:释放对数据释放对数据R的的S锁;锁;nPS协议
33、协议获准获准S锁的事务只能读数据,若要写数据必须用锁的事务只能读数据,若要写数据必须用“UPDX R”操作把操作把S锁升级为锁升级为X锁。锁。nPSC协议协议由于由于S锁只允许读数据,所以锁只允许读数据,所以S锁的解除不必非要合锁的解除不必非要合并到事务的结束,可以随时根据需要解除并到事务的结束,可以随时根据需要解除S锁。锁。东华大学 数学02 数据库系统原理39例例4.8:使用:使用S锁封锁解决数据丢失锁封锁解决数据丢失(表表4.1表表4.7)时间时间更新事务更新事务T1数据库中数据库中A的值的值更新事务更新事务T2 t0100 t1SFIND A t2SFIND A t3A:=A-30 t
34、4A:=A*2 t5UPDX A(失败失败)t6waitUPDX A(失败失败)t7waitwaitt8waitwait表表4.7 更新未丢失,但在时间更新未丢失,但在时间t7发生了死锁发生了死锁东华大学 数学02 数据库系统原理40例:利用锁技术解决读脏数据问题例:利用锁技术解决读脏数据问题(表表4.2)时间时间更新事务更新事务T1数据库中数据库中A的值的值读事务读事务T2 t0100 t1SFIND A t2A:=A-30 t3UPDX A t470SFIND A(失败失败)t5*ROLLBACK*(释放锁释放锁)wait t6100 SFIND A表表4.2 事务事务T2在时间在时间t4
35、读了未提交的读了未提交的A值值(70)东华大学 数学02 数据库系统原理41例:利用锁技术解决读脏数据问题例:利用锁技术解决读脏数据问题(表表4.3)时间时间更新事务更新事务T1数据库中数据库中A的值的值读事务读事务T2 t0100 t1SFIND A t2A:=A-30 t3UPDX A t470SFIND A(失败失败)t5wait t6140wait t7wait t8ROLLBACK(释放锁释放锁)wait t9100SFIND AA:=A*2 t10UPDX A东华大学 数学02 数据库系统原理42例:利用锁技术解决错误求和问题例:利用锁技术解决错误求和问题(表表4.4)时间时间读事
36、务读事务T1数据库中数据库中A、B、C的值的值更新事务更新事务T2 t040,50,30 t1SFIND A t2SUM:=A t3SFIND B t4SUM:=SUM+B t5SRELEASE A t6SFIND C t7C:=C-10t8UPDX Ct940,50,20SFIND At10A:=A+10t11UPDX At1250,50,20COMMITt13SFIND Ct14SUM:=SUM+C表表4.44.4事事务务T1T1进进行行了了不不一一致致的的分分析析除非同时申请除非同时申请A,B,C的锁,否则的锁,否则无法避免错误求和问题。无法避免错误求和问题。东华大学 数学02 数据库系
37、统原理434.3.2 封锁技术封锁的相容矩阵封锁技术封锁的相容矩阵X S X S N N Y N Y Y Y Y Y T2T1 表表4.8 封锁类型的相容矩阵封锁类型的相容矩阵注:注:N=NO,不相容的请求不相容的请求 Y=YES,相容的请求相容的请求;X,S,:分别表示:分别表示X锁锁,S锁锁,无锁无锁;如果两个封锁是不相容的,则后如果两个封锁是不相容的,则后提出封锁的事务要等待。提出封锁的事务要等待。只能对同一数据同时加多个只能对同一数据同时加多个S锁;锁;而而S锁与锁与X锁、锁、X锁与锁与X锁都不能锁都不能同时加在同一数据上;同时加在同一数据上;东华大学 数学02 数据库系统原理444.
38、3.2 封锁技术封锁的粒度封锁技术封锁的粒度n封锁对象的大小称为封锁对象的大小称为封锁的粒度封锁的粒度(granularity)n封锁的对象封锁的对象 n物理单元物理单元:页页(数据页或索引页数据页或索引页)、块、块 n逻辑单元逻辑单元:属性值、属性值集合、元组、关系、属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库索引项、整个索引、整个数据库 n封锁的粒度越小,系统并发度越高,系统开销越大;封锁的粒度越小,系统并发度越高,系统开销越大;封锁的粒度越大,系统并发度越低,系统开销越小;封锁的粒度越大,系统并发度越低,系统开销越小;东华大学 数学02 数据库系统原理454.3.2 封锁
39、技术封锁的粒度封锁技术封锁的粒度nbegin transactionnupdate s set age=19 where s#=s1 n-只对表只对表S的的s#=s1条记录加了条记录加了X锁锁n-其它事务可以访问表其它事务可以访问表S中的其它记录中的其它记录n-如:如:select*from s where s#=s2n-update s set age=22 where s#=s3nselect s#,sname from s where s#=s3 n-只对表只对表S的字段的字段S#,SNAME加了加了S锁锁(减小封锁粒度,提减小封锁粒度,提高并发度高并发度),此时任何其它事务都不能修改该
40、数据。一旦,此时任何其它事务都不能修改该数据。一旦读取数据结束,便立即释放资源上的读取数据结束,便立即释放资源上的S锁。锁。东华大学 数学02 数据库系统原理464.3.3 封锁带来的问题封锁带来的问题1-活锁活锁T1XFIND AT2XFIND AT3XFIND AAA已被封锁,已被封锁,不成功,等待不成功,等待A刚被释刚被释放,成功放,成功时间点A刚被刚被T2释释放,成功放,成功T1永远等待永远等待活锁!活锁!解决方法:先来先服务解决方法:先来先服务东华大学 数学02 数据库系统原理474.3.3 封锁带来的问题封锁带来的问题2-饿死饿死事务序列A1A2A3A4A5资源AT2T2永远不能封
41、锁解决方法,改变授权方式:解决方法,改变授权方式:当事务当事务T2中请对数据项中请对数据项Q加加S锁时,授权加锁的条件是:锁时,授权加锁的条件是:不存在在数据项不存在在数据项Q上持有上持有X锁的其他事务;锁的其他事务;不存在等待对数据项不存在等待对数据项Q加锁且先于加锁且先于T2申请加锁的事务申请加锁的事务 每一个事务均请每一个事务均请求求A的的S锁,成功锁,成功后一段时间释放后一段时间释放请求请求A的的X锁锁东华大学 数学02 数据库系统原理484.3.3 封锁带来的问题封锁带来的问题3-死锁死锁表表4.9在时间在时间t4两个事务发生死锁两个事务发生死锁(1)死锁的定义:死锁的定义:定义定义
42、4.9 系统中有两个或系统中有两个或两个以上的事务都处于等两个以上的事务都处于等待状态,并且每个事务都待状态,并且每个事务都在等待其中另一个事务解在等待其中另一个事务解除封锁,它才能继续执行除封锁,它才能继续执行下去,结果造成任何一个下去,结果造成任何一个事务都无法继续执行,这事务都无法继续执行,这种现象称系统进入了种现象称系统进入了“死死锁锁”状态。状态。时间时间事务事务T1事务事务T2t0XFIND At1XFIND Bt2XFIND Bt3waitXFIND At4waitwait东华大学 数学02 数据库系统原理494.3.3 封锁带来的问题封锁带来的问题3-死锁死锁(2)死锁的预防死
43、锁的预防方法一:要求每个事务在开始执行时封锁它所使用的方法一:要求每个事务在开始执行时封锁它所使用的所有数据;要么一次全部封锁,要么全不封锁;所有数据;要么一次全部封锁,要么全不封锁;例:某事务例:某事务T需要资源需要资源A,B,C,若申请,若申请A,B成功,而申成功,而申请请C失败,那么必须释放失败,那么必须释放A,B,等待下一次重新申请。,等待下一次重新申请。方法二:系统对所有数据项强加一个封锁的顺序,所方法二:系统对所有数据项强加一个封锁的顺序,所有事务只能按顺序封锁数据项。有事务只能按顺序封锁数据项。东华大学 数学02 数据库系统原理504.3.3 封锁带来的问题封锁带来的问题3-死锁
44、死锁例:四个资源例:四个资源A,B,C,D编号编号1,2,3,4,事务,事务T1需要资需要资源源A,B,C,事务,事务T2需要资源需要资源A,C,若都按从小到大,若都按从小到大的顺序申请资源,则不会发生死锁。的顺序申请资源,则不会发生死锁。n优点:可以预防死锁;优点:可以预防死锁;n缺点:代价高,会发生许多不必要的回退;缺点:代价高,会发生许多不必要的回退;n改进:允许死锁发生,然后对死锁进行诊断、解除;改进:允许死锁发生,然后对死锁进行诊断、解除;东华大学 数学02 数据库系统原理514.3.3 封锁带来的问题封锁带来的问题3-死锁死锁(3)死锁的诊断死锁的诊断测试方法:事务等待图;测试方法
45、:事务等待图;事务用节点表示:事务用节点表示:等待关系用箭头表示;等待关系用箭头表示;死锁条件:图中存在循环;死锁条件:图中存在循环;T1T2T3T4图图4.3 事务事务的无的无环等环等待图待图图图4.4 事务事务的有的有环依环依赖图赖图T1T2T3T4有环!有环!死锁!死锁!东华大学 数学02 数据库系统原理524.3.3 封锁带来的问题封锁带来的问题3-死锁死锁(4)死锁的解除死锁的解除 DBMS定期测试死锁是否发生,若已经发生,则定期测试死锁是否发生,若已经发生,则抽取某个事务作为牺牲品,撤销该事务,释放它抽取某个事务作为牺牲品,撤销该事务,释放它所占有的所有资源,供其它事务使用。所占有
46、的所有资源,供其它事务使用。东华大学 数学02 数据库系统原理534.3.4 并发操作的调度并发操作的调度n1、事务的调度、串行调度和并发调度、事务的调度、串行调度和并发调度事务的调度事务的调度:事务的执行次序称为事务的执行次序称为“调度调度”;串行调度串行调度(Serial Schedule):多个事务依次执行多个事务依次执行;并发调度并发调度:利用分时的方法,同时处理多个事务利用分时的方法,同时处理多个事务(Concurrent Schedule);nn个不同的事务有个不同的事务有n!种不同的串行调度,而有远大于种不同的串行调度,而有远大于n!种并行调度,并行调度是否正确可根据其是否可种并
47、行调度,并行调度是否正确可根据其是否可串行化。串行化。东华大学 数学02 数据库系统原理544.3.4 并发操作的调度并发操作的调度n2、可串行化概念、可串行化概念n可串行化可串行化:如果一个并发调度的执行结果与某一串如果一个并发调度的执行结果与某一串行调度的执行结果等价,那么这个并发调度称为行调度的执行结果等价,那么这个并发调度称为“可串行化的调度可串行化的调度”,否则是不可串行化的调度;,否则是不可串行化的调度;n若并发调度是可串行化的,则认为该并发调度是正若并发调度是可串行化的,则认为该并发调度是正确的。确的。n如表如表4.1的并发调度结果,与任何一种串行调度结的并发调度结果,与任何一种
48、串行调度结果都不一致,因此,该并发调度是错误的。果都不一致,因此,该并发调度是错误的。东华大学 数学02 数据库系统原理554.3.4 并发操作的调度并发操作的调度两段封锁协议两段封锁协议n两阶段锁协议的内容:两阶段锁协议的内容:(1)在对任何一个数据进行读写操作之前,事务必须获在对任何一个数据进行读写操作之前,事务必须获得对该数据的封锁;得对该数据的封锁;(2)在释放一个封锁之后在释放一个封锁之后(在事务结束之前在事务结束之前),事务不再,事务不再获得任何其他封锁获得任何其他封锁 n遵守该协议的事务分为两个阶段:遵守该协议的事务分为两个阶段:获得封锁阶段,也称为获得封锁阶段,也称为“扩展扩展
49、”阶段;阶段;释放封锁阶段,也称为释放封锁阶段,也称为“收缩收缩”阶段阶段 东华大学 数学02 数据库系统原理564.3.4 并发操作的调度并发操作的调度n两阶段锁与可串行化的关系:两阶段锁与可串行化的关系:如果所有的事务都遵守如果所有的事务都遵守“两段封锁协议两段封锁协议”,则,则所有可能的并发调度都是可串行化的所有可能的并发调度都是可串行化的 n由于两阶段锁不能及时释放锁,因此仍有可能由于两阶段锁不能及时释放锁,因此仍有可能导致死锁的发生。导致死锁的发生。东华大学 数学02 数据库系统原理574.3.5 SQL对并发处理的支持对并发处理的支持SQL中事务的存取模式中事务的存取模式nREAD
50、 ONLY(只读型只读型):事务对数据库的操作只能:事务对数据库的操作只能是读操作。定义这个模式后,表示随后的事务均是读操作。定义这个模式后,表示随后的事务均是只读型。是只读型。nREAD WRITE(读写型读写型):事务对数据库的操作可:事务对数据库的操作可以是读操作,也可以是写操作。定义这个模式后,以是读操作,也可以是写操作。定义这个模式后,表示随后的事务均是读写型。在程序开始时默认表示随后的事务均是读写型。在程序开始时默认这种模式这种模式 东华大学 数学02 数据库系统原理584.3.5 SQL对并发处理的支持对并发处理的支持SQL中事务的存取模式中事务的存取模式n这两种模式可用下列这两