我感到难过,不是因为你欺骗了我,而是因为我再也不能相信你了。------尼采
在oracle 7及oracle 8时期,oracle内部可以通过原始代码进行问题的追源。随着oracle内部保密工作的愈发严密,现了解oracle内核的渠道越来越少。
oracle代码按照以下规则进行分层,dba可以通过报错函数,确定基本错误发生层级:
-kt kernel transaction
-kd kernel data
-kc kernel cache
-ks kernel services
Fixed(X$) tables are defined using macros defined in rdbms/src/hdir/kqf.h
Dynamic(v$) views are all defined in rdbms/src/hdir/kqfv.h
一、event诊断方法
event事件是基本的重要诊断工具及问题解决办法,很多时候需要通过设置来屏蔽或者更改的行为。
事件详细记载文件:$ORACLE_HOME/rdbms/mesg/oraus.msg
事件诊断方法:
1,通过设置参数文件事件形式:
event="<event name> <action> [:<event name> <action>]......"
2,通过sql语句进行设置当前sql会话:
alter session set events '<event name><action> [:<event name> <action>]......"
3,通过sql语句设置所有新会话:
alter system set events '<event name><action> [:<event name> <action>]......"
4,sys.dbms_system.set_ev
5,oradebug
例子:
event = "604 trace name errorstack"
alter session set events '604 trace name errorstack'
alter system set events '604 trace name errorstack'
sys.dbms_system.set_ev(sid,serial#,<event>,<level>,'<action>')
sys.dbms_system.set_ev(8,219,10046,12,'')
oradebug dump processstate 10
oradebug setospid 20515
oradebug unlimit
oradebug dump processstate 10
二、event分类
event中<action>关键字,有三种情况
"crash" causes an Oracle crash for testing recovery
"debugger" invokes a system debugger if any
"trace" is context specific or named context-independent ones
event = "10015 trace name context forever"
event = "10046 trace name context forever, level 4"
event = "10015 trace name context forever: 10046 trace name context forever, level 4"
在参数文件中event事件必须连续写,分开写将导致前面的event不生效
正确:
event = "10015 trace name context forever"
event = "10046 trace name context forever, level 4"
错误:
event = "10015 trace name context forever"
db_name = ORACLE
db_files = 20
event = "10046 trace name context forever, level 4"
四种event分类
第一类:immdiate dump
文件头(controlf,redohdr,file_hdrs)
系统状态(systemstate)
进程状态(processtate)
alter session set events 'immediate trace name <dump> level <level>',该dump不能写在参数文件中
alter session set events 'immediate trace name controlf level 10'
oradebug setospid 4081
oradebug dump controlf 10
exec sys.dbms_system.set_ev(7,10,65535,10,'controlf')
立即dump的包括:file_hdrs,redohdr,processstate,systemstate
第二类:on-error dump
alter session set events '<error> trace name errorstack level <level>'
oradebug session_event <error> trace name errorstack level <level>
oradebug event <error> trace name errorstack level <level>
alter session set events '60 trace name errorstack level 1';
oradebug setospid 4018
oradebug unlimit
oradebug dump errorstack 1
level级别:
0 error stack only
1 error stack and function call stack(if implemented)
2 as 1 plus the process state
3 as 2 plus the context area(all cursors and current cursor highlighted)
第三类:change behavior
event = "<event> trace name context forever,level <level>"
改变行为的event一般放在参数文件中
event = "10269 trace name context forever,level 10"
第四类:trace events:用来生成诊断日志信息
event = "<event> trace name context forever,level <level>"
alter session set events '<event> trace name context forever,level <level>';
alter system set events '<event> trace name context forever,level <level>';
喜欢的朋友可以扫描以下二维码进行关注,公众号将每天更新文章: