当前位置: 首页 > Oracle, oracle 10g, oracle 11g > 正文

10046的trace文件中XCTEND、rlbk、rd_only的含义

今天,正式使用公司的吐槽专区,在吐槽区老大们发起了有关XCTEND、rlbk、rd_only的讨论,简单记录下本人的测试过程,测试使用以下测试表。

SQL> select * from t_test;
        ID CODE  IDENTIFIER
---------- ----- --------------------
         1 01    01-01-0001-000001
         2 02    02-01-0001-000001
         3 03    03-01-0001-000001
         4 04    04-01-0001-000001

对测试表做DML操作,分别测试回滚和提交,并使用10046事件追踪。

SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
Session altered.
SQL> delete from t_test where id=4;
1 row deleted.
SQL> rollback;
Rollback complete.
SQL> delete from t_test where id=4;
1 row deleted.
SQL> commit;
Commit complete.
SQL> ALTER SESSION SET EVENTS '10046 trace name context off';
Session altered.

查找这个会话的操作系统进程号,找到10046事件生成的trace文件。

SQL> select a.username,a.sid,b.pid,b.spid  from v$session a,v$process b
where a.paddr=b.addr and a.sid=dbms_support.mysid;
USERNAME                              SID        PID SPID
------------------------------ ---------- ---------- ------------
STREAM                                143         13 20177
[oracle@dbdream udump]$ ls *20177*
ora10g_ora_20177.trc

使用vi编辑器打开trace文件,找到回滚和提交相关部分。

rollback
END OF STMT
PARSE #1:c=0,e=147,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=1314680047145004
XCTEND rlbk=1, rd_only=0
commit
END OF STMT
PARSE #1:c=0,e=145,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=1314680063309564
XCTEND rlbk=0, rd_only=0

以上就是10046事件追踪到回滚和提交的部分信息,其中XCTEND是一个事物结束的标识,rlbk是回滚的标识,1表示rollback,0表示commit,rd_only是只读事物标识,1表示这个事物是只读的,0则表示这个事物是非只读的,举个只读事物的例子,还用上面的测试表,还是那4条记录。

SQL> select * from t_test;
        ID CODE  IDENTIFIER
---------- ----- --------------------
         1 01    01-01-0001-000001
         2 02    02-01-0001-000001
         3 03    03-01-0001-000001
         4 04    04-01-0001-000001

删除一条不存在的记录(比如id=5),然后再分别做回滚和提交操作,用10046事件追踪操作过程。

SQL> ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
Session altered.
SQL> delete from t_test where id=5;
0 rows deleted.
SQL> rollback;
Rollback complete.
SQL> delete from t_test where id=5;
0 rows deleted.
SQL> commit;
Commit complete.
SQL>  alter session set events '10046 trace name context off';
Session altered.
SQL> select a.username,a.sid,b.pid,b.spid  from v$session a,v$process b
where a.paddr=b.addr and a.sid=dbms_support.mysid;
USERNAME                              SID        PID SPID
------------------------------ ---------- ---------- ------------
STREAM                                143         13 22202

打开trace文件,找到rollback和commit部分,会发现rd_only都是1,也就是这两个事物都是只读的事物。

rollback
END OF STMT
PARSE #2:c=1000,e=148,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=1314694329655730
XCTEND rlbk=1, rd_only=1
commit
END OF STMT
PARSE #2:c=0,e=142,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=1314694342351557
XCTEND rlbk=0, rd_only=1

可见,没有对数据做任何修改的事物是只读事物,反之则为非只读事物。

本文固定链接: https://www.dbdream.com.cn/2012/08/xctend%e3%80%81rlbk%e3%80%81rd_only/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2012年08月29日发表在 Oracle, oracle 10g, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 10046的trace文件中XCTEND、rlbk、rd_only的含义 | 信春哥,系统稳,闭眼上线不回滚!
关键字: , , , ,
【上一篇】
【下一篇】

10046的trace文件中XCTEND、rlbk、rd_only的含义:目前有2 条留言

  1. 板凳
    summer:

    恩,这篇写的挺好的

    2012-10-12 11:13 [回复]
  2. 沙发
    streamsong:

    @summer
    写的都比较肤浅

    2012-10-12 11:51 [回复]

发表评论

快捷键:Ctrl+Enter