Thread 1 cannot allocate new log 引起的宕机事故 发生 oracle宕机事故,alert文件中报告如下错误: Fri Jan 12 04:07:49 2007 Thread 1 cannot allocate new log, sequence 187398 Checkpoint not complete 产生此问题的原因分析: CKPT 这个后台进程的就是做 checkpoint 这件事,checkpoint 被触发的条件之一是就发生 redo log switch,Checkpoint 的具体工作包括: • 触发 DBWn 向磁盘写入 Dirty data
• 把 checkpoint 信息更新到 datafile header 上
• 把 checkpoint 信息更新到 control file 里
Checkpoint 做的事情之一是触发 DBWn 把 buffer cache 中的 Dirty cache 磁盘
另外就是把最近的系统的 SCN 更新到 datafile header 和 control file(每一个事务都有一个 SCN),做第一件事的目的是为了减少由于系统突然宕机而需要的恢复时间,做第二件事实为了保证数据库的一致性
而 redo log switch 就是触发 checkpoint 的主要的事件(event) ,当第一组 redo log 被用完之后,Oracle 就要停止使用当前的 redo log,转而使用另一组 redo log,这就叫做 log switch
而 log switch 触发 checkpoint
Oracle 要求的最少的 redo group 的是 2 个,但我们一般都建议配置 3 个或 3 个以上 redo log group
假设我们只有两个 redo log group