Oracle事务表实验

来源:Oracle认证    发布时间:2012-11-12    Oracle认证视频    评论

    回滚段头中,有一项非常重要的信息,就是事务表。对事务表频繁的访问,可能会造成回滚段头的争用。了解什么样的操作会访问事务表,对于了解回滚段头争用的原因非常重要。下面我们来做一些实验来验证一下,什么样的操作才会访问事务表。
   
    首 先简单介绍一个视图,备份x$bh.对这个视图我想大家都有一定的了解,bh即buffer header 的简写。在buffer  header中有 一个TCH 列,表示块被访问的次数。我们通过他来验证事务表什么时候被访问。需要注意的是。TCH列每3秒,才会重新计算一次,3秒之内无论访问某一个 块多少次。TCH列只会增加1.
   
    在会话A开启一个事务后:
   
    步骤一:通过v$transaction视图找到XID
   
    SQL> select xidusn,ubablk,ubafil from v$transaction;
   
    XIDUSN     UBABLK     UBAFIL
   
    ---------- ---------- ----------
   
    13         97          5
   
    步骤二:通过回滚段编号,可得知事务所占回滚段名,并用此查找事务头块号,文件号
   
    SQL> select header_block,header_file from dba_segments where segment_name='_SYSSMU13$';
   
    HEADER_BLOCK HEADER_FILE
   
    ------------ -----------
   
    41           5
   
    步骤三:查看x$bh视图中,TCH值的增加。
   
    SQL> select addr,tch from x$bh where dbarfil=5 and dbablk=41;
   
    ADDR            TCH
   
    -------- ----------
   
    080B5208         41
   
    步骤四:查找完TCH后,马上执行要测试的命令(会话B),
   
    SQL> select * from jj_3;
   
    ID NA
   
    ---------- --
   
    1 aa
   
    2 aa
   
    3 aa
   
    4 aa
   
    5 CN
   
    步骤五:再次查看x$bh视图
   
    SQL> select addr,tch from x$bh where dbarfil=5 and dbablk=41;
   
    ADDR            TCH
   
    -------- ----------
   
    080B5208         42
   
    注意:步骤三四五应尽快完成。避免oracle的其他内部操作影响测试结果。(因为oracle内部的操作也会造成回滚段头的tch值增加,特别在10G中,这种情况更为明显,不过我没有跟踪是什么oracle的内部操作造成的)
   
    小结:从结果集来看,在另一会话中访问未提交数据的select语句会访问事务表,那么其他的DML操作呢?(希望大家也都试试,我的结果是都会增加TCH值)。上面我的步骤四是全表扫描。

相关推荐:

Oracle会话数量查询及结束会话

oracle中的Schema简析

Oracle的MERGE未能添加数据

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答