ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 讨论:highwater mark 和 low highwater mark

讨论:highwater mark 和 low highwater mark

原创 Linux操作系统 作者:红叶DBA 时间:2010-08-22 10:30:58 0 删除 编辑
今天,看dump文件中的 highwater mark 和 low highwater mark,感觉有点迷糊,

所以上网,搜索了一下,看到一篇写的还算比较容易理解的文章,贴出来大家看看,

如果有什么不全面的地方,希望大家多多补充啊 !!!

http://dbsnake.com/2009/04/unformatted-block.html


什么是oracle中未格式化的块?

让我们来看一下熊哥对上述问题的精彩解释:"未格式化,意思就是这个块,已经是属于这个段了,但是还保留着原来的样子没动。格式化就是把块中的数据清除掉,并把块头改为这个对象的。MSSM表空间中的段,只有一个高水位,高水位下的块都是格式化了的。但是ASSM表空间中的段,有两个高水位,低高水位和高高水位,低高水位下的块全部是格式化了的,但是低高水位和高高水位之间的块,则可能是格式化了的,也可能没有"。

解释的再清晰不过了,我们现在来看一个未格式化的块的例子:

SQL> select HEADER_FILE,HEADER_BLOCK from dba_segments where segment_name='SYSQFI';

HEADER_FILE HEADER_BLOCK
----------- ------------
         10       157324

把SYSQFI所在的段头dump出来:
Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 1      #blocks: 128  
                  last map  0x00000000  #maps: 0      offset: 2716
      Highwater::  0x028266c9  ext#: 0      blk#: 64     ext size: 128  
  #blocks in seg. hdr's freelists: 0   
  #blocks below: 60   
  mapblk  0x00000000  offset: 0   
                   Unlocked
  --------------------------------------------------------
  Low HighWater Mark :
      Highwater::  0x0282668d  ext#: 0      blk#: 4      ext size: 128

可以看到高高水位是0x028266c9,低高水位是0x0282668d。
SQL> exec sys.cdba('028266c9','H');
.
The file is 10
The block is 157385

PL/SQL procedure successfully completed

SQL> exec sys.cdba('0282668d','H');
.
The file is 10
The block is 157325

PL/SQL procedure successfully completed

也就是说SYSQFI的高高水位是file 10,block 157385;其低高水位是file 10,block 157325。

我们现在再来看一下SYSQFI现在data object number是多少:
SQL> select object_id,data_object_id from dba_objects where object_name='SYSQFI';

OBJECT_ID DATA_OBJECT_ID
---------- --------------
     65795          66347

这里明显SYSQFI的data object number大于其object number,也就是说在SYSQFI上曾经发生过truncate或者move操作。注意对于truncate操作而言,truncate后其data object number不一定就是在原先的data object number上加1。

SQL> select to_char('66347','XXXXXXXX') from dual;

TO_CHAR('66347','XXXXXXXX')
---------------------------
    1032B

SQL> select to_char('65795','XXXXXXXX') from dual;

TO_CHAR('65795','XXXXXXXX')
---------------------------
10103

换句话说,SYSQFI中现在在其低高水位(file 10,block 157325)和其高高水位(file 10,block 157385)之间的block,只要这个block上记录的data object number不等于1032B,那这个block就是一个未格式化的块!

我们现在来看file 10,block 157330:
Start dump data blocks tsn: 8 file#: 10 minblk 157330 maxblk 157330
buffer tsn: 8 rdba: 0x02826692 (10/157330)
scn: 0x0002.d25fa5bd seq: 0x01 flg: 0x06 tail: 0xa5bd0601
frmt: 0x02 chkval: 0x8d34 type: 0x06=trans data
Hex dump of block: st=0, typ_found=1
......中间内容省略
Block header dump:  0x02826692
Object id on Block? Y
seg/obj: 0x10103  csc: 0x02.d25fa591  itc: 2  flg: E  typ: 1 - DATA
     brn: 0  bdba: 0x2826689 ver: 0x01 opc: 0
     inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0006.02c.00009afa  0x0080098a.07a4.39  --U-   36  fsc 0x0048.d25fa5bd
0x02   0x0002.02a.000030e8  0x00800542.0591.27  C---    0  scn 0x0002.d25f9bc8

data_block_dump,data header at 0x110572064
===============
tsiz: 0x1f98
hsiz: 0xe8
pbl: 0x110572064
bdba: 0x02826692
     76543210
flag=--------
ntab=1
nrow=107
frre=36
fsbo=0xe8
fseo=0x220
avsp=0x14f6
tosp=0x153e
0xeti[0] nrow=107       ffs=0
0x12ri[0]      offs=0x269
0x14ri[1]      offs=0x220
......中间内容省略
0xe4ri[105]  sfll=106
0xe6ri[106]  sfll=-1
block_row_dump:
tab 0, row 0, @0x269
tl: 71 fb: --H-FL-- lb: 0x1  cc: 11
col  0: [ 4]  c3 0e 34 46
col  1: [ 2]  c1 56
col  2: [14]  bd e8 cf ee cd a8 d6 aa b5 a5 d5 c5 ca fd
col  3: [ 6]  53 41 4c 42 54 48
col  4: [ 6]  53 42 54 44 4d 54
col  5: [ 1]  4e
col  6: *NULL*
col  7: *NULL*
col  8: [ 5]  c4 15 09 06 0a
col  9: [ 3]  46 45 57
col 10: [16]  53 41 4c 42 54 48 46 4f 52 4d 31 32 33 33 33 33
tab 0, row 1, @0x220
tl: 71 fb: --H-FL-- lb: 0x1  cc: 11
col  0: [ 4]  c3 0e 34 47
col  1: [ 2]  c1 57
col  2: [14]  b4 fb cf ee cd a8 d6 aa b5 a5 d5 c5 ca fd
col  3: [ 6]  53 41 4c 42 54 48
col  4: [ 6]  53 42 54 43 4d 54
col  5: [ 1]  4e
col  6: *NULL*
col  7: *NULL*
col  8: [ 5]  c4 15 09 06 0a
col  9: [ 3]  46 45 57
col 10: [16]  53 41 4c 42 54 48 46 4f 52 4d 31 32 33 33 33 33
......中间内容省略
tab 0, row 34, @0x2b2
tl: 74 fb: --H-FL-- lb: 0x1  cc: 11
col  0: [ 4]  c3 0e 35 04
col  1: [ 2]  c1 21
col  2: [17]  c6 e4 cb fb d2 b5 ce f1 ca d5 c8 eb c0 e0 d0 cd 32
col  3: [ 6]  53 41 4c 42 54 48
col  4: [ 6]  53 42 54 49 43 32
col  5: [ 1]  43
col  6: *NULL*
col  7: *NULL*
col  8: [ 5]  c4 15 09 06 0a
col  9: [ 3]  46 45 57
col 10: [16]  53 41 4c 42 54 48 46 4f 52 4d 31 32 33 33 33 33
tab 0, row 35, @0x1652
tl: 66 fb: --H-FL-- lb: 0x1  cc: 11
col  0: [ 4]  c3 0e 35 05
col  1: [ 2]  c1 22
col  2: [17]  c6 e4 cb fb d2 b5 ce f1 ca d5 c8 eb bd f0 b6 ee 32
col  3: [ 6]  53 41 4c 42 54 48
col  4: [ 6]  53 42 54 49 41 32
col  5: [ 1]  4e
col  6: *NULL*
col  7: *NULL*
col  8: *NULL*
col  9: *NULL*
col 10: [16]  53 41 4c 42 54 48 46 4f 52 4d 31 32 33 33 33 33
end_of_block_dump
End dump data blocks tsn: 8 file#: 10 minblk 157330 maxblk 157330

从上述dump出来的内容中我们可以看到上述block(file 10,block 157330)就是一个未格式化的块!因为它的data object number是0x10103,已经和SYSQFI现在的data object number不一致了。而且这个block的块头记录的数据和实际的数据并不一致,从块头里看这个block有107行记录,但实际上这个block只有36行记录。

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

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-08-19

  • 博文量
    54
  • 访问量
    79745