Email: service@parnassusdata.com 7 x 24 online support!

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > ORA-1578/RMAN/DBVERIFYによって報告された破損オブジェクトの識別方法

ORA-1578/RMAN/DBVERIFYによって報告された破損オブジェクトの識別方法

ORA-1578/RMAN/DBVERIFYによって報告された破損オブジェクトの識別方法

 

ORACLEデータベース によくあるエラ の解決策

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

 

 

 

 

適用範囲:

Oracle Database - Enterprise Edition - バージョン 8.1.5.0 から 12.1.0.1 [リリース 8.1.5 から 12.1]

この文書の内容はすべてのプラットフォームに適用されます。


本文書利用上のご注意

  本文書は英語の文書 Document 819533.1 (最終メジャー更新日: 2016年02月17日) の日本語翻訳版です。

  英語の文書のメジャー更新に応じて本文書を随時更新いたします。

 

目的

このノートの目的はエラーORA-1578またはRMAN / DBVERIFYなどのツールによって報告された破損オブジェクトを識別する手順を提供することです。

解決策

絶対ファイル番号(AFN)とブロック番号(BL)を指定します

絶対ファイル番号および相対ファイル番号(RFN)の同じ場合が多くありますが、異なる場合があります(特にデータベースがOracle7 から移行された場合またはトランスポータブル表領域が使用される場合)。正しいAFNおよびRFNを取得することが重要です。そうしないと、間違ったオブ ジェクトを特定する可能性があります。

ORA-1578からAFNの取得

ORA-1578の後に作成された ORA-1110によってAFNが提供されます。 次の例では AFNは5で、BLは34です。

SQL> select * from scott.dept_view;
select * from scott.dept_view
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 11, block # 34)
ORA-01110: data file 5: '/home/oracle/oradata/users.dbf'

DBVERIFYの出力からAFNの取得

異 なる方法で dbverify によって破損ブロックが報告される場合があります。 通常、DBVERIFY は影響を受けるブロックに関連付 けられた RDBA を提供します。 RFN は dba_data_files から次の問合せで AFN を取得するために使用されます。  いくつか例を挙げます。

RFN=11 BL=34:

Page 34 is marked corrupt
Corrupt block relative dba: 0x02c00022 (file 11, block 34)
Bad check value found during dbv:
Data in bad block:
   type: 6 format: 2 rdba: 0x02c00022
   last change scn: 0x0771.4eebe71c seq: 0x2 flg: 0x04
   spare1: 0x0 spare2: 0x0 spare3: 0x0
   consistency value in tail: 0xe71c0602
   check value in block header: 0xd3ce
   computed block checksum: 0x2

Dbverify は常に出力に相対データ・ブロック・アドレス (rdba/dba) をレポートします。 前述の例では相対 dba はメッセージ"Corrupt block relative dba: 0x02c00022 (file 11, block 34)"から取得された16進値 0x02c00022 になります。 rdba/dba は RFN を提供します。  The RFN is then 11. 次の問合せで dba_data_files から AFN を取得します。

dbverify の別の例は次のとおりです。

RFN=11 BL=35:

Dbv出力:

DBV-200: Block, dba 46137379, already marked corrupted"

RFN とブロック番号取得するには次の問合せを使用します。

select dbms_utility.data_block_address_file(&&rdba) RFN,
       dbms_utility.data_block_address_block(&&rdba) BL
from dual;

例:

SQL> select dbms_utility.data_block_address_file(&&rdba) RFN,
   2 dbms_utility.data_block_address_block(&&rdba) BL
   3 from dual;
Enter value for rdba: 46137379

RFN        BL
---------- ----------
11         35

RFN から dba_data_files を使用して AFN を取得します。
 

select file_id AFN, relative_fno, tablespace_name
from dba_data_files
where relative_fno=&RFN;

例:
 

SQL> select file_id AFN, relative_fno, tablespace_name
   2 from dba_data_files
   3 where relative_fno=&RFN;
Enter value for rfn: 11

AFN        RELATIVE_FNO TABLESPACE_NAME
---------- ------------ ------------------------------
5          11           USERS

AFN は 5 です

RMANからAFNの取得

RMAN は v$database_block_corruption ビュー内で破損を報告します。

そのビューの FILE# 列は AFN です。BLOCK# 列は BL です。

破損オブジェクトの識別

AFNが識別されると、破損オブジェクトを識別するために次の問合せを実行します。
 

select *
from dba_extents
where file_id = &AFN
and &BL between block_id AND block_id + blocks - 1;

例:

SQL> select *
2 from dba_extents
3 where file_id = &AFN
4 and &BL between block_id AND block_id + blocks - 1;
Enter value for afn: 5
Enter value for bl: 34
OWNER SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES      BLOCKS RELATIVE_FNO
----- ------------ -------------- ------------ --------------- --------- ------- -------- ---------- ------ ------------
SCOTT DEPT                        TABLE        USERS           0         5       33       65536      8      11

前述の問合せで行が戻されない場合は破壊されたブロックがローカル管理の表領域(LMT)のセグメント・ヘッダーで可能性がありま す。破損したブロックが LMT のセグメント・ヘッダー・ブロックの場合、前述の問合せはアラートログに破損メッセージを生成しますが、問合せは失敗しません。  その場合、次の問い合わせを実行します。

select owner, segment_name, segment_type, partition_name
from   dba_segments
where  header_file = &AFN
  and  header_block = &BL;

ブロックが空きエクステント(オブジェクトに関連付けられていない)に属する場合やブロックが TEMPFILE の場合は前述の問合せによってデータは返されません。TEMPFILES の場合は「セグメント・タイプ」が「TEMPORARY」と表示されます。

ブロックが空きエクステントに属している場合、DBA_FREE_SPACE に表示されます。

 

select *
from  dba_free_space
where file_id = &AFN
  and &BL between block_id AND block_id + blocks - 1;

 

注意: Oracle10g 以降では ORA-1578 が発生する場合、アラート・ログにも破損オブジェクトの情報が更新されます。例:

Corrupt Block Found
TSN = 5, TSNAME = USERS
RFN = 11, BLK = 34, RDBA = 46137378
OBJN = 46107, OBJD = 36440, OBJECT = DEPT, SUBOBJECT =
SEGMENT OWNER = SCOTT, SEGMENT TYPE = Table Segment

 

 

破損の修正

破損オブジェクトを特定したら、次の記事に従って破損を修正します。:

If getting corruption error ORA-1578 エラーが発生している場合は、Doc ID 1578.1 の指示に従って破損を修正します。

その他の破損の修正については Doc ID 1635229.1 に従ってください。