咨询微信: dbservice1234 7 x 24 在线支持!

Oracle ORA-15196 ORACLE ASMトラブル解析

Oracle ORA-15196 ORACLE ASMトラブル解析

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

一般的、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で指定していたエリアで格納したい数値

 

 

例えば:

 

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 2ndで指定していたエリアで実際に格納していた数値

2ndで指定していたエリアで格納したい数値:0

 

 

 

前のバラメタを解析する

 

  • 検証でトラブルのエリア名前を探し出した。

ASM metadataメータデータはいろんな構造により構造された。例えば、FILE directoryファイルディレクトリ、Disk Directoryディスクディレクトリ、,Active Change Directory(ACDC)これらの情報はASM の第一号ファイルから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 の関係

 

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

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]

 

 

これは一つ目のファイルの93ブロックのendian_kfbhエリアがkfc.cの7997コードに対して検証するときに見つけ出した。実際に格納された数値は211が実際にendian_kfbh一般的に二つの数値を含んでいて: 0x01 あるいは 0x00。0x01はLittle Endianで、0x00はBig Endianである。 211という数値はいけない数値で、大事な一つ目の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. 別のアプリによるもの

 

 

 

  • 必要なデータ

 

 

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=<device path> of=/tmp/disk.dd bs= 1048576 count=300