您现在的位置是:首页 >

oracle回滚到某一时间 oracle的事务与锁与回滚段block的一点研究

火烧 2022-04-04 05:04:21 1057
oracle的事务与锁与回滚段 lock的一点研究   SQL gt create ta le a a elect row um a from t where row um am lt      表已

oracle的事务与锁与回滚段block的一点研究  

  SQL>  create table a as select rownum a  from t where rownum < ;

  

 

  表已创建

  

 

  SQL>  alter table a  initrans ;

  

 

  表已更改

  

 

  SQL>  update a set a = where a in ( );

  

 

  已更新 行

  

 

  SQL>  alter system dump datafile block ;

  

 

  系统已更改

  

 

  Start dump data blocks tsn: file#: minblk maxblk

  buffer tsn: rdba: x c ( / )

  scn: x e seq: x flg: x tail: x e

  frmt: x cval: x type: x =trans data

  

 

  Block header dump:  x c

  Object id on Block? Y

  seg/obj: x be  csc: x e   itc:   flg: O  typ: DATA

  fsl:   fnx: x ver: x

  

 

  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

   x    xid:  x be    uba: x c cd c        fsc x

  

 

  data_block_dump

  

 

  我们看到该块上第一个 trans x   的一些标记信息

  

 

  scn: x e seq: x    scn号

   x    xid:  x be    uba: x c cd c      (表示该事务更新 条记录)  fsc x

  

 

  下面是数据中的一些内容

  

 

  block_row_dump:

  tab row @ x fb

  tl: fb: H FL lb: x ( x 表示 该编号事务所更新数据) cc:

  col  : [ ]  c

  tab row @ x fa

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x fa

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f e

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f c

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f a

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f

  tl: fb: H FL lb: x cc:

  

 

  然后我们继续在另外一个sqlplus中进行

  SQL>  update a set a = where a in ( );

  

 

  已更新 行

  

 

  SQL>  alter system dump datafile block ;

  

 

  系统已更改

  

 

  SQL>

  

 

  我们可以看到已经多了一个事务信息

  

 

  Start dump data blocks tsn: file#: minblk maxblk

  buffer tsn: rdba: x c ( / )

  scn: x e seq: x flg: x tail: x e

  frmt: x cval: x type: x =trans data

  

 

  Block header dump:  x c

  Object id on Block? Y

  seg/obj: x be  csc: x e   itc:   flg: O  typ: DATA

  fsl:   fnx: x ver: x

  

 

  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

   x    xid:  x be    uba: x c cd c        fsc x

   x    xid:  x a c     uba: x d f        fsc x

  

 

  data_block_dump

  

 

  然后数据也发生了变化

  

 

  block_row_dump:

  tab row @ x f a

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x c

  tl: fb: H FL lb: x cc:

  col  : [ ] 

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x c b

  tl: fb: H FL lb: x cc:

  col  : [ ] 

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x c

  tl: fb: H FL lb: x cc:

  col  : [ ] 

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x c

  tl: fb: H FL lb: x cc:

  col  : [ ] 

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c

  tab row @ x f

  tl: fb: H FL lb: x cc:

  col  : [ ]  c b

  tab row @ x f

  tl: fb: H FL lb: x cc:

  

 

  数据中的每行中都有标记 事务信息(编号)

  

 

  这个时候我们查询x$bh

  

 

  SQL> select dataobj# from obj$ where name = A ;

  

 

  DATAOBJ#

  

  

  

 

  SQL> select count(*) from x$bh where obj =  ;

  

 

  COUNT(*)

  

  

oracle回滚到某一时间 oracle的事务与锁与回滚段block的一点研究

  

 

  我们看到这个时候  data buffer 中有 个block

  

 

  然后再在新的sqlplus中更新

  

 

  SQL> update a set a = where a = ;

  

 

  已更新 行

  

 

  SQL>

  

 

  这个时候我们发现

  

 

  SQL> select count(*) from x$bh where obj =  ;

  

 

  COUNT(*)

  

  

  

 

  SQL>

  

 

  这说明一个问题

  

 

  当更新的时候新增加了一个块 这个块里面的数据 就是 回滚段中保存的数据

  

 

lishixinzhi/Article/program/Oracle/201311/18474  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码