第十章 数据库恢复技术
1.事务:是用户定义的一个数据库操作序列,对于这些操作要么全做,要么全不做,是一个不可分割的工作单位。
2.事务的属性COMMIT:表示提交,一次提交所有的事务,即将事务中所有对数据库的更新都写回到磁盘上;
ROLLBACK:如果事务执行中途中断了,那么将会恢复之前对数据库的操作
3.事务的ACID特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持续性(Durability)。
4.事务故障分类:
1)事务内部故障
BEGIN TRANSACTION
读取账户甲的余额BALANCE;
BALANCE=BALANCE-AMOUNT;
IF(BALANCE<0)THEN
{打印‘余额不足,不能转账’;
ROLLBACK;}
ELSE{
读账户乙的余额BALANCE1;
BALANCE1=BALANCE1+AMOUNT;
写回BALANCE1;
COMMIT;}
2)系统故障:造成系统停止运转的任何事件,使得系统要重新启动。
3)介质故障:比如存储介质的故障
4)计算机病毒
5.恢复的实现技术:
1)数据转存:静态转存(系统在无事务时进行转储操作);动态转存(转储期间允许数据库进行存取或者修改);海量转储(每次转储全部的数据库);增量转储(每次只转储上一次转储后更新过的数据),他们可以进行组合。这些策略可以组合起来使用,比如一天进行一次增量动态转储,一周进行一次海量静态转储。
2)登记日志文件
6.数据库的恢复策略:
1)事务故障的恢复:反向查日志,将更新记录进行UNDO(撤销处理),比如我在某时某刻update了Grade,那么在恢复的时候就要将update后的值变为update之前的值
2)系统故障的恢复:正向查日志,对于有开始没有COMMIT的事务进行REDO(重做)处理,对于有开始也有OMMIT的事务先进行UNDO,然后再进行REDO。
3)介质故障的恢复:重装数据库,然后重做已完成的事务
7.检查点(checkpoint):与游戏里面类似,就是周期性地将之前完成的事务进行存档,具体步骤是:
1)将当前日志缓冲区中所有的日志记录写入磁盘的日志文件中
2)在日志文件中写入一个检查点
3)把当前数据缓冲区的所有数据记录写入磁盘的数据库中 (这里面的相关事务都不需要REDO了)
4)把检查点记录在日志文件中的地址写入一个重新开始文件(注意这里不是日志文件,而是另一个文件,并且对于检查点的检查是以这个文件为标准的)
8.系统在有检查点时的恢复策略:
1)对于在检查点之前就完成的事务不需要REDO
2)对于检查点前开始,故障点前结束的事务,他们的数据可能还在数据缓冲区中,所以要REDO
3)对于检查点之后开始,故障点之前结束的事务,也要REDO,原因同上
4)对于故障点之后没有提交的事务要进行UNDO(UNDO到事务开始的地方)然后再REDO