文档介绍:数据库系统概论第七章
第1页,共43页,编辑于2022年,星期六
事务
事务定义
事务是用户定义的一个数据库操作序列构成,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务与应用程序是两个概念,一般来说,一个应用程储必须等待正在运行的事务结束才能开始,而新的事务必须等待转储结束才能执行,降低了数据库的可用性。
第15页,共43页,编辑于2022年,星期六
恢复的实现技术
动态转储
动态转储是指转储期间允许对数据库进行存取或修改,即转储和用户事务可以并发执行。动态转储克服了静态转储的缺点,但除了转储数据库的数据以外,还必须把转储期间各事务对数据库的修改记录下来,这样才能保证把数据库恢复到某一时刻的一致状态。
第16页,共43页,编辑于2022年,星期六
恢复的实现技术
转储的方式
海量转储
海量转储指每次转储全部数据库。
增量转储
增量转储指每次只转储上一次转储后更新过的数据。
第17页,共43页,编辑于2022年,星期六
恢复的实现技术
转储状态
动态转储
静态转储
转储
方式
海量转储
动态海量转储
静态海量转储
增量转储
动态增量转储
静态增量转储
第18页,共43页,编辑于2022年,星期六
恢复的实现技术
登录日志文件
日志文件是用来记录事务对数据库的更新操作的文件。日志文件主要有两种格式:以记录为单位的日志文件和以数据块为单位的日志文件。
以记录为单位的日志文件记录的内容包括:
各个事务的开始标记
各个事务的结束标记
各个事务的所有更新操作
第19页,共43页,编辑于2022年,星期六
恢复的实现技术
上述内容均作为日志文件中的一个日志记录,每个日志记录的内容包括:
事务标识(标明是哪个事务)
操作的类型(插入、删除或修改)
操作对象(记录的内部标识)
更新前数据的旧值(对插入操作,此项为空)
更新后数据的新值(对删除操作,此项为空)
对于以数据块为单位的日志文件,日志记录的内容包括事务标识以及更新前和更新后的数据块。
第20页,共43页,编辑于2022年,星期六
恢复的实现技术
日志文件的作用
日志文件可以用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质恢复。其具体作用是:
事务故障和系统故障恢复必须使用日志文件。
在动态转储方式中必须建立日志文件,后备副本和日志文件综合起来才能保证备份的一致性,和有效地恢复数据库。
在静态转储方式中,也可以建立日志文件。当数据库发生故障时,用后援副本把数据库恢复到转储结束时的正确状态,然后利用日志文件重做已完成的事务,把数据库恢复到故障前的正确状态。
第21页,共43页,编辑于2022年,星期六
恢复的实现技术
登记日志文件
为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:
登记的次序严格按并发事务执行的时间顺序。
必须先写日志文件,后写数据库。
第22页,共43页,编辑于2022年,星期六
恢复策略
事务故障的恢复
事务故障是指事务在运行至正常终止点之前被终止。事务故障的恢复是由系统自动完成的,其步骤是:
反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
对该事务的更新操作执行逆操作,即将日志记录中的“更新前的值”写入数据库。这时,如果记录中是插入操作,则相当于做删除操作;如果记录中是删除操作,则相当于做插入操作;如果记录中是修改操作,则用修改前的值代替修改后的值。
继续反向扫描日志文件,查找该事务的更新操作,并做同样处理
如此处理下去,直到读到该事务的开始标志。
第23页,共43页,编辑于2022年,星期六
恢复策略
系统故障的恢复
系统故障造成数据库不一致状态的原因有两个,一是未完成的事务对数据库的更新可能已经写入数据库;二是已提交事务对数据库的更新可能还留在缓冲区还没来得及写入数据库。因此恢复操作就是要撤销故障发生时未完成的事务,重做已完成的事务。
第24页,共43页,编辑于2022年,星期六
恢复策略
其步骤是:
正向扫描日志文件,找出故障发生前已经提交的事务,将其事务标识记入重做(REDO)队列。同时找出故障发生时尚未完成的事务,将其事务标识记入撤销(UNDO)队列。
对撤销队列中的各个事务进行UNDO处理。即反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志文件中的“更新前的值”写入数据库。
对重做队列中的各个事务进行REDO处理。即正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作,即将日志文件中的“更新后的值”写入数据库。
第25页,共43页,编辑于2022年,星期六
恢复策略
介质故障的恢复
介质故障将全部或部分地破坏数据库甚至是日志文件,其恢复的方法是:
装