一、現象
數據庫突然斷掉,無法響應,。
二、分析
查看日志發現錯誤如下(日志路徑:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_hrpdev.log):
Mon Jan 15 13:16:00 2018 Thread 1 cannot allocate new log, sequence 8 Checkpoint not complete Current log# 1 seq# 7 mem# 0: D:\APP\ADMINISTRATOR\ORADATA\HRPDEV\REDO01.LOG Thread 1 advanced to log sequence 8 (LGWR switch) Current log# 2 seq# 8 mem# 0: D:\APP\ADMINISTRATOR\ORADATA\HRPDEV\REDO02.LOG Mon Jan 15 13:16:30 2018 Thread 1 cannot allocate new log, sequence 9 Checkpoint not complete Current log# 2 seq# 8 mem# 0: D:\APP\ADMINISTRATOR\ORADATA\HRPDEV\REDO02.LOG Thread 1 advanced to log sequence 9 (LGWR switch) Current log# 3 seq# 9 mem# 0: D:\APP\ADMINISTRATOR\ORADATA\HRPDEV\REDO03.LOG
錯誤分析:
當進行redo 切換的時候,會觸發checkpoint事件。Checkpoint做的事情之一是觸發DBWn把buffer cache中的Dirty cache磁盤。另外就是把最近的系統的SCN更新到datafile header和control file(每一個事務都有一個SCN),做第一件事的目的是為了減少由於系統突然宕機而需要的恢復時間,做第二件事實為了保證數據庫的一致性。
Checkpoint will flush dirty block to datafile, 從而觸發DBWn書寫dirty buffer,等到redo log覆蓋的dirty block全部被寫入datafile后才能使用redo log(循環使用),如果DBWn寫入過慢,LGWR必須等待DBWn完成,則這時會出現“checkpoint not completed”。 所以當出現checkpoint not competed的時候,還會伴隨cannot allocate new log的錯誤。
解決方案:
遇到這種問題,解決方案有增加日志組 或者 增大日志文件,也可以修改checkpoint 參數使得檢查點變得頻繁點。
三、解決方案
增加日志組或增大日志文件。
1、查看日志狀態
select group#,sequence#,bytes,members,status from v$log;
2、增加日志組
alter database add logfile group 4 ('D:\app\Administrator\oradata\hrpdev\redo04.log') size 500m; alter database add logfile group 5 ('D:\app\Administrator\oradata\hrpdev\redo05.log') size 500m; alter database add logfile group 6 ('D:\app\Administrator\oradata\hrpdev\redo06.log') size 500m;
四、參考鏈接
http://www.cndba.cn/Dave/article/613
http://blog.csdn.net/huaishu/article/details/16886111