Wirte By tanelpoder,translation by me.
当Oracle发生关键的错误诸如:ora-600,Errorstack dump是自动被oracle dump。当你在alert.log里面看见错误,将产生trace文件,trace中以“ksedmp:internal or fatal
error"开头,诸如这样的错误(ORA-7445或者ORA-600附有一些参数)。"kesdmp"意味着Kernel Service Error Dump,所以此行下面的就是errorstack dump。
Errorstack dump也可以被手动的调用通过使用Oradebug errorstack 3(当使用Oradebug setospid设定了目标进程之后)。Oradebug Errorstack对于当一个session似乎Hang(
但是在v$session_wait里面并未出现合理的wait event)或者是比正常时消耗更多资源并且你想知道当前sql的具体变量值。
Errorstack trace文件有很多信息,对于我们troubleshooting或多或少都有用。但是大量的数据和二进制的转储可能使你摸不着头脑,这里我将给你展示可以理解的一些结构。
在这片文章里我们将探讨以下话题:
1.从errorstack trace file中发现当前正在执行SQL文本。
2.从errorstack trace file中发现当前正在执行PL/SQL package和PL/SQL source code line number。
3.从errorstack trace file中发现当前bind variable value。
4.从errorstack trace file中发现一个cursor正在使用多少private memory(UGA)。
我将在下面的阐述中粘贴一个errorstack dump的相关部分。
1.从errorstack trace file中发现当前正在执行SQL文本。
你将非常容易找到当前sql的文本信息,这个语句在tracefile的前端("Current SQL statement for this session")部分: