在 undo segment中,Insert是记录rowidupdate 记录被更改数据的前镜像,delete 记录整行数据。因此delete产生的undo最多。

select segment_name,tablespace_name,status from dba_rollback_segs;
select xidusn,xidslot,xidsqn,ubablk,ubafil from v$transaction;
xidusn
示回滚段号,xidslot表示回滚段上的事务槽,ubafil表示前镜像数据所在的文件号,ubablk表示Block号。
select * from v$rollstat; xacts1的就是当前修改的记录
select * from v$rollname a where a.usn=9; usn是回滚段号,此语句为获得回滚段名
转储回滚段头信息:alter system dump undo header'segment_name';
转储文件中的block信息:alter system dump datafile filenum block blocknum
在跟踪文件中irb:0x3firb指的是回滚段中记录的最近的未提交变更开始之处,如果开始回滚,此为起始点。0x3f表示偏移量,最后一个偏移地址是0x3f。同时undo记录中还记录rci,代表undo chain(同一个事务中的多次修改,通过该参数指定上一个修改数据的前镜像)的下一个偏移量。当undo chain的指针为0x00时,表示这是最后一条。

修改数据的事务内部流程
1、当事务开始时,需要在回滚段事务表上分配一个事务槽。
2、在数据块头部获取一个ITL(Interested Transaction List,事务必须获得一个ITL事务槽才能进行数据修改,包括Xid,Uba,Lck),该事务槽和回滚段头部记录的事务槽信息一致。
3、在修改数据前,记录前镜像信息,以undo record的形式储存,回滚段头事务槽指向该记录。
4、锁定修改行,修改行锁定指向ITL事务槽。
5、事务修改可以进行。
说明Xid:Transaction id;Uba:Undo Block Address;Lck:Lock status。Xid包括回滚段号,slot号,wrap号。

 


posted on 2008-07-02 15:17  Alex.Zhang  阅读(785)  评论(0编辑  收藏  举报