Oracle ErrorStack 使用和阅读具体解释
打开相应的trace后。你会发现这类trace文件一般都是以“ksedmp:internal or fatal error"开头,"kesdmp"意味着Kernel Service
Error Dump,这一行以下的内容就是errorstack记录的错误堆栈!
Errorstack对于诊断一个session似乎Hang住(可是在v$session_wait里面并未出现合理的wait event)或者是比正常时消耗很多其它资源时。获取当前session运行sql、详细的变量值等等信息,从而帮助你找到问题根源!
- 0 仅转储错误堆栈
- 1 转储错误堆栈和函数调用堆栈
- 2 Level 1 + ProcessState
- 3 Level 2 + Context area (一般我们诊断问题,都是使用这个级别的跟踪。)
- 实例级别:alter system set events='984 trace name errorstack forever,level 3' scope=spfile;
- 会话级别: alter session set events='984 trace name errorstack forever,level 3';
- oradebug: 1、oradebug
setospid xxxx; 2、oradebug dump errorstack 3 --当前session正在执行的语句
- 从Errorstack跟踪文件中发现当前正在运行SQL文本。
- 从Errorstack跟踪文件中发现当前正在运行PL/SQL包和PL/SQL source code line number。
- 从Errorstack跟踪文件中发现当前bind variable value。
- 从Errorstack跟踪文件中发现一个cursor正在使用多少private memory(UGA)。
这一部分的内容主要參考tanelpoder大牛的博客。
Oracle .... - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
ORACLE_HOME ..
System name: Linux
Node name: 192oracle.cn100.com
Release: ...el6.x86_64
SMP Fri Feb 00:: UTC
Machine: x86_64
Instance name: cn100
Redo thread mounted
Oracle process
Unix process pid: , image: oracle@192oracle.cn100.com (TNS V1-V3)
::.
.) ::.
::.
::.
::.
::.
dbkedDefDump(): Starting a non,
mask=0x0)
----- Error Stack Dump -----
ORA: value larger than specified precision allowed for this column
----- Current SQL Statement for this session (sql_id=b8n03s73k7d39) -----
--能够看到,当前SQL就在这一行以下
INSERT INTO DH_T VALUES (:B2 ,:B1 )
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
object line object
handle number name
0x1075fcd10 procedure DBMON.P_DH1
0xfcfaebe8 procedure DBMON.P_DH2
0x10e7d6420 anonymous block
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
skdstdst() call kgdsdst() 000000000 ? 000000000 ?
?
7FFF332CCFD8 ? 000000000 ?
......为了排版,兴许省略......
Errorstack跟踪文件和前面一样,例如以下
Oracle .... - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
ORACLE_HOME ..
System name: Linux
Node name: 192oracle.cn100.com
Release: ...el6.x86_64
SMP Fri Feb 00:: UTC
Machine: x86_64
Instance name: cn100
Redo thread mounted
Oracle process
Unix process pid: , image: oracle@192oracle.cn100.com (TNS V1-V3)
::.
.) ::.
::.
::.
::.
::.
dbkedDefDump(): Starting a non,
mask=0x0)
----- Error Stack Dump -----
ORA: value larger than specified precision allowed for this column
----- Current SQL Statement for this session (sql_id=b8n03s73k7d39) -----
--能够看到,当前SQL就在这一行以下
INSERT INTO DH_T VALUES (:B2 ,:B1 )
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
object line object
handle number name
0x1075fcd10 6 procedure DBMON.P_DH1
0xfcfaebe8 7 procedure DBMON.P_DH2
0x10e7d6420 1 anonymous block
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (?
means dubious value)
-------------------- -------- -------------------- ----------------------------
skdstdst() call kgdsdst() 000000000 ?
000000000 ?
?
7FFF332CCFD8 ? 000000000 ?
......为了排版,兴许省略......
这部分告诉你发生错误时Oracle在运行详细哪个PL/SQL过程(包or函数)以及errorstack跟踪过程中的详细哪个调用发生错误。这对我们诊断问题很有帮助
- object handle
- line number
- object name
procedure DBMON.P_DH2
anonymous
block
- 一个会话可能以某种方式变的很消耗CPU,而且会话的wait等待时间没有不论什么意义.
- 你须要调查什么SQL正在被运行,而且你须要查看SQL带有的绑定变量
- SQL的运行计划是正常的,可是性能却很低下
- 能够如果当某些表或者行源变的大的时候,存在数据倾斜。CBO没有计算出正确的运行计划。
errorstack跟踪文件里中包括CURSORDUMP,也就包括我们想要得到的bind variable value。
Oracle .... - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
ORACLE_HOME ..
System name: Linux
Node name: 192oracle.cn100.com
Release: ...el6.x86_64
SMP Fri Feb 00:: UTC
Machine: x86_64
Instance name: cn100
Redo thread mounted
Oracle process
Unix process pid: , image: oracle@192oracle.cn100.com (TNS V1-V3)
::.
.) ::.
::.
::.
::.
::.
dbkedDefDump(): Starting a non,
mask=0x0)
----- Error Stack Dump -----
ORA: value larger than specified precision allowed for this column
----- Current SQL Statement for this session (sql_id=b8n03s73k7d39) -----
--能够看到,当前SQL就在这一行以下
INSERT INTO DH_T VALUES (:B2 ,:B1 )
----- PL/SQL Stack -----
----- PL/SQL Call Stack -----
object line object
handle number name
0x1075fcd10 6 procedure DBMON.P_DH1
0xfcfaebe8 7 procedure DBMON.P_DH2
0x10e7d6420 1 anonymous block
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (?
means dubious value)
-------------------- -------- -------------------- ----------------------------
skdstdst() call kgdsdst() 000000000 ? 000000000 ?
?
7FFF332CCFD8 ? 000000000 ?
......为了排版,兴许省略......
, pgadep
(, , , )
SYNTAX PARSE BOUND
Cached frame pages(total, free):
, ), , ), , ), , )
----- Current Cursor -----
xsc=0x7f5227898580 ctx=0xf92d7aa8 pgactx=0xf92d7aa8 ctxcbk=0xf92d74f8 ctxqbc=(nil)
ctxrws=0x10293a4c0
----- Explain Plan Dump -----
----- Compact Format (Stream) -----
Dumping stream
----------------------------------
0000:
......i.............
: ..
----- Plan Table -----
============
Plan Table
============
--------------------------------------------+-----------------------------------+
| Id | Operation | Name | Rows | Bytes | Cost | Time
|
--------------------------------------------+-----------------------------------+
| | | |
| | LOAD TABLE CONVENTIONAL | | | | | |
--------------------------------------------+-----------------------------------+
Content of other_xml column
===========================
db_version : ...
parse_schema : DBMON
plan_hash :
plan_hash_2 :
Compilation Environment Dump
optimizer_mode_hinted = false
optimizer_features_hinted ..
parallel_execution_enabled = true
parallel_query_forced_dop
- Current cursor: 2,这个告诉我们在这个会话的UGA打开的cursor中,当前正在运行Cursor# 6 游标
- the pgadep:1变量告诉我们PGA depth。也就是这个查询运行的递归的深度
curflg par=(nil) ses=0x129a8edc0
----- Dump Cursor sql_id=b8n03s73k7d39
xsc=0x7f5227898580 cur=0x7f5227951aa0 -----
LibraryHandle: Address LoadLockMode Status=VALD
ObjectName: Name=INSERT INTO DH_T VALUES (:B2 ,:B1 )
FullHashValue=38f6bac85b76f427b45003c1c723b469 Namespace=SQL AREA(00) Type=CURSOR(00)
Identifier OwnerIdn
Statistics: InvalidationCount ExecutionCount LoadCount ActiveLocks TotalLockCount TotalPinCount
Counters: BrokenCount RevocablePointer KeepDependency KeepHandle BucketInUse HandleInUse
Concurrency: DependencyMutex, , , ) Mutex, , , )
Flags]
WaitersLists:
Lock=f68ce968[f68ce968,f68ce968]
Pin=f68ce978[f68ce948,f68ce948]
::
LibraryObject: Address Flags=EXS[0000]
Flags2=[0000] PublicFlags=[0000]
ChildTable: size='16'
Child: id='0' Table=f6b88bc8 Reference=f6b88668 Handle=fab7b4c0
Children:
Child: childNum='0'
LibraryHandle: Address LockMode Status=VALD
Name: Namespace=SQL AREA(00) Type=CURSOR(00)
Statistics: InvalidationCount ExecutionCount LoadCount ActiveLocks TotalLockCount TotalPinCount
Counters: BrokenCount RevocablePointer KeepDependency KeepHandle BucketInUse HandleInUse
Concurrency: DependencyMutex, , , ) Mutex, , , )
Flags]
WaitersLists:
Lock=fab7b550[fab7b550,fab7b550]
Pin=fab7b560[fab7b530,fab7b530]
LibraryObject: Address Flags=EXS[0000]
Flags2=[0000] PublicFlags=[0000]
DataBlocks:
Block: # Change=NONE
Heap=f6a0b38 Pointer=f6569c08 Extent=f6569aa0 Flags=I/-/P/A/-/-
FreedLocation Alloc. . LoadTime
Block: # Change=NONE
Heap=f6b88438 Pointer=f92d7aa8 Extent=f92d6e48 Flags=I/-/P/A/-/E
FreedLocation Alloc. . LoadTime
NamespaceDump:
Child :: Heap6 ::
NamespaceDump:
Parent plk=y
ppn cld hd=0xfab7b4c0
par=0xf6b87e00
Mutex 0xf6b88308(, ) idn
ct hsh unp hvl=f6b88c60
nhv ses=(nil)
hep ld ob=0xf6569b20 ptr=0xf92d7aa8
fex=0xf92d6e48
exec_id
child#(0xfab7b4c0) pcs=0xf6b88308
clk=0x10d6111e0 ci=0xf6569c08 pn=0xfdf4c890 ctx=0xf92d7aa8
kgsccflg llk[0x7f5227898588,0x7f5227898588] idx=6a
xscflg
----- Bind Byte Code (IN) -----
Opcode Bind Rpi Scalar Sql In(may be out)
Nocopy NoSkip
Offsi , Offsi
Opcode Bind Rpi Scalar Sql In(may be out)
Nocopy NoSkip
Offsi , Offsi
----- Bind Info (kkscoacd) -----
Bind#0
oacdty mxl() mxlc=00 mal=00
scl=00 pre=00
oacflg fl2 frm
kxsbbbfp avl flg
value=1234335
Bind#1
oacdty mxl() mxlc=00 mal=00
scl=00 pre=00
oacflg fl2 frm csi siz
kxsbbbfp avl flg
value="oradh"
Frames pfr 0x7f5227897c18 siz efr 0x7f5227897b38 siz
Cursor frame dump
enxt: .0x00000550 enxt: .0x00000040 enxt: .0x000007a0
pnxt: .0x00000030
kxscphp inu nps
kxscbhp inu nps
kxscwhp inu nps
- 在errorstack跟踪文件里发现Cursor#2,它的state=BOUND。意味着绑定变量值已经被赋予的
- SQL文本是我们在前面已经查找出来的。我们能够看到两个绑定变量值
- Bind variale numbering是从0開始。所以假设我们想搜索第一个绑定值。须要搜索Bind#0
例如以下
Cursor frame dump
enxt: .0x00000550 enxt: .0x00000040 enxt: .0x000007a0
pnxt: .0x00000030
kxscphp inu nps
kxscbhp inu nps
kxscwhp inu nps
Cursor#1游标部分:
Cursor frame dump
enxt: .0x000005c0 enxt: .0x00000fd8 enxt: .0x00000fa0 enxt: .0x00000658
enxt: .0x00000228 enxt: .0x00000fd8 enxt: .0x00000fa0 enxt: .0x00000248
enxt: .0x00000fa0 enxt: .0x00000410 enxt: .0x00000480 enxt: .0x00000f70
pnxt: .0x00000030
kxscphp inu nps
kxscbhp inu nps
create or replace procedure p_dh1 as
v_id ;
v_name varchar2() :='oradh';
begin
--just for errorstack test
insert into dh_t values (v_id,v_name);
commit;
end;
/
create or replace procedure p_dh2 as
v_cnt number;
begin
----just for errorstack test
select count(*) into v_cnt from dh_t;
dbms_output.put_line('the dh_t count is '||v_cnt);
p_dh1;
end;
/
Jul ::
Copyright (, , Oracle. All rights reserved.
Connected to:
Oracle .... - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
pagesize
SQL> col tracefile format a100
));
SPID TRACEFILE
---------------
--------------------------------------------------------------------------------------------------
/u01/oracle/diag/rdbms/cn100/cn100/trace/cn100_ora_10848.trc
SQL> alter session set events='1438
trace name errorstack forever,level 3';
Session altered.
SQL> exec p_dh2;
BEGIN p_dh2; END;
*
ERROR :
ORA: value larger than specified precision allowed for this column
ORA:
ORA:
ORA:
[oracle@192oracle ~]$ ls -ltr /u01/oracle/diag/rdbms/cn100/cn100/trace/cn100_ora_10848.trc
oracle
oinstall Jul : /u01/oracle/diag/rdbms/cn100/cn100/trace/cn100_ora_10848.trc
Oracle ErrorStack 使用和阅读具体解释的更多相关文章
- Oracle之Check约束实例具体解释
Oracle | PL/SQL Check约束使用方法具体解释 1. 目标 实例解说在Oracle中怎样使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表 ...
- oracle中number数据类型简单明了解释
NUMBER (p,s) p和s范围: p 1-38 s -84-127 number(p,s),s大于0,表示有效位最大为p,小数位最多为s,小数点右边s位置开始四舍五入,若s>p,小数点右侧 ...
- 教你如何阅读Oracle数据库官方文档
< Ask Oracle官方原创 > Oracle 官方文档 数量庞大,而且往往没有侧重点,让oracle新手看起来很费力.但是,仍有很多Oracle使用者认为任何oracle学习资料都比 ...
- 转 Oracle全文检索http://docs.oracle.com/cd/E11882_01/text.112/e24436/toc.htm
SQL > exec ctx_ddl.create_preference ('my_test_lexer','chinese_lexer') : PL/SQL 过程成功完成 SQL > E ...
- Oracle第一天
Oracle第一天 v3.1 整体安排(3天) 第一天:Oracle的安装配置(服务端和客户端),SQL增强(单表查询). 第二天:SQL增强(多表查询.子查询.伪列-分页),数据库对象(表.约束.序 ...
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- Oracle数据库坏块的恢复
模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...
- oracle/MySQL 中的decode的使用
MySQL decode()的等同实现 在Oracle中使用decode方法可以轻松实现代码和值之间的转换,但是在MySQL中该如何实现类似功能呢? MySQL中没有直接的方法可以使用 ...
- oracle 卸载步骤(图解)
1.卸载第一步:点击开始菜单: 步骤阅读 2 2.点击Universal Installer来实现下面 步骤阅读 3 3.点击卸载产品后出现的内容: 步骤阅读 4 4.点击打开Oracle主目录下的O ...
随机推荐
- 控制应用程序重启,外部程序C# 实例
第一步:新建一个控制台项目,作为关闭当前应用程序的调用程序. using System; using System.Configuration; using System.Diagnostics; n ...
- RabbitMQ消息队基本概念
RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的 ...
- silverlight RadGridView总结二(转载)
系列二 实现RadGridView行中添加不同控件,并在控件中绑定不同的数据源 先上一段前台代码 <telerik:RadGridView Grid.Row="2" ...
- jquery treegrid实例
前台jqurey代码 function organDatagrid(){ $organ_treegrid = $('#organ_treegrid').treegrid({ url:ctx+'/pet ...
- [na]整一下博客面貌--cnblog css定制
前言 之前觉得cnblog排版乱. 而csdn对word兼容性较好一些.所以就转到csdn了. 后来看到别人的cnblog排版挺好,如 等效果. 参考资料 http://www.cnblogs.com ...
- shell脚本之练习题
设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30. i=1 groupadd class1 while [ $i -l ...
- python 中property函数如何实现
实际上,在python中property(fget,fset,fdel,doc)函数不是一个真正的函数,他其实是拥有很多特殊方法的类. 这特殊类总的很多方法完成了property函数中的所有工作,涉及 ...
- C#中基本类型占用字节数
bool -> System.Boolean (布尔型,其值为 true 或者 false) byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ...
- Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。
/** 题目:Trees in a Wood. UVA 10214 链接:https://vjudge.net/problem/UVA-10214 题意:给定a,b求 |x|<=a, |y|&l ...
- vCenter创建标准网络
vmware虚拟化,有2种网络类型,一种是标准网络,另外一种是分布式网络.这里重点介绍标准网络,标准网络可通过vCenter创建vSwitch标准虚拟交换机(vSS).vSS的承载体是物理 ...