ITPub博客

首页 > 数据库 > Oracle > Commit过程中redo、undo、数据块交互过程实验

Commit过程中redo、undo、数据块交互过程实验

原创 Oracle 作者:mlx_861201 时间:2013-11-25 22:55:00 0 删除 编辑



Commit过程中redo、undo、数据块交互过程实验

实验目的

Commit过程中redo、undo、数据块交互过程 。如下图:

   流程图.jpg

2013-3-23 10:30 上传
下载附件 (72.21 KB)


undo数据块、undo段头块、数据块之间的关系

关系图.jpg


实验准备

1、  创建cricket用户。

create user cricket identified by cricket;

grant dba to cricket;

2、  创建score表。

create table score(

       TEAM varchar2(30),

       runs number,

       WICKETS number

)

3、  构成数据

Insert into score values(‘ENG’,841,3);

Insert into score values(‘AUS’,77,8);

Commit;

实验过程1、执行第一句UPDATE

Update score set runs=77 where team =’AUS’;

A、undo段头块变化情况。

         通过select * from v$transaction;查询活动的事务,获得事务所在undo段,以及undo块地址。本例事务所在undo段为10号段,事务槽为15号事务槽,事务槽seq为4690,undo块为3 号文件第       2950块。

         Dump出undo段段头块。altersystem dump undo header ' _SYSSMU10_4131489474$';

         10.jpg



         可以看到undo段头块事务表的第15号事务槽的state 是10,cflags是0x80,wrap是0x1213,dba为undo块地址 ,转换为文件号和块号为3+2950,内容与v$transaction反映的一致。

B、undo块变化情况。

        通过v$transaction可以看到该事务对应的undo块为3号文件的2950块。

        Dump出该undo块: alter system dump datafile 3 block 2950。

        查看undo块概况信息:

       11.jpg


       Xid:事务号,xid由 undosegment no + slot no + seq no组成。

         Seq:该undo块的序列号,表示该undo块被覆盖的次数。该值就是v$transaction视图中的ubaseq。

         Cnt:该undo块中undo记录数。该值就是v$transaction试图中的UBAREC。

         irb:表示当前事务的前进项存放的记录号,该例中可以直接到底0X2e记录上查找。 Rec:undo记录号。

         Offset:偏移量。第一个offset的偏移量是4080 。

         查看第0X2e个undo 记录信息:

          12.jpg


         Rec #0x2e:该undo记录的号码。

         Slt:事务表槽号。

         Objn:对应数据块对象号。

         Tblspc:对应数据块表空间号。

         Col:保存前进项值。Ox4c-1=77。

         Bdab:数据块地址。

         Hdba:数据块所在段的段头块。

C、数据块头变化

         通过 rowid 可以知道数据块存放在4号文件550号块。

         Dump该数据块,查看块头事务槽。altersystem dump datafile 4 block 550。

          4.jpg


        1号事务槽的Xid与undo块保存的Xid一致。Uba指向undo块,028b表示块的覆盖次数,2e表示undo记录号。Flag为----表示事务未提交。Lck为1表示有一行被锁定。

D、数据行变化

         查看数据块中的行信息

       14.jpg



         lb:0x1表示该行数据被1号事务槽锁定。第二列数据已经被修改Ox4c-1=75。

E、redo变化

         1、查找正在使用的logfile

             SELECT * FROM v$LOGFILEWHERE GROUP# =(Select GROUP# from v$log where status = ‘CURRENT’);

         2、dump正在使用的日志文件(/u01/app/oracle/oradata/orcl/redo04.log);

                   alter system dump logfile 'redoFile';

           找到与当前修改对象相关的内容(对象号76014)。

          包含三个改变向量(CHANGE),

          Change1是对数据块修改的redo信息。

          chage1.jpg


          DBA:数据块地址。

          OBJ:数据块所在对象号。

          OP:11.19。表示update row array

          Col 1:[ 2] c1 4c  保存修改后的数据。

          Chage2是对undo段头块修改参数的redo信息。

          7.jpg 

          DBA:undo段头块地址。

          OBJ:修改块所在对象号。

          OP:5.2表示对undo段头块的修改。

          UBA:undo块地址。

         Change3是对undo数据块的修改。

          8.jpg 

         DBA:undo块地址。

         XID:事务号。

         BDBA:数据块地址。

         HDBA:数据块段头块地址。

         UBA:undo块地址。

2、执行commit;A、undo段头块变化情况。

         Dump出undo段段头块。alter system dump undo header ' _SYSSMU4_1003442803$';

         Commit后段头事务表如下:

          9.jpg


         Commit前段头事务表如下:

         

         变化:事务槽15的state变成了9,cflags变为00,uel变成了无限大(ffff),scn变成了提交是的scn。

B、undo块变化情况。

         Dump出undo块。Dump出该undo块: alter systemdump datafile 3 block 2950。

         

         Undo块头信息没有发生变化,直接查看0x2e号undo条目,可以发现没有任何变化。

      

         

C、数据块事务槽变化情况。

         通过 rowid 可以知道数据块存放在4号文件550号块。

         先刷新内存alter systemflush buffer_cache。

         Dump该数据块,查看块头事务槽。altersystem dump datafile 4 block 550。

          13.jpg 

         可以看到没有变化,commit之后flag还是“--U-”, lck还是“1”,fscchans。这就是快速提交。

D、数据行变化情况。

         查看数据块中的行信息:

          5.jpg 

         lb:0x1表示该行数据被1号事务槽锁定。第二列数据已经被修改Ox4c-1=75。

E、redo变化情况。

         Dump出当前redo日志文件:alter system dump logfile 'redoFile';

         可以看到多了两条重做记录,

         1、数据提交的重做记录,里面只有一个change:

          15.jpg


         增加的这条change为对undo段头事务表的修改产生的redo信息。OP:5.4

         2、一个为写文件的重做记录

          16.jpg 

         产生了一天写入redo条目。OP:23.1










6.jpg (34.07 KB, 下载次数: 3)


6.jpg

3.jpg (69.15 KB, 下载次数: 1)


3.jpg

2.jpg (61.07 KB, 下载次数: 1)


2.jpg

1.jpg (161.05 KB, 下载次数: 1)


1.jpg

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

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

注册时间:2013-01-31

  • 博文量
    11
  • 访问量
    72194