某互聯網公司Oracle數據庫突然宕機,運維人員給的信息是數據庫無法連接,並報出了ORA-01034和ORA-27102的錯誤,如下圖所示:
接着讓運維人員把Oracle的告警日誌發來,查看該數據庫的告警日誌後沒有發現含有shutdown的任何信息(說明Oracle的實例還有Open狀態),卻發現告警日誌中有大量的“Thread 1 cannot allocate new log, sequence 320xx Checkpoint not complete”。
現象說明:
觸發checkpoint條件其中有一條是redo切換時,觀察告警日誌發現大量的日誌切換動作,說明該checkpoint就是由redo日誌切換造成的,而checkpoint會觸發DBWn將data buffer cache中的dirty block刷到datafile中,而checkpoint not complete說明data buffer cache中的dirty block還沒有寫到datafile中redo就又要切換,就會出現“Thread 1 cannot allocate new log”。
解決方法:
讓運維人員在Oracle數據庫服務器端登錄,將redo日誌加大,並增加日誌組的數量
添加日誌組:
alter database add logfile group 4 ('/data/oradata/orcl/redo04.log') size 500m;
alter database add logfile group 5 ('/data/oradata/orcl/redo05.log') size 500m;
alter database add logfile group 6 ('/data/oradata/orcl/redo08.log') size 500m;
查看當前日誌組的大小及狀態:
select group#,sequence#,bytes,members,status from v$log;
當原日誌組的狀態爲 INACTIVE 時刪除再添加成500M的redo file;
刪除日誌組的命令如下:
alter database drop logfile group n;
修改redo日誌的大小並添加日誌組後問題解決。