《Oracle数据库揭露问题本质的利器 - errorstack》这篇文章中提到了设置errorstack的级别,
alter system set events '28000 trace name errorstack level 4';
一位朋友很仔细,提问说"有level 4?和3有多少区别?一直以为3是级别最高了,前几天刚用了,效果不是很好,捕捉到引发错误的代码不全"。
上MOS研究了下,还和Albert大佬请教了,单就errorstack级别只有4种,即0-3,
(1)0 - Error stack only,仅转储错误堆栈(0级已经被逐渐废弃)
(2)1 - Error stack and function call stack (if implemented),转储错误堆栈和函数调用堆栈)
(3)2 - As 1 plus the ProcessState,指的Level1 + ProcessState
(4)3 - As 2 plus the context area (all cursors and current cursor highlighted),指的Level2 + Context area,显示所有cursors,着重显示当前cursor
之所以可以用>3的level,这是因为实际level对应的是event,而不止是errorstack,每个event有自己专属level,甚至会随着patch不同有所改动,event的level会覆盖errorstack的配置,当然也会将stack打印出来。
event_id "trace" "name" action parameters(level)
如果不掺杂event参数,errorstack级别最高就是3。
虽然问题很隐晦,但确实是个值得关注的点,谢谢这位朋友的提问和提醒,技术研究还是要更严谨些,可能一个细节,就会蕴藏着很多的知识。
如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"