`

oracle 块延迟清除(delayed block cleanout)

 
阅读更多

为了保证事务的回退和满足多用户的 CR oracle 引入了 undo 机制, 由于 undo 是循环使用的,在一个事务完成过程中,它与 redo 相互配合,其中 undo 在一次事务中需要完成以下工作:

(1)      Transaction 开始前 回滚段获取一个 ITL( 事务槽 ) ,分配空间, 记录事务信息

(2)      Transaction 提交后, redo 完成记录,同时还清除回滚段的事务信息 包括行级锁, ITL 信息 (commit 标志, SCN )

清除这些事务段的信息的过程就叫做 块清除, 在完成块清除时 , 我们本事务修改的数据块就会存在两种可能 (1) 所有的数据块还保存在 buffer  cache 中, (2) 部分数据块或者是全部数据块由于 LRU 管理 已经被刷出了 buffer cache oracle 为了考虑到块清除的成本,以及性能,会作以下两种方式的块清除处理:

(1)        快速块清除 (fast block cleanout ),  当事务修改的数据库 全部保存在 buffer cache 并且修改数据块的数据量没有超过 cache buffer  10% ,快速清除事务信息。

(2)        延迟块清除 (delayed block cleanout) 当修改的数据块的阀值超过 10%  或者本次事务相关的数据块已经被刷出了 buffer cache oracle 会下次访问此 block 时再清除事务信息。

下面通过一个实验 测试,来熟悉一下 delayed block cleanout 的处理

SQL> select  *  from   v$version ;

 

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE    10.2.0.1.0      Production

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 – Production

 

SQL> show  parameter  undo;

 

NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS1

 

 

SQL> conn japie/japie

Connected.

SQL> create  table test_delayed  as  select *  from  user_objects;

 

Table created.

 

 

 

SQL> select count(1)  from  test_delayed;

 

  COUNT(1)

----------

         3

SQL> update test_delayed  set object_id=1 where object_name='TEST_REDO';

 

1 row updated.

 

SQL> update test_delayed  set object_id=2 where object_name='TEST_DELAYED';

 

1 row updated.

 

SQL>   ----- 不提交

查询回滚段信息 :

SQL> col segment_name  for a20;

select owner,segment_name,SEGMENT_ID,FILE_ID,BLOCK_ID,STATUS

SQL> tablespace_name from dba_rollback_segs;

  2

OWNER  SEGMENT_NAME         SEGMENT_ID    FILE_ID   BLOCK_ID TABLESPACE_NAME

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

SYS    SYSTEM                        0          1          9 ONLINE

PUBLIC _SYSSMU1$                     1          2          9 ONLINE

PUBLIC _SYSSMU2$                     2          2         25 ONLINE

PUBLIC _SYSSMU3$                     3          2         41 ONLINE

PUBLIC _SYSSMU4$                     4          2         57 ONLINE

PUBLIC _SYSSMU5$                     5          2         73 ONLINE

PUBLIC _SYSSMU6$                     6           2         89 ONLINE

PUBLIC _SYSSMU7$                     7          2        105 ONLINE

PUBLIC _SYSSMU8$                     8          2        121 ONLINE

PUBLIC _SYSSMU9$                     9          2        137 ONLINE

PUBLIC _SYSSMU10$                    10          2        153 ONLINE

 

11 rows selected.

 

查询事务信息

SQL>  select  xidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from  v$transaction;

 

    XIDUSN    XIDSLOT     XIDSQN     UBABLK     UBAFIL     UBAREC

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

         6         40        427         99          2          7

查询该活动事务所在的回滚段

SQL> select *  from   v$rollname  where usn = &usn;

Enter value for usn: 6

old   1: select *  from   v$rollname  where usn = &usn

new   1: select *  from   v$rollname  where usn = 6

 

       USN NAME

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

         6_SYSSMU6$

查询 test_delayed 对象所在的 fileid  blockid 由于数据对象还存在 buffer

SQL> select b.segment_name,a.file#,a.dbarfil,a.dbablk,a.class,

  2  a.state,decode(bitand(flag,1), 0, 'N', 'Y') DIRTY

  3  from x$bh a,dba_extents b

  4  where b.RELATIVE_FNO = a.dbarfil

  5  and b.BLOCK_ID <= a.dbablk and b.block_id + b.blocks > a.dbablk

  6  and b.owner='GABRIEL' and b.segment_name='TEST_DELAYED';

 

SEGMENT_NAME              FILE#    DBARFIL     DBABLK      CLASS      STATE D

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

TEST_DELAYED                  8          8         28          1          1 N

TEST_DELAYED                   8          8         28          1          3 N

TEST_DELAYED                  8          8         28          1          3 N

TEST_DELAYED                  8          8         27          4          1 N

TEST_DELAYED                  8          8          27          4          3 N

由上可知: x$bh.class= 4  表示为 segment header  x$bh.state =3 为前镜像块,因此 file#=8

Dbablk=28 为数据块

 

SQL> alter system  dump datafile 8 block 28;

 

System altered.

 

SQL> alter system  dump undo header '_SYSSMU6$';

 

System altered.

 

SQL> alter system  dump datafile 2 block 99;

 

System altered.

 

SQL> @gettrname.sql

 

TRACE_FILE_NAME

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

/u01/app/oracle/admin/gabriel/udump/gabriel_ora_4756.trc

 

以下为 trace 文件中的截图部分

Block header dump:  0x0200001c

  Object id on Block? Y

  seg/obj: 0xcf1a  csc: 0x00.f4707  itc: 3  flg: E  typ: 1 - DATA

     brn: 0  bdba: 0x2000019 ver: 0x01 opc: 0

     inc: 0  exflg: 0

 

  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0xffff.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.000f4707

0x02   0x0006.028.000001ab  0x00800063.0156.07  ----    2  fsc 0x0004.00000000

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

--- 事务信息存在

tab 0, row 1, @0x1cf8

tl: 76 fb: --H-FL--lb: 0x2   cc: 12

col  0: [ 9]  54 45 53 54 5f 52 45 44 4f

col  1: *NULL*

col  2: [ 2]  c1 02

col  3: [ 4]  c3 06 1d 2d

col  4: [ 5]  54 41 42 4c 45

col  5: [ 7]  78 6f 06 17 0d 0c 23

col  6: [ 7]  78 6f 06 17 0d 0c 23

col  7: [19]  32 30 31 31 2d 30 36 2d 32 33 3a 31 32 3a 31 31 3a 33 34

col  8: [ 5]  56 41 4c 49 44

col  9: [ 1]  4e

col 10: [ 1]  4e

col 11: [ 1]  4e

tab 0, row 2, @0x1ca9

tl: 79 fb: --H-FL--lb: 0x2   cc: 12

col  0: [12]  54 45 53 54 5f 44 45 4c 41 59 45 44

col  1: *NULL*

col  2: [ 2]  c1 03

col  3: [ 4]  c3 06 1f 13

col  4: [ 5]  54 41 42 4c 45

col  5: [ 7]  78 6f 08 14 16 02 35

col  6: [ 7]  78 6f 08 14 16 02 35

col  7: [19]  32 30 31 31 2d 30 38 2d 32 30 3a 32 31 3a 30 31 3a 35 32

col  8: [ 5]  56 41 4c 49 44

col  9: [ 1]  4e

col 10: [ 1]  4e

col 11: [ 1]  4e

end_of_block_dump

End dump data blocks tsn: 9 file#: 8 minblk 28 maxblk 28

*** 2011-08-20 23:25:38.403

--- 锁信息也存在

再来仔细看看 undo segment header 信息:

  TRN TBL::

 

  index   state cflags  wrap#    uel         scn             dba            parent-xid    nub     stmt_num    cmt

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

0x28    10     0x80  0x01ab  0x0002  0x0000.000f59ac  0x00800063   0x0000.000.00000000  0x00000001    0x00000000  0

0x28 转化为十进制为 40 刚好为前面查询的事务槽, state 状态为 10 表示活动事务, dba 0x00800063 转化为 2 进制 0000 0000 1000 0000 0000 0000 0110 0011 根据 dba 的转换 2 文件的 64+32+2+1 =99

接下来我们看看 undo 段的转存信息 ( 限于篇幅, 只截取了部分关键信息 )

Start dump data blocks tsn: 1 file#: 2 minblk 99 maxblk 99

buffer tsn: 1 rdba: 0x00800063 (2/99)

scn: 0x0000.000f59c1 seq: 0x01 flg: 0x04 tail: 0x59c10201

frmt: 0x02 chkval: 0xa7ae type: 0x02=KTU UNDO BLOCK

Hex dump of block: st=0, typ_found=1

…….

UNDO BLK:

xid: 0x0006.028.000001ab  seq: 0x156 cnt: 0x7   irb: 0x7    icl: 0x0   flg: 0x0000

 

  Rec Offset      Rec Offset      Rec Offset      Rec Offset      Rec Offset

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

0x01 0x1ecc     0x02 0x1e00     0x03 0x1d1c     0x04 0x1c80     0x05 0x1c04

0x06 0x1ad0      0x07 0x19c4

 

*-----------------------------

* Rec #0x1  slt: 0x06  objn: 49948(0x0000c31c)  objd: 49948  tblspc: 2(0x00000002)

*       Layer:  11 (Row)   opc: 1   rci 0x00

Undo type:  Regular undo   Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00800062

*-----------------------------

KDO undo record:

KTB Redo

op: 0x02  ver: 0x01

op: C  uba: 0x00800062.0156.1e

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x00c05be8  hdba: 0x00c05be3

itli: 2  ispac: 0  maxfr: 4858

tabn: 0 slot: 7(0x7) flag: 0x2c lock: 0 ckix: 0

ncol: 12 nnew: 2 size: 0

col  9: [ 1]  80

col 10: [ 1]  80

 

*-----------------------------

* Rec #0x2  slt: 0x06  objn: 49871(0x0000c2cf)  objd: 49871  tblspc: 2(0x00000002)

*        Layer:  10 (Index)   opc: 22   rci 0x01

Undo type:  Regular undo   Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00000000

*-----------------------------

index undo for leaf key operations

KTB Redo

op: 0x04  ver: 0x01

op: L  itl: xid:  0x0003.02a.000001b9 uba: 0x008000d7.0174.23

………..

*-----------------------------

* Rec #0x6   slt: 0x28  objn: 53018(0x0000cf1a)  objd: 53018  tblspc: 9(0x00000009)

*       Layer:  11 (Row)   opc: 1   rci 0x00

Undo type:  Regular undo    Begin trans    Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00000000

*-----------------------------

uba: 0x00800063.0156.04 ctl max scn: 0x0000.000f5354 prv tx scn: 0x0000.000f535c

txn start scn: scn: 0x0000.000f59ac logon user: 64

  prev brb: 8388871 prev bcl: 0

KDO undo record:

KTB Redo

op: 0x03  ver: 0x01

op: Z

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x0200001c  hdba: 0x0200001b

itli: 2  ispac: 0  maxfr: 4858

tabn: 0 slot: 1(0x1) flag: 0x2c lock: 0 ckix: 183

ncol: 12 nnew: 1 size: 2

col  2: [ 4]  c3 06 1d 2d

 

*-----------------------------

*Rec #0x7   slt: 0x28  objn: 53018(0x0000cf1a)  objd: 53018  tblspc: 9(0x00000009)

*       Layer:  11 (Row)   opc: 1   rci 0x06

Undo type:  Regular undo   Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00000000

*-----------------------------

KDO undo record:

KTB Redo

op: 0x02  ver: 0x01

op: C  uba: 0x00800063.0156.06

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x0200001c  hdba: 0x0200001b

itli: 2  ispac: 0  maxfr: 4858

tabn: 0 slot: 2(0x2) flag: 0x2c lock: 0 ckix: 0

ncol: 12 nnew: 1 size: 2

col  2: [ 4]  c3 06 1f 13

 

End dump data blocks tsn: 1 file#: 2 minblk 99 maxblk 99

---irb: 0x7  最近未提交事务的起始 回滚点 ,回滚段信息偏移量的最后偏移地址 刚好相等

--  rci 0x06 代表 undo  chain 下一偏移量地址

 

上面 dump 信息 是整个事务在没有 commit 的情况下产生, 下面我们 flush 一下   buffer_cache buffer cache 中的前数据块写入 dbfile 然后将事务 commit ,我们再认真比对 dump 信息,

SQL> alter system  flush buffer_cache;

 

System altered.

 

------ 在事务窗体进行以下操作:

SQL> show user

USER is "GABRIEL"

SQL> commit;

 

Commit complete.

重复以上 dump 操作

…….

SQL> alter system  dump datafile 2 block 99;

 

System altered.

 

SQL> @gettrname.sql

 

TRACE_FILE_NAME

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

/u01/app/oracle/admin/gabriel/udump/japie_ora_4963.trc

 

先看看数据块的 dump 信息

Block header dump:  0x0200001c

  Object id on Block? Y

  seg/obj: 0xcf1a  csc: 0x00.f4707  itc: 3  flg: E  typ: 1 - DATA

     brn: 0  bdba: 0x2000019 ver: 0x01 opc: 0

     inc: 0  exflg: 0

 

  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0xffff.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.000f4707

0x02   0x0006.028.000001ab  0x00800063.0156.07  ----    2  fsc 0x0004.00000000

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

 

tab 0, row 1, @0x1cf8

tl: 76 fb: --H-FL-- lb: 0x2  cc: 12

col  0: [ 9]  54 45 53 54 5f 52 45 44 4f

col  1: *NULL*

col  2: [ 2]  c1 02

col  3: [ 4]  c3 06 1d 2d

col  4: [ 5]  54 41 42 4c 45

col  5: [ 7]  78 6f 06 17 0d 0c 23

col  6: [ 7]  78 6f 06 17 0d 0c 23

col  7: [19]  32 30 31 31 2d 30 36 2d 32 33 3a 31 32 3a 31 31 3a 33 34

col  8: [ 5]  56 41 4c 49 44

col  9: [ 1]  4e

col 10: [ 1]  4e

col 11: [ 1]  4e

tab 0, row 2, @0x1ca9

tl: 79 fb: --H-FL-- lb: 0x2  cc: 12

col  0: [12]  54 45 53 54 5f 44 45 4c 41 59 45 44

col  1: *NULL*

col  2: [ 2]  c1 03

col  3: [ 4]  c3 06 1f 13

col  4: [ 5]  54 41 42 4c 45

col  5: [ 7]  78 6f 08 14 16 02 35

col  6: [ 7]  78 6f 08 14 16 02 35

col  7: [19]  32 30 31 31 2d 30 38 2d 32 30 3a 32 31 3a 30 31 3a 35 32

col  8: [ 5]  56 41 4c 49 44

col  9: [ 1]  4e

col 10: [ 1]  4e

col 11: [ 1]  4e

end_of_block_dump

End dump data blocks tsn: 9 file#: 8 minblk 28 maxblk 28

*** 2011-08-21 00:18:07.820

可以看出数据块的信息与 commit 之前的内容基本吻合

 

再来仔细看看 undo segment header 信息:

   0x27    9    0x00  0x01ab  0x0015  0x0000.000f5655  0x00800062  0x0000.000.00000000  0x00000002   0x00000000  1313850640

   0x28    9     0x00  0x01ab  0xffff  0x0000.000f6a64  0x00800063  0x0000.000.00000000  0x00000001   0x00000000  1313857062

   0x29    9    0x00  0x01aa  0x000a  0x0000.000f54e4  0x00800108  0x0000.000.00000000  0x00000001   0x00000000  1313849990

----- 事务已经提交

接下来我们看看 undo 段的转存信息 ( 限于篇幅, 只截取了部分关键信息 )

*** 2011-08-21 00:18:20.252

Start dump data blocks tsn: 1 file#: 2 minblk 99 maxblk 99

buffer tsn: 1 rdba: 0x00800063 (2/99)

scn: 0x0000.000f59c1 seq: 0x01 flg: 0x04 tail: 0x59c10201

frmt: 0x02 chkval: 0xa7ae type: 0x02=KTU UNDO BLOCK

Hex dump of block: st=0, typ_found=1

Dump of memory from 0x0D50A600 to 0x0D50C600

UNDO BLK:

xid: 0x0006.028.000001ab  seq: 0x156 cnt: 0x7   irb: 0x7   icl: 0x0   flg: 0x0000

 

  Rec Offset      Rec Offset      Rec Offset      Rec Offset      Rec Offset

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

0x01 0x1ecc     0x02 0x1e00     0x03 0x1d1c     0x04 0x1c80     0x05 0x1c04

0x06 0x1ad0     0x07 0x19c4

 

*-----------------------------

* Rec #0x1  slt: 0x06  objn: 49948(0x0000c31c)  objd: 49948  tblspc: 2(0x00000002)

*       Layer:  11 (Row)   opc: 1   rci 0x00

Undo type:  Regular undo   Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00800062

*-----------------------------

KDO undo record:

KTB Redo

op: 0x02  ver: 0x01

op: C  uba: 0x00800062.0156.1e

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x00c05be8  hdba: 0x00c05be3

itli: 2  ispac: 0  maxfr: 4858

tabn: 0 slot: 7(0x7) flag: 0x2c lock: 0 ckix: 0

ncol: 12 nnew: 2 size: 0

col  9: [ 1]  80

col 10: [ 1]  80

 

*-----------------------------

* Rec #0x2  slt: 0x06  objn: 49871(0x0000c2cf)  objd: 49871  tblspc: 2(0x00000002)

*       Layer:  10 (Index)   opc: 22   rci 0x01

Undo type:  Regular undo   Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00000000

*-----------------------------

index undo for leaf key operations

KTB Redo

op: 0x04  ver: 0x01

op: L  itl: xid:  0x0003.02a.000001b9 uba: 0x008000d7.0174.23

                      flg: C---    lkc:  0     scn: 0x0000.000f5659

Dump kdilk : itl=2, kdxlkflg=0xc1 sdc=0 indexid=0xc059ab block=0x00c059b0

*-----------------------------

* Rec #0x6  slt: 0x28  objn: 53018(0x0000cf1a)  objd: 53018  tblspc: 9(0x00000009)

*       Layer:  11 (Row)   opc: 1   rci 0x00

Undo type:  Regular undo    Begin trans    Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00000000

*-----------------------------

uba: 0x00800063.0156.04 ctl max scn: 0x0000.000f5354 prv tx scn: 0x0000.000f535c

txn start scn: scn: 0x0000.000f59ac logon user: 64

  prev brb: 8388871 prev bcl: 0

KDO undo record:

KTB Redo

op: 0x03  ver: 0x01

op: Z

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x0200001c  hdba: 0x0200001b

itli: 2  ispac: 0  maxfr: 4858

tabn: 0 slot: 1(0x1) flag: 0x2c lock: 0 ckix: 183

ncol: 12 nnew: 1 size: 2

col  2: [ 4]  c3 06 1d 2d

 

*-----------------------------

* Rec #0x7  slt: 0x28  objn: 53018(0x0000cf1a)  objd: 53018  tblspc: 9(0x00000009)

*       Layer:  11 (Row)   opc: 1   rci 0x06

Undo type:  Regular undo   Last buffer split:  No

Temp Object:  No

Tablespace Undo:  No

rdba: 0x00000000

*-----------------------------

KDO undo record:

KTB Redo

op: 0x02  ver: 0x01

op: C  uba: 0x00800063.0156.06

KDO Op code: URP row dependencies Disabled

  xtype: XA flags: 0x00000000  bdba: 0x0200001c  hdba: 0x0200001b

itli: 2  ispac: 0  maxfr: 4858

tabn: 0 slot: 2(0x2) flag: 0x2c lock: 0 ckix: 0

ncol: 12 nnew: 1 size: 2

col  2: [ 4]  c3 06 1f 13

由两次的 dump 对比可以得出: 块延迟清除 只是更改了 undo segment header 的事务信息状态, 数据块 undo 块信息均保持不变

 

--

 

SQL> set echo off

SQL> set autotrace on

SQL> select *  from gabriel.test_delayed; --- 将数据块再次缓存在 cache buffer

Note

-----

   - dynamic sampling used for this statement

 

 

Statistics

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

        178  recursive calls

          0  db block gets

         27  consistent gets

          7  physical reads

         72  redo size

       1364  bytes sent via SQL*Net to client

        385  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          4  sorts (memory)

          0  sorts (disk)

          3  rows processed

 

再次转存 数据块信息

SQL> alter system  dump datafile 8 block 28;

 

System altered.

 

SQL> @gettrname.sql

 

TRACE_FILE_NAME

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

/u01/app/oracle/admin/gabriel/udump/gabriel_ora_5017.trc

再次观察数据块的 dump 信息

 

*** 2011-08-21 00:50:23.744

*** SERVICE NAME:(SYS$USERS) 2011-08-21 00:50:23.743

*** SESSION ID:(152.73) 2011-08-21 00:50:23.743

Start dump data blocks tsn: 9 file#: 8 minblk 28 maxblk 28

buffer tsn: 9 rdba: 0x0200001c (8/28)

 

Block header dump:  0x0200001c

  Object id on Block? Y

  seg/obj: 0xcf1a  csc: 0x00.f6e54  itc: 3  flg: E  typ: 1 - DATA

     brn: 0  bdba: 0x2000019 ver: 0x01 opc: 0

     inc: 0  exflg: 0

 

  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0xffff.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.000f4707

0x02   0x0006.028.000001ab  0x00800063.0156.07  C---    0  scn 0x0000.000f6a64

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

--- 事务信息清除

block_row_dump:

tab 0, row 0, @0x1f1d

tl: 99 fb: --H-FL-- lb: 0x0  cc: 12

col  0: [30]

  42 49 4e 24 70 6c 6f 37 43 4f 51 50 35 34 54 67 51 4b 6a 41 62 67 41 4d 4a

  51 3d 3d 24 30

col  1: *NULL*

col  2: [ 4]  c3 06 1d 19

col  3: [ 4]  c3 06 1d 19

col  4: [ 5]  54 41 42 4c 45

col  5: [ 7]  78 6f 04 1a 05 1c 21

col  6: [ 7]  78 6f 06 17 0d 08 3c

col  7: [19]  32 30 31 31 2d 30 36 2d 32 33 3a 31 32 3a 30 37 3a 35 39

col  8: [ 5]  56 41 4c 49 44

col  9: [ 1]  4e

col 10: [ 1]  4e

col 11: [ 1]  4e

tab 0, row 1, @0x1cf8

tl: 76 fb: --H-FL--lb: 0x0   cc: 12

col  0: [ 9]  54 45 53 54 5f 52 45 44 4f

col  1: *NULL*

col  2: [ 2]  c1 02

col  3: [ 4]  c3 06 1d 2d

col  4: [ 5]  54 41 42 4c 45

col  5: [ 7]  78 6f 06 17 0d 0c 23

col  6: [ 7]  78 6f 06 17 0d 0c 23

col  7: [19]  32 30 31 31 2d 30 36 2d 32 33 3a 31 32 3a 31 31 3a 33 34

col  8: [ 5]  56 41 4c 49 44

col  9: [ 1]  4e

col 10: [ 1]  4e

col 11: [ 1]  4e

tab 0, row 2, @0x1ca9

tl: 79 fb: --H-FL--lb: 0x0   cc: 12

col  0: [12]  54 45 53 54 5f 44 45 4c 41 59 45 44

col  1: *NULL*

col  2: [ 2]  c1 03

col  3: [ 4]  c3 06 1f 13

col  4: [ 5]  54 41 42 4c 45

col  5: [ 7]  78 6f 08 14 16 02 35

col  6: [ 7]  78 6f 08 14 16 02 35

--- 锁信息已经清除

 

 

总结整个 block  delaye cleanout 过程

(1)      本次事务相关的数据块已经被刷出了 buffer cache 当本次事务提交后,事务相关的 data block ,undo block 上的事务信息,锁信息不会被清除。

 

(2)        data block 再次进入 buffer cache oracle 在读取次数据块时 事务信息 锁信息的清除处理

分享到:
评论

相关推荐

    ORA-01555错误浅析

    这个问题的核心在于Oracle的一致性读(Consistent Get)机制与延迟块清除(Delayed Block Cleanout)的交互作用,以及与回滚段相关的配置参数设置不当。 ### 一、一致性读(Consistent Get) 一致性读是Oracle为了处理...

    Oracle Core Essential Internals for DBAs and Developers ■ ■

    Delayed Block Cleanout .......................................................................................................................... 48 Transaction Table Rollback ...........................

    智能车竞赛介绍(竞赛目标和赛程安排).zip

    全国大学生智能汽车竞赛自2006年起,由教育部高等教育司委托高等学校自动化类教学指导委员会举办,旨在加强学生实践、创新能力和培养团队精神的一项创意性科技竞赛。该竞赛至今已成功举办多届,吸引了众多高校学生的积极参与,此文件为智能车竞赛介绍

    集字卡v4.3.4微信公众号原版三种UI+关键字卡控制+支持强制关注.zip

    字卡v4.3.4 原版 三种UI+关键字卡控制+支持获取用户信息+支持强制关注 集卡模块从一开始的版本到助力版本再到现在的新规则版本。 集卡模块难度主要在于 如何控制各种不同的字卡组合 被粉丝集齐的数量。 如果不控制那么一定会出现超过数量的粉丝集到指定的字卡组合,造成奖品不够的混乱,如果大奖价值高的话,超过数量的粉丝集到大奖后,就造成商家的活动费用超支了。我们冥思苦想如何才能限制集到指定字卡组合的粉丝数,后我们想到了和支付宝一样的选一张关键字卡来进行规则设置的方式来进行限制,根据奖品所需的关键字卡数,设定规则就可以控制每种奖品所需字卡组合被粉丝集到的数量,规则可以在活动进行中根据需要进行修改,活动规则灵活度高。新版的集卡规则,在此次政府发布号的活动中经受了考验,集到指定字卡组合的粉丝没有超出规则限制。有了这个规则限制后,您无需盯着活动,建好活动后就无人值守让活动进行就行了,您只需要时不时来看下蹭蹭上涨的活动数据即可。 被封? 无需担心,模块内置有防封功能,支持隐藏主域名,显示炮灰域名,保护活动安全进行。 活动准备? 只需要您有一个认证服务号即可,支持订阅号借用认证服务号来做活动。如果您

    出口设备线体程序详解:PLC通讯下的V90控制与开源FB284工艺对象实战指南,出口设备线体程序详解:PLC通讯与V90控制集成,工艺对象与FB284协同工作,开源学习V90控制技能,出口设备1200

    出口设备线体程序详解:PLC通讯下的V90控制与开源FB284工艺对象实战指南,出口设备线体程序详解:PLC通讯与V90控制集成,工艺对象与FB284协同工作,开源学习V90控制技能,出口设备1200线体程序,多个plc走通讯,内部有多个v90,采用工艺对象与fb284 共同控制,功能快全部开源,能快速学会v90的控制 ,出口设备; 1200线体程序; PLC通讯; 多个V90; 工艺对象; FB284; 功能开源; V90控制。,V90工艺控制:开源功能快,快速掌握1200线体程序与PLC通讯

    基于Arduino与DAC8031的心电信号模拟器资料:心电信号与正弦波的双重输出应用方案,Arduino与DAC8031心电信号模拟器:生成心电信号与正弦波输出功能详解,基于arduino +DAC

    基于Arduino与DAC8031的心电信号模拟器资料:心电信号与正弦波的双重输出应用方案,Arduino与DAC8031心电信号模拟器:生成心电信号与正弦波输出功能详解,基于arduino +DAC8031的心电信号模拟器资料,可输出心电信号,和正弦波 ,基于Arduino;DAC8031;心电信号模拟器;输出心电信号;正弦波输出;模拟器资料,基于Arduino与DAC8031的心电信号模拟器:输出心电与正弦波

    (参考项目)MATLAB口罩识别检测.zip

    MATLAB口罩检测的基本流程 图像采集:通过摄像头或其他图像采集设备获取包含面部的图像。 图像预处理:对采集到的图像进行灰度化、去噪、直方图均衡化等预处理操作,以提高图像质量,便于后续的人脸检测和口罩检测。 人脸检测:利用Haar特征、LBP特征等经典方法或深度学习模型(如MTCNN、FaceBoxes等)在预处理后的图像中定位人脸区域。 口罩检测:在检测到的人脸区域内,进一步分析是否佩戴口罩。这可以通过检测口罩的边缘、纹理等特征,或使用已经训练好的口罩检测模型来实现。 结果输出:将检测结果以可视化方式展示,如在图像上标注人脸和口罩区域,或输出文字提示是否佩戴口罩。

    kernel-debug-devel-3.10.0-1160.119.1.el7.x64-86.rpm.tar.gz

    1、文件内容:kernel-debug-devel-3.10.0-1160.119.1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/kernel-debug-devel-3.10.0-1160.119.1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    day02供应链管理系统-补充.zip

    该文档提供了一个关于供应链管理系统开发的详细指南,重点介绍了项目安排、技术实现和框架搭建的相关内容。 文档分为以下几个关键部分: 项目安排:主要步骤包括搭建框架(1天),基础数据模块和权限管理(4天),以及应收应付和销售管理(5天)。 供应链概念:供应链系统的核心流程是通过采购商品放入仓库,并在销售时从仓库提取商品,涉及三个主要订单:采购订单、销售订单和调拨订单。 大数据的应用:介绍了数据挖掘、ETL(数据抽取)和BI(商业智能)在供应链管理中的应用。 技术实现:讲述了DAO(数据访问对象)的重用、服务层的重用、以及前端JS的继承机制、jQuery插件开发等技术细节。 系统框架搭建:包括Maven环境的配置、Web工程的创建、持久化类和映射文件的编写,以及Spring配置文件的实现。 DAO的需求和功能:供应链管理系统的各个模块都涉及分页查询、条件查询、删除、增加、修改操作等需求。 泛型的应用:通过示例说明了在Java语言中如何使用泛型来实现模块化和可扩展性。 文档非常技术导向,适合开发人员参考,用于构建供应链管理系统的架构和功能模块。

    基于四旋翼无人机的PD控制研究 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进行数据读写,定时器与计数器数据区的简洁读写操作示例,C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进

    C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进行数据读写,定时器与计数器数据区的简洁读写操作示例,C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进行读写操作,涵盖定时器计数器数据区学习案例,C#欧姆龙plc Fins Tcp通信案例上位机源码,有c#和VB的Demo,c#上位机和欧姆龙plc通讯案例源码,调用动态链接库,可以实现上位机的数据连接,可以简单实现D区W区定时器计数器等数据区的读写,是一个非常好的学习案例 ,C#; 欧姆龙PLC; Fins Tcp通信; 上位机源码; 动态链接库; 数据连接; D区W区读写; 定时器计数器; 学习案例,C#实现欧姆龙PLC Fins Tcp通信上位机源码,读写数据区高效学习案例

    可调谐石墨烯超材料吸收体的FDTD仿真模拟研究报告:吸收光谱的化学势调节策略与仿真源文件解析,可调谐石墨烯超材料吸收体:化学势调节光谱的FDTD仿真模拟研究,可调谐石墨烯超材料吸收体FDTD仿真模拟

    可调谐石墨烯超材料吸收体的FDTD仿真模拟研究报告:吸收光谱的化学势调节策略与仿真源文件解析,可调谐石墨烯超材料吸收体:化学势调节光谱的FDTD仿真模拟研究,可调谐石墨烯超材料吸收体FDTD仿真模拟 【案例内容】该案例提供了一种可调谐石墨烯超材料吸收体,其吸收光谱可以通过改变施加于石墨烯的化学势来进行调节。 【案例文件】仿真源文件 ,可调谐石墨烯超材料吸收体; FDTD仿真模拟; 化学势调节; 仿真源文件,石墨烯超材料吸收体:FDTD仿真调节吸收光谱案例解析

    RBF神经网络控制仿真-第二版

    RBF神经网络控制仿真-第二版

    松下PLC与威纶通触摸屏转盘设备控制:FPWINPRO7与EBPRO智能编程与宏指令应用,松下PLC与威纶通触摸屏转盘设备控制解决方案:FPWINPRO7与EBPRO协同工作,实现多工位转盘加工与IE

    松下PLC与威纶通触摸屏转盘设备控制:FPWINPRO7与EBPRO智能编程与宏指令应用,松下PLC与威纶通触摸屏转盘设备控制解决方案:FPWINPRO7与EBPRO协同工作,实现多工位转盘加工与IEC编程模式控制,松下PLC+威纶通触摸屏的转盘设备 松下PLC工程使用程序版本为FPWINPRO7 7.6.0.0版本 威纶通HMI工程使用程序版本为EBPRO 6.07.02.410S 1.多工位转盘加工控制。 2.国际标准IEC编程模式。 3.触摸屏宏指令应用控制。 ,松下PLC; 威纶通触摸屏; 转盘设备控制; 多工位加工控制; IEC编程模式; 触摸屏宏指令应用,松下PLC与威纶通HMI联控的转盘设备控制程序解析

    基于循环神经网络(RNN)的多输入单输出预测模型(适用于时间序列预测与回归分析,需Matlab 2021及以上版本),基于循环神经网络(RNN)的多输入单输出预测模型(matlab版本2021+),真

    基于循环神经网络(RNN)的多输入单输出预测模型(适用于时间序列预测与回归分析,需Matlab 2021及以上版本),基于循环神经网络(RNN)的多输入单输出预测模型(matlab版本2021+),真实值与预测值对比,多种评价指标与线性拟合展示。,RNN预测模型做多输入单输出预测模型,直接替数据就可以用。 程序语言是matlab,需求最低版本为2021及以上。 程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替就可以得到自己满意的效果。 这段程序主要是一个基于循环神经网络(RNN)的预测模型。它的应用领域可以是时间序列预测、回归分析等。下面我将对程序的运行过程进行详细解释和分析。 首先,程序开始时清空环境变量、关闭图窗、清空变量和命令行。然后,通过xlsread函数导入数据,其中'数据的输入'和'数据的输出'是两个Excel文件的文件名。 接下来,程序对数据进行归一化处理。首先使用ma

    【图像识别】手写文字识别研究 附Matlab代码+运行结果.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    旅游管理系统(基于springboot,mysql,java).zip

    旅游管理系统中的功能模块主要是实现管理员;首页、个人中心、用户管理、旅游方案管理、旅游购买管理、系统管理,用户;首页、个人中心、旅游方案管理、旅游购买管理、我的收藏管理。前台首页;首页、旅游方案、旅游资讯、个人中心、后台管理等功能。经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与旅游管理系统实现的实际需求相结合,讨论了Java开发旅游管理系统的使用。 从上面的描述中可以基本可以实现软件的功能: 1、开发实现旅游管理系统的整个系统程序;  2、管理员;首页、个人中心、用户管理、旅游方案管理、旅游购买管理、系统管理等。 3、用户:首页、个人中心、旅游方案管理、旅游购买管理、我的收藏管理。 4、前台首页:首页、旅游方案、旅游资讯、个人中心、后台管理等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流查看及回复相应操作。

    Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基

    Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构,Simulink建模,MPPT最大功率点追踪,扰动观察法采用功率反馈方式,若ΔP>0,说明电压调整的方向正确,可以继续按原方向进行“干扰”;若ΔP<0,说明电压调整的方向错误,需要对“干扰”的方向进行改变。 ,Boost升压;光伏并网结构;Simulink建模;MPPT最大功率点追踪;扰动观察法;功率反馈;电压调整方向。,光伏并网结构中Boost升压MPPT控制策略的Simulink建模与功率反馈扰动观察法

    基于matlab平台的图像去雾设计.zip

    运行GUI版本,可二开

    Deepseek相关参考资源文档

    Deepseek相关主题资源及行业影响

Global site tag (gtag.js) - Google Analytics