ORA-15196 ORACLE ASM问题详解
一般当ASM元数据块(metadata block)被检验存在严重问题时才会触发本文所介绍的ORA-15196错误。
该ORA-15196报错的一般格式是:
ORA-15196: invalid ASM block header [1st] [2nd] [3rd] [4th] [5th != 6th]
相关的变量的含义为:
1st,触发该意外报错的Oracle内核函数的名字以及其在代码中的行数
2nd,验证发现问题的区域名字
3rd ,存放在该块中的ASM对象号https://www.sodocs.net/doc/de4565335.html,/
4th,存放在该块中的ASM的块号
5th,2nd指定的区域中实际存放的值
6th, 2nd指定的区域中应当存放的值诗檀软件专业修复Oracle数据库
例如:
ORA-15196: invalid ASM block header [kfc.c:7997] [endian_kfbh] [1] [93] [211 != 0]
其中kfc.c:7997,说明触发本次ORA-15196错误的代码是kfc.c 内核源代码的7997行的代码endian_kfbh :验证发现问题的区域名字, 这个endian_kfbh是用来描述endian属性的
存放在该块中的ASM对象号:1
存放在该块中的ASM的块号:93
2nd指定的区域中实际存放的值:211
2nd指定的区域中应当存放的值:0
进一步解析上面的参数
●验证发现问题的区域名字
ASM metadata元数据由多种多样的结构组成,例如FILE directory文件目录,Disk Directory磁盘目录,Active Change Directory(ACDC),这些信息都存放在ASM 的第1号文件到第255文件之间。每一个文件又由ASM Extent组成,Extent又由大小为4096 bytes的ASM block组成(仅仅对于Metadata File是这样的,对于Oracle Datafile 数据文件则仍是由DB_BLOCK_SIZE大小的数据块组成)。这里每一个ASM BLOCK 均有一个必备的块头KFBH,如下面的例子:
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: 325804796 ; 0x00c: 0x136b62fc
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
KFBH说到底是一个C语言头文件中定义的Structure,其定义大致如下:
endian_kfbh /* endianness of writer */
hard_kfbh /* H.A.R.D. magic # and block size */
type_kfbh /* metadata block type */
datfmt_kfbh /* metadata block data format */
block_kfbh /* block location of this block */
check_kfbh /* check value to verify consistency */
fcn_kfbh /* change number of last change */
spare1_kfbh /* zero pad out to 32 bytes */
spare2_kfbh /* zero pad out to 32 bytes */
以上的每一个区域实际均可能是“验证发现问题的区域”,例如:
ORA-15196: invalid ASM block header [kfc.c:7997] [endian_kfbh] [1] [93] [211 != 0]
ORA-15196 INVALID ASM BLOCK HEADER [KFC.C 8064] [CHECK_KFBH] [2147483827] [2]
●存放在ASM Block中的ASM对象号object_number
这里每一个ASM metadata block都对应于特定的ASM 结构元文件。kfbh.block.obj即块
头的对象号信息,实际也是ASM的文件号。例如下面的例子即是1号文件KFBTYP_FILEDIR File Directory
[oracle@mlab2 ~]$ kfed read /oracleasm/asm-disk01 aun=2 blkn=1 aus=4194304|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: 1 ; 0x004: blk=1
kfbh.block.obj: 1 ; 0x008: file=1
kfbh.check: 325804796 ; 0x00c: 0x136b62fc
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
ASM File number: ASM Metadata: kfbh.type 的对应关系
对于其他的metadata结构如PST、KFBTYP_DISKHEAD等其kfbh.block.obj总是2147483648,即16进制0x80000000,如:
[oracle@mlab2 ~]$ kfed read /oracleasm/asm-disk01 aun=0 blkn=0 aus=4194304|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: 2147483648 ; 0x008: disk=0
kfbh.check: 852050979 ; 0x00c: 0x32c94423
kfbh.fcn.base: 106569 ; 0x010: 0x0001a049
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
●存放在ASM block中的块号block number
一个ASM File往往由多个Extent组成,一个Extent可以是一个Allocation Unit,也可以使多个allocation Units(Variable Extent Size)。一个Extent又由多个ASM metadata block (一般为4096 bytes大小)组成。默认1MB AU下,一个extent对应256个ASM metadata block。
kfbh.block.blk代表某个文件中的块号。例如kfbh.block.blk=93,那么一般存放在某个文件的第一个extent里。而这个extent可以由Disk group上任意ASM disk上的任意AU组成。
●2nd指定的区域中实际存放的值
即第二个变量中现在实际存放的数值
●2nd指定的区域中应当存放的值
即第二个变量中理论上应当存放的数值
我们来看一个例子:
ORA-15196: invalid ASM block header [kfc.c:7997] [endian_kfbh] [1] [93] [211 != 0]
可以解释为1号文件的93块中的endian_kfbh区域在kfc.c的7997代码做检测时发现,其实际存放的值为211,而实际上endian_kfbh 一般只有2个值0x01 或者0x00,0x01代表Little Endian,0x00代表Big Endian。211这个实际存放值是非法的,说明这个重要的1号文件的93号块出现了损坏。
但主要引起ORA-15196错误的原因并不是ORACLE自身的BUG,而是ORACLE之外的一些因素:
1.ASM使用的磁盘被从OS级别做了某种格式化,或者头部被覆盖,例如AIX下chdev
设置了pv头
2.ASM使用的磁盘被分配为文件系统,这个一般是误操作导致的,例如SA系统管理员
看到一块ASM磁盘被有被操作系统使用,就认为这是浪费,而在上面mkfs
3.由于IO链路或者存储故障,如丢失写等
4.由于第三方应用引起
建议收集的数据
对于该ORA-15196 诗檀建议收集如下的数据:
Oracle 告警日志alert.log 和相关的trace 文件
发生问题的ASM Disk的前300MB数据的DD
首先通过alert.log的内容确定损坏发生的ASM Disk号:
WARNING: cache failed to read fn=1 blk=80 from disk(s): 0
ORA-15196: invalid ASM block header [kfc.c:7997] [endian_kfbh] [1] [93] [211 != 0]
这里disk(s):0,指DISK_NUMBER=0的ASM DISK,之后通过dd命令复制300MB数据:$dd if=
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线:400-690-3643
备用电话:185********
邮箱:service@https://www.sodocs.net/doc/de4565335.html,
ParnassusData Corporation , Shanghai , GaoPing Road
No. 733 . China
Phone: (+86) 400-690-3643
https://www.sodocs.net/doc/de4565335.html,
Facebook: https://www.sodocs.net/doc/de4565335.html,/parnassusData
Twitter: https://www.sodocs.net/doc/de4565335.html,/ParnassusData
Weibo: https://www.sodocs.net/doc/de4565335.html,/parnassusdata
Copyright ? 2014 ParnassusData Corporation. All Rights
Reserved.