今天在看一条应用反应说执行不出来的SQL时,发现数据库中的AWR报告没有自动收集,最近的还停留在9月26日的,查看当前的时间是10月20日,如今有意思了,怎么会这样的,默认的AWR是1个小时收集一次,保留8天(此数据库版本为11.2.0.4)。sql
下面来检查一下AWR的设置状况:数据库
SQL> show parameter statistics_level NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ statistics_level string TYPICAL SQL> select * from dba_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- -------------------------------- --------------------------- ---------- 2574787718 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT
statistics_level设置为TYPICAL:收集数据库自动管理的全部数据。bash
收集间隔snap_interval为1小时,保留时间retention为8天。服务器
这些设置都正常。oracle
又想到AWR收集后存放在SYSAUX表空间中,是否是表空间满了么?ide
TABLESPACE_NAME SIZE_G FREE_G USED_PCT ------------------------------ --------------- --------------- ---------- SYSAUX 2.78 0.51 81.50%
能够看到有虽然SYSAUX表空间不大但也还有空间,看来也不是SYSAUX表空间的问题。日志
再去看最近后台的alert日志也都是正常的日志切换内容没有任何的报错的信息。blog
既然没有报错,那我手动收集一下AWR老是能够的吧,因而执行下面的语句进程
SQL> exec dbms_workload_repository.modify_snapshot_settings(retention=>21600); BEGIN dbms_workload_repository.modify_snapshot_settings(retention=>21600); END; * ERROR at line 1: ORA-13516: AWR Operation failed: only a subset of SQL can be issued ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 174 ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 222 ORA-06512: at line 1
从上面能够看到,手动收集AWR报错,那既然有报错信息就能够根据报错进行处理。文档
先来看看这个报错是什么意思
SQL> !oerr ora 13516 13516, 00000, "AWR Operation failed: %s" // *Cause: The operation failed because AWR is not available. The // possible causes are: AWR schema not yet created; AWR // not enabled; AWR schema not initialized; or database // not open or is running in READONLY or STANDBY mode. // *Action: check the above conditions and retry the operation.
后面开始在MOS和百度进行搜索,MOS找到一篇文档与这里的报错很类似,但对应的版本10.1到10.2,与我当前的版本不一致。后来看到一篇博客介绍说到AWR是由后台进程MMON执行的收集的,因而查看服务器上的MMON进程
SQL> !ps -ef |grep mmon oracle 15484 2406 1 13:24:07 pts/5 0:00 grep mmon
竟然没有!
看来MMON进程是被DOWN掉了,那又是何时DOWN掉的呢,又想到AWR停留在9月26日,因而去看那天的alert日志,结果有重大发现:
看到26号那天晚上对数据库作了shutdown操做,但很快shutdown又被取消了,这过程当中MMON和MMNL进程被down了,后来数据库一直没有重启过,因此MMON进程就一直也没有启动,因而今天的问题就被发现了。
如今找到了缘由,那如何解决呢?怎么把MMON进程可以启起来呢?
上网查了不少,没有找到相关的解决方法。最终的方法就是把数据库重启。
若是有大神知道如何在不重启实例的状况把MMON进程启动,但愿赐教。