ORA-15196 ORACLE ASM问题详解

来源:互联网 发布:js的截取方法 编辑:程序博客网 时间:2024/06/03 15:57

一般当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

 

 

 

 

进一步解析上面的参数

 

l  验证发现问题的区域名字

ASM metadata元数据由多种多样的结构组成,例如FILE directory文件目录,Disk Directory磁盘目录,Active ChangeDirectory(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 blocksize   */

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-15196INVALID ASM BLOCK HEADER [KFC.C 8064] [CHECK_KFBH] [2147483827] [2]

 

 

l  存放在ASM Block中的ASM对象号object_number

 

这里每一个ASMmetadata block都对应于特定的ASM结构元文件。kfbh.block.obj即块头的对象号信息,实际也是ASM的文件号。例如下面的例子 即是1号文件KFBTYP_FILEDIR File Directory

 

[oracle@mlab2~]$ kfed  read /oracleasm/asm-disk01aun=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

 

 

ASMFile 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-disk01aun=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

 

 

 

 

 

l  存放在ASM block中的块号 block number

 

一个ASMFile往往由多个Extent组成,一个Extent可以是一个Allocation Unit,也可以使多个allocation Units(VariableExtent 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组成。

 

 

l  2nd指定的区域中实际存放的值

 

即第二个变量中现在实际存放的数值

 

 

l  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

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.        由于第三方应用引起

 

 

 

l  建议收集的数据

 

 

对于该ORA-15196诗檀建议收集如下的数据:

 

Oracle告警日志alert.log和相关的trace文件

发生问题的ASMDisk的前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数据:

 

$ddif=<device path> of=/tmp/disk.dd bs= 1048576 count=300

 

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

 

诗檀软件专业数据库修复团队

 

服务热线 : 400-690-3643  

备用电话:18501767907   

邮箱:service@parnassusdata.com

 

0 0