ERRORSTACK是Oracle提供的接口,用于诊断Oracle的错误信息。
诊断事件可以在Session级设置,也可以在系统级设置,通常如果要诊断全局错误,最好在系统级设置。设置了ERRORSTACK事件之后,Oracle会将出错时的信息记入跟踪文件之中,然后再出现错误时就可以通过跟踪文件进行错误诊断和排查了。
继续上边的测试,尝试通过ERRORSTACK事件来跟踪ORA-01555错误:
SQL> ALTER SYSTEM SET EVENTS '1555 TRACE NAME ERRORSTACK LEVEL 4'; System altered. SQL> select * from emp as of scn 8903471356235 where empno in (7788,7782,7698); select * from emp as of scn 8903471356235 where empno in (7788,7782,7698) * ERROR at line 1: ORA-01555: snapshot too old: rollback segment number 6 with name "_SYSSMU6$" too small
检查告警日志文件,可以得到如下信息:
Wed Apr 19 16:46:51 2006 OS Pid: 1274 executed alter system set events '1555 TRACE NAME ERRORSTACK LEVEL 4' Wed Apr 19 16:47:06 2006 ORA-01555 caused by SQL statement below (Query Duration=0 sec, SCN: 0x0819.003f594b): Wed Apr 19 16:47:06 2006 select * from emp as of scn 8903471356235 where empno in (7788,7782,7698) Wed Apr 19 16:47:06 2006 Errors in file /opt/oracle/admin/conner/udump/conner_ora_1274.trc: ORA-01555: snapshot too old: rollback segment number 6 with name "???" too small
注意以上日志信息,触发ORA-01555错误的语句被记录,出现错误的SCN也被纪录,这个SCN: 0x0819.003f594b正是之前提到的ctl max scn: 0x0819.003f594b,进一步的,找到conner_ora_1274.trc 跟踪文件,从中可以获得关于这次错误的相信信息用于诊断。下面从跟踪文件中摘录一点点重要信息,简要说明:
1. 错误信息
*** 2006-04-19 16:47:06.606 ksedmp: internal or fatal error ORA-01555: snapshot too old: rollback segment number 6 with name "???" too small Current SQL statement for this session: select * from emp as of scn 8903471356235 where empno in (7788,7782,7698)
2. 数据块信息
这里的块头就包含了ITL信息,根据这个ITL信息中的UBA,Oracle可以去定位回滚段,查询前镜像信息,如果不存在,就可能出现ORA-01555错误。
Block header dump: 0x00405c5a Object id on Block? Y seg/obj: 0x1f19 csc: 0x819.407961 itc: 2 flg: O typ: 1 - DATA fsl: 0 fnx: 0x0 ver: 0x01 Itl Xid Uba Flag Lck Scn/Fsc 0x01 0x0009.02e.000036b0 0x00800081.0302.11 C--- 0 scn 0x0819.0036f205 0x02 0x0006.018.000036ce 0x00800055.02de.3f C--- 0 scn 0x0819.0040791b
根据这里的Xid,可以进一步的获得回滚段号,事务槽等信息,主动查询或转储回滚段信息进行研究观察。
最后修改时间:2019-07-24 11:24:04
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。