在asm世界里,几乎所有计数都是从0开始,比如磁盘号、AU号、asm块号、file extent号等等。asm磁盘的磁盘头属于Physically addressed metadata,总是位于第一个AU的第一个block上(AU#=0,BLK#=0)。磁盘头记录了该磁盘以及磁盘组的一些基本信息,如:磁盘号、磁盘组名、失败组名、磁盘冗余级别、磁盘头状态等等,除此之外磁盘头还记录了au大小、扇区大小、最小ASM兼容版本和最小数据库兼容版本等磁盘属性,以及一些指向其他重要ASM元数据的指针信息,可以说磁盘头对于asm磁盘来说非常的重要。
下面我们详细的解析asm磁盘头的信息,asm磁盘头从结构上由kfbh(asm元数据块头)和kfdhdb(asm磁盘头)组成,通过之前对asm元数据块头的介绍,很容易对磁盘头的kfbh部分进行解读:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[grid@rac1 ~]$ kfed read /dev/asmdisk-data1|grep kfbh kfbh.endian: 1 ; 0x000: 0x01 --字节序为little kfbh.hard: 130 ; 0x001: 0x82 --元数据块大小为4096 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD --元数据块类型为磁盘头 kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483649 ; 0x008: disk=1 --磁盘编号 kfbh.check: 1186066702 ; 0x00c: 0x46b1f10e --checksum值 kfbh.fcn.base: 0 ; 0x010: 0x00000000 --fcn低4位 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 --fcn高4位 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 |
- kfdhdb部分内容较多,所以下面挑选出一些比较重要的信息进行解释:
- kfdhdb.driver.provstr: ASMLIB磁盘为ORCLDISK+磁盘名,非ASMLIB磁盘为ORCLDISK
- kfdhdb.compat:磁盘组属性asm最小兼容版本,例如0x0b200000转换为10进制则为11.2,注意如果是create diskgroup发起则默认为参数”_asm_compatibility”
- kfdhdb.dsknum:ASM磁盘编号
- kfdhdb.grptyp:磁盘级冗余级别,其枚举值如下:
1 2 3 4 |
KFDGTP_INVALID ((kfdgtp)0) – Illegal value KFDGTP_EXTERNAL ((kfdgtp)1) – External redundancy KFDGTP_NORMAL ((kfdgtp)2) – Normal redundancy KFDGTP_HIGH ((kfdgtp)3) – High redundancy |
- kfdhdb.hdrsts:ASM磁盘头状态,V$ASM_DISK.HEADER_STATUS的信息来自此处,其枚举值如下:
1 2 3 4 5 6 7 8 |
KFDHDR_INVALID ((kfdhdr)0) – Illegal value KFDHDR_UNKNOWN ((kfdhdr)1) – Disk header block unreadable KFDHDR_CANDIDATE ((kfdhdr)2) – No OSM or OS disk header found KFDHDR_MEMBER ((kfdhdr)3) – Normal member of the group KFDHDR_FORMER ((kfdhdr)4) – Disk dropped cleanly from group KFDHDR_CONFLICT ((kfdhdr)5) – Header conflicts KFDHDR_INCOMPAT ((kfdhdr)6) – Written by incompatible software KFDHDR_PROVISIONED ((kfdhdr)7) – Disk was prepared beforehand |
- kfdhdb.dskname:ASM磁盘名
- kfdhdb.grpname:ASM磁盘组名
- kfdhdb.fgname:ASM失败组名
- kfdhdb.crestmp.hi:ASM磁盘组创建时间(年、月、日、时)
- kfdhdb.crestmp.lo:ASM磁盘组创建时间(分、秒、毫秒、微秒)
- kfdhdb.mntstmp.hi:ASM磁盘组mount时间(年、月、日、时)
- kfdhdb.mntstmp.lo:ASM磁盘组mount时间(分、秒、毫秒、微秒)
- kfdhdb.secsize:磁盘的扇区大小,单位byte
- kfdhdb.blksize:ASM元数据块的大小,单位byte
- kfdhdb.ausize:Alloocation unit的大小,单位byte
- kfdhdb.mfact:Stride size,单位AU
- kfdhdb.dsksize: 磁盘大小,单位AU
- kfdhdb.fstlocn: 值为块号,指向本磁盘第一个Free space table block
- kfdhdb.altlocn: 值为块号,指向本磁盘第一个Alocation table block
- kfdhdb.f1b1locn: 值为AU号,指向File Directory的第一个块,注意External冗余的磁盘组,只有磁盘编号为0的磁盘头有f1b1locn值
- kfdhdb.dbcompat: 磁盘属性最小的数据库兼容版本. 例如0x0a100000转换为10进制则为10.1,默认为参数“_rdbms_compatibility”
- kfdhdb.vfstart:voting disk file的起始AU号,如果为0则说明voting disk file不在该磁盘
- kfdhdb.vfend:voting disk file的结束AU号
- kfdhdb.spfile:ASM spfile参数文件的AU号,本特性限于11.2或更高版本
- kfdhdb.spfflg:ASM spfile参数文件标识,如果这个值是1,ASM spfile参数文件则位于本磁盘的kfdhdb.spfile,如果这个值为0,则说明ASM spfile不在该磁盘
从10.2.0.5版本开始,oracle将asm磁盘头备份到了AU号为1(第二个AU)的倒数第二个块上。对于不同的AU大小,磁盘头备份所在块号如下表格所示:
Allocation Unit Size | Block Number on AU 1 |
1048576 | 254 |
4194304 | 1022 |
8388608 | 2046 |
16777216 | 4094 |
从12.1版本开始,oracle为了更好的保护物理元数据,推出了Physical metadata replication特性,如果磁盘组属性compatible.asm高于或等于12.1,并且新增的磁盘组属性phys_meta_replicated为true,则oracle会自动将0号au备份到该磁盘第11号au上。进一步保证了物理元数据的安全。