深入了解Oracle ASM(二):ASM File number 1 文件目录
ASM file number 1 - the File Directory
ASM文件目录File Directory针对本Disk Group中的每一个文件包含一条记录。该记录指向该文件的前60个数据盘区extents,必要时还包括间接盘区indirect extents。该文件目录在必要容纳更多文件数目时会自动增长。每一个文件目录记录保持更新以下文件信息:
- 文件大小
- 该文件的块大小
- 文件种类,例如:数据文件,ASM元数据文件,在线日志,归档日志,控制文件等等
- 文件冗余度:外部、2路或者3路镜像
- 条带化配置,coarse or fine
- 到前60个extent的直接盘区指针(direct extent pointer)
- 300个间接盘区指针(indirect extent pointers)
- 创建时间戳
- 最后修改或更新时间戳
- 指向别名目录中的用户别名和文件名
[grid@localhost ~]$ kfed read /dev/asm-diski aun=0 |less
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 0 ; 0x004: blk=0
kfbh.block.obj: 2147483650 ; 0x008: disk=2
kfbh.check: 2593903300 ; 0x00c: 0x9a9bd2c4
kfbh.fcn.base: 217 ; 0x010: 0x000000d9
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr: ORCLDISK ; 0x000: length=8
kfdhdb.driver.reserved[0]: 0 ; 0x008: 0x00000000
kfdhdb.driver.reserved[1]: 0 ; 0x00c: 0x00000000
kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000
kfdhdb.compat: 186646528 ; 0x020: 0x0b200000
kfdhdb.dsknum: 2 ; 0x024: 0x0002
kfdhdb.grptyp: 3 ; 0x026: KFDGTP_HIGH
kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER
kfdhdb.dskname: SYSTEMDG_0002 ; 0x028: length=13
kfdhdb.grpname: SYSTEMDG ; 0x048: length=8
kfdhdb.fgname: SYSTEMDG_0002 ; 0x068: length=13
kfdhdb.capname: ; 0x088: length=0
kfdhdb.crestmp.hi: 32982958 ; 0x0a8: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd
kfdhdb.crestmp.lo: 3878604800 ; 0x0ac: USEC=0x0 MSEC=0x3b4 SECS=0x32 MINS=0x39
kfdhdb.mntstmp.hi: 32983461 ; 0x0b0: HOUR=0x5 DAYS=0xd MNTH=0x2 YEAR=0x7dd
kfdhdb.mntstmp.lo: 474934272 ; 0x0b4: USEC=0x0 MSEC=0x3bb SECS=0x4 MINS=0x7
kfdhdb.secsize: 512 ; 0x0b8: 0x0200
kfdhdb.blksize: 4096 ; 0x0ba: 0x1000
kfdhdb.ausize: 1048576 ; 0x0bc: 0x00100000
kfdhdb.mfact: 113792 ; 0x0c0: 0x0001bc80
kfdhdb.dsksize: 3072 ; 0x0c4: 0x00000c00
kfdhdb.pmcnt: 2 ; 0x0c8: 0x00000002
kfdhdb.fstlocn: 1 ; 0x0cc: 0x00000001
kfdhdb.altlocn: 2 ; 0x0d0: 0x00000002
kfdhdb.f1b1locn: 2 ; 0x0d4: 0x00000002
kfdhdb.redomirrors[0]: 0 ; 0x0d8: 0x0000
kfdhdb.redomirrors[1]: 0 ; 0x0da: 0x0000
kfdhdb.redomirrors[2]: 0 ; 0x0dc: 0x0000
kfdhdb.redomirrors[3]: 0 ; 0x0de: 0x0000
kfdhdb.dbcompat: 168820736 ; 0x0e0: 0x0a100000
kfdhdb.grpstmp.hi: 32982958 ; 0x0e4: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd
kfdhdb.grpstmp.lo: 3878197248 ; 0x0e8: USEC=0x0 MSEC=0x226 SECS=0x32 MINS=0x39
kfdhdb.vfstart: 0 ; 0x0ec: 0x00000000
kfdhdb.vfend: 0 ; 0x0f0: 0x00000000
kfdhdb.spfile: 38 ; 0x0f4: 0x00000026
kfdhdb.spfflg: 1 ; 0x0f8: 0x00000001
//也可以通过查询X$KFFXP视图找出该FILE NUMBER=1的文件的Allocation Units
select disk_kffxp, AU_kffxp, xnum_kffxp
from x$kffxp
where group_kffxp = 3 -- Diskgroup 3 (GROUPB)
and number_kffxp = 1 -- File 1 (file directory)
/
DISK_KFFXP AU_KFFXP XNUM_KFFXP
---------- ---------- ----------
0 2 0
1 2 0
2 2 0
2 46 1
3 44 1
0 46 1
上面显示的结果显示 在disk number =0 的ASM Disk 上的allocation units 2属于file number=1的file directory, 同理 在disk number =0 的ASM Disk 上的allocation units 46也属于file number=1的file directory。
在1MB allocation units大小,4k ASM block大小的前提下,第一个allocation unit可以存放255个目录记录(256*4k=1MB)。 由于前255个文件是为ASM元数据保留的,所以第一个allocation unit仅记录ASM元数据文件第一到第六个。剩下的allocation unit(46)则存放接下来的255个ASM文件。
文件目录结构
Allocation unit=2 的block 1描述了该ASM 1号文件file directory自身。该块的前部分包含了标准的头部信息,并显示该块的类型为KFBTYP_FILEDIR。 在该kfffdb结构之后,该file directory的每一个block包含描述文件物理属性和盘区指针的信息, 以及指向所有间接盘区的指针。
以下是aun=2 block=1的file directory信息:
[grid@localhost ~]$ kfed read /dev/asm-diski aun=2 blkn=1 > block.log [grid@localhost ~]$ vi block.log kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 1 ; 0x004: blk=1 kfbh.block.obj: 1 ; 0x008: file=1 kfbh.check: 3254018873 ; 0x00c: 0xc1f46339 kfbh.fcn.base: 493 ; 0x010: 0x000001ed kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0 kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0 kfffdb.hibytes: 0 ; 0x00c: 0x00000000 kfffdb.lobytes: 2097152 ; 0x010: 0x00200000 kfffdb.xtntcnt: 6 ; 0x014: 0x00000006 kfffdb.xtnteof: 6 ; 0x018: 0x00000006 kfffdb.blkSize: 4096 ; 0x01c: 0x00001000 kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0 kfffdb.fileType: 15 ; 0x021: 0x0f kfffdb.dXrs: 19 ; 0x022: SCHE=0x1 NUMB=0x3 kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3 kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000 kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000 kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000 kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000 kfffdb.xtntblk: 6 ; 0x03c: 0x0006 kfffdb.break: 60 ; 0x03e: 0x003c kfffdb.priZn: 0 ; 0x040: KFDZN_COLD kfffdb.secZn: 0 ; 0x041: KFDZN_COLD kfffdb.ub2spare: 0 ; 0x042: 0x0000其中字段的含义: KFBTYP_FILEDIR // block type = file directory block kfffdb.node.incarn: File incarnation information kfffdb.hibytes File size (high bytes) kfffdb.lobyte 2097152 ; 0x010: 0x00200000 File size (low bytes) 2097152 ==》2MB大小 kfffdb.xtntcnt: 6 ; 0x014: 0x00000006 // 6 extents for this file kfffdb.xtnteof: 6 ; 0x018: 0x00000006 // 6 extents before eof kfffdb.blkSize: 4096 ; 0x01c: 0x00001000 // 标准ASM block大小 kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0 // Flag definitions O - File is original, not snapshot S - File is striped S - Strict allocation policy D - File is damaged C - File creation is committed I - File has empty indirect block R - File has known at-risk value A - The at-risk value itsefl 接下来看一个ASM metadata 文件的实际目录记录,我们就查看aun=2的 blkn=4
[grid@localhost ~]$ kfed read /dev/asm-diski aun=2 blkn=4|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 4 ; 0x004: blk=4 kfbh.block.obj: 1 ; 0x008: file=1 kfbh.check: 3786097185 ; 0x00c: 0xe1ab4221 kfbh.fcn.base: 206 ; 0x010: 0x000000ce kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0 kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0 kfffdb.hibytes: 0 ; 0x00c: 0x00000000 kfffdb.lobytes: 8331264 ; 0x010: 0x007f2000 kfffdb.xtntcnt: 24 ; 0x014: 0x00000018 kfffdb.xtnteof: 24 ; 0x018: 0x00000018 kfffdb.blkSize: 4096 ; 0x01c: 0x00001000 kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0 kfffdb.fileType: 15 ; 0x021: 0x0f kfffdb.dXrs: 19 ; 0x022: SCHE=0x1 NUMB=0x3 kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3 kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000 kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000 kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000 kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000 kfffdb.xtntblk: 24 ; 0x03c: 0x0018 kfffdb.break: 60 ; 0x03e: 0x003c kfffdb.priZn: 0 ; 0x040: KFDZN_COLD kfffdb.secZn: 0 ; 0x041: KFDZN_COLD kfffdb.ub2spare: 0 ; 0x042: 0x0000 kfffdb.alias[0]: 4294967295 ; 0x044: 0xffffffff kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff kfffdb.strpwdth: 0 ; 0x04c: 0x00 kfffdb.strpsz: 0 ; 0x04d: 0x00 kfffdb.usmsz: 0 ; 0x04e: 0x0000 kfffdb.crets.hi: 32982958 ; 0x050: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd kfffdb.crets.lo: 3878730752 ; 0x054: USEC=0x0 MSEC=0x2f SECS=0x33 MINS=0x39 kfffdb.modts.hi: 32982958 ; 0x058: HOUR=0xe DAYS=0x1d MNTH=0x1 YEAR=0x7dd kfffdb.modts.lo: 3878730752 ; 0x05c: USEC=0x0 MSEC=0x2f SECS=0x33 MINS=0x39 kfffdb.dasz[0]: 0 ; 0x060: 0x00 kfffdb.dasz[1]: 0 ; 0x061: 0x00 kfffdb.dasz[2]: 0 ; 0x062: 0x00 kfffdb.dasz[3]: 0 ; 0x063: 0x00 kfffdb.permissn: 0 ; 0x064: 0x00 kfffdb.ub1spar1: 0 ; 0x065: 0x00 kfffdb.ub2spar2: 0 ; 0x066: 0x0000 kfffdb.user.entnum: 0 ; 0x068: 0x0000 kfffdb.user.entinc: 0 ; 0x06a: 0x0000 kfffdb.group.entnum: 0 ; 0x06c: 0x0000 kfffdb.group.entinc: 0 ; 0x06e: 0x0000 kfffdb.spare[0]: 0 ; 0x070: 0x00000000 kfffdb.spare[1]: 0 ; 0x074: 0x00000000 kfffdb.spare[2]: 0 ; 0x078: 0x00000000 kfffdb.spare[3]: 0 ; 0x07c: 0x00000000 kfffdb.spare[4]: 0 ; 0x080: 0x00000000 kfffdb.spare[5]: 0 ; 0x084: 0x00000000 kfffdb.spare[6]: 0 ; 0x088: 0x00000000 kfffdb.spare[7]: 0 ; 0x08c: 0x00000000 kfffdb.spare[8]: 0 ; 0x090: 0x00000000 kfffdb.spare[9]: 0 ; 0x094: 0x00000000 kfffdb.spare[10]: 0 ; 0x098: 0x00000000 kfffdb.spare[11]: 0 ; 0x09c: 0x00000000 kfffdb.usm: ; 0x0a0: length=0 kfffde[0].xptr.au: 36 ; 0x4a0: 0x00000024 kfffde[0].xptr.disk: 1 ; 0x4a4: 0x0001 kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 S=0 kfffde[0].xptr.chk: 15 ; 0x4a7: 0x0f kfffde[1].xptr.au: 45 ; 0x4a8: 0x0000002d kfffde[1].xptr.disk: 0 ; 0x4ac: 0x0000 kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 S=0 kfffde[1].xptr.chk: 7 ; 0x4af: 0x07 kfffde[2].xptr.au: 34 ; 0x4b0: 0x00000022 kfffde[2].xptr.disk: 3 ; 0x4b4: 0x0003 kfffde[2].xptr.flags: 0 ; 0x4b6: L=0 E=0 D=0 S=0 kfffde[2].xptr.chk: 11 ; 0x4b7: 0x0b kfffde[3].xptr.au: 36 ; 0x4b8: 0x00000024 kfffde[3].xptr.disk: 0 ; 0x4bc: 0x0000 kfffde[3].xptr.flags: 0 ; 0x4be: L=0 E=0 D=0 S=0 kfffde[3].xptr.chk: 14 ; 0x4bf: 0x0e kfffde[4].xptr.au: 43 ; 0x4c0: 0x0000002b kfffde[4].xptr.disk: 3 ; 0x4c4: 0x0003 kfffde[4].xptr.flags: 0 ; 0x4c6: L=0 E=0 D=0 S=0 kfffde[4].xptr.chk: 2 ; 0x4c7: 0x02 kfffde[5].xptr.au: 37 ; 0x4c8: 0x00000025 kfffde[5].xptr.disk: 1 ; 0x4cc: 0x0001 kfffde[5].xptr.flags: 0 ; 0x4ce: L=0 E=0 D=0 S=0 kfffde[5].xptr.chk: 14 ; 0x4cf: 0x0e kfffde[6].xptr.au: 42 ; 0x4d0: 0x0000002a kfffde[6].xptr.disk: 2 ; 0x4d4: 0x0002 kfffde[6].xptr.flags: 0 ; 0x4d6: L=0 E=0 D=0 S=0 kfffde[6].xptr.chk: 2 ; 0x4d7: 0x02 kfffde[7].xptr.au: 40 ; 0x4d8: 0x00000028 kfffde[7].xptr.disk: 1 ; 0x4dc: 0x0001 kfffde[7].xptr.flags: 0 ; 0x4de: L=0 E=0 D=0 S=0 kfffde[7].xptr.chk: 3 ; 0x4df: 0x03 kfffde[8].xptr.au: 39 ; 0x4e0: 0x00000027 kfffde[8].xptr.disk: 3 ; 0x4e4: 0x0003 kfffde[8].xptr.flags: 0 ; 0x4e6: L=0 E=0 D=0 S=0其中字段的含义: kfffdb.lobytes: 8331264 ; 0x010: 0x007f2000 ==>说明文件大小为8331264bytes kfffdb.xtntcnt: 24 ; 0x014: 0x00000018 kfffdb.xtnteof: 24 ; 0x018: 0x00000018 ==> 说明该文件目前共24个extents kfffdb.blkSize: 4096 ; 0x01c: 0x00001000 ==> 4k的ASM Block size kfffdb.fileType: 15 ; 0x021: 0x0f filetype=15 说明是ASM Metadata File kfffde[0].xptr.au: 36 ; 0x4a0: 0x00000024 file number=4 的第一extent指向36号 AU kfffde[0].xptr.disk: 1 ; 0x4a4: 0x0001 Disk number 1 kfffde[1].xptr.au: 45 ; 0x4a8: 0x0000002d file number=4 的第二extent指向45号AU kfffde[2].xptr.au: 4294967295 ; 0x4b0: 0xfffffff 若 kfffde[N].xptr.au=4294967295 说明该FILE没有更多extent了 AU的指针情况, 可以这样查看:
[grid@localhost ~]$ kfed read /dev/asm-diski aun=2 blkn=4| egrep "xptr.au|xptr.disk"|less kfffde[0].xptr.au: 36 ; 0x4a0: 0x00000024 kfffde[0].xptr.disk: 1 ; 0x4a4: 0x0001 kfffde[1].xptr.au: 45 ; 0x4a8: 0x0000002d kfffde[1].xptr.disk: 0 ; 0x4ac: 0x0000 kfffde[2].xptr.au: 34 ; 0x4b0: 0x00000022 kfffde[2].xptr.disk: 3 ; 0x4b4: 0x0003 kfffde[3].xptr.au: 36 ; 0x4b8: 0x00000024 kfffde[3].xptr.disk: 0 ; 0x4bc: 0x0000 kfffde[4].xptr.au: 43 ; 0x4c0: 0x0000002b kfffde[4].xptr.disk: 3 ; 0x4c4: 0x0003 kfffde[5].xptr.au: 37 ; 0x4c8: 0x00000025 kfffde[5].xptr.disk: 1 ; 0x4cc: 0x0001 kfffde[6].xptr.au: 42 ; 0x4d0: 0x0000002a kfffde[6].xptr.disk: 2 ; 0x4d4: 0x0002 kfffde[7].xptr.au: 40 ; 0x4d8: 0x00000028 kfffde[7].xptr.disk: 1 ; 0x4dc: 0x0001 kfffde[8].xptr.au: 39 ; 0x4e0: 0x00000027 kfffde[8].xptr.disk: 3 ; 0x4e4: 0x0003 kfffde[9].xptr.au: 40 ; 0x4e8: 0x00000028 kfffde[9].xptr.disk: 3 ; 0x4ec: 0x0003 kfffde[10].xptr.au: 41 ; 0x4f0: 0x00000029 kfffde[10].xptr.disk: 1 ; 0x4f4: 0x0001 kfffde[11].xptr.au: 40 ; 0x4f8: 0x00000028 kfffde[11].xptr.disk: 0 ; 0x4fc: 0x0000 kfffde[12].xptr.au: 42 ; 0x500: 0x0000002a kfffde[12].xptr.disk: 1 ; 0x504: 0x0001 kfffde[13].xptr.au: 41 ; 0x508: 0x00000029 kfffde[13].xptr.disk: 0 ; 0x50c: 0x0000 kfffde[14].xptr.au: 43 ; 0x510: 0x0000002b kfffde[14].xptr.disk: 2 ; 0x514: 0x0002 kfffde[15].xptr.au: 42 ; 0x518: 0x0000002a kfffde[15].xptr.disk: 0 ; 0x51c: 0x0000 kfffde[16].xptr.au: 41 ; 0x520: 0x00000029 kfffde[16].xptr.disk: 3 ; 0x524: 0x0003 kfffde[17].xptr.au: 43 ; 0x528: 0x0000002b kfffde[17].xptr.disk: 1 ; 0x52c: 0x0001 kfffde[18].xptr.au: 44 ; 0x530: 0x0000002c kfffde[18].xptr.disk: 2 ; 0x534: 0x0002 kfffde[19].xptr.au: 43 ; 0x538: 0x0000002b kfffde[19].xptr.disk: 0 ; 0x53c: 0x0000 kfffde[20].xptr.au: 44 ; 0x540: 0x0000002c kfffde[20].xptr.disk: 1 ; 0x544: 0x0001 kfffde[20].xptr.disk: 1 ; 0x544: 0x0001 kfffde[21].xptr.au: 42 ; 0x548: 0x0000002a kfffde[21].xptr.disk: 3 ; 0x54c: 0x0003 kfffde[22].xptr.au: 45 ; 0x550: 0x0000002d kfffde[22].xptr.disk: 2 ; 0x554: 0x0002 kfffde[23].xptr.au: 45 ; 0x558: 0x0000002d kfffde[23].xptr.disk: 1 ; 0x55c: 0x0001 kfffde[24].xptr.au: 4294967295 ; 0x560: 0xffffffff kfffde[24].xptr.disk: 65535 ; 0x564: 0xffff kfffde[25].xptr.au: 4294967295 ; 0x568: 0xffffffff kfffde[25].xptr.disk: 65535 ; 0x56c: 0xffff kfffde[26].xptr.au: 4294967295 ; 0x570: 0xffffffff kfffde[26].xptr.disk: 65535 ; 0x574: 0xffff kfffde[27].xptr.au: 4294967295 ; 0x578: 0xffffffff 可以这样验证一下 select disk_kffxp, AU_kffxp, xnum_kffxp from x$kffxp where group_kffxp = 3 -- Diskgroup 3 (GROUPB) and number_kffxp =4 / DISK_KFFXP AU_KFFXP XNUM_KFFXP ---------- ---------- ---------- 1 36 0 0 45 0 3 34 0 0 36 1 3 43 1 1 37 1 2 42 2 1 40 2 3 39 2 3 40 3 1 41 3 0 40 3 1 42 4 0 41 4 2 43 4 0 42 5 3 41 5 1 43 5 2 44 6 0 43 6 1 44 6 3 42 7 2 45 7 1 45 7找出数据文件对应的目录记录directory entry:
SQL> select GROUP_NUMBER, FILE_NUMBER, NAME from v$asm_alias 2 group by GROUP_NUMBER, FILE_NUMBER, NAME; GROUP_NUMBER FILE_NUMBER NAME ------------ ----------- ---------------------------------------------------------------------- 3 253 REGISTRY.253.805993079 3 256 users01.dbf 3 256 users01.dbf.256.806828719 3 257 system01.dbf 3 257 system01.dbf.257.807460773 3 258 sysaux01.dbf 3 258 sysaux01.dbf.258.807460839 3 259 example01.dbf 3 259 example01.dbf.259.807460921 3 4294967295 ASM 3 4294967295 DATAFILE 3 4294967295 ASMPARAMETERFILE 可以看到 system01.dbf 和 system01.dbf.257.807460773 是同一个file的2个alias 其文件号为 257, 257-256=1 则其file directory的记录位于AU=46的 第一个block [grid@localhost ~]$ kfed read /dev/asm-diski aun=46 blkn=1|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 257 ; 0x004: blk=257 kfbh.block.obj: 1 ; 0x008: file=1 kfbh.check: 3782876348 ; 0x00c: 0xe17a1cbc kfbh.fcn.base: 2055 ; 0x010: 0x00000807 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfffdb.node.incarn: 807460773 ; 0x000: A=1 NUMM=0x18106fd2 kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0 kfffdb.hibytes: 0 ; 0x00c: 0x00000000 kfffdb.lobytes: 828383232 ; 0x010: 0x31602000 kfffdb.xtntcnt: 2373 ; 0x014: 0x00000945 kfffdb.xtnteof: 2373 ; 0x018: 0x00000945 kfffdb.blkSize: 8192 ; 0x01c: 0x00002000 kfffdb.flags: 17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0 kfffdb.fileType: 2 ; 0x021: 0x02 kfffdb.dXrs: 19 ; 0x022: SCHE=0x1 NUMB=0x3 kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3 kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000 kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000 kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000 kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000 kfffdb.xtntblk: 63 ; 0x03c: 0x003f kfffdb.break: 60 ; 0x03e: 0x003c kfffdb.priZn: 0 ; 0x040: KFDZN_COLD kfffdb.secZn: 0 ; 0x041: KFDZN_COLD kfffdb.ub2spare: 0 ; 0x042: 0x0000 kfffdb.alias[0]: 160 ; 0x044: 0x000000a0 kfffdb.alias[1]: 2 ; 0x048: 0x00000002 kfffdb.strpwdth: 1 ; 0x04c: 0x01 kfffdb.strpsz: 20 ; 0x04d: 0x14 kfffdb.usmsz: 0 ; 0x04e: 0x0000 kfffdb.crets.hi: 32983534 ; 0x050: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd kfffdb.crets.lo: 2651955200 ; 0x054: USEC=0x0 MSEC=0x68 SECS=0x21 MINS=0x27 kfffdb.modts.hi: 32983534 ; 0x058: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd kfffdb.modts.lo: 0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0 kfffdb.dasz[0]: 0 ; 0x060: 0x00 kfffdb.dasz[1]: 0 ; 0x061: 0x00 kfffdb.dasz[2]: 0 ; 0x062: 0x00 kfffdb.dasz[3]: 0 ; 0x063: 0x00 kfffdb.permissn: 0 ; 0x064: 0x00 kfffdb.ub1spar1: 0 ; 0x065: 0x00 kfffdb.ub2spar2: 0 ; 0x066: 0x0000 kfffdb.user.entnum: 0 ; 0x068: 0x0000 kfffdb.user.entinc: 0 ; 0x06a: 0x0000 kfffdb.group.entnum: 0 ; 0x06c: 0x0000 kfffdb.group.entinc: 0 ; 0x06e: 0x0000 kfffdb.spare[0]: 0 ; 0x070: 0x00000000 kfffdb.spare[1]: 0 ; 0x074: 0x00000000 kfffdb.spare[2]: 0 ; 0x078: 0x00000000 kfffdb.spare[3]: 0 ; 0x07c: 0x00000000 kfffdb.spare[4]: 0 ; 0x080: 0x00000000 kfffdb.spare[5]: 0 ; 0x084: 0x00000000 kfffdb.spare[6]: 0 ; 0x088: 0x00000000 kfffdb.spare[7]: 0 ; 0x08c: 0x00000000 kfffdb.spare[8]: 0 ; 0x090: 0x00000000 kfffdb.spare[9]: 0 ; 0x094: 0x00000000 kfffdb.spare[10]: 0 ; 0x098: 0x00000000 kfffdb.spare[11]: 0 ; 0x09c: 0x00000000 kfffdb.usm: ; 0x0a0: length=0 kfffde[0].xptr.au: 365 ; 0x4a0: 0x0000016d kfffde[0].xptr.disk: 3 ; 0x4a4: 0x0003 kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 S=0 kfffde[0].xptr.chk: 69 ; 0x4a7: 0x45 kfffde[1].xptr.au: 368 ; 0x4a8: 0x00000170 kfffde[1].xptr.disk: 1 ; 0x4ac: 0x0001 kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 S=0 kfffde[1].xptr.chk: 90 ; 0x4af: 0x5a kfffde[2].xptr.au: 368 ; 0x4b0: 0x00000170 kfffde[2].xptr.disk: 2 ; 0x4b4: 0x0002 kfffde[2].xptr.flags: 0 ; 0x4b6: L=0 E=0 D=0 S=0 kfffde[2].xptr.chk: 89 ; 0x4b7: 0x59 kfffde[3].xptr.au: 368 ; 0x4b8: 0x00000170 kfffde[3].xptr.disk: 0 ; 0x4bc: 0x0000 kfffde[3].xptr.flags: 0 ; 0x4be: L=0 E=0 D=0 S=0 kfffde[3].xptr.chk: 91 ; 0x4bf: 0x5b kfffde[4].xptr.au: 366 ; 0x4c0: 0x0000016e kfffde[4].xptr.disk: 3 ; 0x4c4: 0x0003 kfffde[4].xptr.flags: 0 ; 0x4c6: L=0 E=0 D=0 S=0 kfffde[4].xptr.chk: 70 ; 0x4c7: 0x46 kfffde[5].xptr.au: 369 ; 0x4c8: 0x00000171 kfffde[5].xptr.disk: 1 ; 0x4cc: 0x0001 kfffde[5].xptr.flags: 0 ; 0x4ce: L=0 E=0 D=0 S=0 kfffde[0].xptr.au: 365 ; 0x4a0: 0x0000016d kfffde[0].xptr.disk: 3 ; 0x4a4: 0x0003 kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 S=0 kfffde[0].xptr.chk: 69 ; 0x4a7: 0x45 kfffde[1].xptr.au: 368 ; 0x4a8: 0x00000170 kfffde[1].xptr.disk: 1 ; 0x4ac: 0x0001 则该system01.dbf.257.807460773的前2个extent 指向 disk number=3 的aun=365 和 disknum=1 的aun=368 用X$KFFXP来验证一下 select disk_kffxp, AU_kffxp, xnum_kffxp from x$kffxp where group_kffxp=3 -- group number and number_kffxp=257 -- file number DISK_KFFXP AU_KFFXP XNUM_KFFXP ---------- ---------- ---------- 3 365 0 1 368 0 .......................Directly addressed extents 来看一个大于500MB 的ASM上的数据文件的情况,sysaux01.dbf.258.807460839的 file number=258 大小为780M
SQL> select bytes/1024/1024 ,file_number from v$asm_file; BYTES/1024/1024 FILE_NUMBER --------------- ----------- .001464844 253 426.257813 256 790.007813 257 780.007813 258 341.257813 259 select disk_kffxp, AU_kffxp, xnum_kffxp from x$kffxp where group_kffxp=3 and number_kffxp=258; DISK_KFFXP AU_KFFXP XNUM_KFFXP ---------- ---------- ---------- 0 963 0 1 962 0 2 962 0 2 963 1 0 964 1 3 958 1 1 963 2 3 959 2 0 965 2 ...................................... ...................................... 0 1549 780 1 1548 780 2 1547 780 0 978 2147483648 3 973 2147483648 1 977 2147483648 2346 rows selected.共有2346个extent分配给该数据文件,来看一下该数据文件的directory entry
[grid@localhost ~]$ kfed read /dev/asm-diski aun=46 blkn=2|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 258 ; 0x004: blk=258 kfbh.block.obj: 1 ; 0x008: file=1 kfbh.check: 1890402582 ; 0x00c: 0x70ad4116 kfbh.fcn.base: 2882 ; 0x010: 0x00000b42 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfffdb.node.incarn: 807460839 ; 0x000: A=1 NUMM=0x18106ff3 kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0 kfffdb.hibytes: 0 ; 0x00c: 0x00000000 kfffdb.lobytes: 817897472 ; 0x010: 0x30c02000 kfffdb.xtntcnt: 2343 ; 0x014: 0x00000927 kfffdb.xtnteof: 2343 ; 0x018: 0x00000927 kfffdb.blkSize: 8192 ; 0x01c: 0x00002000 kfffdb.flags: 17 ; 0x020: O=1 S=0 S=0 D=0 C=1 I=0 R=0 A=0 kfffdb.fileType: 2 ; 0x021: 0x02 kfffdb.dXrs: 19 ; 0x022: SCHE=0x1 NUMB=0x3 kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3 kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000 kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000 kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000 kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000 kfffdb.xtntblk: 63 ; 0x03c: 0x003f kfffdb.break: 60 ; 0x03e: 0x003c kfffdb.priZn: 0 ; 0x040: KFDZN_COLD kfffdb.secZn: 0 ; 0x041: KFDZN_COLD kfffdb.ub2spare: 0 ; 0x042: 0x0000 kfffdb.alias[0]: 161 ; 0x044: 0x000000a1 kfffdb.alias[1]: 3 ; 0x048: 0x00000003 kfffdb.strpwdth: 1 ; 0x04c: 0x01 kfffdb.strpsz: 20 ; 0x04d: 0x14 kfffdb.usmsz: 0 ; 0x04e: 0x0000 kfffdb.crets.hi: 32983534 ; 0x050: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd kfffdb.crets.lo: 2724658176 ; 0x054: USEC=0x0 MSEC=0x1bf SECS=0x26 MINS=0x28 kfffdb.modts.hi: 32983534 ; 0x058: HOUR=0xe DAYS=0xf MNTH=0x2 YEAR=0x7dd kfffdb.modts.lo: 0 ; 0x05c: USEC=0x0 MSEC=0x0 SECS=0x0 MINS=0x0 kfffdb.dasz[0]: 0 ; 0x060: 0x00 kfffdb.dasz[1]: 0 ; 0x061: 0x00 kfffdb.dasz[2]: 0 ; 0x062: 0x00 kfffdb.dasz[3]: 0 ; 0x063: 0x00 kfffdb.permissn: 0 ; 0x064: 0x00 kfffdb.ub1spar1: 0 ; 0x065: 0x00 kfffdb.ub2spar2: 0 ; 0x066: 0x0000 kfffdb.user.entnum: 0 ; 0x068: 0x0000 kfffdb.user.entinc: 0 ; 0x06a: 0x0000 kfffdb.group.entnum: 0 ; 0x06c: 0x0000 kfffdb.group.entinc: 0 ; 0x06e: 0x0000 kfffdb.spare[0]: 0 ; 0x070: 0x00000000 kfffdb.spare[1]: 0 ; 0x074: 0x00000000 kfffdb.spare[2]: 0 ; 0x078: 0x00000000 kfffdb.spare[3]: 0 ; 0x07c: 0x00000000 kfffdb.spare[4]: 0 ; 0x080: 0x00000000 kfffdb.spare[5]: 0 ; 0x084: 0x00000000 kfffdb.spare[6]: 0 ; 0x088: 0x00000000 kfffdb.spare[7]: 0 ; 0x08c: 0x00000000 kfffdb.spare[8]: 0 ; 0x090: 0x00000000 kfffdb.spare[9]: 0 ; 0x094: 0x00000000 kfffdb.spare[10]: 0 ; 0x098: 0x00000000 kfffdb.spare[11]: 0 ; 0x09c: 0x00000000 kfffdb.usm: ; 0x0a0: length=0 kfffde[0].xptr.au: 963 ; 0x4a0: 0x000003c3 kfffdb.xtntblk: 63 ; 0x03c: 0x003f //63 extents described in this kfffdb.break: 60 ; 0x03e: 0x003c // file directory block kfffdb.alias[0] ALIAS_INDEXkfffdb.xtntblk=63 说明共有63个extent pointer指针,从kfffde[0].xptr.au到kfffde[59].xptr.au是60个直接盘区指针 direct extent pointer。 Indirectly addressed extents (kffixe structure) kfffde[60].xptr.au指向剩下的文件目录信息, 这样查看。 kffixe 即是KFBTYP_INDIRECT 间接地址盘区Indirectly addressed extents块,与kfffde结构类似
[grid@localhost ~]$ kfed read /dev/asm-diski aun=46 blkn=2|egrep "xptr.au|xptr.disk" kfffde[60].xptr.au: 978 ; 0x680: 0x000003d2 kfffde[60].xptr.disk: 0 ; 0x684: 0x0000 kfffde[61].xptr.au: 973 ; 0x688: 0x000003cd kfffde[61].xptr.disk: 3 ; 0x68c: 0x0003 kfffde[62].xptr.au: 977 ; 0x690: 0x000003d1 kfffde[62].xptr.disk: 1 ; 0x694: 0x0001 1* select path,disk_number from v$asm_disk where group_number=3 SQL> / PATH DISK_NUMBER -------------------- ----------- /dev/asm-diskj 3 /dev/asm-diski 2 /dev/asm-diskh 1 /dev/asm-diskg 0 [grid@localhost ~]$ kfed read /dev/asm-diskg aun=978 blkn=0|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 2147483648 ; 0x004: blk=0 (indirect) kfbh.block.obj: 258 ; 0x008: file=258 kfbh.check: 2166327859 ; 0x00c: 0x811f8a33 kfbh.fcn.base: 2244 ; 0x010: 0x000008c4 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kffixb.dxsn: 20 ; 0x000: 0x00000014 kffixb.xtntblk: 480 ; 0x004: 0x01e0 kffixb.dXrs: 19 ; 0x006: SCHE=0x1 NUMB=0x3 kffixb.ub1spare: 0 ; 0x007: 0x00 kffixb.ub4spare: 0 ; 0x008: 0x00000000 kffixe[0].xptr.au: 979 ; 0x00c: 0x000003d3 kffixe[0].xptr.disk: 0 ; 0x010: 0x0000 kffixe[0].xptr.flags: 0 ; 0x012: L=0 E=0 D=0 S=0 kffixe[0].xptr.chk: 250 ; 0x013: 0xfa kffixe[1].xptr.au: 977 ; 0x014: 0x000003d1 kffixe[1].xptr.disk: 2 ; 0x018: 0x0002 kffixe[1].xptr.flags: 0 ; 0x01a: L=0 E=0 D=0 S=0 kffixe[1].xptr.chk: 250 ; 0x01b: 0xfa kffixe[2].xptr.au: 974 ; 0x01c: 0x000003ce kffixe[2].xptr.disk: 3 ; 0x020: 0x0003 [grid@localhost ~]$ kfed read /dev/asm-diskj aun=973 blkn=0|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 2147483648 ; 0x004: blk=0 (indirect) kfbh.block.obj: 258 ; 0x008: file=258 kfbh.check: 2166327859 ; 0x00c: 0x811f8a33 kfbh.fcn.base: 2244 ; 0x010: 0x000008c4 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kffixb.dxsn: 20 ; 0x000: 0x00000014 kffixb.xtntblk: 480 ; 0x004: 0x01e0 kffixb.dXrs: 19 ; 0x006: SCHE=0x1 NUMB=0x3 kffixb.ub1spare: 0 ; 0x007: 0x00 kffixb.ub4spare: 0 ; 0x008: 0x00000000 kffixe[0].xptr.au: 979 ; 0x00c: 0x000003d3 kffixe[0].xptr.disk: 0 ; 0x010: 0x0000 kffixe[0].xptr.flags: 0 ; 0x012: L=0 E=0 D=0 S=0 kffixe[0].xptr.chk: 250 ; 0x013: 0xfa kffixe[1].xptr.au: 977 ; 0x014: 0x000003d1 kffixe[1].xptr.disk: 2 ; 0x018: 0x0002 kffixe[1].xptr.flags: 0 ; 0x01a: L=0 E=0 D=0 S=0 kffixe[1].xptr.chk: 250 ; 0x01b: 0xfa kffixe[2].xptr.au: 974 ; 0x01c: 0x000003ce kffixe[2].xptr.disk: 3 ; 0x020: 0x0003 kffixe[2].xptr.flags: 0 ; 0x022: L=0 E=0 D=0 S=0 kffixe[2].xptr.chk: 228 ; 0x023: 0xe4 kffixe[3].xptr.au: 978 ; 0x024: 0x000003d2 kffixe[3].xptr.disk: 2 ; 0x028: 0x0002 kffixe[3].xptr.flags: 0 ; 0x02a: L=0 E=0 D=0 S=0 kffixe[3].xptr.chk: 249 ; 0x02b: 0xf9 kffixe[4].xptr.au: 975 ; 0x02c: 0x000003cf kffixe[4].xptr.disk: 3 ; 0x030: 0x0003 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 12 ; 0x002: KFBTYP_INDIRECT kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 2147483648 ; 0x004: blk=0 (indirect) kfbh.block.obj: 258 ; 0x008: file=258 kfbh.check: 2166327859 ; 0x00c: 0x811f8a33 kfbh.fcn.base: 2244 ; 0x010: 0x000008c4 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kffixb.dxsn: 20 ; 0x000: 0x00000014 kffixb.xtntblk: 480 ; 0x004: 0x01e0 kffixb.dXrs: 19 ; 0x006: SCHE=0x1 NUMB=0x3 kffixb.ub1spare: 0 ; 0x007: 0x00 kffixb.ub4spare: 0 ; 0x008: 0x00000000 kffixe[0].xptr.au: 979 ; 0x00c: 0x000003d3 kffixe[0].xptr.disk: 0 ; 0x010: 0x0000 kffixe[0].xptr.flags: 0 ; 0x012: L=0 E=0 D=0 S=0 kffixe[0].xptr.chk: 250 ; 0x013: 0xfa kffixe[1].xptr.au: 977 ; 0x014: 0x000003d1 kffixe[1].xptr.disk: 2 ; 0x018: 0x0002 kffixe[1].xptr.flags: 0 ; 0x01a: L=0 E=0 D=0 S=0 kffixe[1].xptr.chk: 250 ; 0x01b: 0xfa kffixe[2].xptr.au: 974 ; 0x01c: 0x000003ce kffixe[2].xptr.disk: 3 ; 0x020: 0x0003 kffixe[2].xptr.flags: 0 ; 0x022: L=0 E=0 D=0 S=0 kffixe[2].xptr.chk: 228 ; 0x023: 0xe4 kffixe[3].xptr.au: 978 ; 0x024: 0x000003d2 kffixe[3].xptr.disk: 2 ; 0x028: 0x0002 kffixe[3].xptr.flags: 0 ; 0x02a: L=0 E=0 D=0 S=0 kffixe[3].xptr.chk: 249 ; 0x02b: 0xf9 kffixe[4].xptr.au: 975 ; 0x02c: 0x000003cf kffixe[4].xptr.disk: 3 ; 0x030: 0x0003知识总结
- asm disk的前50个AU(50MB)是为asm metadata保留的
- ASM 的前255个file number是为metadata file保留的,文件号从1开始, file numner=1的1号文件为ASM的file directory
- 普通的ASM File的file number从256开始
- ASM disk的第二个AU即是file number=1的file directory (非必然),在1MB AU和4096 bytes block的情况下可以存放255个file directory information,其block type为KFBTYP_FILEDIR
- 普通ASM FILE的directory entry的位置,可以这样计算 File number=1的 第 (file number- 256)/256 +2 个extent,blkn=mod(file number-256),256) ,例如文件号 258 =》 第二个extent的blkn=2。
- KFBTYP_FILEDIR中从kfffde[0].xptr.au到kfffde[59].xptr.au是直接盘区指针 directly extent pointers, kfffde[60].xptr.au以上是KFBTYP_INDIRECT(kffixe)间接盘区指针Indirectly extents pointers。
posted on 2013-03-19 00:52 Oracle和MySQL 阅读(1033) 评论(0) 编辑 收藏 举报