一、概述
在Oracle数据库运行过程中,我们经常会遇到这样或那样的错误,但是错误的提示并不具体,加大了我们在诊断问题时的难度。
ErrorStack是Oracle提供的一种对于错误堆栈进行跟踪的方法,通过设置跟踪可以将一些指定错误的后台信息详细的转储出来,写入跟踪文件,帮助我们诊断问题。
备注:
1、当oracle发生关键的错误诸如:ora-600,Errorstack是自动被oracle dump写入trace文件中。
2、当你在alert.log里面看见这类错误,并提示已经产生trace文件。打开对应的trace后,你会发现这类trace文件一般都是以“ksedmp:internal or fatal error"开头,"kesdmp"意味着Kernel Service Error Dump,这一行下面的内容就是errorstack记录的错误堆栈!
Errorstack dump也可以通过使用Oradebug errorstack 3手工调用,前提是先使用Oradebug setospid设定了目标进程之后。Oradebug Errorstack对于诊断一个session似乎Hang住(但是在v$session_wait里面并未出现合理的wait event)或者是比正常时消耗更多资源时,获取当前session执行sql、具体的变量值等等信息,从而帮助你找到问题根源!
二、跟踪级别和方法
ErrorStack主要有4个跟踪级别,如下
0 仅转储错误堆栈
1 转储错误堆栈和函数调用堆栈
2 Level 1 + ProcessState
3 Level 2 + Context area (一般我们诊断问题,都是使用这个级别的跟踪!)
使用方法
alter system set events=‘2019 trace name errorstack forever,level 10’;
然后可以手工执行以下存储过程,获得跟踪文件,再关闭跟踪:
alter system set events=‘2019 trace name errorstack off’;
2019为ORA报错代码,当遇到该报错时会产生详细的trace文件




