日期:2014-05-16 浏览次数:20389 次
数据库系统在正常停止时,会将内存中的所有日志信息、被更新过的数据写入磁盘,然后在日志文件的最后写入检查点记录 。这样,所有已提交事务的更新全部落实到磁盘中,数据库中的数据就处于一致状态。如果数据库系统异常中止,那么仍旧在内存中的日志信息、被更新的数据就全部丢失。在这种情况下,一些事务的更新处理可能只是部分落实到磁盘中,从而导致数据库处于不一致状态。重新启动时,在用户能够访问数据库中的数据之前,数据库系统要首先使用日志信息,使数据库处于一致状态。这就是崩溃恢复。
?
1. 崩溃恢复的处理方式
?
崩溃恢复就是数据库系统在异常中止后重新启动,使用数据库日志文件,恢复数据库到一致状态的过程。其关键点就是:决定那些事务需要重做,那些事务需要回滚。通过重做已提交事务,避免事务的丢失;通过回滚未完成事务,删除造成数据不一致的部分事务更新 。所有这些操作,是依靠日志文件以及文件中的最后一个检查点记录 来实现的。
数据库系统在执行检查点操作时,暂停所有事务的更新处理,将内存中的所有日志信息、被更新过的数据写入磁盘,作永久性的保存。基于日志文件的最后一个检查点记录,系统中的事务有以下三种状态:
( 1 )在此之前已经提交。这些事务的更新,肯定已经落实到磁盘,不需要考虑。
( 2 )在此之前已开始执行,但还没有提交。这些事务的更新,在此之前的部分已经落实到磁盘,但无从确定在此之后的部分是否落实到磁盘。
( 3 )在此之后开始。这些事务的更新,不能确定是否落实到磁盘。
因此,在崩溃恢复时,系统只要基于日志文件中的最后一个检查点记录,找到所有无法确定其更新全部写入磁盘的事务。对这些事务,由最后一个检查点记录开始,正向扫描日志文件,重新执行有提交记录的事务,没有提交记录的事务就进行回滚 ,这样就可以使数据库处于一致状态。
?
2. 崩溃恢复的处理步骤
?
对崩溃恢复,数据库系统大体上采用以下步骤进行处理:
( 1 )从日志文件的最后一条记录开始,由后至前扫描日志记录,找到日志文件中的最后一个检查点记录。