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




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

实验目的

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

   流程图.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’;

Aundo段头块变化情况。

         通过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反映的一致。

Bundo块变化情况。

        通过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

Eredo变化

         1、查找正在使用的logfile

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

         2dump正在使用的日志文件(/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;Aundo段头块变化情况。

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

         Commit后段头事务表如下:

          9.jpg


         Commit前段头事务表如下:

         

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

Bundo块变化情况。

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

         

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

      

         

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

Eredo变化情况。

         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博客 ” ,链接:http://blog.itpub.net/11693228/viewspace-1061076/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11693228/viewspace-1061076/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值