您好,欢迎访问三七文档
1第十八讲事务管理2学完本讲后,你应该能够了解:1.事务是数据库操作的原子单位,具有原子性、一致性、隔离性和持久性等特性;2.事务的并发导致的四种不一致性:丢失修改(LostUpdate)、不可重复读(Non-RepeatableRead)、读“脏”数据(DirtyRead)和幻像(Phantom).并发控制的正确性准则是事务并发执行的可串行化3.两段锁协议的工作原理;4.ANSISQL-92支持的四种隔离级别5.数据库恢复的目标是在故障发生时,确保事务的原子性和持久性;6.DBMS提供备份机制、日志机制、检查点机制来协助数据库故障恢复;7.事务编程时,应尽量避免事务中的用户交互.本讲主要目标3一.事务的定义与特性二.事务并发导致的四种不一致性三.两段锁协议四.隔离级别五.数据库恢复的目标六.数据库恢复的技术七.事务编程4事务的定义与特性5事务的定义与特性1.多用户同时操作同一张表导致的问题假定两个顾客使用主副信用卡分别几乎同时刻在两台ATM上取款;有可能两人各取出500元,而帐户上只减少500元。导致此种情形出现的原因是什么?SQL的原子操作单位与操作系统的原子操作单位不同?6事务的定义与特性2.数据的不一致性假定数据库系统自动检测参照完整性约束,有下面操作:操作一:删除学号为“95002”的学生的信息;操作二:插入选课信息(“95005”,“C8”,85);操作三:修改学号“95001”的学生的学号为“95008”;这些操作如何实现?这些操作一定能用SQL实现吗?7事务的定义与特性学号S#姓名SN性别SE年龄SA所在系SD95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004张立男19IS课程号C#课程名CN先行课CP#学分CCC1数据库C54C2数学2C3信息系统C14C4操作系统C63C5数据结构C74C6数据处理2C7PASCAL语言C64学号S#课程号C#成绩G95001C19295001C28595001C38895002C29095002C380SCSC8事务的定义与特性解决方法一:DELETEFROMSWHERES#=‘95002’;DELETEFROMSCWHERES#=‘95002’;两个SQL删除命令的顺序不合适会破坏参照完整性WHERE2.数据的不一致性操作一:删除学号为“95002”的学生的信息;解决方法二:DELETEFROMSCWHERES#=‘95002’;DELETEFROMSS#=‘95002’;破坏参照完整性9事务的定义与特性2.数据的不一致性操作二:插入选课信息(“95005”,“C8”,85);INSERTINTOSVALUES(’95005’,null,null,null,null);INSERTINTOCVALUES(’C8’,null,null);INSERTINTOSCVALUES(’95005’,’C8’,85);三个SQL插入命令的顺序不合适会破坏参照完整性10事务的定义与特性2.数据的不一致性操作三:修改学号“95001”的学生的学号为“95008”;UPDATESSETS#=‘95008’WHERES#=‘95001’;UPDATESCSETS#=‘95008’WHERES#=‘95001’;UPDATESCSETS#=‘95008’WHERES#=‘95001’;UPDATESSETS#=‘95008’WHERES#=‘95001’;破坏参照完整性破坏参照完整性11事务的定义与特性2.数据的不一致性为何出现该问题?¾参照完整性的检测时机是在关系数据库的原子操作之前或之后¾一个SQL语句是关系数据库的原子操作;如何解决该问题?修改原子操作的定义——可以将多个SQL语句定义为一个原子操作事务12事务的定义与特性3.事务的定义事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。13事务的定义与特性4.事务的特性——ACID特性¾原子性(Atomicity)事务包含的一组更新操作是原子不可分的,即更新操作对于数据库而言,要么全做,要么全不做,不能部分地完成¾一致性(Consistency)当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态14事务的定义与特性4.事务的特性——ACID特性¾隔离性(Isolation)系统允许的任何交错操作调度等价于某一个串行调度,即可串行性¾持久性(Durability)当事务发出提交语句后系统返回到程序逻辑时,必须保证该事务是可恢复的15事务的定义与特性4.事务的特性——ACID特性破坏事务ACID特性的因素有:(1)多个事务的并行运行(2)事务的运行过程中被强行停止并发控制故障恢复16事务的定义与特性5.在程序中定义事务BEGINTRANSACTIONEXECSQLCOMMITEXECSQLROLLBACK17事务并发导致的不一致性18事务并发导致的不一致性1.事务隔离性为了有效地利用系统资源,即使是在集中式数据库系统中,多个事务也进行并发(concurrency)。由于操作系统的原子操作单位——进程,与数据库系统的原子操作单位——事务不同,DBMS需要对事务进行并发控制,以保证数据库中数据的一致性。19事务并发导致的不一致性DBMSDBT1T2T3存取数据库顺序并发控制的目标是什么?事务的并发操作何时会破坏事务的隔离性?会出现哪些不一致性?保证事务的隔离性,从而保证数据库的一致性事务操作相同的数据并且这些操作是冲突的20X=25WriteX事务并发导致的不一致性2.事务并发导致的不一致性例:两个事务T1和T2读入同一数据并修改丢失修改T2T1TimeX=10ReadX(10)ReadX(10)ComputeX+=10(20)ComputeX+=15(25)WriteXX=20X=2521事务并发导致的不一致性2.事务并发导致的不一致性例:事务T2读取数据X后,事务T1更新该数据X,T2再读X时,得到的结果不同不可重复读T2T1TimeReadX(10)ReadX(10)ComputeX+=15(25)X=25WriteXCommitReadX(25)X=1022事务并发导致的不一致性2.事务并发导致的不一致性例:事务T1修改数据X,事务T2读取X后,T1被撤消,并将X恢复原值,T2读到的值与数据库不一致读“脏”数据T1T2TimeX=10ReadX(25)ReadX(10)ComputeX+=15(25)X=25WriteXX=10RollbackUsevalueofXthatwasnevercommittedtoDB23事务并发导致的不一致性2.事务并发导致的不一致性例:事务T1按一定条件读数据库后,事务T2删除或插入了某些记录,当事务T1再次按相同条件读数据库时,发现某些记录神秘消失或出现,幻像T2T1TimeSelectcount(*)whererank32rowsreturnedInsertJones,6Smith,4Brewer,7Jones,6Smith,4Brewer,7Selectcount(*)whererank33rowsreturned24事务并发导致的不一致性2.事务并发导致的不一致性‹丢失修改(LostUpdate)‹不可重复读(Non-RepeatableRead)‹读“脏”数据(DirtyRead)‹幻像(Phantom)25事务并发导致的不一致性3.出现不一致性的原因不同事务间冲突操作的无序执行。如何控制冲突操作的无序?26事务并发导致的不一致性4.并发控制的方法DBMSDBT1T2T3存取数据库顺序两种途径:‹对共享的资源DB进行控制--加锁‹对事务规定一定的顺序--时间戳27两段锁协议28两段锁协议1.封锁的定义所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他事务对该数据的操作受到一定限制。29两段锁协议2.封锁机制¾基本的封锁类型‹排它锁(ExclusiveLocks,简称X锁,也称写锁)‹共享锁(ShareLocks,简称S锁,也称读锁)封锁类型的相容矩阵:T1T2XSXNNYSNYYYYYN=No,不相容Y=Yes,相容30两段锁协议3.并发事务的正确性准则并发事务正确性准则----多个事务的并发执行是正确的,当且仅当其结果与某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。例如,现在有两个事务T1和T2:事务T1:读B;A=B+1;写回A;事务T2:读A;B=A+1;写回B;假定A,B的初值均为2,则按T1→T2次序执行结果为A=3,B=4;按T2→T1次序执行结果为A=4,B=3;31两段锁协议什么样的方法能保证调度的可串行化?两段锁协议32两段锁协议4.两段锁协议所谓两段锁协议是指所有事务必须分两个阶段对数据项加锁和解锁。‹在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;‹在释放一个封锁之后,事务不再申请和获得任何其他封锁。“两段”----获得(扩展)阶段和释放(收缩)阶段33两段锁协议4.两段锁协议两段锁协议是可串行化的充分条件,而不是必要条件34两段锁协议5.活锁如果事务T1封锁了数据R,事务T2又申请封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又申请封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待。如何解决活锁?先来先服务35两段锁协议6.死锁¾死锁的定义如果事务T1封锁了数据R1,事务T2封锁了R2,然后,T1请求封锁R2,等待。接着T2请求封锁R1,等待。这样就出现了T1等待T2,而T2又在等待T1的局面。这两个事务永远不能结束,形成死锁。如何解决死锁?预防诊断与解除36两段锁协议6.死锁¾死锁的诊断与解除诊断:‹超时法--超过规定的时间就认为发生死锁不足:可能误判死锁,也可能不能及时发现死锁‹等待图法--事务为结点,边表示事务等待的情况,若T1等待T2,则T1→T2。系统周期性地检测事务等待图,若图中存在回路,则出现死锁。解除:选择一个处理死锁代价最小的事务,撤消。37隔离级别38隔离级别1.隔离级别SQL-92定义了下列四种隔离级别(SQLServer支持所有这些隔离级别):¾未提交读(事务隔离的最低级别,仅可保证不读取物理损坏的数据)¾提交读(SQLServer默认级别)¾可重复读¾可串行读(事务隔离的最高级别,事务之间完全隔离)。39隔离级别2.隔离级别允许不同类型的行为隔离级别脏读不可重复读取幻像未提交读是是是提交读否是是可重复读否否是可串行读否否否40隔离级别3.SQLServer设置隔离级别SETTRANSACTIONISOLATIONLEVEL语法:SETTRANSACTIONISOLATIONLEVEL{READCOMMITTED|READUNCOMMITTED|REPEATABLEREAD|SERIALIZABLE}41数据库恢复的目标42数据库恢复的目标1.数据库恢复的目标----把数据库从错误状态恢复到某一个已知的正确状态(亦称为一致状态或完整状态)的功能。何时需要对数据库进行恢复?故障数据库恢复有何特点?43数据库恢复的目标2.数据库恢复的特点DBMSDB应用程序应用程序OS缓冲区因为DB与内存用户工作区之间的数据交换是通过缓冲区进行的,而这个交换一般是以缓冲区是否满来触发的。因此,有可能提交事务的数据仍在缓冲区而没有写到DB中,而未提交事务的数据却写到了DB中。所以,故障恢复时,可能既要REDO已经提交了的事务,又要UNDO未提交的事务,以保证事务的原子性44数据库恢复的技术45数据库恢复的技术1.数据库恢复的基本原理冗余如何建立冗余数据?如何利用这些冗余数据实施数据库恢复?恢复的实现技术恢复的实现策略46数据库恢复的技术2.建立冗余数据最常用的技术‹数据转储----即DBA定期地将整个数据库复制到磁带或另一个磁
本文标题:C事务的方法详细
链接地址:https://www.777doc.com/doc-2907404 .html