跟着罗老师学数据库
案例场景:
数据库收集不到awr报告,一个snap_id也没有。
执行创建awr快照exec dbms_workload_repository.create_snapshot();也是卡住没有结果。
现在要分析这个语句卡住的原因
分析方法:
开一个窗口执行exec dbms_workload_repository.create_snapshot(); ,这个语句执行两三分钟之后(这个语句继续执行这不要中断)另开一个窗口执行如下内容:
SQL>sqlplus "/ as sysdba"
如果不行,用 sqlplus -prelim / as sysdba
SQL> oradebug setmypid
Statement processed.
SQL> oradebug unlimit;
Statement processed.
SQL> oradebug hanganalyze 3
Hang Analysis in /u01/app/oracle/diag/rdbms/luo/luo/trace/luo_ora_10495.trc
等一两分钟后再执行
SQL> oradebug hanganalyze 3
Hang Analysis in /u01/app/oracle/diag/rdbms/luo/luo/trace/luo_ora_10495.trc
SQL> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/luo/luo/trace/luo_ora_10495.trc
这些语句都执行完成之后就可以中断exec dbms_workload_repository.create_snapshot();的执行了。
分析/u01/app/oracle/diag/rdbms/luo/luo/trace/luo_ora_10495.trc就可以知道exec dbms_workload_repository.create_snapshot(); 卡住的原因。
trace文件的报错如下:
结论:
数据库有故障了,4分多钟都不以一个库缓存锁。 可以尝试重启数据库试下能不能创建快照。
最终:
重启数据库后,数据库可以正常创建快照