Oracle ASM Allocation Table

eric0435發表於2016-12-26

Allocation Table(AT)
每個ASM磁碟有一個Allocation Table來描述磁碟的內容。在disk中對於每個AU,AT都有一個條目llocation Table Entry(ATE)。如果AU被分配給一個ASM檔案,它們包含了檔案號與區號

查詢Allocation Table
在ASM磁碟頭(filed kfdhdb.altlocn)儲存了Allocation Table的第一個塊所儲存的位置。在下面的例子中,顯示了AT儲存在塊2.

SQL> select group_number,disk_number,state,name,path from v$asm_disk where group_number3;

GROUP_NUMBER DISK_NUMBER STATE                          NAME                           PATH
------------ ----------- ------------------------------ ------------------------------ ------------------------------
           3           0 NORMAL                         DATADG_0001                    /dev/raw/raw11
           3           3 NORMAL                         DATADG_0000                    /dev/raw/raw10
           3           1 NORMAL                         DATADG_0003                    /dev/raw/raw4
           3           2 NORMAL                         DATADG_0002                    /dev/raw/raw3

[oracle@jyrac1 ~]$ kfed read /dev/raw/raw10 | grep kfdhdb.altlocn
kfdhdb.altlocn:                       2 ; 0x0d0: 0x00000002

下面詳細檢視一下Allocation Table的第一個塊

[oracle@jyrac1 ~]$ kfed read /dev/raw/raw10 blkn=2 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL
kfbh.datfmt:                          2 ; 0x003: 0x02
kfbh.block.blk:                       2 ; 0x004: blk=2
kfbh.block.obj:              2147483651 ; 0x008: disk=3
kfbh.check:                  2183627135 ; 0x00c: 0x8227817f
kfbh.fcn.base:                     1453 ; 0x010: 0x000005ad
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdatb.aunum:                         0 ; 0x000: 0x00000000
kfdatb.shrink:                      448 ; 0x004: 0x01c0
kfdatb.ub2pad:                        0 ; 0x006: 0x0000
kfdatb.auinfo[0].link.next:           8 ; 0x008: 0x0008
kfdatb.auinfo[0].link.prev:           8 ; 0x00a: 0x0008
kfdatb.auinfo[1].link.next:          12 ; 0x00c: 0x000c
kfdatb.auinfo[1].link.prev:          12 ; 0x00e: 0x000c
kfdatb.auinfo[2].link.next:          16 ; 0x010: 0x0010
kfdatb.auinfo[2].link.prev:          16 ; 0x012: 0x0010
kfdatb.auinfo[3].link.next:          20 ; 0x014: 0x0014
kfdatb.auinfo[3].link.prev:          20 ; 0x016: 0x0014
kfdatb.auinfo[4].link.next:          24 ; 0x018: 0x0018
kfdatb.auinfo[4].link.prev:          24 ; 0x01a: 0x0018
kfdatb.auinfo[5].link.next:          28 ; 0x01c: 0x001c
kfdatb.auinfo[5].link.prev:          28 ; 0x01e: 0x001c
kfdatb.auinfo[6].link.next:          32 ; 0x020: 0x0020
kfdatb.auinfo[6].link.prev:          32 ; 0x022: 0x0020
kfdatb.spare:                         0 ; 0x024: 0x00000000
kfdate[0].discriminator:              1 ; 0x028: 0x00000001
kfdate[0].allo.lo:                    0 ; 0x028: XNUM=0x0
kfdate[0].allo.hi:              8388608 ; 0x02c: V=1 I=0 H=0 FNUM=0x0
kfdate[1].discriminator:              1 ; 0x030: 0x00000001
kfdate[1].allo.lo:                    0 ; 0x030: XNUM=0x0
kfdate[1].allo.hi:              8388608 ; 0x034: V=1 I=0 H=0 FNUM=0x0
kfdate[2].discriminator:              1 ; 0x038: 0x00000001
kfdate[2].allo.lo:                    0 ; 0x038: XNUM=0x0
kfdate[2].allo.hi:              8388611 ; 0x03c: V=1 I=0 H=0 FNUM=0x3
kfdate[3].discriminator:              1 ; 0x040: 0x00000001
kfdate[3].allo.lo:                    4 ; 0x040: XNUM=0x4
kfdate[3].allo.hi:              8388611 ; 0x044: V=1 I=0 H=0 FNUM=0x3
kfdate[4].discriminator:              1 ; 0x048: 0x00000001
kfdate[4].allo.lo:                    8 ; 0x048: XNUM=0x8
kfdate[4].allo.hi:              8388611 ; 0x04c: V=1 I=0 H=0 FNUM=0x3

從kfdatb.aunum=0,可知AU0是AT塊中的第一個AU。kfdatb.shrink=448,意味著AT塊可以容納448個AU的資訊。按著這個邏輯我們應該在下一個AT塊中看到kfdatb.aunum=448

[oracle@jyrac1 ~]$ kfed read /dev/raw/raw10 blkn=3 | grep kfdatb.aunum
kfdatb.aunum:                       448 ; 0x000: 0x000001c0

以此類推,在一下AT塊中將看到kfdatb.aunum=896:

[oracle@jyrac1 ~]$ kfed read /dev/raw/raw10 blkn=4 | grep kfdatb.aunum
kfdatb.aunum:                       896 ; 0x000: 0x00000380

Allocation table條目
對於分配的AUs,Allocation Table條目(kfdate[i])包含extent number,file number與AU的狀態--正常分配(flag V=1),可用或未人分配AU(flag V=0)。下面的命令檢視Allocation table block 4

[oracle@jyrac1 ~]$ kfed read /dev/raw/raw10 blkn=4 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL
kfbh.datfmt:                          2 ; 0x003: 0x02
kfbh.block.blk:                       4 ; 0x004: blk=4
kfbh.block.obj:              2147483651 ; 0x008: disk=3
kfbh.check:                  2183629333 ; 0x00c: 0x82278a15
kfbh.fcn.base:                     3319 ; 0x010: 0x00000cf7
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdatb.aunum:                       896 ; 0x000: 0x00000380
kfdatb.shrink:                      448 ; 0x004: 0x01c0
kfdatb.ub2pad:                        0 ; 0x006: 0x0000
kfdatb.auinfo[0].link.next:           8 ; 0x008: 0x0008
kfdatb.auinfo[0].link.prev:           8 ; 0x00a: 0x0008
kfdatb.auinfo[1].link.next:          12 ; 0x00c: 0x000c
kfdatb.auinfo[1].link.prev:          12 ; 0x00e: 0x000c
kfdatb.auinfo[2].link.next:          16 ; 0x010: 0x0010
kfdatb.auinfo[2].link.prev:          16 ; 0x012: 0x0010
kfdatb.auinfo[3].link.next:          20 ; 0x014: 0x0014
kfdatb.auinfo[3].link.prev:          20 ; 0x016: 0x0014
kfdatb.auinfo[4].link.next:          24 ; 0x018: 0x0018
kfdatb.auinfo[4].link.prev:          24 ; 0x01a: 0x0018
kfdatb.auinfo[5].link.next:          28 ; 0x01c: 0x001c
kfdatb.auinfo[5].link.prev:          28 ; 0x01e: 0x001c
kfdatb.auinfo[6].link.next:          32 ; 0x020: 0x0020
kfdatb.auinfo[6].link.prev:          32 ; 0x022: 0x0020
kfdatb.spare:                         0 ; 0x024: 0x00000000
kfdate[0].discriminator:              1 ; 0x028: 0x00000001
kfdate[0].allo.lo:                 1082 ; 0x028: XNUM=0x43a
kfdate[0].allo.hi:              8388867 ; 0x02c: V=1 I=0 H=0 FNUM=0x103
kfdate[1].discriminator:              1 ; 0x030: 0x00000001
kfdate[1].allo.lo:                 1085 ; 0x030: XNUM=0x43d
kfdate[1].allo.hi:              8388867 ; 0x034: V=1 I=0 H=0 FNUM=0x103
......
kfdate[284].allo.hi:            8388868 ; 0x90c: V=1 I=0 H=0 FNUM=0x104
kfdate[285].discriminator:            1 ; 0x910: 0x00000001
kfdate[285].allo.lo:                  1 ; 0x910: XNUM=0x1
kfdate[285].allo.hi:            8388869 ; 0x914: V=1 I=0 H=0 FNUM=0x105
kfdate[286].discriminator:            1 ; 0x918: 0x00000001
kfdate[286].allo.lo:                  2 ; 0x918: XNUM=0x2
kfdate[286].allo.hi:            8388869 ; 0x91c: V=1 I=0 H=0 FNUM=0x105
kfdate[287].discriminator:            1 ; 0x920: 0x00000001
kfdate[287].allo.lo:                 10 ; 0x920: XNUM=0xa
kfdate[287].allo.hi:            8388869 ; 0x924: V=1 I=0 H=0 FNUM=0x105
kfdate[288].discriminator:            1 ; 0x928: 0x00000001
kfdate[288].allo.lo:                 13 ; 0x928: XNUM=0xd
kfdate[288].allo.hi:            8388869 ; 0x92c: V=1 I=0 H=0 FNUM=0x105
kfdate[289].discriminator:            1 ; 0x930: 0x00000001
kfdate[289].allo.lo:                 15 ; 0x930: XNUM=0xf
kfdate[289].allo.hi:            8388869 ; 0x934: V=1 I=0 H=0 FNUM=0x105
kfdate[290].discriminator:            1 ; 0x938: 0x00000001
kfdate[290].allo.lo:                 18 ; 0x938: XNUM=0x12
kfdate[290].allo.hi:            8388869 ; 0x93c: V=1 I=0 H=0 FNUM=0x105
kfdate[291].discriminator:            1 ; 0x940: 0x00000001
kfdate[291].allo.lo:                 25 ; 0x940: XNUM=0x19
kfdate[291].allo.hi:            8388869 ; 0x944: V=1 I=0 H=0 FNUM=0x105
kfdate[292].discriminator:            1 ; 0x948: 0x00000001
kfdate[292].allo.lo:                 26 ; 0x948: XNUM=0x1a
kfdate[292].allo.hi:            8388869 ; 0x94c: V=1 I=0 H=0 FNUM=0x105
kfdate[293].discriminator:            1 ; 0x950: 0x00000001
kfdate[293].allo.lo:                 34 ; 0x950: XNUM=0x22
kfdate[293].allo.hi:            8388869 ; 0x954: V=1 I=0 H=0 FNUM=0x105
kfdate[294].discriminator:            1 ; 0x958: 0x00000001
kfdate[294].allo.lo:                 37 ; 0x958: XNUM=0x25
kfdate[294].allo.hi:            8388869 ; 0x95c: V=1 I=0 H=0 FNUM=0x105
kfdate[295].discriminator:            1 ; 0x960: 0x00000001
kfdate[295].allo.lo:                 39 ; 0x960: XNUM=0x27
kfdate[295].allo.hi:            8388869 ; 0x964: V=1 I=0 H=0 FNUM=0x105
kfdate[296].discriminator:            1 ; 0x968: 0x00000001
kfdate[296].allo.lo:                 42 ; 0x968: XNUM=0x2a
kfdate[296].allo.hi:            8388869 ; 0x96c: V=1 I=0 H=0 FNUM=0x105
kfdate[297].discriminator:            1 ; 0x970: 0x00000001
kfdate[297].allo.lo:                 49 ; 0x970: XNUM=0x31
kfdate[297].allo.hi:            8388869 ; 0x974: V=1 I=0 H=0 FNUM=0x105
kfdate[298].discriminator:            1 ; 0x978: 0x00000001
kfdate[298].allo.lo:                 50 ; 0x978: XNUM=0x32
kfdate[298].allo.hi:            8388869 ; 0x97c: V=1 I=0 H=0 FNUM=0x105
kfdate[299].discriminator:            1 ; 0x980: 0x00000001
kfdate[299].allo.lo:                 58 ; 0x980: XNUM=0x3a
kfdate[299].allo.hi:            8388869 ; 0x984: V=1 I=0 H=0 FNUM=0x105
kfdate[300].discriminator:            1 ; 0x988: 0x00000001
kfdate[300].allo.lo:                  1 ; 0x988: XNUM=0x1
kfdate[300].allo.hi:           12583173 ; 0x98c: V=1 I=1 H=0 FNUM=0x105
kfdate[301].discriminator:            1 ; 0x990: 0x00000001
kfdate[301].allo.lo:                 61 ; 0x990: XNUM=0x3d
kfdate[301].allo.hi:            8388869 ; 0x994: V=1 I=0 H=0 FNUM=0x105
kfdate[302].discriminator:            1 ; 0x998: 0x00000001
kfdate[302].allo.lo:                 63 ; 0x998: XNUM=0x3f
kfdate[302].allo.hi:            8388869 ; 0x99c: V=1 I=0 H=0 FNUM=0x105
kfdate[303].discriminator:            1 ; 0x9a0: 0x00000001
kfdate[303].allo.lo:                 66 ; 0x9a0: XNUM=0x42
kfdate[303].allo.hi:            8388869 ; 0x9a4: V=1 I=0 H=0 FNUM=0x105
kfdate[304].discriminator:            1 ; 0x9a8: 0x00000001
kfdate[304].allo.lo:                 73 ; 0x9a8: XNUM=0x49
kfdate[304].allo.hi:            8388869 ; 0x9ac: V=1 I=0 H=0 FNUM=0x105
kfdate[305].discriminator:            1 ; 0x9b0: 0x00000001
kfdate[305].allo.lo:                 74 ; 0x9b0: XNUM=0x4a
kfdate[305].allo.hi:            8388869 ; 0x9b4: V=1 I=0 H=0 FNUM=0x105
kfdate[306].discriminator:            1 ; 0x9b8: 0x00000001
kfdate[306].allo.lo:                 82 ; 0x9b8: XNUM=0x52
kfdate[306].allo.hi:            8388869 ; 0x9bc: V=1 I=0 H=0 FNUM=0x105
kfdate[307].discriminator:            1 ; 0x9c0: 0x00000001
kfdate[307].allo.lo:                 85 ; 0x9c0: XNUM=0x55
kfdate[307].allo.hi:            8388869 ; 0x9c4: V=1 I=0 H=0 FNUM=0x105
kfdate[308].discriminator:            1 ; 0x9c8: 0x00000001
kfdate[308].allo.lo:                 87 ; 0x9c8: XNUM=0x57
kfdate[308].allo.hi:            8388869 ; 0x9cc: V=1 I=0 H=0 FNUM=0x105
kfdate[309].discriminator:            1 ; 0x9d0: 0x00000001
kfdate[309].allo.lo:                 90 ; 0x9d0: XNUM=0x5a
kfdate[309].allo.hi:            8388869 ; 0x9d4: V=1 I=0 H=0 FNUM=0x105
kfdate[310].discriminator:            1 ; 0x9d8: 0x00000001
kfdate[310].allo.lo:                 97 ; 0x9d8: XNUM=0x61
kfdate[310].allo.hi:            8388869 ; 0x9dc: V=1 I=0 H=0 FNUM=0x105
kfdate[311].discriminator:            1 ; 0x9e0: 0x00000001
kfdate[311].allo.lo:                 98 ; 0x9e0: XNUM=0x62
kfdate[311].allo.hi:            8388869 ; 0x9e4: V=1 I=0 H=0 FNUM=0x105
kfdate[312].discriminator:            1 ; 0x9e8: 0x00000001
kfdate[312].allo.lo:                106 ; 0x9e8: XNUM=0x6a
kfdate[312].allo.hi:            8388869 ; 0x9ec: V=1 I=0 H=0 FNUM=0x105
kfdate[313].discriminator:            1 ; 0x9f0: 0x00000001
kfdate[313].allo.lo:                109 ; 0x9f0: XNUM=0x6d
kfdate[313].allo.hi:            8388869 ; 0x9f4: V=1 I=0 H=0 FNUM=0x105
kfdate[314].discriminator:            1 ; 0x9f8: 0x00000001
kfdate[314].allo.lo:                111 ; 0x9f8: XNUM=0x6f
kfdate[314].allo.hi:            8388869 ; 0x9fc: V=1 I=0 H=0 FNUM=0x105
kfdate[315].discriminator:            1 ; 0xa00: 0x00000001
kfdate[315].allo.lo:                114 ; 0xa00: XNUM=0x72
kfdate[315].allo.hi:            8388869 ; 0xa04: V=1 I=0 H=0 FNUM=0x105
kfdate[316].discriminator:            1 ; 0xa08: 0x00000001
kfdate[316].allo.lo:                121 ; 0xa08: XNUM=0x79
kfdate[316].allo.hi:            8388869 ; 0xa0c: V=1 I=0 H=0 FNUM=0x105
kfdate[317].discriminator:            1 ; 0xa10: 0x00000001
kfdate[317].allo.lo:                122 ; 0xa10: XNUM=0x7a
kfdate[317].allo.hi:            8388869 ; 0xa14: V=1 I=0 H=0 FNUM=0x105
kfdate[318].discriminator:            1 ; 0xa18: 0x00000001
kfdate[318].allo.lo:                130 ; 0xa18: XNUM=0x82
kfdate[318].allo.hi:            8388869 ; 0xa1c: V=1 I=0 H=0 FNUM=0x105
kfdate[319].discriminator:            1 ; 0xa20: 0x00000001
kfdate[319].allo.lo:                133 ; 0xa20: XNUM=0x85
kfdate[319].allo.hi:            8388869 ; 0xa24: V=1 I=0 H=0 FNUM=0x105
kfdate[320].discriminator:            1 ; 0xa28: 0x00000001
kfdate[320].allo.lo:                135 ; 0xa28: XNUM=0x87
kfdate[320].allo.hi:            8388869 ; 0xa2c: V=1 I=0 H=0 FNUM=0x105
kfdate[321].discriminator:            1 ; 0xa30: 0x00000001
kfdate[321].allo.lo:                138 ; 0xa30: XNUM=0x8a
kfdate[321].allo.hi:            8388869 ; 0xa34: V=1 I=0 H=0 FNUM=0x105
kfdate[322].discriminator:            1 ; 0xa38: 0x00000001
kfdate[322].allo.lo:                145 ; 0xa38: XNUM=0x91
kfdate[322].allo.hi:            8388869 ; 0xa3c: V=1 I=0 H=0 FNUM=0x105
kfdate[323].discriminator:            1 ; 0xa40: 0x00000001
kfdate[323].allo.lo:                146 ; 0xa40: XNUM=0x92
kfdate[323].allo.hi:            8388869 ; 0xa44: V=1 I=0 H=0 FNUM=0x105
kfdate[324].discriminator:            1 ; 0xa48: 0x00000001
kfdate[324].allo.lo:                154 ; 0xa48: XNUM=0x9a
kfdate[324].allo.hi:            8388869 ; 0xa4c: V=1 I=0 H=0 FNUM=0x105
kfdate[325].discriminator:            1 ; 0xa50: 0x00000001
kfdate[325].allo.lo:                157 ; 0xa50: XNUM=0x9d
kfdate[325].allo.hi:            8388869 ; 0xa54: V=1 I=0 H=0 FNUM=0x105
kfdate[326].discriminator:            1 ; 0xa58: 0x00000001
kfdate[326].allo.lo:                159 ; 0xa58: XNUM=0x9f
kfdate[326].allo.hi:            8388869 ; 0xa5c: V=1 I=0 H=0 FNUM=0x105
kfdate[327].discriminator:            1 ; 0xa60: 0x00000001
kfdate[327].allo.lo:                162 ; 0xa60: XNUM=0xa2
kfdate[327].allo.hi:            8388869 ; 0xa64: V=1 I=0 H=0 FNUM=0x105
kfdate[328].discriminator:            1 ; 0xa68: 0x00000001
kfdate[328].allo.lo:                169 ; 0xa68: XNUM=0xa9
kfdate[328].allo.hi:            8388869 ; 0xa6c: V=1 I=0 H=0 FNUM=0x105
kfdate[329].discriminator:            1 ; 0xa70: 0x00000001
kfdate[329].allo.lo:                170 ; 0xa70: XNUM=0xaa
kfdate[329].allo.hi:            8388869 ; 0xa74: V=1 I=0 H=0 FNUM=0x105
kfdate[330].discriminator:            1 ; 0xa78: 0x00000001
kfdate[330].allo.lo:                178 ; 0xa78: XNUM=0xb2
kfdate[330].allo.hi:            8388869 ; 0xa7c: V=1 I=0 H=0 FNUM=0x105
kfdate[331].discriminator:            1 ; 0xa80: 0x00000001
kfdate[331].allo.lo:                181 ; 0xa80: XNUM=0xb5
kfdate[331].allo.hi:            8388869 ; 0xa84: V=1 I=0 H=0 FNUM=0x105
kfdate[332].discriminator:            1 ; 0xa88: 0x00000001
kfdate[332].allo.lo:                183 ; 0xa88: XNUM=0xb7
kfdate[332].allo.hi:            8388869 ; 0xa8c: V=1 I=0 H=0 FNUM=0x105
kfdate[333].discriminator:            1 ; 0xa90: 0x00000001
kfdate[333].allo.lo:                186 ; 0xa90: XNUM=0xba
kfdate[333].allo.hi:            8388869 ; 0xa94: V=1 I=0 H=0 FNUM=0x105
kfdate[334].discriminator:            1 ; 0xa98: 0x00000001
kfdate[334].allo.lo:                193 ; 0xa98: XNUM=0xc1
kfdate[334].allo.hi:            8388869 ; 0xa9c: V=1 I=0 H=0 FNUM=0x105
kfdate[335].discriminator:            1 ; 0xaa0: 0x00000001
kfdate[335].allo.lo:                194 ; 0xaa0: XNUM=0xc2
kfdate[335].allo.hi:            8388869 ; 0xaa4: V=1 I=0 H=0 FNUM=0x105
kfdate[336].discriminator:            1 ; 0xaa8: 0x00000001
kfdate[336].allo.lo:                202 ; 0xaa8: XNUM=0xca
kfdate[336].allo.hi:            8388869 ; 0xaac: V=1 I=0 H=0 FNUM=0x105
kfdate[337].discriminator:            1 ; 0xab0: 0x00000001
kfdate[337].allo.lo:                205 ; 0xab0: XNUM=0xcd
kfdate[337].allo.hi:            8388869 ; 0xab4: V=1 I=0 H=0 FNUM=0x105
kfdate[338].discriminator:            1 ; 0xab8: 0x00000001
kfdate[338].allo.lo:                207 ; 0xab8: XNUM=0xcf
kfdate[338].allo.hi:            8388869 ; 0xabc: V=1 I=0 H=0 FNUM=0x105
kfdate[339].discriminator:            1 ; 0xac0: 0x00000001
kfdate[339].allo.lo:                210 ; 0xac0: XNUM=0xd2
kfdate[339].allo.hi:            8388869 ; 0xac4: V=1 I=0 H=0 FNUM=0x105
kfdate[340].discriminator:            1 ; 0xac8: 0x00000001
kfdate[340].allo.lo:                217 ; 0xac8: XNUM=0xd9
kfdate[340].allo.hi:            8388869 ; 0xacc: V=1 I=0 H=0 FNUM=0x105
kfdate[341].discriminator:            1 ; 0xad0: 0x00000001
kfdate[341].allo.lo:                218 ; 0xad0: XNUM=0xda
kfdate[341].allo.hi:            8388869 ; 0xad4: V=1 I=0 H=0 FNUM=0x105
kfdate[342].discriminator:            1 ; 0xad8: 0x00000001
kfdate[342].allo.lo:                226 ; 0xad8: XNUM=0xe2
kfdate[342].allo.hi:            8388869 ; 0xadc: V=1 I=0 H=0 FNUM=0x105
kfdate[343].discriminator:            1 ; 0xae0: 0x00000001
kfdate[343].allo.lo:                229 ; 0xae0: XNUM=0xe5
kfdate[343].allo.hi:            8388869 ; 0xae4: V=1 I=0 H=0 FNUM=0x105
kfdate[344].discriminator:            1 ; 0xae8: 0x00000001
kfdate[344].allo.lo:                231 ; 0xae8: XNUM=0xe7
kfdate[344].allo.hi:            8388869 ; 0xaec: V=1 I=0 H=0 FNUM=0x105
kfdate[345].discriminator:            1 ; 0xaf0: 0x00000001
kfdate[345].allo.lo:                234 ; 0xaf0: XNUM=0xea
kfdate[345].allo.hi:            8388869 ; 0xaf4: V=1 I=0 H=0 FNUM=0x105
kfdate[346].discriminator:            1 ; 0xaf8: 0x00000001
kfdate[346].allo.lo:                241 ; 0xaf8: XNUM=0xf1
kfdate[346].allo.hi:            8388869 ; 0xafc: V=1 I=0 H=0 FNUM=0x105
kfdate[347].discriminator:            1 ; 0xb00: 0x00000001
kfdate[347].allo.lo:                242 ; 0xb00: XNUM=0xf2
kfdate[347].allo.hi:            8388869 ; 0xb04: V=1 I=0 H=0 FNUM=0x105
kfdate[348].discriminator:            1 ; 0xb08: 0x00000001
kfdate[348].allo.lo:                250 ; 0xb08: XNUM=0xfa
kfdate[348].allo.hi:            8388869 ; 0xb0c: V=1 I=0 H=0 FNUM=0x105
kfdate[349].discriminator:            1 ; 0xb10: 0x00000001
kfdate[349].allo.lo:                253 ; 0xb10: XNUM=0xfd
kfdate[349].allo.hi:            8388869 ; 0xb14: V=1 I=0 H=0 FNUM=0x105
kfdate[350].discriminator:            1 ; 0xb18: 0x00000001
kfdate[350].allo.lo:                255 ; 0xb18: XNUM=0xff
kfdate[350].allo.hi:            8388869 ; 0xb1c: V=1 I=0 H=0 FNUM=0x105
kfdate[351].discriminator:            1 ; 0xb20: 0x00000001
kfdate[351].allo.lo:                258 ; 0xb20: XNUM=0x102
kfdate[351].allo.hi:            8388869 ; 0xb24: V=1 I=0 H=0 FNUM=0x105
kfdate[352].discriminator:            1 ; 0xb28: 0x00000001
kfdate[352].allo.lo:                265 ; 0xb28: XNUM=0x109
kfdate[352].allo.hi:            8388869 ; 0xb2c: V=1 I=0 H=0 FNUM=0x105
kfdate[353].discriminator:            1 ; 0xb30: 0x00000001
kfdate[353].allo.lo:                266 ; 0xb30: XNUM=0x10a
kfdate[353].allo.hi:            8388869 ; 0xb34: V=1 I=0 H=0 FNUM=0x105
kfdate[354].discriminator:            1 ; 0xb38: 0x00000001
kfdate[354].allo.lo:                274 ; 0xb38: XNUM=0x112
kfdate[354].allo.hi:            8388869 ; 0xb3c: V=1 I=0 H=0 FNUM=0x105
kfdate[355].discriminator:            1 ; 0xb40: 0x00000001
kfdate[355].allo.lo:                277 ; 0xb40: XNUM=0x115
kfdate[355].allo.hi:            8388869 ; 0xb44: V=1 I=0 H=0 FNUM=0x105
kfdate[356].discriminator:            1 ; 0xb48: 0x00000001
kfdate[356].allo.lo:                279 ; 0xb48: XNUM=0x117
kfdate[356].allo.hi:            8388869 ; 0xb4c: V=1 I=0 H=0 FNUM=0x105
kfdate[357].discriminator:            1 ; 0xb50: 0x00000001
kfdate[357].allo.lo:                282 ; 0xb50: XNUM=0x11a
kfdate[357].allo.hi:            8388869 ; 0xb54: V=1 I=0 H=0 FNUM=0x105
kfdate[358].discriminator:            1 ; 0xb58: 0x00000001
kfdate[358].allo.lo:                289 ; 0xb58: XNUM=0x121
kfdate[358].allo.hi:            8388869 ; 0xb5c: V=1 I=0 H=0 FNUM=0x105
kfdate[359].discriminator:            1 ; 0xb60: 0x00000001
kfdate[359].allo.lo:                290 ; 0xb60: XNUM=0x122
kfdate[359].allo.hi:            8388869 ; 0xb64: V=1 I=0 H=0 FNUM=0x105
kfdate[360].discriminator:            1 ; 0xb68: 0x00000001
kfdate[360].allo.lo:                298 ; 0xb68: XNUM=0x12a
kfdate[360].allo.hi:            8388869 ; 0xb6c: V=1 I=0 H=0 FNUM=0x105
kfdate[361].discriminator:            1 ; 0xb70: 0x00000001
kfdate[361].allo.lo:                301 ; 0xb70: XNUM=0x12d
kfdate[361].allo.hi:            8388869 ; 0xb74: V=1 I=0 H=0 FNUM=0x105
kfdate[362].discriminator:            1 ; 0xb78: 0x00000001
kfdate[362].allo.lo:                  4 ; 0xb78: XNUM=0x4
kfdate[362].allo.hi:            8388870 ; 0xb7c: V=1 I=0 H=0 FNUM=0x106
kfdate[363].discriminator:            0 ; 0x4d0: 0x00000000
kfdate[363].free.lo.next:             0 ; 0x4d0: 0x0000
kfdate[363].free.lo.prev:             0 ; 0x4d2: 0x0000
kfdate[363].free.hi:                  0 ; 0x4d4: V=0 ASZM=0x0
....

上面輸出內容顯示了file 261(FNUM=0x105)的Allocation Table條目,從kfdate[285]開始到kfdate[361]結束。那麼這說明file 261總共有77個AU。AU號等於kfdate[i]+offset[kfdatb.aunum=896]。也就是說,AU號為285+896=1181,286+896=1182....361+896=1527。我們可以透過查詢x$kffxp檢視來進行驗證。

SQL> select au_kffxp from x$kffxp where group_kffxp=3  and number_kffxp=261  and disk_kffxp=3 order by  au_kffxp asc;

  AU_KFFXP
----------
      1181
      1182
      1183
      1184
      1185
      1186
      1187
      1188
      1189
      1190
      1191
      1192
      1193
      1194
      1195
      1196
      1197
      1198
      1199
      1200
      1201
      1202
      1203
      1204
      1205
      1206
      1207
      1208
      1209
      1210
      1211
      1212
      1213
      1214
      1215
      1216
      1217
      1218
      1219
      1220
      1221
      1222
      1223
      1224
      1225
      1226
      1227
      1228
      1229
      1230
      1231
      1232
      1233
      1234
      1235
      1236
      1237
      1238
      1239
      1240
      1241
      1242
      1243
      1244
      1245
      1246
      1247
      1248
      1249
      1250
      1251
      1252
      1253
      1254
      1255
      1256
      1257

77 rows selected.

可用空間
在下面的kfed輸出中,可以看到kfdate[363]與kfdate[364]兩關鍵字free next,這就說明它們是可以使用的或沒有分配的AU(標記V=0)。

[oracle@jyrac1 ~]$ kfed read /dev/raw/raw10 blkn=4 | more
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL
kfbh.datfmt:                          2 ; 0x003: 0x02
kfbh.block.blk:                       4 ; 0x004: blk=4
kfbh.block.obj:              2147483651 ; 0x008: disk=3
kfbh.check:                  2183629333 ; 0x00c: 0x82278a15
kfbh.fcn.base:                     3319 ; 0x010: 0x00000cf7
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdatb.aunum:                       896 ; 0x000: 0x00000380
kfdatb.shrink:                      448 ; 0x004: 0x01c0
kfdatb.ub2pad:                        0 ; 0x006: 0x0000
kfdatb.auinfo[0].link.next:           8 ; 0x008: 0x0008
kfdatb.auinfo[0].link.prev:           8 ; 0x00a: 0x0008
kfdatb.auinfo[1].link.next:          12 ; 0x00c: 0x000c
kfdatb.auinfo[1].link.prev:          12 ; 0x00e: 0x000c
kfdatb.auinfo[2].link.next:          16 ; 0x010: 0x0010
kfdatb.auinfo[2].link.prev:          16 ; 0x012: 0x0010
kfdatb.auinfo[3].link.next:          20 ; 0x014: 0x0014
kfdatb.auinfo[3].link.prev:          20 ; 0x016: 0x0014
kfdatb.auinfo[4].link.next:          24 ; 0x018: 0x0018
kfdatb.auinfo[4].link.prev:          24 ; 0x01a: 0x0018
kfdatb.auinfo[5].link.next:          28 ; 0x01c: 0x001c
kfdatb.auinfo[5].link.prev:          28 ; 0x01e: 0x001c
kfdatb.auinfo[6].link.next:          32 ; 0x020: 0x0020
kfdatb.auinfo[6].link.prev:          32 ; 0x022: 0x0020
kfdatb.spare:                         0 ; 0x024: 0x00000000
kfdate[0].discriminator:              1 ; 0x028: 0x00000001
kfdate[0].allo.lo:                 1082 ; 0x028: XNUM=0x43a
kfdate[0].allo.hi:              8388867 ; 0x02c: V=1 I=0 H=0 FNUM=0x103
kfdate[1].discriminator:              1 ; 0x030: 0x00000001
kfdate[1].allo.lo:                 1085 ; 0x030: XNUM=0x43d
kfdate[1].allo.hi:              8388867 ; 0x034: V=1 I=0 H=0 FNUM=0x103
......
kfdate[284].allo.hi:            8388868 ; 0x90c: V=1 I=0 H=0 FNUM=0x104
kfdate[285].discriminator:            1 ; 0x910: 0x00000001
kfdate[285].allo.lo:                  1 ; 0x910: XNUM=0x1
kfdate[285].allo.hi:            8388869 ; 0x914: V=1 I=0 H=0 FNUM=0x105
.....
kfdate[361].discriminator:            1 ; 0xb70: 0x00000001
kfdate[361].allo.lo:                301 ; 0xb70: XNUM=0x12d
kfdate[361].allo.hi:            8388869 ; 0xb74: V=1 I=0 H=0 FNUM=0x105
kfdate[362].discriminator:            1 ; 0xb78: 0x00000001
kfdate[362].allo.lo:                  4 ; 0xb78: XNUM=0x4
kfdate[362].allo.hi:            8388870 ; 0xb7c: V=1 I=0 H=0 FNUM=0x106
kfdate[363].discriminator:            0 ; 0x4c8: 0x00000000
kfdate[363].free.lo.next:            16 ; 0x4c8: 0x0010
kfdate[363].free.lo.prev:            16 ; 0x4ca: 0x0010
kfdate[363].free.hi:                  2 ; 0x4cc: V=0 ASZM=0x2
kfdate[364].discriminator:            0 ; 0x4d0: 0x00000000
kfdate[364].free.lo.next:             0 ; 0x4d0: 0x0000
kfdate[364].free.lo.prev:             0 ; 0x4d2: 0x0000
kfdate[364].free.hi:                  0 ; 0x4d4: V=0 ASZM=0x0
....

Stride
每個AT塊可以容納448AU(AT中kfdatb.shrink=448),並有整個AT包含254個塊(kfdfsb.max=254)。這意味著一個AT可以容納254*448=113792個AU。這叫作stride,並且stride大小用AU的數量來表示,也就是ASM disk header中的kfdhdb.mfact的值(kfdhdb.mfact=113792)

[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=0 blkn=4 | grep kfdatb.shrink
kfdatb.shrink:                      448 ; 0x004: 0x01c0

[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=0 blkn=1 | grep kfdfsb.max
kfdfsb.max:                         254 ; 0x004: 0x00fe



[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=0 blkn=0 | grep kfdhdb.mfact
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80

上面顯示的stride大小是AU大小為1MB的例子,因為1MB的AU在AU0中可以容納256個block,因為blcok 0屬於disk header,燕且block 1屬於Free Space Table,所以只有254個block給AT block使用。

當AU大小為4MB(在exadata中是預設值),stride的大小將為454272個AU或1817088MB。當使用較大AU大小時,stride也會增長。下面是linux環境下,AU大小為16M時的stride大小也為454272

[grid@jyrac1 ~]$ kfed read /dev/raw/raw5 aun=0 blkn=0 | grep kfdhdb.mfact
kfdhdb.mfact:                    454272 ; 0x0c0: 0x0006ee80
[grid@jyrac1 ~]$ kfed read /dev/raw/raw5 aun=0 blkn=0 | grep kfdhdb.ausize
kfdhdb.ausize:                 16777216 ; 0x0bc: 0x01000000

多個Allocation Tables
對於較大的ASM磁碟可能有多個stride。每個stride包含屬於它自己的實體地址後設資料,這意味著它將有屬於它自己的AT。

第二個stride在stride中的第一個AU中儲存了它的實體地址後設資料,執行以下命令來進行驗證

[grid@jyrac1 ~]$ kfed read /dev/raw/raw10 | grep mfact
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80

上面的輸出顯示stride的大小為113792個AU。我們來檢查第二個stride中的AT條目。這些條目應該儲存在AU 113792中的block 2-255中。

[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 | grep mfact
kfdhdb.mfact:                    113792 ; 0x0c0: 0x0001bc80
[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=113792 blkn=2 | grep type
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL

[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=113792 blkn=20 | grep type
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL
[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=113792 blkn=200 | grep type
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL
[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=113792 blkn=255 | grep type
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL

上面的輸出與我們所期待的一樣,在AU 113792中有其它的AT存在。如果還有另一個stride,在這個stride的開始位置有另一個AT。對於一個較大的磁碟,將有多個stride,因此我們可以看到第3,4,5個stride的AT

[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=227584 blkn=255 | grep type
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL
[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=341376 blkn=255 | grep type
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL
[grid@db1 ~]$ kfed read /dev/oracleasm/disks/RLZY_DATA1 aun=455168 blkn=255 | grep type
kfbh.type:                            3 ; 0x002: KFBTYP_ALLOCTBL

小結:每個ASM磁碟至少包含一個Allocation Table(分配表)來描述磁碟的內容。AT對於磁碟中的每個allocation unit(AU)都有一個條目。如果磁碟有多個stride,每個stride有屬於它自己的Allocation Table。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2131402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章