日志切换失败,数据库hang住,造成数据库假死

快要下班了,研发打电话过来反馈数据库连不上了,没办法,按照常规检查看一下

1、查看监听状态 lsnrctl status 一切正常

2、查看数据库状态 sqlplus / as sysdba 发现空实例

3、启动实例,报out of memory错误,启动不起来

1、查看oracle警报日志发现报了一个cannot allocate new log 日志切换失败,造成数据库hang住,假死。


日志切换失败,数据库hang住,造成数据库假死

5、遇到这类问题,不要着急重启数据库,一般过一会数据库就会正常。

6、实际上是个比较常见的错误。通常来说是因为在日志被写满时会切换 日志组,这个时候会触发一次checkpoint,DBWR会把内存中的脏块往数据文件中写,只要没写结束就不会释放这个日志组。如果归档模式被开启的 话,还会伴随着ARCH写归档的过程。如果redo log产生的过快,当CPK或归档还没完成,LGWR已经把其余的日志组写满,又要往当前的日志组里面写redo log的时候,这个时候就会发生冲突,数据库就会被挂起。并且一直会往alert.log中写类似上面的错误信息。

7、如果只是偶然情况,可以暂时忽略,如果出现很频繁,则可以从以下几个方面调整:

1) 增加更多redo log文件

2)创建更大的redo log文件

3) 使DBWR更快一些,比如启用异步I/O,使用DBWR I/O从属进程,或者使用多个DBWR进程等等

4) 确保磁盘没有因为竞争导致I/O变慢

5)让checkpoint发生的更频繁(比如缩小log checkpoint interval等),改方法仅针对Checkpoint not complete状况。

日志切换失败,数据库hang住,造成数据库假死


分享到:


相關文章: