プロの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以外の原因で導いた結果だから:
- ASMが使っているディスクはOSレベルからフォーマットされた。あるいはヘッダが上書きされた。例えば、AIXでchdevがpvヘッダを設定した。
- ASMが使っているディスクがファイルシステムとされた。一般的に、これは誤操作によるものである。例えば、SAシステム管理者はあるASMディスクがオペレーションシステムに使われたから、無駄使いと認定して、mkfsする。
- IOリンクあるいはストレージトラブル。例えば書き込みをなくしたなど
- 別のアプリによるもの
- 必要なデータ
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
Comment