Ora 15196 oracle asm问题详解
- 1. 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 对象号 http://www.parnassusdata.com/
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
进一步解析上面的参数
- 2. 验证发现问题的区域名字
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 即块
- 3. 头 的 对 象 号 信 息 , 实 际 也 是 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 的对应关系
ASM File number ASM Metadata kfbh.type
1 File Directory KFBTYP_FILEDIR
2 Disk Directory KFBTYP_DISKDIR
3 Active Change Directory (ACD) KFBTYP_CHNGDIR
4 Continous Operations Directory
(COD)
KFBTYP_COD_DATA
5 Template Directory KFBTYP_TMPLTDIR
6 Alias Directory KFBTYP_ALIASDIR
9 Attributes Directory KFBTYP_ATTRDIR
12 Staleness Directory KFBTYP_STALEDIR
对于其他的 metadata 结构如 PST、KFBTYP_DISKHEAD 等其 kfbh.block.obj 总是
2147483648,即 16 进制 0x 80000000,如:
[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
- 4. 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 相关的一些 BUG Note 如下:
Bug 14545129 - ORA-15196_ INVALID ASM BLOCK HEADER [KXDAM
Bug 14740185 - ASM REPORTED CORRUPTED AT BLOCKS _ ORA-15196_ INVALID
ASM BLOCK HEADER [KFC
- 5. Bug 5554692 - Error ORA-15196 reporting ASM block header invalid ora-15196 after
ORA-.pdf
ORA-15196 and ORA-600 [kfgpn lclenq] Resizing Datafile or Dropping User (Doc ID
759379.1)
ORA-15196 WITH ASM DISKS LARGER THAN 2TB (Doc ID 736891.1)
Querying V$ASM_FILE Gives ORA-15196 After ASM Was Upgraded From 10gR2 To
11gR2 with an AU size 1M (Doc ID 1145365.1)
Bug 11801536 ORA-15196 INVALID ASM BLOCK HEADER [KFC.C 8064]
[CHECK_KFBH] [2147483827]
Bug 13605059 - ORA-15196_ INVALID ASM BLOCK HEADER [KFC
但主要引起 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]
- 6. 这里 disk(s):0,指 DISK_NUMBER=0 的 ASM DISK,之后通过 dd 命令复制 300MB 数据:
$dd if=<device path> of=/tmp/disk.dd bs= 1048576 count=300
如果自己搞不定可以找诗檀软件专业 ORACLE 数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 400-690-3643
备用电话: 18501767907
邮箱:service@parnassusdata.com
ParnassusData Corporation , Shanghai , GaoPing Road
No. 733 . China
Phone: (+86) 400-690-3643
ParnassusData.com
Facebook: http://www.facebook.com/parnassusData
Twitter: http://twitter.com/ParnassusData
Weibo: http://weibo.com/parnassusdata
Copyright © 2014 ParnassusData Corporation. All Rights
Reserved.