开发反馈业务系统无法登录,排查了到数据库部分时候,发现日志里有“ Thread 1 cannot allocate new log ”错误,该错误是redo日志组无法切换,初步查看了日志情况,没有可切换空余的日志组。
各种状态含义
CURRENT:指当前的日志文件,在进行实例恢复时是必须的;
ACTIVE:是指活动的非当前日志,在进行实例恢复时会被用到。Active状态意味着,Checkpoint尚未完成,因此该日志文件不能被覆盖。这时也不能drop掉,应该执行alter system checkpoint; –强制执行检查点;然后在操作。
INACTIVE:是非活动日志,在实例恢复时不再需要,但在介质恢复时可能需要。
UNUSED:表示该日志从未被写入,可能是刚添加的,或RESETLOGS后被重置。
查看日志状态
1 | --查看日志组状态 |
1 | --查看当前日志组成员 |
增加日志组
1 | SQL> alter database add logfile group 4 ('/u01/app/oracle/oradata/orcl/redo04.log') size 1024m; |
切换到新增的日志组上
1 | SQL> alter system switch logfile; --可多次执行,直到CURRENT指向新建的日志组 |
删除日志组
1 | -- 只能删除INACTIVE状态日志, 只能从数据库中删除日志,并不删除物理文件,需要手动rm删除系统中的物理文件。 |
ps:
查看占用资源较多的进程,根据进程系统进程id查看sql语句;
1 | SELECT addr FROM v$process WHERE spid='418736'; |
如果遇到复杂的性能问题,还是建议生成awr报告,更加详细的反馈数据库的性能,瓶颈,根据具体项去做优化。
1 | SYS@orcl> @?/rdbms/admin/awrrpt.sql |
参考链接: