2008年(239)
分类: Oracle
2008-06-17 23:06:58
日志写进程负责将内存中的日志信息写入日志文件。一个日志文件可能包含很多事务的操作记录,这些事务可能已经提交,也可能仍旧在执行。根据日志文件中所包含事务的执行情况,日志文件可以处于活动状态和不活动状态。
1. 日志文件的活动状态
处于活动状态下的日志文件,当前系统的运行仍旧可能需要读取该日志文件中的日志信息,因而日志文件不能被删除或者覆盖。
一个日志文件不管是否被写满,只要满足下面的两个条件之一,就处于活动状态:
(1)日志文件中包含尚未提交或者回退的事务
数据库日志是数据一致性的有效保障。一个被执行的事务,最终可能正常完成,也可能由于错误、条件不满足等原因而失败、要求回退。如果出现事务回退,并且事务的日志信息已经存入日志文件,数据库系统就需要从日志文件中获取事务已经执行的更新操作,反方向执行这些操作以完成事务回退。
(2)日志文件中所包含事务的更新尚未从内存中写到硬盘上
数据库系统为多个用户提供服务。基于性能的考虑,内存中的数据被更新后,并不是马上写入磁盘,而是仍旧存放在内存缓冲区中。如果系统出现故障,内存中的数据更新没能写入硬盘,系统再次启动后就要读取日志文件中的日志信息,重新执行该事务。
2. 日志文件的不活动状态
处于不活动状态下的日志文件,当前系统的运行不再需要读取该日志文件中的日志信息,因而日志文件可以被删除或者覆盖。
一个日志文件被写满之后,只有同时满足下面的两个条件,才处于不活动状态:
(1)所包含事务已经全部提交或者回退
(2)所包含事务的更新已经全部从内存中写到磁盘上