您好,欢迎访问三七文档
第七章事务管理7.1事务的基本概念1、事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务和程序关系:(1)程序是静止的,事务是动态的。事务是程序的执行而不是程序本身。(2)一个程序可分为多个独立部分同时执行,每一执行则是一个不同的事务,即一个程序中可包含多个事务事务生成:用户显式地定义事务由DBMS按缺省自动划分事务7.1事务的基本概念在SQL语言中,定义事务的语句有三条:BEGINTRANSACTION事务开始COMMIT-----事务提交ROLLBACK-----事务回滚事务的分类:(1)只读型SETTRANSACTIONREADONLY(2)读/写型SETTRANSACTIONREADWRITE7.1事务的基本概念2、事务的状态执行事务事务无法继续正常执行事务回滚,数据库恢复到事务开始前状态最后一条语句被执行后成功完成,永久写入数据库活动状态失败状态中止状态提交状态局部提交状态事务定义语句与状态的关系ROLLBACKCOMMITBEGINTRANSACTION7.1事务的基本概念3、事务的特性(ACID)原子性一致性隔离性持续性ACID特性遭到破坏的因素有:(1)多个事务并发运行时,不同事务的操作交叉执行;(2)事务在运行过程中被强行停止。第七章事务管理4、更新事务的执行与恢复更新事务的执行要求:更新事务在活动状态下对数据库的任何修改都不能直接在磁盘中进行,而只能在内存缓冲区中进行。更新事务的恢复:(1)从活动状态转入失败状态的恢复(2)从局部提交状态转入失败状态的恢复。7.2数据库恢复概述数据库的恢复:指DBMS必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能。7.3恢复的实现技术数据库恢复原理:冗余建立冗余数据常用技术:数据转储登记日志文件一、数据转储1.数据转储的概念转储即DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。正常运行TaTbTf故障发生点得到副本转储运行事务恢复装副本重新运行事务数据转储与恢复[例]7.3恢复的实现技术2、静态转储和动态转储(1)静态转储:是在系统中无运行事务时进行的转储操作。静态转储得到的一定是一个数据一致性的副本。(2)动态转储:是指转储期间允许对数据库进行存取或修改。即转储和用户事务可以并发执行。3、海量转储和增量转储(1)海量转储:每次转储全部数据库。(2)增量转储:每次只转储上一次转储后更新过的数据。7.3恢复的实现技术二、登记(建立)日志文件1、日志文件的格式和内容日志文件—用来记录事务对数据库的更新操作的文件。日志文件主要有两种格式:以记录为单位以数据块为单位(1)以记录为单位的日志文件内容:事务开始、结束标记操作对象(表、属性等)更新前、后值7.3恢复的实现技术例:日志文件事务编号表元组标识属性更新前更新后201**事务开始201库存k102在库数量410310201应收帐801-2341233余额10006000201**事务提交(2)以数据库为单位的日志文件内容:事务标识更新前、后的数据块7.3恢复的实现技术2、日志文件的作用进行事务故障、系统故障恢复,并协助后备副本进行介质故障恢复。3、登记日志文件应遵循两条原则:(1)登记的次序严格按并发事务执行的时间次序。(2)必须先写日志文件,后写数据库。正常运行TaTbTf故障发生点静态转储运行事务利用日志文件恢复事务登记日志文件登记日志文件恢复装副本继续运行7.4故障恢复一、事务故障及恢复事务故障:是指事务运行过程中由于种种原因使事务未运行至正常终止点而夭折的情况。如:运算溢出死锁而被选中撤销该事务违反了完整性规则等事务故障的恢复:(1)反向扫描日志文件,查找该事务的更新操作。(2)对该事务的更新操作执行逆操作。(3)重复(1)、(2)直到遇此事务的开始标记。7.4故障恢复二、系统故障及恢复(软故障)系统故障:是指造成系统停止运转的任何事件,使得系统要重新启动。例如,特定类型的硬件错误(CPU故障)、操作系统故障、DBMS代码错误、突然停电等。系统故障的恢复:恢复操作:要撤销故障发生时未完成的事务重做(REDO)已完成的事务系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。7.4故障恢复三、介质故障(硬故障)介质故障:是指外存设备故障。如:磁盘损坏磁头碰撞盘面瞬时强磁场干扰介质故障的恢复:(1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。(2)装入相应的日志文件副本,重做已完成的事务。介质故障的恢复需要DBA介入。但DBA只需要重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供的恢复命令即可,具体的恢复操作仍由DBMS完成。7.4故障恢复四、具有检查点的恢复技术利用日志文件进行数据库恢复时存在的问题:(1)搜索整个日志文件将耗费大量的时间。(2)很多需要REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,然而恢复子系统又重新执行了这些操作,浪费了大量时间。解决:使用检查点方法。当事务T在一个检查点之前提交,T对数据库所做的修改一定都已经写入数据库,这样,在进行恢复处理时,就不必对事务T执行REDO操作,从而改善了恢复效率。7.4故障恢复增加:①日志文件中的检查点记录②一个重新开始文件并让恢复子系统在登录日志文件期间动态地维护日志。检查点记录的内容包括:①建立检查点时刻所有正在执行的事务清单(Ti)。②各事务最近一个日志记录的地址(Di)。Ci的记录地址Cj的记录地址重新开始文件日志文件T1D1T2D2…日志文件检查点记录检查点Ci的重新开始记录7.4故障恢复动态维护日志文件的方法是周期性地执行:建立检查点,保存数据库状态。具体步骤是:①将当前所有日志记录写入磁盘日志文件上;②在日志文件中写入一个检查点记录;③将当前所有数据记录写入磁盘的数据库中;④把检查点记录在日志文件中的地址写入重新开始文件。恢复系统将根据事务的不同状态采取不同的恢复策略:时间系统故障Ti检查点TcT1T2T3T4T5在检查点前开始,在其后且故障点前提交撤销重做不重做7.4故障恢复系统使用检查点方法进行恢复的步骤是:①从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。②由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。③从检查点开始正向扫描日志文件如有新开始的事务Tj,把Tj暂时放入UNDO-LIST队列;如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列;直到日志文件结束。④对UNDO-LIST中的每个事务执行UNDO操作,对REDO-LIST中的每个事务执行REDO操作。7.4故障恢复五、数据库镜像根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上。DBMS自动保证镜像数据与主数据的一致性。作用:一旦出现介质故障,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。在没有出现故障时,数据库镜像还可以用于并发操作,即当一个用户对数据加排它锁修改数据时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。7.4故障恢复图7.6数据库镜像update镜像DB复制应用1应用3应用4应用2read恢复update7.6.1并发控制的概念并发操作—在多用户共享系统中,多个用户同时存取同一数据的情形称为并发操作。并发操作可能带来的问题:(1)破坏数据库的一致性(2)破坏事务的隔离性并发操作带来的三类数据不一致性:1.丢失修改T1、T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果。A=16甲事务①读出A=16乙事务②读出A=16③A—1写回④A—1写回A=157.6.1并发控制的概念2.不可重复读T1读数据后,T2执行更新操作,使T1无法再现前一次读取结果。B=100甲事务①读出B=100乙事务②删除B③读不出B不可重复读包括三种情况:(1)某事务两次读同一数据时,得到的值不同。(2)某事务再次按相同条件读取数据时,发现记录丢失。(3)某事务再次按相同条件读取数据时,发现多了记录。7.6.1并发控制的概念3.脏读T1修改数据并写回磁盘,T2读取同一数据后,T1被撤销即数据恢复原值,T2读的数据与DB中的不一致,称“脏”数据。C=100甲事务①读出CC*2写回乙事务②读出C=200③撤销C=200C=100“脏”数据并发控制方法:封锁7.6.2封锁与封锁协议封锁:指事务T在对某个数据对象操作之前,对其加锁。在T未释放锁之前,其他的事务不能更新此数据对象。基本的封锁类型有两种:排它锁(X锁或写锁):保证其他事务在T释放A上的锁之前,不能再读取和修改A。共享锁(S锁或读锁):保证其他事务可以读A,但在T释放A上的S锁之前,不能对A做任何修改。数据对象A事务TS锁T可读、不可改A禁止加X锁数据对象A事务TX锁T可读、修改A事务Ti禁止加锁事务Ti可加S锁7.6.2封锁与封锁协议封锁协议:对数据对象加锁时,约定的规则。封锁协议是为了保证并发操作的正确调度的。三级封锁协议:1、一级封锁协议是事务T在修改数据R之前必须先对其加X锁,直到事务T结束(COMMIT和ROLLBACK)才释放。作用:可防止丢失修改,并保证事务T是可恢复的。例:表7.47.6.2封锁与封锁协议2、二级封锁协议是一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。作用:防止丢失修改,还可进一步防止读“脏”数据。例:表7.6例:表7.53、三级封锁协议是一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。作用:除防止丢失修改和读“脏”数据外,还可防止不可重复读。7.6.3活锁与死锁活锁:使某个事务永远处于等待状态,而得不到执行的现象称为活锁。事务T1锁请求加锁事务T2事务T3事务T4等待数据R避免活锁的方法:先来先服务。7.6.3活锁与死锁死锁:并发执行的事务在没有任何外力的作用下都无法执行下去的僵持状态称为死锁。数据R1数据R2事务T1事务T2请求加锁7.6.3活锁与死锁1、死锁的预防(OS中预防死锁的方法)(1)一次加锁法要求每个事务必须一次将所要使用的数据全部加锁。缺点:降低系统的并发度;难于确定每个事务所要封锁的数据对象。(2)顺序封锁法预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。缺点:难于按规定的顺序施加封锁。注意:这些方法并不适合数据库的特点。7.6.3活锁与死锁2、死锁的诊断(1)超时法事务等待时间超过规定时限,就认为发生了死锁。(2)等待图法检测事务等待图中是否存在回路。3、死锁的解除选择一个处理代价最小的事务,将其撤消,释放此事务持有的所有锁。7.6.4并发调度的可串行性调度:事务的执行次序。调度方式:(1)串行调度(2)并行调度串行调度:多个事务依次执行的调度。并行调度:利用分时的方法处理多个事务的调度。可串行化调度:如果一个并发调度执行的结果等价于某一个串行调度的结果,称这种调度策略为可串行化的调度。7.6.4并发调度的可串行性例:表7.8的串行调度(T1→T2)执行结果:A=9000,B=31000;例:表7.9的串行调度(T2→T1)执行结果:A=8000,B=32000;例:表7.10并行调度执行结果:A=9000,B=31000;与表7.8的串行调度结果相同,为可串行化调度。例:表7.11并行调度执行结果:A=10000,B=22000;与表7.8、7.9的串行调度结果都相同,为不可串行化调度。注意:(1)一组事务并发调度的正确性准则:可串行化调度。(2)一组事务的可串行化调度不惟一。7.6.4并发调度的可串行性两段锁协议:指所有事务必须
本文标题:数据库7章
链接地址:https://www.777doc.com/doc-3632281 .html