新博客http://www.cnblogs.com/zhjh256 欢迎访问
分类: Oracle
2007-12-24 21:40:05
在日志切换期间,将完全禁用日志产生,这是通过设置sga变量反应日志切换的原因(日志切换的条件)和状态。将要在日志缓冲中分配空间的会话将检查该变量并且如果日志切换正在进行,会话将在与日志切换相关的事件上等待一段时间。除非日志切换完成,否则任何日志缓冲空间分配都不会进行。因此在日志切换期间将看不到log buffer space事件。
LGWR在日志切换期间执行以下任务:
·执行一个控制文件事务选择下一个日志文件并清除其控制文件条目。通常,具有最小日志文件序列号的日志将被选择。必要时日志切换将在此时被推迟直到DBWn完成日志切换检查点(只要能够保证下一次重用时完成就可以了),以及ARCn归档其内容。如果这样,会话可能会等待log file switch (archiving needed) log / file switch (checkpoint incomplete),而不是log file switch completion。
·其刷新log buffer中任何剩余的重做到磁盘,然后写最后一个重做记录的SCN到日志文件头块。在这些写完成后,LGWR将关闭日志文件;
·然后其推进SCN并执行第二个控制文件事务将下一个日志文件标记为current,并标记旧的为ACTIVE。一旦DBWn完成日志切换检查点,那个日志文件的状态将为INACTIVE。如果数据库在ARCHIVELOG模式下,LGWR会通过控制文件的日志文件条目将先前的日志文件放入归档链表(见v$archive)并且唤醒ARCn归档。
·最终,LGWR打开新的日志文件组成员并写入新的日志序列号和低SCN到头块。然后重新起用重做写。
在日志文件打开和关闭期间写入日志文件头块的操作是log file single write操作。因为头信息中包括文件号,而文件号是唯一的。