1、故障分类:
事务故障:有两种错误可能造成事务执行失败:
1)逻辑错误:事务由于某些内部条件而无法继续正常进行,这样的内部条件如非法输入、找不到数据、溢出或超出资源限制。
2)系统错误:系统进入一种不良状态(如死锁),结果事务无法继续正常进行。但该事务可以在以后的某个时间重新执行。
系统崩溃:硬件故障,或是数据库软件或操作系统的漏洞,导致易失性存储器内容的丢失,并使得事务处理停止。而非易失性存储器仍完好无损。
磁盘故障:在数据传送操作过程中由于磁头损坏或故障造成磁盘块上的内容丢失。
2、存储器分类:
易失性存储器、非易失性存储器、稳定存储器。
3、在磁盘存储器和内存间进行块传送有以下几种结果:
成功完成:传送的信息安全到达目的地。
部分失败:传送过程中发生故障,目标块有不正确信息。
完全失败:传送过程中故障发生的足够早,目标块仍完好无损。
我们要求,如果数据传送故障发生,系统能检测到并且调用恢复过程将块恢复称为一致的状态。为达到这个要求,系统必须为每个逻辑数据库块维护两个物理块;若是镜像磁盘,则两个两块在同一个地点;若是远程备份,则一个块在本地,另一个在远程结点。输出操作的执行如下:
1)将信息写入第一个物理块。
2)当第一个写成功完成时,将相同信息写入第二个物理块。
3)只有第二次写成功完成时,输出才算完成。
4、数据库分成以块为单位的定长存储单位。块是磁盘数据传送的单位,可能包含多个数据项。
位于磁盘上的块称为物理块,临时位于主存的块称为缓冲块,内存中用于临时存放块的区域称为磁盘缓冲区。
5、日志记录:
使用最广泛的记录数据库修改的结构就是日志。日志是日志记录的序列,它记录数据库中的所有更新活动。更新日志记录描述一次数据库写操作,它具有如下几个字段:
事务标识:是执行write操作的事务的唯一标识。
数据项标识:是所写数据项的唯一标识。通常是数据项在磁盘上的位置,包括数据项锁驻留的块的块标识和块内偏移量。
旧值:是数据项的写前值。
新值:是数据项的写后值。
6、每次事务执行写操作时,必须在数据库修改前建立该写操作的日志记录并把它加到日志中。一旦日志记录已存在,就可以根据需要将修改输出到数据库中。并且,我们有能力撤销已经输出到数据库中的修改,这是利用日志记录中的旧值字段来做的。为了从系统故障和磁盘故障中恢复时能使用日志记录,日志必须存放在稳定存储器中。
7、数据库修改:
我们需要考虑事务在进行数据项修改中锁采取的步骤:
1)事务在主存中自己私有的部分执行某些计算。
2)事务修改主存的磁盘缓冲区中包含该数据项的数据块。
3)数据库系统执行output操作,将数据块写到磁盘中。
8、延迟修改:一个事务直到它提交时都没有修改数据库。
立即修改:数据库修改在事务仍然活跃时发生。
延迟修改所付出的开销是,事务需要创建更新过的所有数据项的本地拷贝;而且如果一个事务读它更新过的数据项,它必须从自己的本地拷贝中读。
9、恢复算法必须考虑多种因素,包括:
1)有可能一个事务已经提交了,虽然它所做的某些数据库修改还仅仅存在于主存的磁盘缓冲区中,而不在磁盘上的数据库中。
2)有可能处于活动状态的一个事务已经修改了数据库,而作为后来发生的故障的结果,这个事务需要中止。
undo使用一个日志记录,将该日志记录中指明的数据项设置为旧值。
redo.......新值。
恢复算法通常要求如果一个数据项被一个事务修改了,那么在该事务提交或中止前不允许其他事务修改该数据项。
10、事务提交:
当一个事务的commit日志记录——这是该事务的最后一个日志记录——输出到稳定存储器后,我们就说这个事务提交了,这时所有更早的日志记录都已经输出到稳定存储器中。
11、检查点:
它(a)在执行检查点操作的过程中不允许执行任何更新,(b)在执行检查点的过程中将所有更新过的缓存块都输出到磁盘。
检查点的执行过程如下:
1)将当前位于主存的所有日志记录输出到稳定存储器。
2)将所有修改的缓冲块输出到磁盘。
3)将一个日志记录<checkpoint L>输出到稳定存储器,其中L是执行检查点时正活跃的事务的列表。
模糊检查点:它即使在缓冲块正在写出时也允许事务执行更新。
12、系统崩溃后的恢复:分两阶段进行:
1)重做阶段:系统通过从最后一个检查点开始正向地扫描日志来重放所有事务的更新。
2)撤销阶段:系统回滚undo-list中的所有事务。它通过从尾端开始反向扫描日志来执行回滚。
13、在主存中的数据块输出到数据库(非易失性存储器)前,所有与该数据块中数据有关的日志记录必须已经输出到稳定存储器。值一规则称为先写日志(WAL)规则。
将缓冲的日志写到磁盘有时称为强制日志。
14、操作系统在缓冲区管理中的作用:
1)数据库系统保留部分主存作为缓冲区,并对它进行管理,而不是让操作系统来管理。
2)数据库系统在操作系统提供的虚拟内存中实现其缓冲区。
因此,如果数据库缓冲区在虚拟内存中,数据库文件和虚拟内存中的缓冲区之间的数据传送必须由数据库系统管理,它可以实现先写日志的要求。
15、数据库转储的一种方法要求在转储过程中不能有事务处于活跃状态,并且必须执行一个类似于检查点的过程:
1)将当前位于主存的所有日志记录输出到稳定存储器中。
2)将所有缓冲块输出到磁盘中。
3)将日志记录<dump>输出到稳定存储器中。
16、记关于操作的这类信息的日志称作逻辑日志。记关于旧值和新值信息的日志称作物理日志,对应的日志记录称作物理日志记录。逻辑日志仅用于撤销,不用于重做。redo操作全部使用物理日志记录来执行。要执行逻辑redo或undo,磁盘上的数据库状态必须是操作一致的,即不应该有任何操作的部分影响。
如果一个操作在一行上执行多次与执行一次结果相同,则成该操作是幂等的。
17、远程备份系统:
高可用性:即系统不能使用的时间必须非常短。
在一个站点执行事务处理,称为主站点,使用一个远程备份站点,这里有主站点所有数据的备份。远程备份站点有时也叫辅助站点,随着更新在主站点上执行,远程站点必须保持与主站点同步。
当主站点发生故障,远程备份站点就接管处理。但它首先使用源于主站点的(也许已过时的)数据拷贝,以及收到的来自主站点的日志记录执行恢复。
18、在设计一个远程备份系统时有几个问题必须考虑:
故障检测。控制权的移交。恢复时间。提交时间。(一方保险,两方强保险,两方保险)
19、必须能联机访问的稳定存储器用镜像磁盘或RAID的其他形式模拟,它们提供冗余数据存储。脱机或归档稳定存储器可能是数据的多个磁盘备份,并存放在物理上安全的地方。
20、在延迟修改机制中,事务执行时所有write操作要延迟到事务提交时才执行,那时,系统在执行延迟写中会用到日志中与该事务有关的信息。日志记录不需要包含已更新的数据项的旧值。
21、不完全事务的撤销写出特殊的read-only日志记录和一个abort日志记录。然后,就可以认为该事务已完成,不必再对它进行撤销。
22、在事务处理所基于的存储模型中,主存储器中有一个日志缓冲区,一个数据库缓冲区和一个系统缓冲区。系统缓冲区中有系统目标码页面和事务的局部工作区域。