Oracle ASM Allocation Table
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASM How many allocation units per fileOracleASM
- Oracle ASM Partnership and Status TableOracleASM
- Oracle ASM Free Space TableOracleASM
- ASM 磁碟對應後臺Table 表格ASM
- [Oracle] Partition table exchange Heap tableOracle
- oracle asmOracleASM
- oracle temporary tableOracle
- oracle shrink tableOracle
- Oracle Table LocksOracle
- Alter table for ORACLEOracle
- Oracle Table FunctionOracleFunction
- 【ORACLE ASM】ASM 支援工具簡介OracleASM
- oracle asm命令OracleASM
- Oracle ASM 管理OracleASM
- Oracle ASM 限制OracleASM
- oracle asm asmcmdOracleASM
- Oracle 普通table 轉換為partition tableOracle
- Oracle10g TEMP 檔案Disk Space Allocation 問題Oracle
- oracle cache table(轉)Oracle
- Oracle table selectOracle
- Oracle:TABLE MONITORINGOracle
- oracle之nalyze tableOracle
- oracle cache table(1)Oracle
- oracle cache table(3)Oracle
- oracle cache table(2)Oracle
- oracle cache table(5)Oracle
- oracle cache table(4)Oracle
- oracle cache table(6)Oracle
- sys.allocation_units與sys.system_internals_allocation_units的差別
- Oracle ASM Disk DirectoryOracleASM
- Oracle ASM File DirectoryOracleASM
- Oracle ASM Disk PartnerOracleASM
- Oracle ASM Alias DirectoryOracleASM
- Oracle ASM Template DirectoryOracleASM
- Oracle Find block in ASMOracleBloCASM
- Oracle ASM 詳解OracleASM
- dba_tablesapce.ALLOCATION_TYPE
- oracle ASM中ASM_POWER_LIMIT引數OracleASMMIT