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
-------------------------------------------------------------------------------------------------------