【データリカバリ】ORA-8103エラを解析する

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:[email protected]

 

ORA-8103は我々Database Consultant がよく見られるトラブルである。

ORA-8103の 原因は主に二つがある:

  • データブロックのタイプが無効的なものあるいはブロックタイプがOracleが予想したものと違っている。例えばOracleがデータタイプをdata(type=6)と見なしているが実際にはそうじゃない。
  • データブロックのdata_object_id とデータディクショナリーのdata_object_idがマッチしていない。

 

ORA-8103トラブルに対して、以下の処置を勧めている:

ORA-08103トラブルの診断は8103エラのERROR STACK TRACEを作成して、TRACEで8103を引き起こしたOBJとOBJDを記録する。これはcorruptionがある相手を定義できる。

トラブルはフォアグラウンドプロセスがORA-08103エラになった場合に、バックグラウンドでTRACEファイルを作成しない。それで、人工的に8103を設定して、ERRORSTACKのEVENTSを引き起こす必要がある:

ALTER SYSTEM SET EVENTS ‘8103 TRACE NAME ERRORSTACK LEVEL 3’;

解決策は以下の通り:
1. OBJDとDBAで具体的テーブル名とブロック名を探し出す
2. できればそのテーブルをanalyze .. validate structureしてください
3. できればそのテーブルを含むtablespaceに対して dbms_space_admin.ASSM_TABLESPACE_VERIFYしてください
4. できればそのテーブルを関するパーティションに移して、トラブルを避けてみてください
5. できれば。そのテーブルあるいはパーティションをMSSMテーブルスペースに移してトラブルを避けてください

execute dbms_space_admin.tablespace_verify(‘&tablespace_name’)
oradebug setmypid
oradebug tracefile_name

execute dbms_space_admin.assm_tablespace_verify(‘&tablespace_name’,dbms_space_admin.TS_VERIFY_BITMAPS)
oradebug setmypid
oradebug tracefile_name

 

 

異なる analyze validate structureした結果に対して、初期的な結論を下せる:

 

flush buffer cacheを実行したあと再びanalyze validate structureするときにORA-8103エラが現れないとは:

これは正常の現象かもしれない。前に言ったORA-8103はオブジェクトがDROP/TRUNCATEされて、SELECTがORA-8103になった。一般的にCall Stackはプロセスがプロセスがそのセグメントヘッダをアクセスできる。より多くの情報はBUG 7441661に参考できる。

これもbuffer cacheだけに起こるかもしれない。flush buffer_cacheで解決できるなら、大体こういう場合に限っている。それにいつもBuffer Cacheが管理するBUGである 。

 

 

flush buffer cacheを実行したら、再びanalyze validate structureするときにORA-8103なったとは:

該当するデータブロックをダンプするときに、そのブロックがロジックに一致している。(bed/dbvツールで検証できる)。Lost Writeの可能性もあって、ほかのオブジェクトに再びフォーマットされない。

ここでLost Writeを判断する大事な手段とはブロックにrecover/blockrecoverする。もしリカバリできるなら、ORA-8103エラがLost Writeで引き起こした。そうでなければ99%はBUGによるものである。

よくある状況はほかのツールでデータベースを起動したままにデータベースをコピしてたが、ツールのBUGによって、古いバーションのblockを新たなデータベースにコピするかもしれない。

 

もう一つの可能は extentレベルが一致していない。同じデータブロックが同時に二つのデータセグメントに属していて、あとのセグメントに上書きされるかもしれない。このようなロジックエラがテーブルスペースレベルのエクステント情報に起こるから、リカバリするだけで修復できない。dba_extents/dba_segments/dba_free_spaceなどのインメージを検証することによって、これらのブロックが複数のオブジェクトに属しているかを確認できる。あるいはあるデータブロックが同時にdba_extents/dba_segments/dba_free_space 三つのインメージに現れたが、 used extentがdba_free_spaceに現れるはずがないから。それにfree extentもdba_extentsに現れるわけがない。Recyclebinのオブジェクトの影響を除いて、大多数の場合に、こういうロジックが一致していない状況はextent overlap と呼ばれている。これは一般的にOracle Space Managementスペース管理のBUG。

 

ORA-8103エラに対する診断プロセスで、トラブルのOBJDを探し出すことはとっても大切である。けど、ORA-8103エラとBUGとつながるとはとっても難しい。

これはredo dumpに関わっている。一部のBUGで、変数が古いから、作成したobjd構造が削除されていない。そしてブロックのobjdが間違えたと気づいた。それはORA-8103あるいはORA-1410かもしれない。これは後のロジックエラを引き起こしたからTRACE/REDO LOG DUMPで原始なトラブルの場合を見つかりにくくなった。これもロジックエラの分析と処置は物理的なエラより難しいと言った理由である。

 

Macleanの経験は大量なOracle DBを持っている環境で、一年に何度ロジック/物理ベッドブロックが現れるのはごく普通なことである。物理的な場合に対して、バックアップすればいい。ロジックベッドブロックの場合にやることがあんまりない。

 

ORA-8103のBug Noteを読んで、 LOB、APPEND INSERT、PARALLEL INSERT、exchange partition 、Split partition、advanced compression、HCC 混ぜた列凍結をするのはORA-8103になるかもしれない。けど実際には以上の操作を諦めるわけにはいかない。

 

今までORA-8103に関するBUGリスト:

 

NB Bug Fixed Description
13910420 11.2.0.3.BP09, 12.1.0.0 ORA-8103 during insert / update of basicfile LOB in assm segment using space search cache
13725395 11.2.0.3.BP07, 11.2.0.4, 12.1.0.0 ORA-600 [kdzhFindHeadPiece: unnewed > 1] from load into HCC table
13700577 11.2.0.3.BP07, 11.2.0.4, 12.1.0.0 PQ slave dies with ORA-600 [kdblddr_2]
12747437 12.1.0.0 ORA-600 [ktspfmdb:objdchk_kcbnew_3] after purging single consumer queue table
12582839 11.2.0.3, 12.1.0.0 ORA-8103/ORA-600 [3020] on RMAN recovered locally managed tablespace
12321309 12.1.0.0 ORA-600 / ORA-8103 UNUSABLE state of partitioned index is not carried across by TABLESPACE transport using DataPump
11937253 11.2.0.2.6, 11.2.0.2.BP11, 11.2.0.3, 12.1.0.0 A Parallel query fails with ORA-8103 on an Active Dataguard Enviroment.
11850492 11.2.0.3, 12.1.0.0 ORA-8103 ORA-600 ORA-3113 on temporary tables using INDEX FAST FULL SCAN and DIRECT read
10385812 11.2.0.3, 12.1.0.0 ORA-1410 or ORA-8103 by queries with DIRECT READ while concurrent DIRECT INSERT
10329146 11.2.0.1.BP10, 11.2.0.2.2, 11.2.0.2.BP03, 11.2.0.2.GIBUNDLE02, 11.2.0.2.GIPSU02, 11.2.0.3, 12.1.0.0 Lost write in ASM with multiple DBWs and a disk is offlined and then onlined
+ 10209232 11.1.0.7.7, 11.2.0.1.BP08, 11.2.0.2.1, 11.2.0.2.BP02, 11.2.0.2.GIBUNDLE01, 11.2.0.3, 12.1.0.0 ORA-1578 / ORA-600 [3020] Corruption. Misplaced Blocks and Lost Write in ASM
10136415 11.2.0.3, 12.1.0.0 ORA-8103 on Partitioned IOT after partition maintenance
9965085 11.2.0.3, 12.1.0.0 ORA-1578 / ORA-8103 Temporary table block corruption / space wastage from PDML
9659614 10.2.0.5.3, 11.2.0.2, 11.2.0.3.5, 11.2.0.3.BP05, 12.1.0.0 Large trace file for ORA-8103
9651350 11.2.0.2.2, 11.2.0.2.BP05, 11.2.0.3, 12.1.0.0 Large redo dump and ORA-308 might be raised due to ORA-8103
9275027 11.2.0.2, 12.1.0.0 ORA-600 [kcbnew_3] can occur after TRUNCATE / DROP
9272086 11.1.0.7.4, 11.2.0.1.2, 11.2.0.1.BP06, 11.2.0.2, 12.1.0.0 ORA-8103 by a query on DBA_EXTENTS. Trace file with Block type: 0x44=NGLOB: Extent Map
8754670 11.2.0.2, 12.1.0.0 IMP-17 / ORA-8103 transporting a large dictionary managed tablespace
8740993 11.1.0.7.8, 11.2.0.2, 12.1.0.0 ORA-1410 / ORA-8103 on ADG STANDBY during table scan after DROP/TRUNCATE/SHRINK in PRIMARY
8725282 11.2.0.1.BP08, 11.2.0.2, 12.1.0.0 Corruption from cross platform transport of tablespace with securefile objects
8716064 11.2.0.2, 12.1.0.0 Analyze Table Validate Structure fails on ADG standby with several errors
+ 8597106 11.2.0.1.BP06, 11.2.0.2, 12.1.0.0 Lost Write in ASM when normal redundancy is used
8428523 11.2.0.2, 12.1.0.0 Alter Table Rename causes wrong results/ora-8103/hangs on ADG Standby.
7710827 11.2.0.2, 12.1.0.0 Index rebuild or Merge partition causes wrong results in concurrent reads instead of ORA-8103
7519406 10.2.0.5.1, 11.2.0.1.2, 11.2.0.1.BP06, 11.2.0.2, 12.1.0.0 Larger trace than needed for ORA-8103 under kteinicnt1
P 12330911 12.1 EXADATA LSI firmware for lost writes
8876094 11.1.0.7.2, 11.2.0.2 ORA-8103 by DBA_UNDO_EXTENTS or DBMS_SPACE_ADMIN.TABLESPACE_VERIFY on Block type: 0x25
9167831 11.2.0.2 ORA-8103 instead of ORA-1410
7650993 11.1.0.7.1, 11.2.0.1 ORA-8103 in a select at ADG standby database from table stored in ASSM tablespace
7432556 11.1.0.7.1, 11.2.0.1 ORA-8103 by Parallel Query on Partitioned Tables in BIGFILE Tablespaces
7390324 11.2.0.1 ANALYZE signals OERI [kcbgtcr_12]/ORA-8103 on bitmap index
7117200 11.2.0.1 ORA-8103 after TSPITR/PLUGIN tablespace from a restored Level 1 Backup
8825048 11.1.0.7.3 ORA-308/ORA-27037 when dumping archived log for ORA-8103. Dump when event 10736 level 4 is set
6337376 11.1.0.7 OERI:kcbgcur_3 / ORA-8103 after truncating a partition table with LOBs
9711472 11.1.0.6 ORA-8103 on operations for a partitioned LOB if any different partition is dropped
5637976 10.2.0.4, 11.1.0.6 ORA-8103/ORA-1410 from concurrent INSERT / export on ASSM tables
5083393 10.2.0.4, 11.1.0.6 DBA_FREE_SPACE FILE_ID / REL_FNO may be wrong
4592596 10.2.0.4, 11.1.0.6 Corruption (ORA-1410 / ORA-8103) from multi-table insert with direct load
6864586 10.2.0.5 ORA-8103 on partitioned table with a LOB column during analyze table with concurrent add/drop partition.
3569503 9.2.0.6, 10.2.0.4 PQ may signal a false ORA-8103 under load
13618170 ORA-8103 for create index online when the fix of bug 10027403 is installed
3966709 9.2.0.7, 10.1.0.4, 10.2.0.1 Range/object reuse prematurely (ORA-8103)
3868753 9.2.0.7, 10.1.0.5, 10.2.0.1 Concurrent export / INSERT of ASSM segment can fail with ORA-1410 / ORA-8103
+ 5523799 Various OERI (eg kcbgtcr_12) using ASSM managed segments – superceded
P* 6047085 Linux x64-64: SGA corruption / crash following any ORA-7445
* 3785200 9.2.0.6, 10.1.0.2 Corruption possible in automatic space managed segments
3083560 9.2.0.5, 10.1.0.2 ORA-1410 / ORA-8103 from direct path export if concurrent DML occurs
2619867 9.2.0.3, 10.1.0.2 OERI:[KCBGTCR_12] / ORA-8103 / ORA-1410 SELECTing from bitmap managed segment
2551000 9.2.0.4, 10.1.0.2 False ORA-1410 / ORA-8103 possible from ANALYZE COMPUTE/ESTIMATE STATISTICS
2333731 9.2.0.2 ORA-8103 possible in PQ slave
2105419 9.0.1.3, 9.2.0.1 ORA-8103 possible from PQ on bitmap managed segments with concurrent inserts
1998455 8.1.7.3, 9.0.1.3, 9.2.0.1 OERI:KCBGTCR_4 possible from long running DDL if referenced object dropped/truncated
1804299 9.0.1.1, 9.2.0.1 Rollback of Direct load can corrupt BITMAP managed segments / ORA-8103
1698789 9.2.0.1 Wrong results, ORA-1410, ORA-8103, OERI:25012 on SELECT of UNSCOPED REF with ROWID
1504967 9.2.0.1 ORA-8103 possible on READ ONLY standby after TRUNCATE on primary
1400739 8.1.7.1, 9.0.1.0 Block corruption/OERI:2023 /ORA-8103 can occur if TRUNCATE is interrupted (Ctrl-C)
1283521 8.1.7.0 ORA-8103 can occur on TRUNCATED cluster table
589855 7.3.3.6, 7.3.4.1 ORA:1578 or ORA:8103 selecting invalid ROWID
P 1053863 8.0.5.2, 8.0.6.2 NCR: ORA-8103 / corrupt read possible using async IO

 

 


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *