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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值