这节讲ERRORSTACK的使用
1. ERRORSTACK介绍
ERRORSTACK可以用来:
- 获取失败的SQL语句
- 分析Oracle 错误的原因 (e.g ORA 4030, ORA- 4031).
- 也可以被用于hang 的分析
- 他也包含一些执行计划,可以用它来斩断ORA-1652错误(Excessive temp usage)
2. 调用ERRORSTACK
ERRORSTACK可以在system和session层调用
例如我们要诊断ORA - 1652错误
ERRORSTACK只有三个等级,三级为最高
代码语言:javascript复制alter system set events '1652 trace name errorstack level 3';
alter session set events '1652 trace name errorstack level 3';
我们也可以使用oradebug命令来调用
这里分析1234进程
代码语言:javascript复制sqlplus "/ as sysdba"
oradebug setospid 1234
oradebug unlimit
oradebug dump errorstack 3
3. ORA - 942错误
我们这里简单的以ORA - 942 table or view does not exist为例
代码语言:javascript复制SQL> alter session set events '942 trace name errorstack level 3';
Session altered.
SQL>
SQL> select * from err;
select * from err
*
ERROR at line 1:
ORA-00942: table or view does not exist
trace文件会在user_dump_dest 目录下
4. 文件分析
主要包含如下几个部分:
4.1 Trace file Header
主要为Oracle实例的一些信息
4.2 Failing SQL
这里显示的是失败的SQL
代码语言:javascript复制dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=3, mask=0x0)
----- Error Stack Dump -----
----- Current SQL Statement for this session (sql_id=0wjycn5zghkkh) -----
select * from err
4.3 Call Stack
这里为一些内存里面的内容,看不懂~
一般为Oracle官方或开发人员分析使用
也可以用来搜索metalink查看相关的bug
4.4 PROCESS STATE DUMP
这里主要有一些进程相关的信息,Oracle Process id (pid),OS Process Id (ospid) 等
4.5 Execution Plan
这里语句没有执行成功所有没有执行计划
6.参考资料
https://askdba.org/weblog/2008/04/errorstack-oracle-debugging-event/
Oracle ErrorStack 使用和阅读详解