事务的基本概念
事务所用户定义的一个数据库操作序列,这些操作要么全做,要么全部做,是一个不可分割的工作单位。事务以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
事务的ACID特性
事务具有4个特性,原子性、一致性、隔离性和持续性。
数据库恢复概述
数据库发生故障导致运行事务正常或非正常中断,影响数据库中数据的正确性,轻则丢失数据,重则破坏数据库。因此数据库需具备恢复功能,数据库系统所采用的恢复技术上衡量系统性能优劣的重要指标。
故障的种类
事务内部的故障:非预期的,不能由应用程序处理的。针对这类操作的恢复为事务撤销(UNDO)。
系统故障:造成系统停止运转的任何事件,使系统需要重新启动。针对这类操作的恢复除撤销为完成事务外,还需要重做(REDO)已做的事务。
介质故障:系统故障为软故障,介质故障为硬故障。
计算机病毒:人为的故障或破坏的计算机程序,造成计算机系统包括数据库的损坏。
总结而言分数据库本身被破坏或数据不准确。
恢复的实现技术
恢复机制涉及的2个关键问题是如何建立冗余数据以及如何利用冗余数据实施数据恢复。建立冗余数据常用技术上数据转储和登记日志文件。
数据转储
转储分为静态转储和动态转储。动态转储可以克服静态转储的缺点,不要等待正在运行的用户事务结束,也不会影响新事务的运行,但是不能转储结束后的后援副本数据不能把这正确有效。因此必须把转储期间各事务对数据库的修改活动登记下来,建立日志文件。这样后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。
转储还可以分为海量转储和增量转储。加上状态区分,包含动态海量转储、动态增量转储、静态海量转储和静态增量转储。
- 转储
数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程,这些备用的数据称为后备副本或后援副本。
- 静态转储
系统中午运行事务时进行的转储操作
- 动态转储
储期间允许对数据库进行存取或修改
登记日志文件
日志文件时用来记录事务对数据库的更新操作的文件。日志文件中需要登记的内容包括:事务的开始标记、结束标记、更新操作;每个日志记录的内容主要包括:事务标识、操作的类型、操作对象、更新前数据的旧值、更新后数据的新值。以数据库为单位的日志文件,日志记录的内容包括事务标记和被更新的数据块。
日志文件的作用
事务故障恢复和系统故障恢复必须用日志文件;在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效恢复数据库;在静态转储方式下也可以建立日志文件,当数据库毁坏后可重新装入后援副本吧数据库恢复到转储结束时刻的正确状态,然后利用日志文件吧已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。这样不必重新运行已完成的事务程序就可以把数据库恢复到故障前某一时刻的正确状态。
登记日志文件
为保证数据库是可恢复的,登记日志文件必须遵循两条原则:登记的次序严格按并发事务执行的时间次序;必须先写日志文件后写数据库。
恢复策略
不同的故障恢复策略与方法不一样,主要分三种:事故故障的恢复、系统故障的恢复、介质故障的恢复
事故故障的恢复
事务在运行至正确终止点前被终止,这时恢复子系统应利用日志文件撤销(UNDO)此事务对数据库进行的修改。事务故障的恢复由系统自动完成,对用户数透明的。
反向扫描日志问(即从最后向前扫描日志文件),查找该事务的更新操作;对该事务的更新作逆行操作,即将日志记录中“更新前的值”写入数据库;继续反向扫描日志文件,查找该事务的其他更新操作,并作同样处理;如此处理下去,直至读到此事务的开始标记,事务故障恢复完成。
系统故障的恢复
正向扫描日志文件(即从头扫描日志文件),找出在故障发生前已经提交的事务,将其事务标记入重做队列,同时找出故障发生时尚未完成的事务,将其事务标记记入撤销队列;对撤销队列中的各个事务进行撤销处理;对重做队列中的各个事务进行重做处理。
系统故障造成数据库不一致状态原因有2个,一个是未完成事务对数据库的更新可能已经写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此恢复操作就是要撤销故障发生时未完成的事务,重做已完成的事务。该恢复过程是系统重新启动时自动完成的,不需要用户干预。
介质故障的恢复
介质故障一般是磁盘上的物理数据和日志文件被破坏,需要重装数据库名如何重做已完成的事务。
装入最新的数据库后备副本(离故障发生时刻最近的转储副本),使数据库恢复到最近一次转储时的一致性状态;装入相应的日志文件副本,重做已完成的事务,即首先扫描日志文件,找出故障发生时已提交的事务的标识,将其记入重做队列,然后正向扫描日志文件,对重做队列中的所有事务进行重做处理。
具有检查点的恢复技术
该技术在日志文件中增加一类新的记录——检查点记录,增加一个重新开始文件,并让恢复子系统在登录日志文件期间动态地维护日志。使用检查点方法可以改善恢复效率。
检查点记录的内容包括:建立检查点时刻所有正在执行的事务清单;这些事务最近一个日志记录的地址。动态维护日志文件的方法是周期性地执行建立检查点、保存数据库状态的操作。
动态维护日志文件操作步骤
将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上;在日志文件中写入一个检查点记录;将当前数据缓冲区的所有数据记录写入磁盘的数据库中;将检查点记录在日志文件中的地址写入一个重新开始文件。
系统使用检查点方法进行恢复的步骤
从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录;由该检查点记录得到检查点建立时所有正在执行的食物清单ACTIVE-LIST;从检查点开始正向扫描日志文件;对UNDO-LIST中每个事务执行UNDO操作,对REDO-LIST中每个事物执行REDO操作。
数据库镜像
为避免磁盘截止出现故障影响数据库的可用性,数据库管理系统提供了数据库镜像功能用于数据库恢复。即根据数据库管理员的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,当主数据更新时,数据库管理系统自动把更新后的数据复制过去,由数据库管理系统自动保证镜像数据与主数据库的一致性。