oracle debug

oradebug hanganalyze 3

Oracle HANG 后可能会导致sqlplus 无法连接至数据库,从而无法获得Oracle 系统和进程的状态,这会使定位问题时缺少强有力的依据。所幸的是Oracle 10g 的sqlplus 中增加了
-prelim 选项,当数据库HANG 时使用该选项依然能够连接至数据库中,从而能获得数据库
的状态。prelim 的使用方法如下所示:
$ sqlplus -prelim "/as sysdba"
使用prelim 模式连接至数据库后,不可以查询数据字典,但可以关闭数据库,如下所示:
SQL> select status from v$instance;
select status from v$instance
*E
RROR at line 1:
ORA-01012: not logged on
SQL> shutdown abort
ORACLE instance shut down
如果Oracle 客户端是10g,但数据库是9i,依然可以用-prelim 连接至数据库:
$ sqlplus -prelim /nolog

 数据库局部性HANG 处理过程
数据库局部性HANG,通常表现为部分会话HANG。观察会话是否为HANG,查询V$SESSION_WAIT 视图,然后观察该会话的P1、P2、P3 值,如果该值在不停地改变,则说明会话没有HANG,而可能只是比较慢。
如果要进一步观察会话HANG 或者慢的原因, 则可以对该会话设置10046 事件和errorstack 来帮助诊断故障原因。如需要对9834 号进程做跟踪,其语法如下所示:
connect / as sysdba
SQL>ALTER SESSION SET tracefile_identifier = 'STACK_10046';
SQL>oradebug setospid 9834
SQL>oradebug unlimit
SQL>oradebug event 10046 trace name context forever,level 12
SQL>oradebug dump errorstack 3
SQL>oradebug dump errorstack 3
SQL>oradebug dump errorstack 3
SQL>oradebug tracefile_name
SQL>oradebug event 10046 trace name context off


使用以下命令跟踪这些客户端进程,观察SQL 的执行计划。
SQL> oradebug setospid xxx;
SQL> oradebug unlimit;
SQL> oradebug event 10046 trace name context forever, level 12;
SQL> oradebug event 10046 trace name context off;

你可能感兴趣的:(学习笔记,oracle)