【数据库系统原理与应用】数据库的事务处理与数据恢复.ppt
    1、第6章数据库的事务处理与数据恢复6.1事务管理的基本概念6.2并发掌握6.3数据库恢复6.1事务管理的基本概念6.1.1事务〔Transaction〕的概念6.1.2事务的状态6.1.3事务的特性6.1.4SQLServer中的事务返回首页6.1.1事务〔Transaction〕的概念事务是用户定义的数据库操作序列,这些操作可作为一个完好的工作单元。一个事务内的全部语句是一个整体,要么全部执行,要么全部不执行。即事务是不行再分的原子性工作。如在银行业务中,“从帐户A转移资金X到帐户B”就是一个典型
    2、的事务。这个事务可以分解为两个动作:〔1〕从账户A减去金额X。〔2〕在账户B中加上金额X。返回本节6.1.2事务的状态事务的基本操作包括:〔1〕事务开始〔BEGIN_TRANSACTION〕。事务开始执行。〔2〕事务读写〔Read/Write〕。事务进行数据操作。〔3〕事务结束〔END_TRANSACTION〕。事务完成全部的读/写操作。〔4〕事务交付〔COMMIT_TRANSACTION〕。事务完成全部的读/写操作,并保存操作结果。返回本节6.1.3事务的特性事务所必需具有的重要特性包括:〔1〕
    3、原子性〔Atomicity〕。〔2〕一致性〔Consistency〕。〔3〕隔离性〔Isolation〕。〔4〕长久性〔Durability〕。上述的四个特性也简称为ACID特性,保证ACID特性是事务处理
的重要任务。事务的ACID特性可能遭到破坏的缘由有:1〕多个事务并行运行时,不同事务的操作交叉执行。2〕事务在运行过程中被强迫停止。返回本节6.1.4SQLServer中的事务SQLServer的事务分为两种类型:系统提供的事务和用户定义的事务。系统提供的事务是指在执行某些语句时,一条语句就是一
    4、个事务,它的数据对象可能是一个或多个表〔视图〕,可能是表〔视图〕中的一行数据或多行数据;用户定义的事务以BEGINTRANSACTION语句开始,以COMMIT或ROLLBACK结束。其中:BEGINTRANSACTION:事务的开始标记。COMMITTRANSACTION:事务的结束标记。OLLBACKTRANSACTION:回滚。返回本节6.2并发掌握6.2.1并发操作引起的问题6.2.2封锁6.2.3封锁出现的问题及解决方法6.2.4可串行化调度6.2.5SQLServer的并发掌握机制返回
数据库故障恢复    5、首页6.2.1并发操作引起的问题对事务的并发执行假如不加以掌握,可能会导致数据库中数据的不一致性。一个最常见的并发操作的例子是飞机订票系统中的订票操作。例如,在该系统中的一个活动的序列:〔1〕事务T1〔动作1〕:甲售票员读出某航班的机票余额A,设A=16。〔2〕事务T2〔动作1〕:乙售票员读出同一航班的机票余额,A也为16。〔3〕事务T1〔动作2〕:甲售票员卖出一张机票,修改机票余额A←A-1,所以A=15,把A写入数据
库。〔4〕事务T2〔动作2〕:乙售票员卖出两张机票,修改机票余额A←A-2,所
    6、以A=14,把A写入数据库。并发操作假如不加以掌握,就可能引发以下数据的不一致性:1.丢失修改〔LostUpdate〕2.不行重复读〔UnrepeatableRead〕3.读“脏”数据〔DirtyRead〕1.丢失修改〔LostUpdate〕丢失修改是指事务T1与事务T2从数据库中读入同一数据并修改,事务T2提交的修改结果破坏了事务T1提交的修改结果,导致事务T1的修改被丢失。丢失修改的状况如图6-2所示。调度时刻事务T1事务T2t1读A=16 t2 读A=16t3A=A-1写回A=15 t4 A
    7、=A-2写回A=14(覆盖了T1对A的修改)图6-2丢失修改2.不行重复读〔UnrepeatableRead〕即事务T1两次读取同一数据项A的内容不一致。究其缘由,是在两次读操作之间,事务T2也修改了数据项A。不行重复读的状况如图6-3所示。调度时刻事务T1事务T2t1读A=50读B=100求和=150 t2 读B=100B←B*2写回B=200t3读A=50读B=200求和=250〔验算不对〕 图6-3不行重复读3.读“脏”数据〔DirtyRead〕即事务T1读取了经过事务T2修改正的数据,但是
    8、由于事务T2因为流产而撤消了对该数据的修改,数据库恢复到事务T2执行前的状态,从而导致事务T1读取的内容与数据库中的内容不一致。读“脏”数据的状况如图6-4所示。调度
时刻事务T1事务T2t1 读B=100B←B*2写回B=200t2读B=200(读入T2的脏数据) t3 ROLLBACK(B恢复为100)图6-4读“脏”数据返回本节6.2.2封锁1.封锁的类型DBMS通常提供了多种类型的封锁。一个事务对某个数据对象加锁后到底拥有什么样的掌握是由封锁类型确定的。基本的封锁类型有两种:排它锁〔Excl
    9、usiveLock,简称X锁〕和共享锁〔ShareLock,简称为S锁〕。〔1〕排它锁。〔2〕共享锁。2.保证数据一致性的封锁协议——三级封锁协议所谓封锁协议就是在对数据库加锁、持锁和释放锁时所商定的一些规则。例如,应何时申请X锁或S锁、持锁时间、何时释放等。不同的封锁规则形成了不同的封锁协议,下面介绍三级封锁协议。〔1〕一级封锁协议。〔2〕二级封锁协议。〔3〕三级封锁协议〔1〕一级封锁协议。一级封锁协议是事务T在修改数据之前必需先对其加X锁,直到事务结束才释放。一级封锁协议可有效防止丢失修改,并
    10、保证事务T是可恢复的。例如,图6-6使用一级封锁协议解决了图6-2中的丢失修改问题。调度时刻事务T1事务T2t1获得XlockA  t2读A=16XlockA等待t3A=A-1写回A=15CommitUnlockA等待等待等待t4 获得XlockA读A=15A=A-2写回A=13CommitUnlockA图6-6 没有丢失修改〔2〕二级封锁协议。二级封锁协议是在一级封锁协议加上事务T对要读
取的数据加S锁,读完后即可释放S锁。二级封锁协议除防止了丢失修改还可进一步防止读“脏”数据。例如,图6-7使用
    11、二级封锁协议解决了图6-4中读“脏”数据的问题。调度时刻事务T1事务T2t1 XlockB读B=100B←B*2写回B=200t2SlockB等待 t3 ROLLBACK(B恢复为100)UnlockBt4获得SlockB读B=100UnlockB 图6-7 不读“脏”数据〔3〕三级封锁协议。三级封锁协议是事务T在读取数据之前必需先对其加S锁,在要修改数据之前必需先对其加X锁,直到事务结束后才释放全部的锁。例如图6-8使用了三级封锁协议解决了图6-3中的不行重复读问题。调度时刻事务T1事务T2t1
    12、SlockA读A=50SlockB读B=100求和=150 t2 XlockB等待t3读A=50读B=100求和=150CommitUnlockAUnlockB等待t4 获得Xlock读B=100B←B*2写回B=200CommitUnlockB图6-8 可重复读封锁协议X锁S锁不丢失修改不读脏数据可重复读一级事务全程加锁不加锁√  二级事务全程加锁事务开始加锁,读完即释放√√ 三级事务全程加锁事务全程加锁√√√表6-1不同级别的封锁协议返回本节6.2.3封锁出现的问题及解决方法1.活锁在多个事务
    13、请求对同一数据封锁时,总是使某一事务等待的状况称为活锁。例如:假如事务T1封
锁了数据R后,T2也请求封锁R,于是T2等待。接着T3也请求封锁R。假如T1释放R上的锁后,系统首先批准了T3的请求,T2只得继续等待。接着T4也请求封锁R,T3释放R上的锁后,系统又批准了T4的请求,……,T2有可能就这样永久等待下去。2.死锁多个并发事务处于互相等待的状态,其中的每一个事务都在等待它们中的另一个事务释放封锁,这样才可以继续执行下去,但任何一个事务都没有释放自己已获得的锁,也无法获得其他事务已拥有的锁,所
    14、以只好互相等待下去,这就产生了死锁。调度时刻事务T1事务T2t1XlockA t2 XlockBt3XlockB等待 t4 XlockA等待…图6-9 死锁目前在数据库中解决死锁问题主要有两类方法,一类方法是实行肯定措施来预防死锁的发生,另一类方法是允许发生死锁,然后采纳肯定手段定期诊断系统中有无死锁,若有则解除之。〔1〕死锁的预防。1〕一次封锁法。2〕顺序封锁法。〔2〕死锁的检测与解除。返回本节6.2.4可串行化调度所谓的两段锁协议是指全部事务必需分两个阶段对数据项进行加锁和解锁。具体表达在:〔
    15、1〕在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁;〔2〕释放一个封锁之后,事务不再申请并获得对任何数据的封锁。所谓两段锁的含义是:事务分为两个阶段,第一阶段是获得封锁,也称为扩展阶段。在这个阶段,事务可以申请获得任何数据
项上的任何类型的锁,但不能释放任何锁。第二阶段是释放封锁,也称为收缩阶段。在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能申请任何锁。返回本节6.2.5SQLServer的并发掌握机制1.SQLServer的空间管理及锁的级别2.SQLServer锁的类
    16、型1.SQLServer的空间管理及锁的级别〔1〕行和行级锁。〔2〕页和页级锁。〔3〕簇和簇级锁。〔4〕表级锁。〔5〕数据库级锁。2.SQLServer锁的类型一般状况下,SQLServer能自动提供加锁功能,而不需要用户特地设置,这些功能表如今:〔1〕当使用SELECT语句访问数据库时,系统能自动用共享锁访问数据;在使用INSERT、UPDATE和DELETE语句增加、修改和删除数据时,系统回自动给使用数据加排它锁。〔2〕系统可用意向锁使锁之间的冲突最小化。意向锁建立一个锁机制的分层结构,其结构
    17、按行级锁层和表级锁层设置。〔3〕当系统修改一个页时,会自动加修改锁。修改锁和共享锁兼容,而当修改了某页后,修改锁会上升为排它锁。〔4〕当操作涉及到参考表或者索引时,SQLServer会自动提供模式稳定锁和模式修改锁。返回本节6.3数据库恢复6.3.1 数据库系统的故障6.3.2数据库备份技术6.3.3数据库恢复策略6.3.4 SQLServer的数据备份和恢复返回首页6.3.1 数据库系统的故障1.事务故障2.系统故障3.介质故障返回本节6.3.2数据库备份技术1.数据转储2.日志文件1.数据转储
    18、〔1〕静态转储和动态转储。1〕静态转储是在系统中没有运行其他事务时进行的转储操作。2〕动态转储是指转储操作与用户事务并发进行,转储期间允许对数据库进行存取或修改。〔2〕海量转储和增量转储。海量转储是指每次转储全部数据库。增量转储是指转储上次转储后更新过的数据。2.日志文件〔1〕日志文件的格式和内容。各个事务的开始〔BEGINTRANSACTION〕标记。事务标识〔标明是哪个事务〕。操作的类型〔插入、删除或修改〕。操作对象。更新前数据的旧值〔对插入操作而言,此项为空值〕。更新后数据的新值〔对删除操作
    19、而言,此项为空值〕。各个事务的结束〔COMMIT或ROLLBACK〕标记。〔2〕登记日志文件。返回本节6.3.3数据库恢复策略1.事务故障的恢复具体的恢复步骤为:〔1〕反向扫描文件日志〔即从最终向前扫描日志文件〕,查该事务的更新操作。〔2〕对该事务的更新操作执行逆操作。〔3〕重复执行〔1〕和〔2〕,恢复该事务的其他更新操作,直至读到此事务的开始标记,事务故障恢复就完成了。2.系统故障的恢复具体的恢复步骤为:〔1〕正向扫描日志文件〔即从头扫描日志文件〕,出在故障发生前已经提交的事务〔这些事务既有
    20、BERGINTRANSACTION记录,也有COMMIT记录〕,将其事务标识记入重做〔RED
O〕队列。〔2〕对撤消队列中的各个事务进行撤消〔UNDO〕处理。〔3〕对重做队列中的各个事务进行重做〔REDO〕处理。3.介质故障的恢复介质故障是指磁盘上的物理数据和日志文件均遭破坏,这是最严重的一种故障。恢复方法是首先重装数据库,使数据库管理系统能正常运行,然后利用介质损坏前对数据库已做的备份恢复数据库。具体的恢复步骤为:〔1〕装入最新的后备数据库副本,使数据库恢复到最近一次转储时的一致性状态。〔2〕装入
    21、相应的日志文件副本〔转储结束时刻的日志文件的副本〕,重做已完成的事务。返回本节6.3.4 SQLServer的数据备份和恢复 SQLServer具有比较强大的数据备份和恢复功能,提供了海量备份和增量备份、静态备份和动态备份等多种备份方式,并具有日志和检查点两种数据恢复技术。用户可以使用Transact-SQL语句,也可以通过SQLServer的EnterpriseManager进行数据备份和数据恢复。SQLServer2000提供了四种数据库备份与恢复数据的方式:全库备份:备份整个数据库。日志备份
    22、:备份日志文件。差异备份:仅备份自上次全库备份后被修改正的数据页。文件或文件组备份:对组成数据库的文件或文件组进行单独的备份。例6-1对BOOKSYS数据库做一次全库备份。备份〔BACKUP〕语句如下:BACKUPDATABASEBOOKSYS/*对BOOKSYS数
据库进行备份*/TOMYBAK/*备份设备为MYBAK*/WITHINIT,/*此设备将覆盖以前全部的备份*/NAME=BOOKSYSBAK/*备份的名字为BOOKSYSBAK*/例6-2
    23、对BOOKSYS数据库做一次差异备份。备份〔BACKUP〕语句如下:BACKUPDATABASEBOOKSYS/*对BOOKSYS数据库进行备份*/TOMYBAK/*备份设备为MYBAK*/WITHDIFFERENTIAL,/*差异备份*/NOINTI,/*新备份的数据库将添加到备份设备原备份内容的后面*/NAME=BOOKSYSBAK/*备份的名字为BOOKSYSBAK*/例6-3对BOOKSYS数据库做一次日志备份。备份(BACKUP)语句如下:
    24、BACKUPLOGBOOKSYS/*对BOOKSYS进行日志备份*/TOMYBAK/*备份设备为MYBAK*/WITHNOINIT,/*新备份的数据库将添加到备份设备原备份内容的后面*/NAME=BOOKSYSBAK/*备份的名字为BOOKSYSBAK*/返回本节小结本章介绍了事务的相关概念、并发掌握机制和数据库的备份和恢复技术三大内容。事务在数据库中是特别重要的概念,事务中的操作是一个完好的工作单元,这些操作或者全部胜利,或者全部不胜利。并发掌握是
    25、指当同时执行多个事务时,为了保证一个事务的执行不受其他事务的干扰所实行的措施。并发掌握的主要方法是加锁,依据对数据操作的不同,锁分为共享锁和排它锁两种。为
了保证并发执行的事务是正确的,一般要求事务遵守两段锁协议,即在一个事务中明显地分为锁申请期和释放期,它是保证事务是可并发执行的充分条件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。