ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 事务标识(xid)解析

事务标识(xid)解析

原创 Linux操作系统 作者:redhouser 时间:2011-09-20 14:59:59 0 删除 编辑

相关资料中说明事务标识的构成方式为xid=usn.slot.(sqn+1),这三部分组合起来唯一标识系统内的事务。

1,通过xid获取usn/slot/sqn方式如下:
注意:
*字节序问题;
*sqn没有+1

select xid,xidusn,xidslot,xidsqn from v$transaction;
0A001B0034DE0000 10 27 56884

with v as(select '08002A0071CA0000' xid from dual)
select to_number(substr(v.xid,3,2)||substr(v.xid,1,2),'xxxx') usn,
       to_number(substr(v.xid,7,2)||substr(v.xid,5,2),'xxxx') slot,
       to_number(substr(v.xid,15,6)||substr(v.xid,13,2)||substr(v.xid,11,2)||substr(v.xid,9,2),'xxxxxxxxxx') sqn
  from v;
USN SLOT SQN
10 27 56884

2,在v$lock中,使用id1/id2来标识事务。其中:id1的高四字节为回滚段号,低四字节为槽号,id2为序号,分别与v$transaction中XIDUSN, XIDSLOT, XIDSQN对应。
select sid,id1,id2 from v$lock where type='TX';
81 1572909 664

with v as (select 1572909 id1,664 id2 from dual)
select trunc(id1/power(2,16)) rbs1,  --截断获取高4字节
       bitand(id1,to_number('ffff0000','xxxxxxxx'))/power(2,16) rbs2, --按位与获取高4字节
       to_number(substr(TRIM(to_char(1572909, 'xxxxxxxx')),
                        1,
                        4 - (8 - length(TRIM(to_char(id1, 'xxxxxxxx'))))) ,
                 'xxxx') rbs3 --直接截取高4字节
                 ,bitand(id1,to_number('ffff','xxxx')) slot1, ---按位与获取低4字节
       mod(id1,power(2,16)) slot2, --求余获取低4字节
       to_number(substr(TRIM(to_char(1572909, 'xxxxxxxx')),
                        5 - (8 - length(TRIM(to_char(id1, 'xxxxxxxx')))),
                        4),
                 'xxxx') slot3,--直接截取低4字节
                 id2 from v;
RBS1 RBS2 RBS3 SLOT1 SLOT2 SLOT3 ID2
24 24 24 45 45 45 664

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18922393/viewspace-707946/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 效率与企业文化
请登录后发表评论 登录
全部评论

注册时间:2011-05-26

  • 博文量
    211
  • 访问量
    876696