プロの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