设为首页 加入收藏

TOP

UNDO段头块格式深度解析(一)
2014-11-24 07:55:20 来源: 作者: 【 】 浏览:7
Tags:UNDO 段头块 格式 深度 解析

下面我对UNDO段头块的格式做一个全面深入的解析。有助于我们了解事务的本质。

好,为了方便测试,我来创建一个很小的UNDO表空间,如下操作:

gyj@OCM> create undo tablespace undotbs4 datafile '/u01/app/oracle/oradata/ocm/undotbs04.dbf' size 192k;

Tablespace created.

gyj@OCM> alter system set undo_tablespace=undotbs4;

System altered.
 
gyj@OCM> select * from v$rollname;

       USN NAME
---------- ------------------------------
         0 SYSTEM
        17 _SYSSMU17_3012809736$
 

发生一个事务:

gyj@OCM> update gyj_test set name='guoyJoe' where id=1;

1 row updated.

转储UNDO段头块:

gyj@OCM> alter system dump undo header"_SYSSMU17_3012809736$";

System altered.

找到DUMP的UNDO段头块的跟踪日志:

gyj@OCM> select * from v$diag_info wherename='Default Trace File';

INST_ID NAME VALUE

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

1Default Trace File /u01/app/oracle/diag/rdbms/ocm/ocm/trace/ocm_ora_6151.trc

分析UDNO段头块的日志

[root@mydb ~]# more/u01/app/oracle/diag/rdbms/ocm/ocm/trace/ocm_ora_6151.trc

********************************************************************************
Undo Segment:  _SYSSMU17_3012809736$ (17)
********************************************************************************
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 2      #blocks: 15    
                  last map  0x00000000  #maps: 0      offset: 4080  
      Highwater::  0x0280000a  ext#: 0      blk#: 1      ext size: 7     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 0     
  mapblk  0x00000000  offset: 0     
                   Unlocked
     Map Header:: next  0x00000000  #extents: 2    obj#: 0      flag: 0x40000000

#extents: 2 表示17号UNDO段有两个区

#blocks: 15 表示17号UNDO回滚段两个区中有15个UNDO BLOCK可用。(为什么不是16个UNDO BLOCK块呢,去掉一个UNDO段头块)

ext#: 0 表示这个事务发生在第1个区(从0开始)

blk#: 1 表示这个事务发生在第1个区的第1个块上。

ext size: 7 表示1个区上有7个UNDO BLOCK可用

通过v$rollname视图查出是17号UNDO回滚段

gyj@OCM> select * from v$rollname;

USN NAME

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

0 SYSTEM

17 _SYSSMU17_3012809736$

通过dba_extents视图查出一共有两个区,共16个块

gyj@OCM> select extent_id,file_id,block_id,blocks,bytes fromdba_extents where segment_name='_SYSSMU17_3012809736$';

EXTENT_ID FILE_ID BLOCK_ID BLOCKS BYTES

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

0 10 8 8 65536

1 10 16 8 65536

通过dba_segments视图查出UNDO段头块,即10号文件的8号块是UNDO段头块(所以#blocks:15)

gyj@OCM> select header_file,header_block from dba_segments wheresegment_name='_SYSSMU17_3012809736$';

HEADER_FILE HEADER_BLOCK

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

10 8

 Extent Map
  -----------------------------------------------------------------
   0x02800009  length: 7     
   0x02800010  length: 8  

17号UNDO回滚段的区地图一共有两个区:

第一个区对应的是10号文件1号块、2号块、3号块、4号块、5号块、6号块、7号块,共7个UNDO BLOCK

第一个区对应的是10号文件9号块、10号块、11号块、12号块、13号块、14号块、15号块,16号块,共8个UNDO BLOCK

Retention Table 
  -----------------------------------------------------------
 Extent Number:0  Commit Time: 1389838948
 Extent Number:1  Commit Time: 1389838948

区的提交时间戳,是从1970年1月1号零晨开始的(以秒为单位记录)
TRN CTL:: seq: 0x000d chd: 0x000a ctl: 0x000b inc: 0x00000000 nfb: 0x0000
            mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
            uba: 0x0280000a.000d.2e scn: 0x0000.0028a2af

事务控制:

seq: 0x000d 表示此事务修改前的值所在的UNDOBLOCK块被覆盖了13次,与下面的uba: 0x0280000a.000d.2e中的000d对应。

chd:0x000a 表示发生一个新的事务,此时会在下面的TRNTBL::(事务表)的index=0

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇20和数据库saygoodbye(一) 下一篇关系数据库一般设计流程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)