实验: Oracle事务(ITL)

本文通过创建表、插入数据并使用Oracle的系统转储功能来解析ITL中的信息,展示了如何分解XID和UBA,并将这些信息与V$TRANSACTION视图进行对比,以了解数据块锁定的过程。

1 建表,插入数据

SQL> create table test(id number, name varchar2(10));

Table created

SQL> insert into test values(1, 'a');

1 row inserted

SQL> select id,

2 name,

3 rowid,

4 dbms_rowid.rowid_relative_fno(rowid) file#,

5 dbms_rowid.rowid_block_number(rowid) block#

6 from test;

ID NAME ROWID FILE# BLOCK#

---------- ---------- ------------------ ---------- ----------

1 a AAANLOAAEAAAAMAAAA 4 768

2 Dump

SQL> alter system dump datafile 4 block 768;

System altered

udump文件中Trace文件可以得信息:

=======================================================================================

……

Itl Xid Uba Flag Lck Scn/Fsc

0x01 0x0008.012.0000020d 0x008000af.01cf.1d ---- 1 fsc 0x0000.00000000

0x02 0x000a.007.000001cd 0x0080035c.0148.0d --U- 1 fsc 0x0007.001a603f

……

=======================================================================================

ITL中的xid0x0005.020.0000020e是由undo信息组成的:xidusn.xidslot.xidsqn

ITL中的uba0x0080024d.0129.1f是由ubaundo block address.UBASQN.UBAREC

undo block address0080024d,是一个16进制数,可以通过如下函数转换为UBAFILUBABLK

3 分解xid

SQL> select to_number('0008','xxxxx') xidusn from dual;

XIDUSN

----------

8

SQL> select to_number('012','xxxxx') xidslot from dual;

XIDSLOT

----------

18

SQL> select to_number('0000020d','xxxxxxxxx') xidsqn from dual;

XIDSQN

----------

525

4 分解uba

SQL> select dbms_utility.data_block_address_file(to_number('008000af','xxxxxxxx')) UBAFIL from dual;

UBAFIL

----------

2

SQL> select dbms_utility.data_block_address_block(to_number('008000af','xxxxxxxx')) UBABLK from dual;

UBABLK

----------

175

SQL> select to_number('01cf','xxxxxxxxx') UBASQN from dual;

UBASQN

----------

463

SQL> select to_number('1d','xxxxxxxxx') UBAREC from dual;

UBAREC

----------

29

5 dump信息和v$transaction比较

SQL> select xidusn, xidslot, xidsqn, ubafil, ubablk, ubasqn, ubarec from v$transaction;

XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC

---------- ---------- ---------- ---------- ---------- ---------- ----------

8 18 525 2 175 463 29

6 数据块锁定

在另一个会话中操作:

SQL> insert into test values(2, 'a');

1 row inserted

SQL> select id,

2 dbms_rowid.rowid_relative_fno(rowid) file#,

3 dbms_rowid.rowid_block_number(rowid) block#

4 from test;

ID FILE# BLOCK#

---------- ---------- ----------

2 4 767

第一个会话由于未提交, 而锁定了数据块768, 所以第二个会话新插入的数据在新的块767, 与之前的768不同.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值