Errorstack 和 oradebug 命令类似,都是帮助我们诊断错误信息。有关oradebug 参考我的Blog:

       Oracle oradebug 命令 使用说明

       ​​http://www.cndba.cn/Dave/article/1555​

 

       Errorstack事件:dump 错误栈信息,通常Oracle发生错误时前台进程将得到一条错误信息,但某些情况下得不到错误信息,可以采用这种方式得到Oracle错误。

 

使用errorstack 步骤:

1. 启用:

SQL> alter system set events='1438 trace name errorstack forever,level 10';

--表示当出现ORA-1438错误时,dump 错误栈和进程栈。

--在这里,我们关注哪些错误,就写上对应的代码就ok了。

 

2. 执行相关的SQL,获取跟踪文件

 

3. 关闭:

SQL> alter system set events='1438 trace name errorstack off';

 

或者使用oradebug:

--启用

SQL> oradebug event 1000 trace name errorstack level 10;

Statement processed.

 

--关闭

SQL> oradebug event 1000 trace name errorstack off;

Statement processed.

 

 

示例:

 

SQL> alter system set events='600 trace name errorstack forever,level 10';

System altered.

 

SQL>  select * from dba_data_files;

ERROR:

ORA-00600: internal error code, arguments: [ktfbhget-4], [6], [5], [], [], [],

[], []

no rows selected

 

SQL> alter system set events='600 trace name errorstack off';

System altered.

 

---获取trace name

SQL> oradebug setmypid

Statement processed.

SQL> oradebug tracefile_name

/u01/app/oracle/admin/dave1/udump/dave1_ora_29181.trc

SQL>

 

 

这里使用的是oradebug,这个比较方便,之前还有一个获取tracename的sql脚本,参考我的Blog:

     Oracle SQL Trace 和 10046 事件

      ​​http://www.cndba.cn/Dave/article/1452​

 

然后根据trace,分析相关的原因。

 

 

ITPUB 论坛上的一个完整示例:

       一次ora-01438错误的处理

       ​​http://www.itpub.net/thread-956435-1-1.html​

 

 

 

 

-------------------------------------------------------------------------------------------------------