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 ...
随机推荐
- es模板
Index Templatesedit Index templates allow you to define templates that will automatically be applied ...
- 转:winform_webApiSelfHost及 OWIN WebAPI Service
winform_webApiSelfHost 窗本构造函数中添加以下代码: var baseAddress = ConfigurationManager.AppSettings["baseA ...
- 使用pycharm手动搭建python语言django开发环境(四) django中buffer类型与str类型的联合使用
在django中,如果用到buffer类型时,buffer的编码格式是utf-8类型.使用str()进行转为字符串类型会异常. 异常会有如下提示:'ascii' codec can't decode ...
- stm32开发板无法正常写入的问题或者写入后无法正常运行的问题
在调试stm32的程序的时候遇到这样一个问题. 用Keil往stm32里写入程序时出现无法访问内存的错误.情况如下 然后 J-link没有提示异常.偶尔可以下载成功,但是程序无法正确的执行. 经过一番 ...
- CI框架基本配置/教你学习CI框架codelgniter
CI框架现在中国可以说还是不成熟,不像thinkphp那样有那么多的中文手册,在国内,很多国人英语都很烂,CI现在教程还是不多.大家心里都存在这严重想法 CI 框架现在中国可以说还是不成熟,不像thi ...
- vCenter初始化数据中心和集群
接着上一次的文档"7.vCeenter部署流程2",vcenter软件已经安装在2008上了,同时win2008上的和vmware相关的服务都已经启动,这里一定要检查以下: 打开服 ...
- php zend studio 如何导入已经存在的项目
点击 左上的 file->import ->General->在选择第二个[ Exissting ....]
- Java(System类,currentTimeMillis())
CurrentTimeMillis()方法来记录程序的执行时间.currentTimeMillis()方法将返回自1970年1月1日午夜起到现在的时间,时间单位是ms,如果要记录程序中一段程序的运行时 ...
- 嵌入式开发之davinci--- 8168 总的roi 编码
http://bbs.61dsp.com/forum.php?mod=viewthread&tid=767
- Gmail 邮件配置备忘
1.smtp端口号不是默认的25,smtp的是587 2.必须设置“允许使用不够安全的应用” 其他的按照网上文档设置就好了