ITPub博客

首页 > IT职业 > IT职场 > undo segment header中记录的dba是该事务使用的单向链表中的头(end block)!

undo segment header中记录的dba是该事务使用的单向链表中的头(end block)!

原创 IT职场 作者:warehouse 时间:2009-03-19 21:12:28 0 删除 编辑
以前写过一篇文章介绍事务使用的undo block其实一条单向
链表,那么undo header上记录的dba到底是这条单向链表的
头还是尾,经验证是头,我猜测也应该是头,因为当rollback
事务时才能以最快的速度找到rollback的起点,当然这样做的
目的可能不仅仅是为了rollback操作。[@more@]

SQL> create table tt1 tablespace users as select *from dba_objects;

表已创建。

SQL> insert into tt1 select * from tt1;

已创建11280行。
SQL> select xidusn,ubafil,ubablk,start_ubafil,start_ubablk from v$transaction;

XIDUSN UBAFIL UBABLK START_UBAFIL START_UBABLK
---------- ---------- ---------- ------------ ------------
14 7 61 7 180

SQL> alter system dump undo header "_SYSSMU14$";

系统已更改。
--dump信息如下:
--======================
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
.............
0x12 10 0x80 0x0992 0x0001 0x0000.018e34c1 0x01c0003d 0x0000.000.00000000 0x00000006 0x00000000 0
..............
--=======================

SQL> select dbms_utility.data_block_address_file(to_number('01c0003d','xxxxxxxx'
)) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(TO_NUMBER('01C0003D','XXXXXXXX'))
----------------------------------------------------------------------
7

SQL> select dbms_utility.data_block_address_block(to_number('01c0003d','xxxxxxxx
')) from dual;

DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('01C0003D','XXXXXXXX'))
-----------------------------------------------------------------------
61
--很显然,undo segment header中记录的dba是该
事务使用的undo chain中的end block:61,start block是:180,而end block这是这条chain的头。

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

请登录后发表评论 登录
全部评论

注册时间:2007-12-07

  • 博文量
    717
  • 访问量
    5366336